|
| 1 | +# Release Task — Copilot Coding Agent Prompt |
| 2 | + |
| 3 | +Use this file to perform a full release with a single prompt. |
| 4 | + |
| 5 | +## Usage |
| 6 | + |
| 7 | +Type in Copilot chat: |
| 8 | + |
| 9 | +``` |
| 10 | +Run the release task for version X.Y.Z |
| 11 | +``` |
| 12 | + |
| 13 | +or shorthand: |
| 14 | + |
| 15 | +``` |
| 16 | +/release X.Y.Z |
| 17 | +``` |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +## Step-by-step instructions for the agent |
| 22 | + |
| 23 | +### 1. Gather changes since the last release |
| 24 | + |
| 25 | +- Fetch the latest release tag via the GitHub API: `GET /repos/{owner}/{repo}/releases/latest` |
| 26 | +- Fetch all closed (merged) PRs via: `GET /repos/{owner}/{repo}/pulls?state=closed` |
| 27 | +- Filter PRs where `merged_at` is after the date of the latest release |
| 28 | + |
| 29 | +### 2. Filter and categorize the PRs |
| 30 | + |
| 31 | +**Ignore entirely** (do not include in the changelog): |
| 32 | +- PRs authored by `dependabot[bot]` |
| 33 | +- PRs with label `documentation` or whose title starts with `docs:` |
| 34 | +- PRs with label `dependencies` |
| 35 | +- PRs whose title contains `Bump version` or `release notes` |
| 36 | + |
| 37 | +**Categorize the remaining PRs** (check both the PR title prefix **and** the GitHub label): |
| 38 | +- **New features** — `feat:` title prefix OR label `enhancement`: list as a main bullet with a short description |
| 39 | +- **Bug fixes** — `fix:` title prefix OR label `bug`: list as a main bullet with a short description |
| 40 | +- **Internal improvements** — `chore:`/`refactor:` title prefix, label `refactoring`, label `build`, or titles containing `Move`, `Rename`, `Replace public API`: list briefly at the bottom in a separate section `🔧 Internal improvements` with PR links only |
| 41 | + |
| 42 | +### 3. Generate the short changelog (for `<PackageReleaseNotes>` in the csproj) |
| 43 | + |
| 44 | +- Maximum ~5 bullet points |
| 45 | +- Include only features and bug fixes — no refactoring, no docs |
| 46 | +- Format: |
| 47 | + ``` |
| 48 | + * [description] in [PR link] |
| 49 | + ``` |
| 50 | + |
| 51 | +### 4. Generate the extended changelog (for the GitHub Release body) |
| 52 | + |
| 53 | +Sections (include only if relevant PRs exist): |
| 54 | +- `## ✨ New features` |
| 55 | +- `## 🐛 Bug fixes` |
| 56 | +- `## 🔧 Internal improvements` — brief, with PR links only, no explanation |
| 57 | + |
| 58 | +For relevant features, add a **short code example** demonstrating the new CLI argument, e.g.: |
| 59 | + |
| 60 | +```powershell |
| 61 | +slnx-validator MySolution.slnx --new-flag |
| 62 | +``` |
| 63 | + |
| 64 | +Close with: |
| 65 | + |
| 66 | +``` |
| 67 | +**Full Changelog**: https://github.com/{owner}/{repo}/compare/vOLD...vNEW |
| 68 | +``` |
| 69 | + |
| 70 | +Documentation changes (`docs:` prefix) are **not** included. |
| 71 | + |
| 72 | +### 5. Determine the release title |
| 73 | + |
| 74 | +- Format: `X.Y.Z: <short description of the most important change(s)>` |
| 75 | +- Maximum ~70 characters |
| 76 | +- Summarize using the 1–2 most important features or fixes |
| 77 | +- Example: `0.6.0: SARIF report output & severity override flags` |
| 78 | + |
| 79 | +### 6. Update the version in the csproj |
| 80 | + |
| 81 | +File: `src/SLNX-validator/SLNX-validator.csproj` |
| 82 | + |
| 83 | +- Set `<VersionPrefix>` to the new version (e.g. `0.6.0`) |
| 84 | +- Replace the contents of `<PackageReleaseNotes>` with the generated short changelog from step 3 |
| 85 | + |
| 86 | +### 7. Open a PR |
| 87 | + |
| 88 | +- Include only the csproj change |
| 89 | +- Title: `Bump version to X.Y.Z and update release notes` |
| 90 | +- Body: the full extended changelog from step 4 |
| 91 | + |
| 92 | +### 8. Create the GitHub Release via the API |
| 93 | + |
| 94 | +**Wait for the PR from step 7 to be merged into `main` before creating the release.** |
| 95 | + |
| 96 | +`POST /repos/{owner}/{repo}/releases` |
| 97 | + |
| 98 | +```json |
| 99 | +{ |
| 100 | + "tag_name": "vX.Y.Z", |
| 101 | + "name": "<release title from step 5>", |
| 102 | + "body": "<extended changelog from step 4>", |
| 103 | + "draft": false, |
| 104 | + "prerelease": false, |
| 105 | + "target_commitish": "main" |
| 106 | +} |
| 107 | +``` |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +## Changelog rules |
| 112 | + |
| 113 | +- Write in **English** |
| 114 | +- Do not include documentation changes in release notes |
| 115 | +- Mention refactorings only briefly with a PR link — no explanation |
| 116 | +- Features may include a short example |
| 117 | +- Keep it concise but informative |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +## Example output |
| 122 | + |
| 123 | +**Release title:** `0.6.0: SARIF report output & severity override flags` |
| 124 | + |
| 125 | +**Short changelog (csproj):** |
| 126 | + |
| 127 | +``` |
| 128 | +* feat: Add SARIF 2.1.0 report output in https://github.com/304NotModified/SLNX-validator/pull/56 |
| 129 | +* feat: Add CLI severity override flags (--blocker, --critical, etc.) in https://github.com/304NotModified/SLNX-validator/pull/45 |
| 130 | +* fix: Remove duplicate filename in verbose error output in https://github.com/304NotModified/SLNX-validator/pull/52 |
| 131 | +``` |
| 132 | + |
| 133 | +**GitHub Release body:** |
| 134 | + |
| 135 | +```markdown |
| 136 | +## ✨ New features |
| 137 | + |
| 138 | +- **SARIF 2.1.0 report output** — generate a SARIF report for integration with GitHub Code Scanning, Azure DevOps, Visual Studio, and more ([#56](https://github.com/304NotModified/SLNX-validator/pull/56)) |
| 139 | + |
| 140 | + ```powershell |
| 141 | + slnx-validator MySolution.slnx --sarif-report-file results.sarif |
| 142 | + ``` |
| 143 | + |
| 144 | +- **CLI severity override flags** — override the severity of specific validation rules per run ([#45](https://github.com/304NotModified/SLNX-validator/pull/45)) |
| 145 | + |
| 146 | + ```powershell |
| 147 | + slnx-validator MySolution.slnx --minor SLNX001 --ignore SLNX002 |
| 148 | + ``` |
| 149 | + |
| 150 | +## 🐛 Bug fixes |
| 151 | + |
| 152 | +- Remove duplicate filename in verbose error output ([#52](https://github.com/304NotModified/SLNX-validator/pull/52)) |
| 153 | + |
| 154 | +## 🔧 Internal improvements |
| 155 | + |
| 156 | +- Replace public `XDocument` API on `SlnxFile` with typed SLNX domain model ([#54](https://github.com/304NotModified/SLNX-validator/pull/54)) |
| 157 | +- Move XML parsing into `SlnxCollector` and rename `ValidationCollector` ([#51](https://github.com/304NotModified/SLNX-validator/pull/51)) |
| 158 | + |
| 159 | +**Full Changelog**: https://github.com/304NotModified/SLNX-validator/compare/v0.5.0...v0.6.0 |
| 160 | +``` |
0 commit comments