ci: split docker build workflow from test workflow.

Split up the Github workflow. Instead of one workflow with two jobs, one
to build the Docker image and one to test it, split it into two separate
workflows, one to build and one to test. This way if the Docker build
fails it doesn't try to run the tests, and if the tests fail it only
marks the test workflow as failed, not the entire workflow.

This is especially so the workflows page doesn't show everything as
failing just because the tests failed.

https://github.com/danbooru/danbooru/actions
This commit is contained in:
evazion
2021-09-18 01:17:19 -05:00
parent cfae1d3b35
commit 39fa2fe02d
2 changed files with 90 additions and 74 deletions

78
.github/workflows/docker-build.yaml vendored Normal file
View File

@@ -0,0 +1,78 @@
# On every commit, build and push a Docker image to the GitHub Container
# registry and to DockerHub.
#
# The resulting Docker images are tagged with the full commit hash, the git
# branch name, the git tag, and the 'latest' tag for the latest commit to
# master.
#
# https://github.com/danbooru/danbooru/pkgs/container/danbooru
# https://hub.docker.com/r/evazion/danbooru
#
# https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
# https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions
# https://docs.github.com/en/actions/guides/publishing-docker-images
name: Docker Build
# https://docs.github.com/en/actions/reference/events-that-trigger-workflows
on: [push, create]
jobs:
docker-build:
runs-on: ubuntu-latest
steps:
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
# https://github.com/docker/login-action
# https://github.com/docker/build-push-action/blob/master/docs/advanced/push-multi-registries.md
- name: Login to Github Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ github.token }}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Generate Docker tags from Git tags.
# https://github.com/docker/metadata-action
- name: Generate Docker tags
uses: docker/metadata-action@v3
id: metadata
with:
images: |
docker.io/evazion/danbooru
ghcr.io/danbooru/danbooru
tags: |
type=sha,format=short,prefix=
type=sha,format=long,prefix=
type=ref,event=branch
type=ref,event=tag
type=ref,event=pr
# Tag `latest` on every commit pushed to master
# https://github.com/docker/metadata-action/issues/112
flavor: |
latest=${{ github.ref == 'refs/heads/master' }}
# https://github.com/docker/build-push-action
- name: Build image
uses: docker/build-push-action@v2
with:
push: true
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
# https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#registry-cache
# https://dev.to/pst418/speed-up-multi-stage-docker-builds-in-ci-cd-with-buildkit-s-registry-cache-11gi
cache-from: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache
cache-to: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache,mode=max
build-args: |
SOURCE_COMMIT=${{ github.sha }}