-
v0.8.6 - CI and Dockerfile modernization
StableAll checks were successfulCI / Build / Publish / Shellcheck (push) Successful in 3sCI / Build / Publish / Validate CHANGELOG structure (push) Successful in 2sCI / Build / Publish / PR build & smoke test (push) Has been skippedCI / Build / Publish / Build multi-arch and push (push) Successful in 7m47sCI / Build / Publish / Reconcile releases across registries (push) Successful in 59sCI / Build / Publish / Workflow summary (push) Successful in 1sreleased this
2026-05-05 14:30:49 -07:00 | 4 commits to main since this releaseNo behavioral changes to the archiver application itself — only the CI pipeline, release flow, and image build process. Aligns archiver with the same externalized-repo conventions used by sibling projects on
forgejo.bryantserver.com.Added
release.ymlworkflow for cutting releases viaworkflow_dispatchwithbump=patch|minor|major. Promotes[Unreleased]to a versioned section, bumps image refs incompose.yamlandREADME.md, runs a smoke test, then tags + pushes — replaces the prior manualgit tagflow..renovaterc.jsonintroduced. Tracks the Dockerfile base image, ENV-pinned upstream versions (DUPLICACY_VERSIONvia github-releases againstgilbertchen/duplicacy,DOCKER_CLI_VERSIONvia github-releases againstmoby/moby), Forgejo Action versions, and the inline skopeo image referenced bydocker-publish.yml.
Changed
- CI:
docker-publish.ymlsplit from a monolithicbuild-and-pushjob into separate jobs (shellcheck,validate-changelog,pr-validate,build-and-push,create-release,summary). Each concern has its own gate; failures surface to the new aggregator job rather than silently passing. - CI: cluster push now builds to a local OCI archive and uses
skopeo copyper tag rather thandocker buildx build --push. Forgejo 15.0.1 nil-derefs inEndUploadBlobwhen buildx's parallel multi-arch push hits theUQE_package_blob_blake2b/sha512unique constraint — byte-identical blobs across amd64/arm64 (e.g. arch-independentCOPYlayers) race two PUTs of the same digest. Skopeo walks manifests serially withTryReusingBlobHEAD-checks, so byte-identical blobs across arches dedupe before PUT. - CI: NAS Forgejo mirror now uses
skopeo sync(full repo, self-healing) instead ofdocker buildx imagetools create. Same Forgejo 15.0.1 bug class as the cluster push. - CI: GitHub Container Registry mirror now uses
skopeo copyper tag instead ofdocker buildx imagetools create. Different registry (no Forgejo nil-deref bug there), but skopeo's HEAD-first dedup is safer against any concurrent-PUT race in the GHCR backend. - CI: build cache moved from
type=registry,ref=...:buildcache(separate cache push that hits the same Forgejo bug) totype=inline(cache annotations embedded on the published image manifest;cache-from: ...:0.8reads the previous release's inline cache on subsequent builds). - CI: skopeo invocation stages the OCI archive into a docker-managed named volume via
docker cprather than bind-mounting from${{ github.workspace }}— the runner-container's view of the workspace path differs from the docker host's, so a child container's-v <archive>:<target>silently creates an empty dir at the host path instead of finding the archive. - CI: release creation now reconciles every
v*.*.*tag on every release run across all three registries (cluster Forgejo, NAS Forgejo, GitHub). A release that failed to publish on any registry (transient 5xx, NAS down, mirror lag) is picked up by the next successful release run rather than staying absent forever. Includes per-tagtarget_commitishfromgit rev-parse "${tag}^{}"for metadata normalization and defense against mirror-lag races where a reconciled tag isn't yet on the destination. - CI: cluster Forgejo release is now attributed to a real-user PAT (
CLUSTER_REPO_WRITE_PAT) instead of the auto-injectedGITHUB_TOKEN, so release commits and tags carry a stable author identity rather than appearing as "ghost". - CI: secret naming aligned with the bryantserver externalized-repo convention.
BRYANTSERVER_REGISTRY_PAT→CLUSTER_REGISTRY_PUSH_PAT,NAS_FORGEJO_PAT→NAS_FORGEJO_WRITE_PAT. New:CLUSTER_REPO_WRITE_PATforrelease.yml's commit/tag/push and create-release attribution.GHCR_PUSH_PATandGH_RELEASE_PATunchanged (already convention-shaped). - CI: tag patterns reduced to SemVer-only (was also
:main/:pr-Nfromtype=ref,event=branch/event=pr). PR builds now validate via thepr-validatejob (build + smoke + arm64 dry-run) without polluting the registry with branch-name and PR-number tags. - CI: Forgejo Action versions digest-pinned (
@v4/@v5→@<digest>); Renovate tracks both major version and digest. - Dockerfile: base image digest-pinned (
debian:trixie-20260112-slim→...@sha256:...). - Dockerfile: removed
wget,gnupg, andlsb-releasefrom the apt install list. No longer needed once curl replaces wget for the duplicacy download and the docker-ce-cli apt repo dance is gone. - Dockerfile: Docker CLI install switched from the
docker-ce-clidebian package (withepoch:upstream-revisionversioning that has no clean Renovate datasource) to the static binary archive atdownload.docker.com/linux/static/stable/<arch>/docker-<version>.tgz. ENV pin becomes clean SemVer (29.4.2instead of5:29.1.4-1), Renovate-tracked viaextractVersion=^docker-v(?<version>.+)$againstmoby/mobyGitHub releases. Trade-off: lose apt's auto security-patch flow within a release stream; gain explicit Renovate-managed bumps. Acceptable for a CLI talking to a host-mounted socket. - Dockerfile:
DUPLICACY_VERSIONRenovate-tracked viaextractVersion=^v(?<version>.+)$againstgilbertchen/duplicacyGitHub releases. Renovate auto-opens PRs for new duplicacy releases. - Dockerfile: switched
wget→curlfor the duplicacy binary download, since curl is already installed and wget is no longer needed.
Notes
- All 27 prior releases (v0.1.0 through v0.8.5) will be retroactively reconciled on the cluster + NAS Forgejos and GitHub on the next release run to set per-tag
target_commitish. They previously had blank or"main"values; cosmetic backfill, no functional change.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads