Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Decouple GitHub-release assembly from per-target builds - #728

Closed
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets
Closed

Decouple GitHub-release assembly from per-target builds#728
ptr727 wants to merge 5 commits into
developfrom
feature/727-decouple-release-assets

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Re-converge with the template change in ptr727/ProjectTemplate#108 (shipped in ProjectTemplate#109).

What

github-release collected the release file by referencing build-executable by its artifact-id output. This switches to the template's release-asset-<branch>-* artifact convention: the executable leaf task uploads release-asset-<branch>-executable, and github-release collects 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 .7z lands on the GitHub release.

Changes

  • build-executable-task.yml: rename the release artifact to release-asset-<branch>-executable; drop the now-unused artifact-id outputs.
  • build-release-task.yml: github-release collects assets via pattern download.

actionlint (Docker) is clean on the changed files.

Fixes#727

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
CopilotAI review requested due to automatic review settings June 5, 2026 02:24

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

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.yml GitHub Release asset download to pattern: release-asset-${{ inputs.branch }}-* with merge-multiple: true.
  • Rename the executable release artifact in build-executable-task.yml to release-asset-${{ inputs.branch }}-executable.
  • Remove now-unused artifact-id workflow outputs from build-executable-task.yml.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
.github/workflows/build-release-task.ymlUpdates 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.ymlRenames the uploaded executable release artifact to the new release-asset-<branch>-executable convention and drops the unused artifact-id outputs.

Comment thread.github/workflows/build-release-task.yml Outdated
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.

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 2 out of 2 changed files in this pull request and generated no new comments.

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>
@ptr727

Copy link
Copy Markdown
OwnerAuthor

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):

  • Carried verbatim:.markdownlint-cli2.jsonc, .gitattributes (adds *.sh + Dockerfile + Docker/README.m4 LF pins), .editorconfig (whole; PlexCleaner's repo-wide CA suppressions reconciled into the carried [*.cs] block), CODESTYLE.md (whole), get-version-task.yml (nbgv floats @master), build-datebadge-task.yml (caller-gated), publish-docker-readme-task.yml.
  • copilot-instructions.md narrowed to the template's runbook + inline commit/PR-title summary; project architecture relocated into AGENTS.md, which also gains PR Review Etiquette + PR Title/Commit Conventions (verbatim), conformed Git and Commit Rules, and a Template Adaptations block.
  • merge-bot:pull_request -> pull_request_target, PR-number concurrency, opened||reopened gate, new disable-auto-merge-on-maintainer-push job. merge-codegen/merge-upstream-version stay absent (documented).
  • publish-release.yml / test-pull-request.yml: terminal cleanup-artifacts jobs; publish setup dispatch-from-default guard. build-release-task.yml: main-only Verify public release version step.
  • Docker README: m4 render now flows through the canonical publish-docker-readme-task.ymltransform-run (replaces the bespoke build-dockerreadme-task.yml); DOCKER_HUB_ACCESS_TOKEN throughout.

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>
CopilotAI review requested due to automatic review settings June 24, 2026 16:18
Was LF; normalize to CRLF per the YAML policy (EOL-only).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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 16 out of 18 changed files in this pull request and generated 2 comments.

Comment on lines +50 to +54
# 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
Comment on lines +48 to +52
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
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Superseding this PR. The decouple-release-assets work it carried is already on develop (via #757 'Adopt template workflow conventions'), and this branch has fallen well behind develop (missing later source cleanup, ARCHITECTURE.md, and the #749/#746 fixes). Rather than a large conflict-resolution rebase that would add nothing new, PlexCleaner's convergence to the current ProjectTemplate will come via a fresh chore/sync-template branch off develop. Closing as superseded.

@ptr727ptr727 closed this Jun 24, 2026
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