├── requirements.txt ├── README.md ├── Dockerfile ├── app.py ├── test.py └── .github └── workflows └── main.yml /requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==2.2.3 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cicd-demo 2 | CICD Demo 3 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8 2 | WORKDIR /app 3 | COPY . /app 4 | RUN pip install flask 5 | EXPOSE 8080 6 | ENTRYPOINT ["python"] 7 | CMD ["app.py"] 8 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | app = Flask(__name__) 3 | 4 | @app.route("/") 5 | def hello(): 6 | return "Hello World!" 7 | 8 | if __name__ == "__main__": 9 | app.run(host='0.0.0.0', port=8080) 10 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from app import app 3 | 4 | 5 | @pytest.fixture 6 | def client(): 7 | app.config['TESTING'] = True 8 | with app.test_client() as client: 9 | yield client 10 | 11 | 12 | def test_app_is_working(client): 13 | response = client.get('/') 14 | assert response.status_code == 200 15 | assert b"Hello World!" in response.data 16 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD Pipeline 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout code 12 | uses: actions/checkout@v2 13 | - name: Login to DockerHub 14 | uses: docker/login-action@v1 15 | with: 16 | username: ${{ secrets.DOCKERHUB_USERNAME }} 17 | password: ${{ secrets.DOCKERHUB_TOKEN }} 18 | - name: Build, tag, and push image to DockerHub 19 | env: 20 | DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} 21 | IMAGE_NAME: my-image 22 | run: | 23 | docker build -t $DOCKERHUB_USERNAME/$IMAGE_NAME . 24 | docker push $DOCKERHUB_USERNAME/$IMAGE_NAME:latest 25 | 26 | test: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - name: Checkout code 30 | uses: actions/checkout@v2 31 | - name: Set up Python 32 | uses: actions/setup-python@v1 33 | with: 34 | python-version: '3.x' 35 | - name: Install dependencies 36 | run: | 37 | python -m pip install --upgrade pip 38 | pip install -r requirements.txt 39 | - name: Test with pytest 40 | run: | 41 | pip install pytest 42 | pytest test.py 43 | --------------------------------------------------------------------------------