Skip to content

Release v3.3.18 — queue per-item cancel + GHCR engine image#136

Merged
phantomptr merged 4 commits into
mainfrom
release/3.3.18
Jun 16, 2026
Merged

Release v3.3.18 — queue per-item cancel + GHCR engine image#136
phantomptr merged 4 commits into
mainfrom
release/3.3.18

Conversation

@phantomptr

Copy link
Copy Markdown
Owner

Bundles three things into 3.3.18.

1. Upload queue: cancel a single in-flight item

New cancelItem(id) store action + a per-row Cancel button on the actively-uploading item. It aborts just that transfer (engine job cancelled at the next shard boundary; partial tx stays resumable) and resumes the console's remaining pending work — siblings on other consoles untouched. "Stop" (stop-all) is unchanged. +4 store tests; queue_cancel_item added to en.ts + allowlist.

2. Official engine Docker image (GHCR) — from #134 by @Twice6804

The contributor's docker-engine.yml workflow (cherry-picked, authorship preserved) publishes a multi-arch ghcr.io/phantomptr/ps5upload-engine on each release tag. This release tag triggers the first publish.

3. Hardening of that workflow + Makefile

  • Least privilege: workflow token read-only by default; packages: write only on the build/merge jobs that push. The PR verify job can't get a write token.
  • Ref-injection guard: new resolve job validates the tag with a strict regex once and passes trusted outputs to build/merge — the tag never reaches a checkout ref: unvalidated. Untrusted interpolations routed through env vars. actionlint clean.
  • Repo settings fixed: default GITHUB_TOKEN set to read/write (was read-only) so the publish can push.
  • Dockerfile verified: scratch + static binary, builds from existing-CI-green engine source.
  • Makefile: added docker-engine / docker-engine-run targets for local parity.

Closes #134.

Verification

  • Full client gate: typecheck, lint, 733 tests (+4), i18n coverage gate green.
  • actionlint clean on the new workflow; Makefile targets parse.

Post-merge (one-time)

After the publish runs on the v3.3.18 tag: set the GHCR package visibility to Public so anonymous docker pull works.

Release 3.3.18.

phantomptr and others added 4 commits June 16, 2026 16:37
…nsole

Adds a per-item Cancel control to the upload queue. Until now the actively-
uploading row had move/remove disabled, so the only way to stop one item was
Stop (which halts the whole console). New cancelItem(id):
- pending/finished item → just dropped from the queue
- running item → aborts its engine job (transfer bails at the next shard
  boundary, partial tx stays resumable), drops it, and resumes the console's
  remaining pending work — siblings on other consoles are untouched

UI: the active row shows a Cancel (ban) button in place of the locked Remove.
Stop-all already existed (the Stop button) and is unchanged.

Adds queue_cancel_item to the en.ts catalog + allowlist, and 4 store tests.
Adds .github/workflows/docker-engine.yml — fires on v* tags and
workflow_dispatch. Three jobs:
  verify  – PR-only amd64 build (no push), keeps Dockerfile green
  build   – native amd64 (ubuntu-24.04) + arm64 (ubuntu-24.04-arm)
            push by digest so arches can run independently
  merge   – stitches digests into a multi-arch manifest tagged
            :<version>, :<major.minor>, and :latest

Image: ghcr.io/phantomptr/ps5upload-engine
Note in PR: after first publish, set the GHCR package to Public.

Also updates engine/Dockerfile header, README.md, and FAQ.md to
reference the published image.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Hardening of the GHCR publish workflow (#134):
- Least privilege: workflow token now read-only by default; packages:write
  is granted only on the build + merge jobs that actually push. The PR
  verify job can no longer receive a write-capable token.
- New resolve job validates the version tag with a strict regex ONCE and
  passes trusted outputs (tag, version, image) to build/merge — so the tag
  never reaches a checkout ref: unvalidated (ref-injection guard), and the
  lowercased image name is derived via the safe env pattern instead of
  interpolating github.repository_owner into a shell.
- Quote untrusted interpolations through env vars; document the one
  intentional word-split (manifest create) with a shellcheck directive.
  actionlint clean.

Makefile: add docker-engine / docker-engine-run targets (+ help entry) so the
self-hosted image has first-class local build/run parity with what CI ships.
- Per-item upload cancel (queue)
- Official multi-arch engine Docker image on GHCR (thanks @Twice6804)
- Hardened the docker publish workflow; Makefile docker targets
@phantomptr phantomptr merged commit 75fd4cb into main Jun 16, 2026
23 checks passed
@phantomptr phantomptr deleted the release/3.3.18 branch June 16, 2026 23:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants