name: CI/CD - develop on: pull_request: branches: - develop env: IMAGE: ghcr.io/$(echo $GITHUB_REPOSITORY | tr '[A-Z]' '[a-z]')/aimingmed-ai-backend jobs: build: name: Build Docker Image runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Cleanup Docker resources if: always() run: docker system prune -a -f --volumes - name: Checkout uses: actions/checkout@v3 with: ref: develop - name: Log in to GitHub Packages run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin ghcr.io env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Pull image run: | docker pull ${{ env.IMAGE }}:latest || true - name: Build image run: | docker build \ --cache-from ${{ env.IMAGE }}:latest \ --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ "./app/backend" - name: Push image run: | docker push ${{ env.IMAGE }}:latest - name: Cleanup Docker resources if: always() run: docker system prune -a -f --volumes test: name: Test Docker Image runs-on: ubuntu-latest needs: build steps: - name: Checkout uses: actions/checkout@v3 with: ref: develop - name: Log in to GitHub Packages run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin ghcr.io env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Pull image run: | docker pull ${{ env.IMAGE }}:latest || true - name: Build image run: | docker build \ --cache-from ${{ env.IMAGE }}:latest \ --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ "./app/backend" - name: Cleanup Docker resources if: always() run: docker system prune -a -f --volumes - name: Run container run: | docker run \ -d \ --name backend \ --memory 8g \ -e PORT=8765 \ -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ ${{ env.IMAGE }}:latest - name: Pytest run: docker exec backend pipenv run python -m pytest tests --disable-warnings # - name: Flake8 # run: docker exec backend pipenv run python -m flake8 . # - name: Black # run: docker exec backend pipenv run python -m black . --check # - name: isort # run: docker exec backend pipenv run python -m isort . --check-only - name: Cleanup container at end of job if: always() run: docker stop backend || true && docker rm backend || true