Decouple GitHub-release assembly from per-target builds - #728
Conversation
Mirror ProjectTemplate #108/#109: collect release assets by the release-asset-<branch>-* artifact convention instead of referencing the build-executable job by artifact-id, so github-release stays target- agnostic. Rename the executable release artifact and drop its now-unused artifact-id outputs. Fixes #727
There was a problem hiding this comment.
Pull request overview
This PR updates the release workflow to decouple GitHub Release asset collection from specific build jobs, aligning PlexCleaner’s workflows with the upstream ProjectTemplate convention. Instead of downloading artifacts via per-job artifact-id outputs, the release job now downloads all artifacts that match the release-asset-<branch>-* naming pattern.
Changes:
- Switch
build-release-task.ymlGitHub Release asset download topattern: release-asset-${{ inputs.branch }}-*withmerge-multiple: true. - Rename the executable release artifact in
build-executable-task.ymltorelease-asset-${{ inputs.branch }}-executable. - Remove now-unused
artifact-idworkflow outputs frombuild-executable-task.yml.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| .github/workflows/build-release-task.yml | Updates GitHub Release job to download release assets by pattern (release-asset-<branch>-*) instead of referencing a specific build job’s artifact output. |
| .github/workflows/build-executable-task.yml | Renames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs. |
PlexCleaner pins fail_on_unmatched_files: true over ./Publish/*, so an empty ./Publish fails the release step — the prior comment's 'file-less release still works' claim (copied from the template, which leaves the flag default-false) was inaccurate here.
Full-file carries from ProjectTemplate template-convergence, changing only owner/repo placeholders: - Add .markdownlint-cli2.jsonc; carry .gitattributes (*.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; repo CA suppressions reconciled into the carried [*.cs] block), and CODESTYLE.md (whole). - Narrow .github/copilot-instructions.md to the template's runbook + inline commit/PR-title summary; relocate project architecture and behavioral contracts into AGENTS.md. - AGENTS.md: add PR Review Etiquette and PR Title/Commit Conventions verbatim, conform Git and Commit Rules, add a Template Adaptations block. - merge-bot: pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, add disable-auto-merge-on-maintainer-push (no codegen or upstream-version jobs). - Add cleanup-artifacts to publish-release.yml and test-pull-request.yml; add the publish dispatch-from-default guard; add the main-only Verify public release version step to build-release-task.yml. - Converge the m4 Docker-README to publish-docker-readme-task.yml via transform-run (replaces build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN. - Carry get-version-task.yml and build-datebadge-task.yml verbatim (nbgv float on @master; caller-gated badge); align orchestration action pins. Workflow YAML and Markdown are normalized to their .editorconfig CRLF ending as part of the carry; verified content-only via git diff --ignore-cr-at-eol. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Layered a ProjectTemplate hub convergence commit on top of the feature/727 decouple work (which is untouched and correct - it remains the absorb source for the release-asset pattern):
Validated: actionlint clean, markdownlint 0 errors, Docker/Dockerfile + README.m4 pinned to LF (EOL-only verified). Held for your end-gate review - no auto-merge. |
Pick up template changes since the first fan-out: - CODESTYLE.md carried verbatim (genericized; .NET project-name substance recorded via AGENTS Template Adaptations). - publish-docker-readme-task.yml re-carried with the manifest/ transform-artifact enrichment; rewire the m4 render onto transform-artifact: versions-main so the task downloads the tool-versions artifact, retiring the bespoke gh run download. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Was LF; normalize to CRLF per the YAML policy (EOL-only). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
| # nbgv is floated on @master: its tag stream lags master, so Dependabot tag-tracking would propose a downgrade. | ||
| # Revisit if dotnet/nbgv resumes regular tagged releases. | ||
| - name: Run Nerdbank.GitVersioning tool step | ||
| id: nbgv | ||
| uses: dotnet/nbgv@master |
| if [[ "${{ github.event_name }}" == "workflow_dispatch" \ | ||
| && "${{ github.ref_name }}" != "${{ github.event.repository.default_branch }}" ]]; then | ||
| echo "::error::Dispatch publish-release from the default branch (${{ github.event.repository.default_branch }}); the matrix builds both branches. Re-dispatch on the default branch." | ||
| exit 1 | ||
| fi |
|
Superseding this PR. The decouple-release-assets work it carried is already on |
Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).
What
github-releasecollected the release file by referencingbuild-executableby itsartifact-idoutput. This switches to the template'srelease-asset-<branch>-*artifact convention: the executable leaf task uploadsrelease-asset-<branch>-executable, andgithub-releasecollects assets by pattern (release-asset-<branch>-*,merge-multiple) instead of naming a build job.Why
Keeps the release orchestration identical to upstream so it stays in sync, and decouples it from the specific build targets. No behavior change — the same executable
.7zlands on the GitHub release.Changes
build-executable-task.yml: rename the release artifact torelease-asset-<branch>-executable; drop the now-unusedartifact-idoutputs.build-release-task.yml:github-releasecollects assets via pattern download.actionlint (Docker) is clean on the changed files.
Fixes #727