fix: break up ENV into two layers to correctly create user directory #9
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI/CD Pipeline | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- 'project/app/**' | |
- 'project/migrations/**' | |
- 'project/pyproject.toml' | |
- 'project/pdm.lock' | |
- 'project/docker/prod.Dockerfile' | |
- '.github/workflows/ci_cd.yml' | |
env: | |
MODE: prod | |
IMAGE: ghcr.io/${{ github.repository }}/prod-image | |
jobs: | |
publish: | |
name: Publish Production Docker Image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
id: checkout-repo | |
uses: actions/checkout@v4 | |
- name: Log in to github container registry | |
id: login-ghcr | |
run: echo "${GH_PAT}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin | |
env: | |
GH_PAT: ${{ secrets.GH_PAT }} | |
- name: Pull existing docker image | |
id: pull-existing-docker-image | |
run: | | |
docker pull ${{ env.IMAGE }}:latest || true | |
- name: Build docker image | |
id: build-docker-image | |
run: | | |
docker build \ | |
--cache-from ${{ env.IMAGE }}:latest \ | |
--tag ${{ env.IMAGE }}:latest \ | |
--file ./project/docker/${{ env.MODE }}.Dockerfile \ | |
./project | |
- name: Push docker image to github container registry | |
id: push-docker-image | |
run: | | |
docker push ${{ env.IMAGE }}:latest | |
deploy: | |
name: Deploy to heroku | |
runs-on: ubuntu-latest | |
needs: [publish] | |
env: | |
HEROKU_APP_NAME: ${{ secrets.HEROKU_APP_NAME }} | |
HEROKU_REGISTRY_IMAGE: registry.heroku.com/${{ secrets.HEROKU_APP_NAME }}/web | |
steps: | |
- name: Checkout repository | |
id: checkout-repo | |
uses: actions/checkout@v4 | |
- name: Log in to github container registry | |
id: login-ghcr | |
run: echo "${GH_PAT}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin | |
env: | |
GH_PAT: ${{ secrets.GH_PAT }} | |
- name: Pull docker image from github registry | |
id: pull-docker-image-from-ghcr | |
run: docker pull ${{ env.IMAGE }}:latest || true | |
- name: Build heroku docker image | |
id: build-heroku-docker-image | |
run: | | |
docker build \ | |
--cache-from ${{ env.IMAGE }}:latest \ | |
--tag ${{ env.HEROKU_REGISTRY_IMAGE }}:latest \ | |
--file ./project/docker/prod.Dockerfile \ | |
./project | |
- name: Log in and push docker image to heroku registry | |
id: login-and-push-heroku-registry | |
run: | | |
echo ${HEROKU_AUTH_TOKEN} | docker login --username=_ --password-stdin registry.heroku.com | |
docker push ${{ env.HEROKU_REGISTRY_IMAGE }} | |
env: | |
HEROKU_AUTH_TOKEN: ${{ secrets.HEROKU_AUTH_TOKEN }} | |
- name: Set environment variables to be used in release step | |
id: set-heroku-env-vars | |
run: | | |
echo "HEROKU_REGISTRY_IMAGE=${{ env.HEROKU_REGISTRY_IMAGE }}" >> $GITHUB_ENV | |
echo "::add-mask::${{ secrets.HEROKU_AUTH_TOKEN }}" | |
echo "HEROKU_AUTH_TOKEN=${{ secrets.HEROKU_AUTH_TOKEN }}" >> $GITHUB_ENV | |
- name: Release heroku app | |
id: release-heroku-app | |
run: | | |
chmod +x ./project/scripts/release.sh | |
./project/scripts/release.sh |