Skip to content

chore: release-please for every version string, CHANGELOG, and a visible build version - #92

Merged
jbouder merged 1 commit into
mainfrom
chore/versioning
Oct 19, 2026
Merged

jbouder merged 1 commit into
mainfrom
chore/versioning

Conversation

@jbouder

@jbouder jbouder commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Closes #52.

What changed

  • release-please (release-please.yaml, v5.0.0, SHA-pinned): keeps one open chore: release X.Y.Z PR. It bumps every version string together and prepends the release's CHANGELOG.md section, built from the conventional-commit PR titles since the last release. The strings are:
    • Chart version and appVersion (via # x-release-please-version markers)
    • __version__ in api and mcp
    • ui/package.json, plus version and packages[""].version in its lockfile
  • pack-release still creates the release. release-please runs with skip-github-release, because pack-release skips signing and publishing if the release tag already exists. Merging the release PR bumps Chart.yaml, and release.yaml/pack-release cut nebari-apps-<version> exactly as today.
    • The tag format (component + no v) matches nebari-apps-<version>, so release-please finds the previous release.
    • skip-labeling stops a merged release PR from sitting at "autorelease: pending", which would block the next run.
    • bootstrap-sha is the v0.1.0 commit, so the first changelog starts there.
  • One version per Python package: api and mcp declare dynamic = ["version"] and read it from __init__.py (hatch). uv.lock no longer records the project version, so a release bump needs no relock. FastAPI and FastMCP (serverInfo.version) now report __version__ instead of a third hard-coded "0.1.0".
  • Visible build:
    • New public GET /api/v1/version returns {"version": "<release>", "build": "<image tag>"}.
    • The org build workflow has no build-args input, so the chart passes api.image.tag (sha-<commit> for released charts) as APPS_BUILD.
    • /config carries both values, and the UI shows "Apps Pack v0.1.0 (sha-…)" at the bottom of the account menu.
  • Version check: a new "Version strings" lint job fails when any of the seven strings differs from .release-please-manifest.json.
  • Docs:
    • The README Releases section now describes the release-PR flow, the RELEASE_PLEASE_TOKEN secret, and the version endpoint.
    • The API reference lists /version.
    • README and Getting started say a source install needs *.image.tag=latest.

Needs a maintainer

Optionally, add a RELEASE_PLEASE_TOKEN secret: a bot token with contents and pull-requests write. Without it, the workflow falls back to GITHUB_TOKEN, and a PR opened that way doesn't trigger CI. Closing and reopening the release PR starts its checks.

Testing

  • release-please dry run (release-please release-pr --dry-run --target-branch chore/versioning):
  • Tests: api 135 pass (new test_version); mcp 35 pass; UI build and 51 tests pass. ruff, mypy, Biome, actionlint and zizmor are clean.
  • Version check: passes on this branch; with ui/package.json edited to 0.1.1 it fails and names the file.
  • Chart: helm template renders APPS_BUILD.

🤖 Generated with Claude Code

https://claude.ai/code/session_016pvMUQJoLkBDk6B94TTm45

…ble build version

- release-please keeps a "chore: release X.Y.Z" PR that bumps Chart.yaml
  version/appVersion, the api/mcp __version__, ui/package.json and its
  lockfile together and maintains CHANGELOG.md. It never tags or releases:
  merging the PR bumps Chart.yaml, and pack-release creates
  nebari-apps-<version> as before (release-please's tag format matches).
- The api/mcp pyproject versions are dynamic (read from __init__.py), so
  uv.lock no longer records them and a release needs no relock; FastAPI and
  FastMCP report __version__.
- GET /api/v1/version (public) returns the version and the image build,
  which the chart passes as the api image tag; /config carries both and
  the UI shows them in the account menu.
- A lint job fails when any version string disagrees with the manifest.
- README and Getting started: a source install needs `*.image.tag=latest`.

Closes #52

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016pvMUQJoLkBDk6B94TTm45
@github-actions

Copy link
Copy Markdown

📄 Docs preview for chore/versioning:
https://chore-versioning.apps-pack.pages.dev

@jbouder
jbouder merged commit 65c0efa into main Oct 19, 2026
25 checks passed
@jbouder
jbouder deleted the chore/versioning branch October 19, 2026 14:42
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.

Automate versioning: release-please, CHANGELOG, and a visible build version

1 participant