This document is intended to help Goa maintainers release new versions of Goa.
A preview publishes Goa alone from the reviewed feature branch. It does not
move the stable v3 branch, update the stable README badge, or change the
examples and plugins repositories. Because a stable release exists, the Go
command does not select a preview for @latest; testers must request the full
version.
Preview versions use v3.MINOR.BUILD-preview.NUMBER. For example:
v3.31.0-preview.1
Goa stays on major version 3. A preview's minor version is a testing label; the stable minor version and compatibility guidance follow the final review.
-
Confirm the complete preview version with the maintainer.
-
Make sure the current Goa feature branch contains the intended generator changes, public upgrade guide, and release notes.
-
Make sure the working tree is clean and the preview tag does not exist locally or on
origin. -
Run the preparation target with the confirmed version parts:
make prepare-preview MINOR=31 BUILD=0 PREVIEW_NUMBER=1
The target validates the version, runs the complete Goa release preflight, updates
Makefileandpkg/version.go, verifiesgoa version, and creates the commitPrepare v3.31.0-preview.1. It does not create or push a tag. -
Push the feature branch through its normal review workflow and wait for all required checks. Do not merge it into the stable branch merely to publish the preview.
-
Confirm that the public upgrade guide still matches the exact tagged code.
Publishing creates a public tag. Inventory the local and remote branch and tag one final time, then get explicit maintainer approval before running:
make release-previewThe target reruns the complete preflight, checks that the current commit is
already present on the branch with the same name on origin, creates the
preview tag, and pushes only that tag. It does not push a branch or touch the
examples and plugins repositories.
If publication fails after the local tag is created, inspect the local and remote tag before doing anything else. Do not rerun blindly, delete a public tag, or force-push.
Create the GitHub release only after the tag push succeeds, and mark it as a pre-release:
gh release create v3.31.0-preview.1 \
--prerelease \
--title "Goa v3.31.0-preview.1" \
--notes-file PREVIEW_NOTES.mdRelease notes should link to UPGRADING.md, identify the users most likely to
be affected, and ask
for reports with a small design and generated diff. Remove the temporary notes
file after GitHub has accepted the release.
Testers install the preview explicitly:
go get goa.design/goa/v3@v3.31.0-preview.1
go install goa.design/goa/v3/cmd/goa@v3.31.0-preview.1Follow the release skill for dependency updates, checks, preparation commits, publication, and release notes.
- Keep
MAJOR=3and updateMINORandBUILDinMakefile. LeavePREVIEW_NUMBERempty. The stable release target refuses to run while a preview number is set and clears the preview suffix inpkg/version.go. - Make sure the
goa.design/examplesandgoa.design/pluginsrepositories exist in$(go env GOPATH)/srcand are clean:$(go env GOPATH)/src/goa.design/exampleson branchmain$(go env GOPATH)/src/goa.design/pluginson branchv3
- Run
make release
Merge compatible preview changes into Goa v3, examples main, and plugins
v3 before releasing. The release target checks those branches and refuses to
switch a working tree automatically. All repositories must be clean; local
preparation commits may be ahead of the remote, but the remote must not be
ahead. Do not push preparation commits separately.
make release runs a preflight check (release-preflight) after bumping the version and updating
the README badge. The preflight runs lint, test-release (no coverage artifact) and
integration-test before tagging and pushing.
The examples phase updates every example module. The plugins phase updates the root module and every nested example module before regenerating and testing.
If a phase fails, inspect the current branch, working tree, local tag, and
remote branch and tag in all three repositories. Preserve successful pushes.
Fix the failed phase and run the narrowest remaining target:
release-goa, release-examples, or release-plugins. Never blindly repeat
the complete release, recreate an existing tag, or replace a public tag.
After all three tags are published, create the Goa GitHub release and verify that the Go proxy resolves the stable version and the downstream module pins.