Continuous integration¶
Create a .github/workflows/docker.yml
file. As a base, use:
name: Deploy
on:
workflow_run:
workflows: ["CI"]
branches: [main]
types:
- completed
jobs:
docker:
if: github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# https://github.com/docker/login-action#github-container-registry
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# https://github.com/docker/setup-buildx-action#usage
- uses: docker/setup-buildx-action@v3
# https://github.com/docker/build-push-action#usage
- uses: docker/build-push-action@v6
with:
push: true
tags: |
ghcr.io/${{ github.repository }}:latest
cache-from: type=gha
cache-to: type=gha,mode=max
Tip
In most cases, you can reuse either the docker-single or docker-django workflow. For example:
jobs:
docker:
uses: open-contracting/.github/.github/workflows/docker-single.yml@main
Note
This assumes there is already a “CI” workflow that runs tests on the main
branch.
Note
The docker/build-push-action step uses BuildKit by default.
If you need to build multiple images, then for each image:
Include a
docker/build-push-action
step.Set either:
Add a suffix to the repository name under the
tags
key.
Reference:
Troubleshooting
docker/build-push-action
step