Skip to content

ci: release-notes checker and a PR-triggered workflow (#107) - #109

Merged
craigmcchesney merged 7 commits into
mainfrom
ci-107-release-notes-check
Oct 1, 2026
Merged

craigmcchesney merged 7 commits into
mainfrom
ci-107-release-notes-check

Conversation

@craigmcchesney

@craigmcchesney craigmcchesney commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #107. Part of #98.

Ports the release-notes checker from osprey-dcs/dp-python-lib#70 to .github/scripts/check-release-notes.py. The file is copied verbatim; only REPOSITORY and SIGSTORE_PYTHON_RULES = False differ.

Changes

  • New ci.yml: this repo's first PR-triggered workflow.
    • Runs on pull_request and on pushes to main, with permissions: contents: read.
    • Uses actions/checkout v7.0.1 and actions/setup-python v7.0.0, both pinned by SHA.
  • release.yml: "Verify release notes exist" runs the checker. A rehearsal warns; a tag push fails.
  • CLAUDE.md:
    • New section after the action-pinning convention: "Release notes: links are absolute, tag-pinned, and checked". It records the rule once for all five repos, as Release notes: enforce absolute, tag-pinned cross-links across all five repos #98's definition of done asks.
    • Tag-confirmation command: now uses --paginate. Without it, the command printed nothing for a correct SHA in repos with more than 100 tags.
    • Rehearsal paragraph: corrected. All three Java release.yml files now use IS_RELEASE. DRY_RUN remains in this repo's release.yml, dp-service's release-image.yml and dp-grpc's generate-python-stubs.yml.
  • doc/developer/release.md: points at the checker.

Testing

  • Real notes: rel-1.16.0.md passes R1–R5. That includes R2 over its 26 links into the five repos, and its 11 links to its own headings.

  • Release step, run locally:

    Case Tag push Rehearsal
    Good notes exit 0 exit 0
    Notes copied to rel-9.9.9.md, so every link carries the wrong tag exit 1, 26 errors warning, exit 0
    Missing notes exit 1 warning, exit 0
  • Workflows: the pin check and YAML parse are clean.

Notes

🤖 Generated with Claude Code

https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd

craigmcchesney and others added 5 commits October 1, 2026 11:15
Copied verbatim from osprey-dcs/dp-python-lib#70 (.dev/tools/check-release-notes.py);
only the configuration block differs: REPOSITORY = osprey-dcs/data-platform and no
signing-identity rules.  Rules are #98.  rel-1.16.0.md passes all of R1-R5, including
R2 over its 26 cross-links into the five repos.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
Adds ci.yml, the repo's first PR-triggered workflow: one job that runs the checker,
contents: read, superseded PR runs cancelled.  actions/checkout v7.0.1 and
actions/setup-python v7.0.0 pinned by SHA, resolved from the tag refs.

release.yml's Verify release notes exist step now runs the checker on the notes it
found, following its dry-run rule: a rehearsal warns, a tag push fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
…e checker (#107)

The rule is recorded once, in CLAUDE.md right after the action-pinning convention,
for all five osprey-dcs repos (#98 definition of done).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
…nal reference copy (#107)

.github/scripts/check-release-notes.py is the single location chosen for all five repos.
The file is the final reference copy from osprey-dcs/dp-python-lib#70, differing only in
the configuration block (REPOSITORY = osprey-dcs/data-platform, no identity rules).  It
now finds the repo root by walking up to .git, and R5 no longer flags a bare <version>.

ci.yml, release.yml, doc/developer/release.md and CLAUDE.md's release-notes section
point at the new path; the CLAUDE.md section also records the narrowed R5, the root
discovery, and dp-python-lib's push-only guard as the one rehearsal exception.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
The tag-confirmation command searched only the first 100 tags, so it printed nothing
for a correct SHA in a repo with more (actions/runner, 146 tags); add --paginate and
emit one name per line, since --jq runs per page.

The rehearsal paragraph said dp-grpc, dp-service and dp-desktop-app all use the
dry_run/DRY_RUN input.  On main, all three release.yml files use an input-less
IS_RELEASE with publishing in a tag-push-gated job; DRY_RUN remains in this repo's
release.yml, dp-service's release-image.yml and dp-grpc's generate-python-stubs.yml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
craigmcchesney and others added 2 commits October 1, 2026 14:05
…107)

The already-released bullet said those files get only R1, R2 and R5; the
checker also applies the signing-identity rules to them.  Name the identity
rules once, and cut the section to what a reader needs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
Re-copied from osprey-dcs/dp-python-lib@f04d830 (dp-python-lib#73 as merged); only the
configuration block differs.  Picks up the review fixes made there:

- R2/N2 apply only to the five lockstep repos, not every osprey-dcs repo.
- http:// as well as https:// github.com and raw links are checked.
- A reference definition with its destination on the next line is parsed.
- HTML anchors inside code no longer count as link targets.
- A same-document #L... anchor fails R4; a blob link's line anchor is not range-checked.
- A backslash-newline between a signing flag and its value is accepted.
- Trailing sentence punctuation after the image tag is not read as part of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nsCzraPATf4LCKVyUStfd
@craigmcchesney
craigmcchesney merged commit 70ae2d5 into main Oct 1, 2026
1 check passed
@craigmcchesney
craigmcchesney deleted the ci-107-release-notes-check branch October 1, 2026 20:25
Sign up for free to 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.

Port the release-notes checker and add a PR-triggered CI workflow (#98)

1 participant