chore: release v2.22.0 #2125
This file contains hidden or 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: Docker Publish | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ['v*'] | |
| # A documentation-only push used to build the full multi-arch image (QEMU, | |
| # amd64 + arm64, two registries) for files that never reach the image. | |
| # | |
| # THE RELEASE PATH IS NOT AFFECTED, and that holds for two independent | |
| # reasons - one of them would do, but this filter sits next to a `tags:` | |
| # entry and the next reader deserves better than "probably fine": | |
| # 1. GitHub does not evaluate path filters for TAG pushes. `v*` therefore | |
| # always runs, and the versioned images plus `latest` come from exactly | |
| # that run. | |
| # 2. Even the branch run survives: a `chore: release vX.Y.Z` commit always | |
| # touches package.json, package-lock.json and public/sw.js, so it is | |
| # never docs-only and never matches this filter. | |
| # | |
| # Ignoring docs/ costs the image nothing either way - .dockerignore drops it | |
| # from the build context, and no Markdown is read at runtime (the in-app | |
| # changelog proxies the GitHub releases API, it does not read CHANGELOG.md). | |
| # | |
| # .github/ is deliberately NOT ignored: editing this workflow should still | |
| # produce a build that proves it works. | |
| paths-ignore: | |
| - '**/*.md' | |
| - 'docs/**' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| packages: write | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: ${{ github.repository }} | |
| jobs: | |
| build-and-push: | |
| name: Build & Push Image | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v4 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata (tags, labels) | |
| id: meta | |
| uses: docker/metadata-action@v6 | |
| with: | |
| # IMAGE_NAME = github.repository → ghcr.io/ulsklyc/yuvomi (primary, post-rename). | |
| # The second image is a PERMANENT parallel push to the legacy | |
| # ghcr.io/ulsklyc/oikos package. It must NOT be removed: legacy users run | |
| # docker-compose/Unraid/TrueNAS configs that still reference the old image | |
| # name, and the app self-migrates the database on boot — so an unchanged | |
| # legacy config keeps receiving updates indefinitely without any manual edit. | |
| # Dropping this mirror would break `docker pull ghcr.io/ulsklyc/oikos` and | |
| # force every legacy user to hand-edit their config. Keep it. | |
| images: | | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
| ${{ env.REGISTRY }}/${{ github.repository_owner }}/oikos | |
| tags: | | |
| type=ref,event=branch | |
| type=semver,pattern={{version}} | |
| type=semver,pattern={{major}}.{{minor}} | |
| type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/v') }} | |
| type=sha | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v4 | |
| - name: Build and push | |
| uses: docker/build-push-action@v7 | |
| with: | |
| context: . | |
| platforms: linux/amd64,linux/arm64 | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max,ignore-error=true |