1 .PHONY: help release patch minor major custom sync-release-metadata regenerate-release-lockfiles check-release-versions
2
3 help:
4 @echo "Release commands:"
5 @echo " make patch"
6 @echo " make minor"
7 @echo " make major"
8 @echo " make custom VERSION=0.4.14"
9
10 release:
11 @test -n "$(BUMP)" || (echo "BUMP is required" && exit 1)
12 @if [ "$(BUMP)" = "custom" ] && [ -z "$(VERSION)" ]; then echo "VERSION is required for custom releases"; exit 1; fi
13 @case "$$(git branch --show-current)" in development|release/v*) ;; *) echo "Releases must be prepared on development or a release/v<version> branch"; exit 1;; esac
14 @if [ -n "$$(git status --short --untracked-files=all)" ]; then echo "Working tree must be clean before running a release"; exit 1; fi
15 @if [ "$(BUMP)" = "custom" ]; then \
16 cargo workspaces version custom "$(VERSION)" --yes --no-git-commit --force "*"; \
17 else \
18 cargo workspaces version "$(BUMP)" --yes --no-git-commit --force "*"; \
19 fi
20 @$(MAKE) sync-release-metadata
21 @$(MAKE) regenerate-release-lockfiles
22 @$(MAKE) check-release-versions
23 @release_version=$$(sed -n 's/^version = "\(.*\)"/\1/p' crates/cli/Cargo.toml | head -n 1); \
24 if [ -z "$$release_version" ]; then echo "Unable to determine release version from crates/cli/Cargo.toml"; exit 1; fi; \
25 release_branch=$$(git branch --show-current); \
26 git add -A; \
27 git commit -m "Release $$release_version"; \
28 if [ "$$release_branch" = "development" ]; then \
29 git tag "v$$release_version"; \
30 echo "Release $$release_version prepared locally."; \
31 echo "Next: git push origin development && git push origin v$$release_version"; \
32 else \
33 echo "Release $$release_version prepared on $$release_branch (not tagged)."; \
34 echo "The tag belongs on development, on the merge commit."; \
35 echo "Next: git push origin $$release_branch"; \
36 echo " CI green: git checkout development && git merge --no-ff $$release_branch"; \
37 echo " then: git tag v$$release_version && git push origin development && git push origin v$$release_version"; \
38 fi
39
40 sync-release-metadata:
41 @node ./scripts/sync-release-version.mjs
42
43 regenerate-release-lockfiles:
44 @# Ruby extension Cargo.lock files resolve crates.io dependencies that are
45 @# published only after this release tag is pushed. The SDK gem workflow waits
46 @# for those crates and resolves them during its build, so do not attempt to
47 @# regenerate the locks while preparing the tag locally.
48 @BUNDLE_GEMFILE=sdk/gems/auth/Gemfile bundle lock
49 @BUNDLE_GEMFILE=sdk/gems/email/Gemfile bundle lock
50 @BUNDLE_GEMFILE=sdk/gems/model/Gemfile bundle lock
51
52 check-release-versions:
53 @node ./scripts/check-release-versions.mjs
54
55 patch:
56 @$(MAKE) release BUMP=patch
57
58 minor:
59 @$(MAKE) release BUMP=minor
60
61 major:
62 @$(MAKE) release BUMP=major
63
64 custom:
65 @$(MAKE) release BUMP=custom VERSION="$(VERSION)"