Skip to content

Commit 7582277

Browse files
committed
fix(ci): automate version sync across all packages on release
1 parent 98b83a0 commit 7582277

4 files changed

Lines changed: 45 additions & 12 deletions

File tree

.github/workflows/semantic-release.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ jobs:
3333

3434
- name: Release
3535
env:
36-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37-
# NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # uncomment when ready to publish to npm
36+
# GH_TOKEN must be a PAT with repo + workflow scopes so @semantic-release/git
37+
# can push the version bump commit back to the protected main branch.
38+
# Create at: github.com/settings/tokens → Classic → repo + workflow scopes
39+
# Add as secret: github.com/RustMunkey/maschina/settings/secrets/actions
40+
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
3841
run: pnpm exec semantic-release

.releaserc.json

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
{ "type": "chore", "release": false },
1515
{ "type": "ci", "release": false },
1616
{ "type": "test", "release": false },
17-
{ "type": "release", "release": "major" },
18-
{ "breaking": true, "release": "minor" }
17+
{ "breaking": true, "release": "major" }
1918
]
2019
}
2120
],
@@ -33,18 +32,24 @@
3332
}
3433
}
3534
],
35+
["@semantic-release/changelog", { "changelogFile": "CHANGELOG.md" }],
3636
[
37-
"@semantic-release/changelog",
38-
{
39-
"changelogFile": "CHANGELOG.md"
40-
}
37+
"@semantic-release/exec",
38+
{ "prepareCmd": "bash scripts/sync-versions.sh ${nextRelease.version}" }
4139
],
4240
[
43-
"@semantic-release/github",
41+
"@semantic-release/git",
4442
{
45-
"successComment": false,
46-
"failComment": false
43+
"assets": [
44+
"CHANGELOG.md",
45+
"package.json",
46+
"packages/*/package.json",
47+
"services/*/package.json",
48+
"apps/*/package.json"
49+
],
50+
"message": "chore(release): ${nextRelease.version} [skip ci]"
4751
}
48-
]
52+
],
53+
["@semantic-release/github", { "successComment": false, "failComment": false }]
4954
]
5055
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@
187187
"@discordjs/rest": "^2.6.1",
188188
"@irys/sdk": "^0.2.11",
189189
"@semantic-release/changelog": "^6",
190+
"@semantic-release/exec": "^6",
191+
"@semantic-release/git": "^10",
190192
"@semantic-release/github": "^10",
191193
"@types/node": "^22",
192194
"@vitest/coverage-v8": "^4.0.18",

scripts/sync-versions.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
# sync-versions.sh <version>
3+
# Updates every package.json version field in the monorepo.
4+
# Called by semantic-release via @semantic-release/exec.
5+
set -euo pipefail
6+
7+
VERSION="${1:?version argument required}"
8+
9+
echo "Syncing all package versions to $VERSION..."
10+
11+
find . -name "package.json" \
12+
-not -path "*/node_modules/*" \
13+
-not -path "*/.git/*" \
14+
-not -path "*/target/*" \
15+
| while read -r file; do
16+
if jq -e '.version' "$file" > /dev/null 2>&1; then
17+
tmp=$(mktemp)
18+
jq --arg v "$VERSION" '.version = $v' "$file" > "$tmp" && mv "$tmp" "$file"
19+
echo " $file$VERSION"
20+
fi
21+
done
22+
23+
echo "Done."

0 commit comments

Comments
 (0)