hedgedoc/.github/workflows/backend-docker.yml
Tilman Vatteroth 794b0ffdcb fix(ci): Skip test jobs in docker backend workflow if no changes have been made
The CI runner can't pull an image that doesn't exist
because it hasn't been built if no changes have been made to the backend.

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
2022-11-21 14:01:09 +01:00

127 lines
3.8 KiB
YAML

# SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
#
# SPDX-License-Identifier: AGPL-3.0-only
name: Backend / Docker
on:
push:
branches: [ develop ]
pull_request:
branches: [ develop ]
jobs:
changes:
name: Check for backend changes
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
changed: ${{ steps.changed.outputs.files }}
steps:
- uses: actions/checkout@v3
- name: Check for backend file changes
uses: dorny/paths-filter@v2
id: changed
with:
filters: |
files:
- 'backend/**'
- '.github/**'
- '.yarn/**'
build-dev:
needs: changes
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
if: needs.changes.outputs.changed == 'true'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
if: needs.changes.outputs.changed == 'true'
- name: Login to GHCR
if: needs.changes.outputs.changed == 'true'
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build dev image
if: needs.changes.outputs.changed == 'true'
uses: docker/build-push-action@v3
with:
push: true
file: backend/docker/Dockerfile
tags: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}-ci:${{ github.sha }}
target: development
cache-from: type=gha
cache-to: type=gha,mode=max
context: .
sqlite-test:
runs-on: ubuntu-latest
if: needs.changes.outputs.changed == 'true'
needs: [ build-dev, changes ]
container:
image: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}-ci:${{ github.sha }}
steps:
- run: cd /usr/src/app && yarn run test
sqlite-e2e:
runs-on: ubuntu-latest
if: needs.changes.outputs.changed == 'true'
needs: [ build-dev, changes ]
container:
image: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}-ci:${{ github.sha }}
steps:
- run: cd /usr/src/app && yarn run test:e2e
build-prod:
runs-on: ubuntu-latest
needs: [ sqlite-test, sqlite-e2e, changes ]
steps:
- uses: actions/checkout@v3
if: needs.changes.outputs.changed == 'true'
- name: Generate Docker metadata
if: needs.changes.outputs.changed == 'true'
id: meta
uses: docker/metadata-action@v4
with:
images: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
if: needs.changes.outputs.changed == 'true'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
if: needs.changes.outputs.changed == 'true'
- name: Login to GHCR
if: github.event_name != 'pull_request' && needs.changes.outputs.changed == 'true'
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
if: needs.changes.outputs.changed == 'true'
uses: docker/build-push-action@v3
with:
push: ${{ github.event_name != 'pull_request' }}
file: backend/docker/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: .