Skip to content

ci: add release-please for versioned contract releases#321

Merged
max-parke-scale merged 1 commit into
mainfrom
maxparke/add-release-please
Jun 17, 2026
Merged

ci: add release-please for versioned contract releases#321
max-parke-scale merged 1 commit into
mainfrom
maxparke/add-release-please

Conversation

@max-parke-scale

@max-parke-scale max-parke-scale commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

What

Adds release-please so merges to main cut versioned releases — a vX.Y.Z git tag + GitHub release + CHANGELOG — from the conventional commits already enforced here.

  • release-please-config.jsonrelease-type: simple, vX.Y.Z tags (no component), pre-1.0 bump rules, changelog sections.
  • .release-please-manifest.json — seeds the version at 0.1.0 (matches pyproject.toml).
  • .github/workflows/release-please.yml — runs on main + workflow_dispatch.

Why

scale-agentex has no version axis of its own: it floats at head, and the only version concept comes from SGP's platform release. So there's no way to name an "oldest supported server contract" that downstream consumers can target.

This gives scale-agentex its own contract version axis — each release tag is an immutable snapshot of agentex/openapi.yaml. The SDK's cross-version compatibility suite (scale-agentex-python#407) can then pin min-supported to a real release tag instead of the placeholder commit SHA it uses today.

These are contract checkpoints, not a deploy gate — the server still floats at head for deploys. The release version is a separate axis from SGP's platform version; don't read them as the same.

Bootstrap

Seeded at 0.1.0 with bootstrap-sha at the current main HEAD, so the changelog starts fresh (no history backfill). After merge, the first feat/fix PR (or a manual workflow_dispatch) opens the first release PR; merging it cuts the first tag. The release PR title is chore: release …, which passes the PR-title check.

Next (the SGP hookup — separate)

  1. Tag the built image with the release version in build-agentex.yml (today it's :sha/:latest) so deploys get a version handle.
  2. Have SGP pin agentex by version, so "oldest supported" becomes derivable from the oldest live SGP release rather than a hand-maintained floor.
  • Note: tags/releases created with the default GITHUB_TOKEN don't trigger other workflows, so the image-on-release build (1) will need a PAT or repository_dispatch.

Decision to confirm

Seed version 0.1.0 (matches pyproject.toml). Bump to 1.0.0 instead if you want the first tag to signal contract stability.

🧑‍💻🤖 — posted via Claude Code

Greptile Summary

Adds Release Please automation for versioned Agentex contract releases on main and manual dispatch.

Seeds the release manifest at 0.1.0.

Introduces a shared Agentex version source and wires FastAPI/OpenAPI versioning to it.

Configures coordinated version bumps for Python package metadata, backend metadata, OpenAPI info.version, and the shared version file.

Confidence Score: 5/5

The changes are limited to release automation and version metadata wiring, with no blocking code issues identified.

The workflow, manifest, configuration, and shared version source align with the described release process and appear safe to merge.

T-Rex T-Rex Logs

What T-Rex did

  • Compared the before and after release-please configuration states; the before state had all three files absent and overall validation failing, while the after state has the files present and most checks passing, with contract checks failing for specific items.
  • Compared the before and after OpenAPI version wiring states; the before state showed base commit, no agentex/src/_version.py, and no explicit version in FastAPI, with /openapi.json returning 200 OK and info.version=0.1.0, while the after state shows head commit, a defined __version__ in _version.py, FastAPI(version=__version__), and /openapi.json returning 200 OK with info.version=0.1.0; no contract-mismatch was filed because the head imports and the app responds as expected, and OpenAPI exposes 0.1.0 from the new wiring.

View all artifacts

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (1)

  1. General comment

    P1 Release-please package metadata and pre-major patch bump setting contradict the claimed contract

    • Bug
      • The head release-please configuration is present and parseable, but it does not semantically match the requested contract for versioned contract checkpoint releases. In release-please-config.json, the root package is configured with release-type: "python" and package-name: "agentex" instead of the claimed release-type: "simple" and package-name: "contract-checkpoints". The same config also sets bump-patch-for-minor-pre-major to false, while the validation objective expected the pre-1.0 bump boolean to be enabled. The executed after artifact reports these exact failed checks while the before artifact shows the config was absent on base.
    • Cause
      • Changed lines in release-please-config.json implement package metadata and bump behavior that target the Python package (agentex) rather than the claimed simple contract-checkpoint release package, and disable patch bumps for minor pre-major changes.
    • Fix
      • Update release-please-config.json so the root package uses "release-type": "simple", "package-name": "contract-checkpoints", and set "bump-patch-for-minor-pre-major": true if the intended contract is the one described in the PR/validation objective. If the actual intended release is the Python package release, update the PR description and release contract accordingly.

    T-Rex Ran code and verified through T-Rex

Reviews (4): Last reviewed commit: "ci: add release-please for versioned, se..." | Re-trigger Greptile

@max-parke-scale max-parke-scale requested a review from a team as a code owner June 17, 2026 16:58
Comment thread release-please-config.json Outdated
Comment thread release-please-config.json
@max-parke-scale max-parke-scale force-pushed the maxparke/add-release-please branch 2 times, most recently from 7206698 to 69d49bb Compare June 17, 2026 17:39
scale-agentex has no version axis of its own — it floats at head, and the only
version concept comes from SGP's platform release. That leaves no way to name an
"oldest supported server contract" for downstream consumers.

Add release-please (release-type: python; conventional-commit PR titles already
enforced) so merges to main cut versioned releases: a vX.Y.Z git tag + GitHub
release + CHANGELOG.

Make the contract self-describe its version so the tag and spec never drift:
- src/_version.py is the single source; the FastAPI app reads it
  (version=__version__), so generate_openapi_spec.py emits it as info.version.
- release-please bumps src/_version.py, agentex/openapi.yaml (info.version),
  agentex/pyproject.toml, and the root pyproject together with the tag.

Each tag is thus an immutable, self-describing snapshot of agentex/openapi.yaml
the SDK's cross-version compat suite can pin as min-supported
(scaleapi/scale-agentex-python#407), replacing the placeholder commit SHA today.

Contract checkpoints, not a deploy gate: the server still floats at head for
deploys. Seeded at 0.1.0 with bootstrap-sha at current main HEAD so the
changelog starts fresh; the first feat/fix merge (or workflow_dispatch) cuts the
first release. Verified gen-openapi emits info.version from _version.py with no
spec drift.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@max-parke-scale max-parke-scale force-pushed the maxparke/add-release-please branch from 69d49bb to 4fd3813 Compare June 17, 2026 18:17
@max-parke-scale max-parke-scale merged commit a51ed7a into main Jun 17, 2026
31 checks passed
@max-parke-scale max-parke-scale deleted the maxparke/add-release-please branch June 17, 2026 18:58
max-parke-scale added a commit that referenced this pull request Jun 17, 2026
The googleapis/release-please-action isn't on the org Actions allow-list, so the
release-please workflow added in #321 failed at startup (no release PR cut). Run
the release-please CLI under actions/setup-node (allow-listed) instead — same
manifest-mode behavior (release-pr + github-release), no third-party action.

Verified the CLI commands/flags against release-please@16.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
max-parke-scale added a commit that referenced this pull request Jun 17, 2026
The googleapis/release-please-action isn't on the org Actions allow-list, so the
release-please workflow added in #321 failed at startup (no release PR cut). Run
the release-please CLI under actions/setup-node (allow-listed) instead — same
manifest-mode behavior (release-pr + github-release), no third-party action.

Verified the CLI commands/flags against release-please@16.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

2 participants