Skip to content

Reconcile the release-pipeline canonical (github-release job) - 4 open questions #414

Description

@ptr727

Context

PhotoCleaner and PlexCleaner both ship a github-release job (in build-release-task.yml) that diverges from the canonical catalog/snippets/workflows/build-release-task.yml, and the audit flags that job verbatim. Investigating the divergence, plus the PhotoCleaner agent's live-release feedback (PhotoCleaner#14), surfaced four interacting questions. They should be reconciled together before any repo re-vendors the job - a naive re-vendor of the current canonical would drop the prerelease backstop the repos already carry (Q1), which is a regression.

This blocks the github-release re-vendor in the PlexCleaner cleanup (PlexCleaner#880 item B1) and the equivalent PhotoCleaner drift.

Questions

Q1 - Adopt the prerelease backstop. Both repos carry a main-only step ("Verify public release version") that refuses to publish when SemVer2's core segment carries a - (NBGV prerelease mis-versioning). The canonical lacks it, and it looks like a genuine safety improvement. Proposal: adopt it into the canonical, standardized to set -Eeuo pipefail (PlexCleaner uses -euo, PhotoCleaner -Eeuo), and recast the ::error:: message's clause-splicing semicolon.

Q2 - expect_release_assets direction. The canonical parameterizes the download guard, fail_on_unmatched_files, and the asset-cleanup gate via inputs.expect_release_assets, so a no-file-target repo (Docker-only) can relax the guard. Both repos instead hardcode fail_on_unmatched_files: true, always download, and carry terser comments. The parameterization is the more correct design. Proposal: keep it, and the repos re-vendor to adopt it and restore the verbose comments.

Q3 - The SHA-verbatim tension (the real structural issue). The job is declared fidelity: interface, but the contract pins verbatimJobs: ["github-release"], and normalize() masks no action SHAs. So every release repo's live workflow perpetually "differs from the canonical" after any Dependabot action-SHA bump - the check can never stay green across the fleet. Decide one of: (a) mask uses: ...@<sha> action pins in normalize() for verbatim job regions, so SHA-only drift is tolerated while structure is still enforced, or (b) drop the job from verbatimJobs and rely on the interface contract's token checks (required jobs, pattern: / merge-multiple: present, artifact-ids: forbidden). Option (a) keeps byte-fidelity on the orchestration logic while tolerating the one field Dependabot owns, and is likely the right call.

Q4 - Build-success gating (PhotoCleaner finding 5). The job's if: ${{ inputs.github && !inputs.smoke }} does not depend on the build jobs succeeding. The canonical and both repos agree, so this is a pure design question: intentional (a degraded release is still tagged), or should it gate on needs success? No downstream drift either way - decide and document.

Not a question (resolved)

The PhotoCleaner agent's finding 7 - per-runtime publish-<runtime> intermediates reaped only by retention-days: 1 rather than surgically deleted - is not a gap. WORKFLOW.md D5.1 explicitly permits an in-run intermediate to rely on the retention backstop (lines 98, 174, 230, 273). The surgical delete rule applies to the cross-job release-asset-*, which is deleted. No change.

Outcome

Once Q1-Q3 land in the canonical and Q4 is decided and documented, the two repos re-vendor the github-release job once, clean.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions