Skip to content

Commit 69d49bb

Browse files
ci: add release-please for versioned, self-describing contract releases
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>
1 parent ab469df commit 69d49bb

5 files changed

Lines changed: 64 additions & 0 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: release-please
2+
3+
# Cuts versioned contract-checkpoint releases (tag + GitHub release + CHANGELOG)
4+
# from conventional commits. These are contract snapshots, NOT a deploy gate.
5+
6+
on:
7+
push:
8+
branches:
9+
- main
10+
workflow_dispatch:
11+
12+
permissions:
13+
contents: write
14+
pull-requests: write
15+
16+
jobs:
17+
release-please:
18+
if: github.repository == 'scaleapi/scale-agentex'
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: googleapis/release-please-action@5c625bfb5d1ff62eadeeb3772007f7f66fdcf071 # v4.4.1
22+
with:
23+
config-file: release-please-config.json
24+
manifest-file: .release-please-manifest.json

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "0.1.0"
3+
}

agentex/src/_version.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"""Single source of the agentex contract version (bumped by release-please)."""
2+
3+
__version__ = "0.1.0" # x-release-please-version

agentex/src/api/app.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from fastapi.responses import JSONResponse
2222
from fastapi.staticfiles import StaticFiles
2323

24+
from src._version import __version__
2425
from src.adapters.crud_store.exceptions import ItemDoesNotExist
2526
from src.adapters.http.adapter_httpx import HttpxGateway
2627
from src.api.authentication_middleware import AgentexAuthMiddleware
@@ -108,6 +109,7 @@ async def lifespan(_: FastAPI):
108109

109110
fastapi_app = FastAPI(
110111
title="Agentex API",
112+
version=__version__,
111113
openapi_url="/openapi.json",
112114
docs_url="/swagger",
113115
redoc_url="/api",

release-please-config.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
3+
"include-v-in-tag": true,
4+
"include-component-in-tag": false,
5+
"bump-minor-pre-major": true,
6+
"bump-patch-for-minor-pre-major": false,
7+
"bootstrap-sha": "ab469df91bba043ea25356c89147d29f7df03bad",
8+
"changelog-sections": [
9+
{ "type": "feat", "section": "Features" },
10+
{ "type": "fix", "section": "Bug Fixes" },
11+
{ "type": "perf", "section": "Performance Improvements" },
12+
{ "type": "revert", "section": "Reverts" },
13+
{ "type": "docs", "section": "Documentation" },
14+
{ "type": "refactor", "section": "Refactors" },
15+
{ "type": "chore", "section": "Chores", "hidden": true },
16+
{ "type": "test", "section": "Tests", "hidden": true },
17+
{ "type": "ci", "section": "Continuous Integration", "hidden": true },
18+
{ "type": "build", "section": "Build System", "hidden": true },
19+
{ "type": "style", "section": "Styles", "hidden": true }
20+
],
21+
"packages": {
22+
".": {
23+
"release-type": "python",
24+
"package-name": "agentex",
25+
"extra-files": [
26+
"agentex/src/_version.py",
27+
{ "type": "yaml", "path": "agentex/openapi.yaml", "jsonpath": "$.info.version" },
28+
{ "type": "toml", "path": "agentex/pyproject.toml", "jsonpath": "$.project.version" }
29+
]
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)