fix(releases): use professional repository and automation text #23
No files matched your search
@@ -0,0 +1,12 @@
|
||||
# Plain-language categories for native GitHub release notes.
|
||||
changelog:
|
||||
exclude:
|
||||
labels:
|
||||
- "autorelease: pending"
|
||||
- "autorelease: tagged"
|
||||
- "autorelease: failed"
|
||||
categories:
|
||||
- title: Breaking changes
|
||||
labels: [breaking]
|
||||
- title: Changes
|
||||
labels: ["*"]
|
||||
@@ -52,6 +52,7 @@ jobs:
|
||||
- name: PR title is a Conventional Commit header
|
||||
env:
|
||||
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||
PR_BODY: ${{ github.event.pull_request.body }}
|
||||
run: |
|
||||
# The title becomes the squash commit subject on main (K22-REPO-22), so it
|
||||
# must be a valid Conventional Commits 1.0 header of at most 100 characters.
|
||||
@@ -65,6 +66,15 @@ jobs:
|
||||
printf 'Title was: %s\n' "$PR_TITLE"
|
||||
exit 1
|
||||
fi
|
||||
node - <<'NODE'
|
||||
const emoji = /\p{Emoji_Presentation}|[\u2600-\u27BF]|\p{Extended_Pictographic}\uFE0F|[#*0-9]\uFE0F?\u20E3/u;
|
||||
for (const [field, text] of [['title', process.env.PR_TITLE], ['description', process.env.PR_BODY || '']]) {
|
||||
if (emoji.test(text)) {
|
||||
console.error(`::error title=Unprofessional pull request::The ${field} contains an emoji; use professional text.`);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
NODE
|
||||
echo "PR title OK"
|
||||
|
||||
dco:
|
||||
|
||||
@@ -22,6 +22,8 @@ themselves: everything below comes from the [SDLC policy](policies/sdlc.md).
|
||||
|
||||
## What a good change looks like
|
||||
|
||||
- Use professional wording in code comments, documentation, commit/PR messages,
|
||||
release notes and automation output. No emojis, joke copy or bot sound effects.
|
||||
- A new or changed requirement follows the format in
|
||||
[policies/README.md](policies/README.md#requirement-ids): an ID that has never been used,
|
||||
a level, the rule, *Why*, and *Verified by*. A requirement nobody can verify is not
|
||||
|
||||
@@ -22,7 +22,7 @@ picks them up on open: *Settings → Editor → Code Style* shows **Project** se
|
||||
|
||||
## Per IDE (all projects)
|
||||
|
||||
1. **Code style:** *Settings → Editor → Code Style → ⚙ (Show Scheme Actions) → Import
|
||||
1. **Code style:** *Settings → Editor → Code Style → Show Scheme Actions → Import
|
||||
Scheme → IntelliJ IDEA code style XML* → choose `Kingsrook_Code_Style.xml`.
|
||||
2. **Reformat on save:** *Settings → Tools → Actions on Save* → enable **Reformat code**
|
||||
and **Optimize imports**.
|
||||
|
||||
+9
-2
@@ -24,10 +24,17 @@ against it before packaging.
|
||||
|
||||
Use `feat` for new guidance and `!` for new obligations or removed allowances as
|
||||
defined in [the versioning policy](../policies/README.md#versioning-of-the-standards).
|
||||
Infrastructure changes appear in release notes and can produce PATCH releases;
|
||||
`test`, `style`, and `chore` alone do not produce release notes. Review the proposed
|
||||
Infrastructure changes can produce PATCH releases;
|
||||
`test`, `style`, and `chore` alone do not trigger a version proposal. Review the proposed
|
||||
version and notes before merging. A `breaking` label alone does not change the version.
|
||||
|
||||
PR headers and footers are explicitly configured in `release-please-config.json`.
|
||||
Native GitHub release notes use the plain-language categories in `.github/release.yml`,
|
||||
keeping breaking changes visible without decorative symbols. Versions still come
|
||||
from Conventional Commits; note entries link to reviewed PRs. Maintainers review
|
||||
breaking-change descriptions before publication. Repository text and automation
|
||||
output use professional wording, without emojis, joke copy or bot sound effects.
|
||||
|
||||
## One-time maintainer setup
|
||||
|
||||
1. Keep **Settings → General → Releases → Enable release immutability** enabled.
|
||||
|
||||
@@ -3,18 +3,10 @@
|
||||
"release-type": "simple",
|
||||
"include-component-in-tag": false,
|
||||
"bump-minor-pre-major": false,
|
||||
"changelog-type": "github",
|
||||
"pull-request-header": "Release proposal generated from reviewed changes on main. Review the version, changes, and validation before merging.",
|
||||
"pull-request-footer": "Generated by [Release Please](https://github.com/googleapis/release-please) using this repository's release configuration.",
|
||||
"initial-version": "0.1.0",
|
||||
"changelog-sections": [
|
||||
{ "type": "security", "section": "Security", "hidden": false },
|
||||
{ "type": "feat", "section": "Features", "hidden": false },
|
||||
{ "type": "fix", "section": "Bug Fixes", "hidden": false },
|
||||
{ "type": "docs", "section": "Documentation", "hidden": false },
|
||||
{ "type": "perf", "section": "Performance", "hidden": false },
|
||||
{ "type": "refactor", "section": "Refactoring", "hidden": false },
|
||||
{ "type": "build", "section": "Build", "hidden": false },
|
||||
{ "type": "ci", "section": "Automation", "hidden": false },
|
||||
{ "type": "revert", "section": "Reverts", "hidden": false }
|
||||
],
|
||||
"packages": {
|
||||
".": { "version-file": "version.txt" }
|
||||
}
|
||||
|
||||
@@ -117,7 +117,10 @@ the pull request description discloses it, per
|
||||
|
||||
**K22-AGENT-41 (SHOULD)** An agent reports in concise plain language: what changed,
|
||||
why, what was verified, and what limitations remain. Document length scales with the
|
||||
task; decoration (emojis, filler praise) is omitted unless asked for.
|
||||
task. Repository text, including code comments, documentation, commits, PRs, release
|
||||
notes and generated automation messages, uses professional wording. Omit emojis,
|
||||
joke copy, filler praise and bot sound effects. Configure third-party automation to
|
||||
follow the same rule; its default templates are not an exception.
|
||||
*Why:* the report is the maintainer's primary review input. *Verified by:* review.
|
||||
|
||||
## Context economy
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# Contributing to {{PROJECT_NAME}}
|
||||
|
||||
Use professional wording in code comments, documentation, commit/PR messages,
|
||||
release notes and automation output. No emojis, joke copy or bot sound effects.
|
||||
|
||||
Thanks for helping. This project follows the
|
||||
[KofTwentyTwo standards](https://github.com/KofTwentyTwo/standards); this page is the
|
||||
short version of what they ask of a contribution.
|
||||
|
||||
@@ -44,7 +44,9 @@ if($committedVersion -ne $Version -or $releaseManifest['.'] -ne $Version)
|
||||
|
||||
$changelog = (git -C $repository show "${commit}:CHANGELOG.md") -join "`n"
|
||||
$escapedVersion = [regex]::Escape($Version)
|
||||
$section = [regex]::Match($changelog, "(?ms)^## (?:\[$escapedVersion\](?:\([^\r\n]*\))?|$escapedVersion)(?=\s|$)[^\r\n]*\r?\n.*?(?=^## |\z)")
|
||||
# Native release-note categories also use H2; only a version heading ends a release.
|
||||
$releaseHeading = '^## (?:\[\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?\](?:\([^\r\n]*\))?|\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)(?=\s|$)'
|
||||
$section = [regex]::Match($changelog, "(?ms)^## (?:\[$escapedVersion\](?:\([^\r\n]*\))?|$escapedVersion)(?=\s|$)[^\r\n]*\r?\n.*?(?=$releaseHeading|\z)")
|
||||
if(-not $section.Success)
|
||||
{
|
||||
throw "CHANGELOG.md has no release notes for $Version at $commit."
|
||||
|
||||
@@ -63,6 +63,14 @@ Future notes.
|
||||
|
||||
Current notes.
|
||||
|
||||
## Changes
|
||||
|
||||
Native category notes.
|
||||
|
||||
## Breaking changes
|
||||
|
||||
Current breaking details.
|
||||
|
||||
## 1.2.2
|
||||
|
||||
Older notes.
|
||||
@@ -100,6 +108,7 @@ $manifest = Get-Content -LiteralPath (Join-Path $first "$prefix.manifest.json")
|
||||
Test-Condition ($manifest.version -eq '1.2.3' -and $manifest.commit -eq (git -C $source rev-parse HEAD)) 'manifest identifies version and exact source commit'
|
||||
$notes = Get-Content -LiteralPath (Join-Path $first "$prefix.notes.md") -Raw
|
||||
Test-Condition ($notes -match 'Current notes' -and $notes -notmatch 'Older notes|Future notes' -and $notes.Contains($checklist)) 'notes contain only this release and its checklist'
|
||||
Test-Condition ($notes -match 'Native category notes' -and $notes -match 'Current breaking details') 'notes preserve native H2 categories within a release'
|
||||
foreach($file in (Get-ChildItem -LiteralPath $first -File))
|
||||
{
|
||||
Test-Condition ((Get-FileHash -LiteralPath $file.FullName).Hash -eq (Get-FileHash -LiteralPath (Join-Path $second $file.Name)).Hash) "$($file.Name) is reproducible"
|
||||
@@ -115,6 +124,14 @@ Test-Exception { & $builder -Version '1.2.4' -RepositoryPath $source -OutputPath
|
||||
Test-Exception { & $builder -Version '01.2.3' -RepositoryPath $source } 'ValidatePattern|validation|pattern'
|
||||
Test-Exception { & $builder -Version '1.2.3' -RepositoryPath $source -OutputPath $first } 'already exists'
|
||||
Test-Exception { & $builder -Version '1.2.3' -RepositoryPath $source -OutputPath (Join-Path $fixtureRoot 'invalid-url') -ChecklistUrl 'http://example.com/123' } 'GitHub issue URL'
|
||||
$nativeChangelog = (Get-Content -LiteralPath (Join-Path $source 'CHANGELOG.md') -Raw).Replace('## [1.2.3](https://example.com/current)', '## 1.2.3')
|
||||
Set-Content -LiteralPath (Join-Path $source 'CHANGELOG.md') -Value $nativeChangelog
|
||||
git -C $source add -- CHANGELOG.md
|
||||
git -C $source -c user.name=Fixture -c user.email=fixture@example.invalid -c commit.gpgsign=false commit --quiet -m 'test: native release heading fixture'
|
||||
$nativeOutput = Join-Path $fixtureRoot 'native-headings'
|
||||
& $builder -Version '1.2.3' -RepositoryPath $source -OutputPath $nativeOutput
|
||||
$nativeNotes = Get-Content -LiteralPath (Join-Path $nativeOutput "$prefix.notes.md") -Raw
|
||||
Test-Condition ($nativeNotes -match 'Native category notes' -and $nativeNotes -match 'Current breaking details' -and $nativeNotes -notmatch 'Older notes|Future notes') 'native unlinked version heading retains only its release categories'
|
||||
Set-Content -LiteralPath (Join-Path $source 'CHANGELOG.md') -Value '# Changelog without release notes'
|
||||
git -C $source add -- CHANGELOG.md
|
||||
git -C $source -c user.name=Fixture -c user.email=fixture@example.invalid -c commit.gpgsign=false commit --quiet -m 'test: missing release notes fixture'
|
||||
|
||||
Reference in new issue
Block a user