hv0905/NekoImageGallery

View on GitHub
.github/workflows/prod.yml

Summary

Maintainability
Test Coverage
name: Check & deploy to DockerHub

on:
  push:
    branches:
      - 'master'
    tags:
      - '*'
  workflow_dispatch:

jobs:
  perform-check:
    uses: ./.github/workflows/test_lint.yml
    secrets: inherit
  docker:
    runs-on: ubuntu-latest
    environment: DockerHub
    needs:
      - perform-check
    strategy:
      matrix:
        configurations:
          - dockerfile: "Dockerfile"
            suffixes: |
              ""
              "-cuda"
              "-cuda12.1"
            args: |
              CUDA_VERSION=12.1
          - dockerfile: "Dockerfile"
            suffixes: '"-cuda11.8"'
            args: |
              CUDA_VERSION=11.8
          - dockerfile: "cpu-only.Dockerfile"
            suffixes: '"-cpu"'
            args: ""
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Docker Meta
        id: docker-meta
        uses: docker/metadata-action@v5
        with:
          images: edgeneko/neko-image-gallery
          tags: |
            type=edge,branch=master
            type=semver,pattern=v{{version}}
            type=semver,pattern=v{{major}}.{{minor}}
      - name: Build combined tags
        id: combine-tags
        run: |
          SUFFIXES=(${{ matrix.configurations.suffixes }})
          echo 'tags<<EOF' >> $GITHUB_OUTPUT
          for SUFFIX in "${SUFFIXES[@]}"; do
            echo '${{ steps.docker-meta.outputs.tags }}' | sed 's/$/'"$SUFFIX"'/' >> $GITHUB_OUTPUT
          done
          echo EOF >> $GITHUB_OUTPUT
          
          printf 'cache_tag=%s' "$(echo '${{ steps.docker-meta.outputs.tags }}' | tail -1 | sed 's/$/'"${SUFFIXES[0]}"'/')" >> $GITHUB_OUTPUT
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          file: ${{ matrix.configurations.dockerfile }}
          push: true
          tags: ${{ steps.combine-tags.outputs.tags }}
          build-args: ${{ matrix.configurations.args }}
          labels: ${{ steps.docker-meta.outputs.labels }}
          cache-from: type=registry,ref=${{steps.combine-tags.outputs.cache_tag}}
          cache-to: type=inline