Add the release pipeline: build tasks, publisher, smoke wiring - #22
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@## develop #22 +/- ##
========================================
Coverage 44.96% 44.96% ========================================
Files 25 25 Lines 3398 3398 Branches 259 259 ========================================
Hits 1528 1528 Misses 1824 1824 Partials 46 46 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Adds the repo’s release pipeline as reusable GitHub Actions workflows, plus an entry-point publisher workflow, and wires a “smoke” build into the push-based PR gate so proposed changes exercise the reusable build chain without publishing.
Changes:
- Introduces reusable workflows to compute versioning (NBGV), build runtime-matrix executables, build Docker images (with caching and optional push), and orchestrate GitHub Releases.
- Adds
publish-release.ymlas the scheduled/manual publisher that calls the reusable release orchestrator. - Updates the push-based PR gate workflow to run a non-publishing “smoke” build, and adds a Docker Hub overview README.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| Docker/README.md | Adds the Docker Hub overview content and reference-style links. |
| .github/workflows/test-pull-request.yml | Adds a smoke build job and includes it in the required-status aggregator gate. |
| .github/workflows/publish-release.yml | Adds the scheduled/manual publisher entry-point workflow. |
| .github/workflows/get-version-task.yml | Adds a reusable NBGV versioning workflow with outputs for downstream jobs. |
| .github/workflows/build-release-task.yml | Adds the reusable release orchestrator (validate -> version -> build -> GitHub release). |
| .github/workflows/build-executable-task.yml | Adds the reusable runtime-matrix executable build and release-asset artifact packaging. |
| .github/workflows/build-docker-task.yml | Adds the reusable Docker buildx workflow (platform matrix, caching, optional push, Docker Hub README update). |
Comments suppressed due to low confidence (1)
.github/workflows/build-release-task.yml:130
- Per AGENTS.md:215, multi-line bash run blocks should start with
set -Eeuo pipefail(including-E). This block currently usesset -euo pipefail.
run: |
set -euo pipefail
if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
* Add the release pipeline: build tasks, publisher, smoke wiring Completes the release pipeline (issue #14 item 8), adapted from the fleet console+docker reference: - get-version-task.yml: run NBGV once, expose the version outputs (SemVer2, Assembly*, GitCommitId). NBGV is CI-side; version.json is already present. - build-executable-task.yml: dotnet publish over the runtime matrix (2 on smoke, 7 on release), threading the single NBGV version, and zip into the release-asset-<branch>-executable artifact. - build-docker-task.yml: buildx multi-arch (amd64+arm64 on main, amd64 elsewhere), registry buildcache, gated push, and the Docker Hub overview push on a main publish. Passes the BUILD_* args the Dockerfile accepts. - build-release-task.yml: orchestrator - validate, get-version, build-executable + build-docker, then github-release (collect release-asset-<branch>-* by pattern, pin the tag to GitCommitId, idempotent release-exists guard). validate is called without ref since validate-task takes none. - publish-release.yml: entry-point publisher - weekly cron (main) plus dispatch (either branch), global concurrency, contents: write. Merges never publish. - test-pull-request.yml: add a smoke-build job (build-release-task with smoke:true, no push) and gate it in the required aggregator. - Docker/README.md: Docker Hub overview, landing with the scheduler its text describes. actionlint, markdownlint, and editorconfig-checker clean; the two build commands were validated locally. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Use set -Eeuo pipefail in all workflow run blocks Per the AGENTS.md Workflow YAML Conventions (-E so an ERR trap inherits). Adds strict mode to the build-executable publish block and upgrades -euo to -Eeuo in build-release, test-pull-request, and the pre-existing validate-task block (sweeping the whole class). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add WORKFLOW.md D5.1 artifact cleanup to the release job Adopt the hub canonical's point-of-consumption cleanup (which the console+docker reference lacks): the github-release job deletes the release-asset-<branch>-* transfer artifacts after they are attached to the release, best-effort with the retention-days backstop. Grant the publisher's publish job actions: write so the reusable job can delete them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The release pipeline (#22) stood up Docker Hub publishing, so the self-audit must now expect its credentials: - spec/secrets.json: add the docker-hub mechanism (DOCKER_HUB_USERNAME + DOCKER_HUB_ACCESS_TOKEN, both stores) and the docker ->docker-hub target routing; update the note (publish mechanisms are configured). - AUDIT.md: include the Docker Hub pair in the names-only secrets check (both stores) and the prose. Both secrets are already provisioned in both stores, so the self-audit stays green. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Second and final release-pipeline PR (issue #14 item 8), adapted from the fleet console+docker reference. Builds on the Dockerfile rework in #21.
New reusable workflows:
get-version-task.yml- run NBGV once, expose SemVer2 / Assembly* / GitCommitId. NBGV is CI-side (version.json already present, no package reference), matching the fleet.build-executable-task.yml-dotnet publishover the runtime matrix (2 RIDs on smoke, 7 on release), threads the single NBGV version, zips into therelease-asset-<branch>-executableartifact.build-docker-task.yml- buildx multi-arch (amd64+arm64 on main, amd64 on develop/smoke), registry buildcache (buildcache-<branch>), gated push, and the Docker Hub overview push on a main publish. Passes theBUILD_*args the reworked Dockerfile accepts.build-release-task.yml- orchestrator: validate -> get-version -> build-executable + build-docker -> github-release (collectsrelease-asset-<branch>-*by pattern, pins the tag toGitCommitId, idempotent release-exists guard, main-only prerelease-suffix backstop). Thevalidatecall omitsrefsince this repo'svalidate-tasktakes none - a publish run'sgithub.refis already the trigger branch.publish-release.yml- entry-point publisher: weekly cron (main) +workflow_dispatch(either branch), global ref-independent concurrency,contents: write. Merges never publish.Modified:
test-pull-request.yml- adds asmoke-buildjob (build-release-taskwithsmoke: true, no push) and includes it in the requiredCheck pull request workflow status jobaggregator'sneedsand result loop, so a PR now exercises the reusable build pipeline.New:
Docker/README.md- Docker Hub overview (reference-style links), landing with the scheduler its text describes.Validation
smoke-buildjob runsbuild-release-task-> the executable build (linux-x64 + win-x64) and the amd64 Docker build (no push) through the new reusable chain.dotnet publish --runtime linux-x64;docker buildx build linux/amd64).Notes
push: false); the first real publish is a maintainerworkflow_dispatchofpublish-release.yml. Docker Hub secrets are provisioned in both stores; theptr727/photocleanerDocker Hub repo should exist before the first push.🤖 Generated with Claude Code