From 4e0e8032efa3ed60c0a0f708286faa4760dda7ac Mon Sep 17 00:00:00 2001 From: Holden Date: Sun, 14 Jun 2026 21:24:06 +0000 Subject: [PATCH] fix: update release workflow and docs for 0.5.0 single-lockfile refactor - release.yml: replace per-variant lockfile generation loop with a single 'uv lock'; add idempotent release creation (skip if tag already has a release so re-triggered runs don't 422) - docker-publish.yml: remove stale uv-cpu/rocm/intel.lock entries from paths-ignore (those files no longer exist) - README: CACHE_DIR description now names winnow_tracker.db; tracker description mentions SQLite --- .github/workflows/docker-publish.yml | 3 -- .github/workflows/release.yml | 41 ++++++++++++++-------------- README.md | 4 +-- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 0c8a6a9..7f2a19b 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -12,9 +12,6 @@ on: - ".github/workflows/lint.yml" - ".github/dependabot.yml" - "uv.lock" - - "uv-cpu.lock" - - "uv-rocm.lock" - - "uv-intel.lock" workflow_call: inputs: tag: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 63fa80b..69728ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,17 +50,8 @@ jobs: exit 1 fi - - name: Ensure lockfiles are current - run: | - cp pyproject.toml _pyproject_orig.toml - for variant in cpu rocm intel; do - cp pyproject-${variant}.toml pyproject.toml - uv lock - cp uv.lock uv-${variant}.lock - done - cp _pyproject_orig.toml pyproject.toml - uv lock - rm _pyproject_orig.toml + - name: Ensure lockfile is current + run: uv lock - name: Resolve tag name id: tag @@ -117,15 +108,25 @@ jobs: script: | const tag = process.env.RELEASE_TAG; const notes = (process.env.RELEASE_NOTES || '').trim(); - await github.rest.repos.createRelease({ - owner: context.repo.owner, - repo: context.repo.repo, - tag_name: tag, - name: `Release ${tag}`, - body: notes || `Release ${tag}`, - draft: false, - prerelease: false, - }); + try { + const existing = await github.rest.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: tag, + }); + console.log(`Release ${tag} already exists (id ${existing.data.id}), skipping creation.`); + } catch (err) { + if (err.status !== 404) throw err; + await github.rest.repos.createRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + tag_name: tag, + name: `Release ${tag}`, + body: notes || `Release ${tag}`, + draft: false, + prerelease: false, + }); + } build-images: name: Build and push Docker images diff --git a/README.md b/README.md index 2009d52..dc1a302 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Immich library ↳ at cap + QUALITY_REPLACEMENT=false — skip this person ``` -Uploaded and rejected asset IDs are persisted across runs. The same image is never processed twice; rejected assets are permanently skipped unless `RETRY_REJECTED=true`. +Uploaded and rejected asset IDs are persisted across runs in a SQLite database (`winnow_tracker.db` in `CACHE_DIR`). The same image is never processed twice; rejected assets are permanently skipped unless `RETRY_REJECTED=true`. --- @@ -213,7 +213,7 @@ These defaults are tuned for Frigate's ArcFace requirements. winnow will warn on | `FORCE_CPU` | `false` | Disable GPU — fall back to CPU for all inference | | `OPENVINO_DEVICE` | `CPU` | Intel variant only: set `GPU` to use Arc or iGPU; default runs on CPU | | `ENABLE_CACHE` | `true` | Cache computed embeddings to disk (speeds up re-runs on the same library) | -| `CACHE_DIR` | `.if_cache` | Path for embedding cache and upload tracker files | +| `CACHE_DIR` | `.if_cache` | Path for embedding cache and upload tracker database (`winnow_tracker.db`) | | `INSIGHTFACE_HOME` | *(system)* | InsightFace model cache path (Buffalo_L) | ### Output