Skip to content

release: one cycle per project, selected by the tag prefix - #595

Draft
aojea wants to merge 2 commits into
google:mainfrom
aojea:release-cycles
Draft

aojea wants to merge 2 commits into
google:mainfrom
aojea:release-cycles

Conversation

@aojea

@aojea aojea commented Oct 7, 2026

Copy link
Copy Markdown
Collaborator

Merge after v0.1.0 is tagged, so every project starts its own version sequence from the same base.

The mesh, the two SDKs and the Android app get independent release cycles. The prefix of the tag selects the project:

Tag Project Publishes Workflow
v1.2.3 mesh binaries goreleaser release (the only one marked latest), images, hub deploy release.yml, deploy.yaml
sdk/js/v1.2.3 @sam-mesh/sdk npm + GitHub release release.yml
sdk/python/v1.2.3 sam-mesh PyPI + GitHub release release.yml
mobile/v1.2.3 SAM Connect GitHub release with APK/AAB; Play on a manual run mobile.yml

A GitHub Actions tag filter never matches / with *, so the existing v* filters (deploy, test, e2e, ...) keep seeing mesh tags only.

Changes:

  • release.yml: SDK jobs no longer need goreleaser; each runs for its own prefix and stamps with sdk-version.sh --js|--python. An SDK tag also creates a GitHub release (--latest=false) with notes from hack/release-notes.sh (commits since the previous tag of the same prefix, filtered to the SDK directory and api/sam.proto, api/datalog.go). goreleaser gets GORELEASER_CURRENT_TAG/GORELEASER_PREVIOUS_TAG pinned to v* so its changelog cannot start at an SDK tag, and its job summary shows hack/release-status.sh: which SDK or app releases this mesh release calls for. SDK publishing stays in this file because npm and PyPI trusted publishing are bound to the workflow file name; no re-registration is needed.
  • mobile.yml: triggers on mobile/v*, derives the version name from that prefix, creates its own release instead of polling for goreleaser's.
  • Makefile: git describe --tags --match 'v*'. Verified in a throwaway clone that without --match an sdk/js/v* tag on HEAD becomes the Go binary version.
  • install.sh (and the site/static copy): the API fallback, used while every mesh release is an rc, skips sdk/* and mobile/* releases.
  • DEVELOPMENT.md: the release process; linked from README.md, CONTRIBUTING.md and the contributing page.

Validation: shellcheck clean, workflows parse and pass actionlint (one pre-existing SC2086 in mobile.yml), make -n build derives v0.1.0-rc.9.

The mesh, the two SDKs and the Android app are released on their own
cycles and version sequences. The prefix of the tag selects the project:
v* for the mesh, sdk/js/v* and sdk/python/v* for the SDKs, mobile/v* for
the app. A GitHub Actions tag filter does not match "/" with "*", so the
existing v* filters keep seeing mesh tags only.

release.yml: the SDK jobs no longer wait for goreleaser and run only for
their own prefix, stamping with sdk-version.sh --js or --python. Each SDK
tag also gets a GitHub release that is not marked latest, with notes from
the commits under the SDK directory and the contract files since the
previous tag of that SDK (hack/release-notes.sh). goreleaser is pinned to
GORELEASER_CURRENT_TAG/PREVIOUS_TAG so its changelog cannot start at an
SDK tag, and its job summary shows hack/release-status.sh: which SDK or
app releases the mesh release calls for. SDK publishing stays in this
file because npm and PyPI trusted publishing are bound to its name.

mobile.yml: triggers on mobile/v*, derives the version from that prefix
and creates its own release instead of waiting for goreleaser's.

make derives the version with git describe --match 'v*', and install.sh's
API fallback skips the sdk/* and mobile/* releases.

DEVELOPMENT.md documents the release process: what each tag publishes,
cutting single and coordinated releases, when a mesh change needs an SDK
or app release, how each project gets its version, retrying a failed run.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request documents and implements independent release cycles and versioning for the various projects in the repository (the mesh, JS/Python SDKs, and the mobile app). It introduces DEVELOPMENT.md, helper scripts (release-notes.sh and release-status.sh), and updates documentation, the Makefile, and installation scripts to handle project-specific tags separately from mesh tags. The review feedback suggests increasing the GitHub API per_page limit in the installation scripts to ensure mesh releases are not missed among numerous SDK/mobile releases, and improving error handling in release-notes.sh by avoiding piping git log directly to grep inside an if condition.

Comment thread install.sh Outdated
Comment thread site/static/install.sh Outdated
Comment thread hack/release-notes.sh Outdated

This branch has not been deployed

No deployments
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