Skip to content

ci(PROC-1514): adopt release-please for automated versioning#97

Merged
CalNightingale merged 2 commits into
mainfrom
CalNightingale/release-please
Apr 21, 2026
Merged

ci(PROC-1514): adopt release-please for automated versioning#97
CalNightingale merged 2 commits into
mainfrom
CalNightingale/release-please

Conversation

@CalNightingale
Copy link
Copy Markdown
Collaborator

@CalNightingale CalNightingale commented Apr 21, 2026

Linear: https://linear.app/gradienthealth/issue/PROC-1514/adopt-release-please-for-cloud-optimized-dicom

Summary

Adopt release-please so version bumps, tagging, and changelog generation become automatic. release-please opens a continuously-updated Release PR on every push to main; merging it bumps the version, updates CHANGELOG.md, tags vX.Y.Z, and triggers our existing publish.yml workflow.

What's added

  • .github/workflows/release-please.yml — runs on every push to main.
  • release-please-config.json — Python release type, single-package, release-as: 1.0.0 to pin the next release at 1.0.0 (we've been prod-stable for a while; jumping to 1.x makes our compatibility contract explicit). Remove the release-as field after that release ships so subsequent versions are derived from Conventional Commit types.
  • .release-please-manifest.json — pins current version (0.2.5).
  • .github/workflows/pr-title-conventional.yml — uses amannn/action-semantic-pull-request to require a Conventional Commit prefix (feat:, fix:, chore:, etc.) on every PR title. release-please needs this prefix to decide bump type after merge.
  • CLAUDE.md and README.md — new sections documenting the title format, type→bump mapping, and that pyproject.toml version is no longer hand-edited.

Title format going forward

<type>(PROC-XXXX): short description — e.g. feat(PROC-1502): backfill dropped UID tags.

  • feat → minor bump (1.0.0 → 1.1.0)
  • fix → patch (1.0.0 → 1.0.1)
  • feat! or BREAKING CHANGE: footer → major (1.0.0 → 2.0.0)
  • chore, docs, refactor, test, ci, build, perf, revert → no release

Companion org-level PR required first

The existing org-level pr-title-check.yml (in gradienthealth/.github) requires the Linear ID at the start of the title. The new format puts the Linear ID inside a Conventional-Commit scope: feat(PROC-XXXX): .... A widened regex that accepts both styles is up for review at gradienthealth/.github#6 (Linear: https://linear.app/gradienthealth/issue/PROC-1513/allow-conventional-commit-titles-in-org-pr-title-check) — that PR needs to merge first, otherwise titles in the new format will fail the org check-title workflow (including this PR's title).

Test plan

Add release-please action that opens a Release PR on every push to main, computes the next version from Conventional Commit prefixes, and writes CHANGELOG.md. Next release pinned to 1.0.0 via release-as. Adds a repo-level conventional-commit PR title check; companion regex update needed in the org pr-title-check workflow (draft saved at .context/org-pr-title-check-proposed.yml) so titles like feat(PROC-XXXX): ... are accepted.
Add a Pull Requests & Releases section to CLAUDE.md and a Contributing section to README.md so future contributors (and Claude sessions) know the title format and that pyproject.toml versions are no longer hand-edited.
@CalNightingale CalNightingale self-assigned this Apr 21, 2026
@CalNightingale CalNightingale changed the title ci: adopt release-please for automated versioning ci(PROC-1514): adopt release-please for automated versioning Apr 21, 2026
@CalNightingale CalNightingale marked this pull request as ready for review April 21, 2026 20:08
saicheems pushed a commit to gradienthealth/.github that referenced this pull request Apr 21, 2026
)

## Summary
Widen the PR title check so titles like `feat(ENG-123): add feature` are
accepted in addition to the existing `ENG-123: ...` and `NO-ISSUE:`
formats.

## Why
Adopting [release-please](https://github.com/googleapis/release-please)
in `cloud_optimized_dicom` (see [PR
#97](gradienthealth/cloud_optimized_dicom#97))
requires PR titles to start with a Conventional Commit type prefix
(`feat:`, `fix:`, `chore:`, etc.) so the bot can decide the next
version. The existing org-level check requires the Linear ID at the very
start, which conflicts. Putting the Linear ID inside the
conventional-commit scope (`feat(ENG-123): ...`) satisfies both worlds,
but the current regex doesn't recognize it.

## Change
Two new branches added to the existing if/elif chain:
- Conventional Commit with Linear ID in scope: `feat(ENG-123): add
feature`
- Conventional Commit with `NO-ISSUE` opt-out: `chore: NO-ISSUE refactor
internals`

Existing formats continue to pass — pure superset, zero behavior change
for repos not adopting Conventional Commits.

## Test plan
- [ ] Title `ENG-123: existing format` → passes (unchanged)
- [ ] Title `feat(ENG-123): new format` → passes (new)
- [ ] Title `NO-ISSUE: opt-out` → passes (unchanged)
- [ ] Title `chore: NO-ISSUE thing` → passes (new)
- [ ] Title `random title with no marker` → fails
@CalNightingale CalNightingale merged commit 861f189 into main Apr 21, 2026
8 of 9 checks passed
@CalNightingale CalNightingale deleted the CalNightingale/release-please branch April 21, 2026 20:52
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.

1 participant