Sync template: release-asset handoff, merge-bot concurrency, governance - #344
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Re-syncs this repo’s carried governance/config artifacts and GitHub Actions orchestration workflows to match the upstream ProjectTemplate, with a focus on making release asset collection target-agnostic, improving merge-bot concurrency behavior, and tightening release/publish guardrails.
Changes:
- Update release orchestration to upload/download release assets via a
release-asset-<branch>-*artifact naming pattern and enforce missing-asset failures during GitHub release creation. - Adjust merge-bot workflow concurrency to queue per-PR (by PR number) rather than serializing all bot PRs per base branch.
- Refresh carried governance/docs and line-ending/lint configuration (AGENTS/CODESTYLE guidance,
.editorconfig/.gitattributes, markdownlint config).
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| CODESTYLE.md | Adds guidance clarifying that local commit/pre-commit gates are an acceptable derived-repo choice (CI remains authoritative). |
| AGENTS.md | Adds a “Template Adaptations” section and strengthens the merge gate / review-loop governance language. |
| .markdownlint-cli2.jsonc | Clarifies MD060 policy in comments (rule remains disabled). |
| .github/workflows/test-pull-request.yml | Adds a terminal best-effort artifact cleanup job so housekeeping does not gate required status checks. |
| .github/workflows/publish-release.yml | Adds a workflow_dispatch guard to require dispatch from the default branch to avoid mis-versioning. |
| .github/workflows/merge-bot-pull-request.yml | Changes concurrency grouping to per-PR to avoid serializing independent bot PRs. |
| .github/workflows/build-release-task.yml | Downloads release assets by pattern and makes GitHub release creation fail on unmatched files; adds a main-only prerelease-suffix backstop. |
| .github/workflows/build-nugetlibrary-task.yml | Renames uploaded artifact to the release-asset-<branch>-* convention, drops unused artifact-id outputs, and reduces retention. |
| .gitattributes | Pins *.sh and Dockerfiles to LF via git attributes to prevent CRLF execution breakage. |
| .editorconfig | Moves to per-filetype EOL governance (including Dockerfiles/JSON) and adds some root-level C#/ReSharper settings. |
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The template's CODESTYLE.md is now fully portable (hook/gate text, extension-method form, and clean-compile wording no longer assume a no-hooks model). Re-carry it byte-identical (modulo CRLF) so the hook-conflict, XML-comment, and extension-syntax review threads resolve against the upstream source rather than diverging this copy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The genericized CODESTYLE has no project-folder list / InternalsVisibleTo names to hand-adapt; re-sync is a clean wholesale overwrite. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…' wording) The template carries CODESTYLE.md whole; unused-language sections stay inert. (issue #208) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Carry the template's best-effort artifact-cleanup job so publish-run artifacts don't accumulate against the account-wide storage quota. (issue #208) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
CODESTYLE.md:301
- This guide states tests use "xUnit with AwesomeAssertions" and shows
actual.Should().Be(...), but the repo doesn't reference AwesomeAssertions anywhere (Directory.Packages.props and UtilitiesTests only useAssert.*). This is misleading for contributors and conflicts with the repo's actual test conventions.
1. **Framework**: xUnit with AwesomeAssertions
```csharp
[Fact]
public void MethodName_Scenario_ExpectedBehavior()
- .gitattributes header: distinguish editor guidance from git enforcement - CODESTYLE: intro made conditional (any .NET/Python project(s)) - AGENTS: publish step covers opted-in publish-on-merge trigger - build-datebadge BYOB: pin v1 floating tag to v1.3.0 SHA 24f4642 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Re-syncs this repo's carried governance/config artifacts and CI orchestration to the current ptr727/ProjectTemplate (template-convergence barrier), and folds in this repo's task list. Held for maintainer end-gate review - do not auto-merge.
What this does
AGENTS.md"PR Review Etiquette",.github/copilot-instructions.md,.markdownlint-cli2.jsonc,.editorconfig,.gitattributes, andCODESTYLE.md. The carried files are byte-for-byte the template's except for the documented adaptations below. Carried workflow YAML stays CRLF to match the template's checked-in form (per.editorconfig).CODESTYLE.mdcarried whole (General + .NET + Python). Only the .NET section is consumed here; the Python section is inert but kept so re-sync stays a wholesale replace.build-release-task.yml/build-nugetlibrary-task.yml:github-releasedecoupled from the build job; the download collects bypattern: release-asset-${{ inputs.branch }}-*+merge-multiple: truewithfail_on_unmatched_files: true; the NuGet upload is renamed torelease-asset-<branch>-nugetlibraryand the unusedartifact-idoutput dropped; adds the main-only prerelease-suffix backstop.merge-bot-pull-request.yml: concurrency keyed per-PR (github.event.pull_request.number) so bot PRs against the same base queue independently.publish-release.yml: dispatch-from-default-branch guard.test-pull-request.yml: terminalcleanup-artifactsjob (needs: [smoke-build]), independent ofcheck-workflow-statusso housekeeping never gates the required merge check.Documented adaptations (for review)
These are the only intentional deviations from the template; everything else matches it. Sourced from
AGENTS.md"Template Adaptations".build-*-task.yml/run-codegen-*.ymlworkflows are absent and the merge-bot carries only the Dependabot path.publish-release.ymlkeeps its repo-specific per-branchdate-badgematrix and omits the template's PyPI/Docker jobs.dotnet formatchecks in CI viadotnet husky run, so the local gate and CI run identical commands. Sanctioned byCODESTYLE.md"Clean-Compile Verification"..husky/pre-commitLF pin..editorconfigadds a[.husky/pre-commit]LF block and.gitattributesadds.husky/pre-commit text eol=lf(the template's[*.sh]/*.shrules do not match the extensionless hook). Required because this repo ships the Husky hook..editorconfig(andIL3058viaNoWarn) to keep the published public API stable; each is documented inline.Validation: actionlint clean, markdownlint 0 errors, carried-config diffs vs the template are EOL/adaptation-only.