Skip to content

chore: release v2.21.1 #2123

chore: release v2.21.1

chore: release v2.21.1 #2123

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