Skip to content

Add the release pipeline: build tasks, publisher, smoke wiring - #22

Merged
ptr727 merged 0 commit into
developfrom
conformance/release-pipeline
Jul 23, 2026
Merged

Add the release pipeline: build tasks, publisher, smoke wiring#22
ptr727 merged 0 commit into
developfrom
conformance/release-pipeline

Conversation

@ptr727

Copy link
Copy Markdown
Owner

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 publish over the runtime matrix (2 RIDs on smoke, 7 on release), threads the single NBGV version, zips into the release-asset-<branch>-executable artifact.
  • 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 the BUILD_* args the reworked Dockerfile accepts.
  • build-release-task.yml - orchestrator: validate -> get-version -> build-executable + build-docker -> github-release (collects release-asset-<branch>-* by pattern, pins the tag to GitCommitId, idempotent release-exists guard, main-only prerelease-suffix backstop). The validate call omits ref since this repo's validate-task takes none - a publish run's github.ref is 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 a smoke-build job (build-release-task with smoke: true, no push) and includes it in the required Check pull request workflow status job aggregator's needs and 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

  • This PR's own CI is the real test: the new smoke-build job runs build-release-task -> the executable build (linux-x64 + win-x64) and the amd64 Docker build (no push) through the new reusable chain.
  • actionlint (all workflows, local reusable refs resolve), markdownlint, editorconfig-checker: clean.
  • The two underlying build commands were validated locally (dotnet publish --runtime linux-x64; docker buildx build linux/amd64).

Notes

  • Publish paths are not exercised by CI (smoke is push: false); the first real publish is a maintainer workflow_dispatch of publish-release.yml. Docker Hub secrets are provisioned in both stores; the ptr727/photocleaner Docker Hub repo should exist before the first push.
  • merge-bot and the release-pipeline's remaining niceties (date badge) are out of item-8 scope.

🤖 Generated with Claude Code

CopilotAI review requested due to automatic review settings July 23, 2026 19:47
@codecov

codecovBot commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 44.96%. Comparing base (ab23a1b) to head (fb6f16e).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.yml as 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
FileDescription
Docker/README.mdAdds the Docker Hub overview content and reference-style links.
.github/workflows/test-pull-request.ymlAdds a smoke build job and includes it in the required-status aggregator gate.
.github/workflows/publish-release.ymlAdds the scheduled/manual publisher entry-point workflow.
.github/workflows/get-version-task.ymlAdds a reusable NBGV versioning workflow with outputs for downstream jobs.
.github/workflows/build-release-task.ymlAdds the reusable release orchestrator (validate -> version -> build -> GitHub release).
.github/workflows/build-executable-task.ymlAdds the reusable runtime-matrix executable build and release-asset artifact packaging.
.github/workflows/build-docker-task.ymlAdds 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 uses set -euo pipefail.
 run: |
set -euo pipefail
if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then

Comment thread.github/workflows/build-executable-task.yml
Comment thread.github/workflows/test-pull-request.yml Outdated
Comment thread.github/workflows/build-release-task.yml Outdated
CopilotAI review requested due to automatic review settings July 23, 2026 19:53

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Comment thread.github/workflows/build-release-task.yml
Comment thread.github/workflows/build-release-task.yml
Comment thread.github/workflows/publish-release.yml
CopilotAI review requested due to automatic review settings July 23, 2026 20:04

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@ptr727
ptr727 merged this pull request into developJul 23, 2026
13 checks passed
@ptr727
ptr727 deleted the conformance/release-pipeline branch July 23, 2026 20:12
ptr727 added a commit that referenced this pull request Aug 3, 2026
* 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>
ptr727 added a commit that referenced this pull request Aug 3, 2026
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>
Sign up for freeto 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

@ptr727