Skip to content

Commit d0e141c

Browse files
abueideclaude
andauthored
fix(release): fix CWD issue and add beta pre-release workflow (#1135)
* fix(release): ignore shells directory in multi-semantic-release Add --ignore-packages shells flag to prevent multi-semantic-release from treating the shells/ directory as a package to be released. The shells/ directory contains devbox environment configurations (devbox.json files), not npm packages, so it should be excluded from the release process. Multi-semantic-release aggressively scans all directories for potential packages, not just those in the workspaces field. When it encounters shells/, it expects a package.json and fails with ENOENT. Changes: - Add --ignore-packages shells to release script in package.json - Add --ignore-packages shells to both release and release-dry-run scripts in shells/devbox-fast.json This fixes the release dry-run workflow failure. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix(release): fix CWD issue and add beta pre-release workflow The multi-semantic-release ENOENT error was caused by devbox running scripts from the shells/ directory. Added cd "$PROJECT_ROOT" to ensure release commands run from the monorepo root. Removed the unnecessary --ignore-packages shells flag since the CWD fix is the real solution. Added release-beta.yml workflow that triggers on push to the beta branch and publishes pre-release versions with the @beta npm dist-tag. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 21b7d74 commit d0e141c

4 files changed

Lines changed: 206 additions & 31 deletions

File tree

.github/workflows/release-beta.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: Release Beta (Pre-release)
2+
3+
on:
4+
workflow_dispatch:
5+
6+
concurrency:
7+
group: release-beta
8+
cancel-in-progress: true
9+
10+
jobs:
11+
fast-checks:
12+
name: Build + Lint
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
- name: devbox installer
17+
uses: jetify-com/devbox-install-action@v0.14.0
18+
with:
19+
project-path: shells/devbox-fast.json
20+
enable-cache: 'false'
21+
- name: build
22+
run: devbox run --config=shells/devbox-fast.json build
23+
24+
publish-beta:
25+
name: Publish Beta to npm
26+
environment: Publish
27+
needs: [fast-checks]
28+
runs-on: ubuntu-latest
29+
permissions:
30+
contents: write
31+
issues: write
32+
pull-requests: write
33+
steps:
34+
- uses: actions/checkout@v4
35+
with:
36+
fetch-depth: 0
37+
token: ${{ secrets.GH_TOKEN }}
38+
39+
- name: Point beta branch at current commit
40+
run: |
41+
git checkout -B beta HEAD
42+
git push origin beta --force
43+
44+
- name: devbox installer
45+
uses: jetify-com/devbox-install-action@v0.14.0
46+
with:
47+
project-path: shells/devbox-fast.json
48+
enable-cache: 'false'
49+
50+
- name: Config, Build, Release (BETA)
51+
run: |
52+
echo "Publishing beta pre-release from $(git rev-parse --short HEAD) to npm @beta dist-tag"
53+
devbox run --config=shells/devbox-fast.json release
54+
env:
55+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
56+
GH_TOKEN: ${{ secrets.GH_TOKEN }}
57+
YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"lint": "eslint .",
2323
"format": "treefmt --clear-cache",
2424
"format:check": "treefmt --clear-cache --fail-on-change",
25-
"release": "yarn multi-semantic-release --ignore-packages shells"
25+
"release": "yarn multi-semantic-release"
2626
},
2727
"devDependencies": {
2828
"@anolilab/multi-semantic-release": "^1.0.3",

shells/devbox-fast.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@
1212
"scripts": {
1313
"build": ["bash $SCRIPTS_DIR/build.sh"],
1414
"release": [
15+
"cd \"$PROJECT_ROOT\"",
1516
"npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}",
1617
"yarn install --immutable",
1718
"yarn build",
18-
"yarn multi-semantic-release --ignore-packages shells"
19+
"yarn multi-semantic-release"
1920
],
2021
"release-dry-run": [
22+
"cd \"$PROJECT_ROOT\"",
2123
"yarn install --immutable",
2224
"yarn build",
23-
"yarn multi-semantic-release --dry-run --ignore-packages shells"
25+
"yarn multi-semantic-release --dry-run"
2426
],
2527
"format": ["treefmt"],
2628
"lint": ["treefmt --fail-on-change"],

shells/devbox.lock

Lines changed: 144 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,6 @@
11
{
22
"lockfile_version": "1",
33
"packages": {
4-
"cocoapods@latest": {
5-
"last_modified": "2025-12-31T03:27:36Z",
6-
"resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#cocoapods",
7-
"source": "devbox-search",
8-
"version": "1.16.2",
9-
"systems": {
10-
"aarch64-darwin": {
11-
"outputs": [
12-
{
13-
"name": "out",
14-
"path": "/nix/store/av5g6hfp0yiir3iavg72js70ian8hxyf-cocoapods-1.16.2",
15-
"default": true
16-
}
17-
],
18-
"store_path": "/nix/store/av5g6hfp0yiir3iavg72js70ian8hxyf-cocoapods-1.16.2"
19-
},
20-
"x86_64-darwin": {
21-
"outputs": [
22-
{
23-
"name": "out",
24-
"path": "/nix/store/har71589bwmh6h6skisd20b3c6lrwmz7-cocoapods-1.16.2",
25-
"default": true
26-
}
27-
],
28-
"store_path": "/nix/store/har71589bwmh6h6skisd20b3c6lrwmz7-cocoapods-1.16.2"
29-
}
30-
}
31-
},
324
"github:NixOS/nixpkgs/nixpkgs-unstable": {
335
"last_modified": "2026-01-27T15:18:14Z",
346
"resolved": "github:NixOS/nixpkgs/afce96367b2e37fc29afb5543573cd49db3357b7?lastModified=1769527094"
@@ -149,6 +121,150 @@
149121
}
150122
}
151123
},
124+
"nixfmt@latest": {
125+
"last_modified": "2026-02-23T15:40:43Z",
126+
"resolved": "github:NixOS/nixpkgs/80d901ec0377e19ac3f7bb8c035201e2e098cc97#nixfmt",
127+
"source": "devbox-search",
128+
"version": "1.2.0",
129+
"systems": {
130+
"aarch64-darwin": {
131+
"outputs": [
132+
{
133+
"name": "out",
134+
"path": "/nix/store/igl44md7ljf5c3hx6s6ys6325fkpldny-nixfmt-1.2.0",
135+
"default": true
136+
}
137+
],
138+
"store_path": "/nix/store/igl44md7ljf5c3hx6s6ys6325fkpldny-nixfmt-1.2.0"
139+
},
140+
"aarch64-linux": {
141+
"outputs": [
142+
{
143+
"name": "out",
144+
"path": "/nix/store/s250gfxr6v1bmxdx9l8z4sn5fjf2bllb-nixfmt-1.2.0",
145+
"default": true
146+
}
147+
],
148+
"store_path": "/nix/store/s250gfxr6v1bmxdx9l8z4sn5fjf2bllb-nixfmt-1.2.0"
149+
},
150+
"x86_64-darwin": {
151+
"outputs": [
152+
{
153+
"name": "out",
154+
"path": "/nix/store/jb1qw3g5hcslahl02v7mjaixwfw725g8-nixfmt-1.2.0",
155+
"default": true
156+
}
157+
],
158+
"store_path": "/nix/store/jb1qw3g5hcslahl02v7mjaixwfw725g8-nixfmt-1.2.0"
159+
},
160+
"x86_64-linux": {
161+
"outputs": [
162+
{
163+
"name": "out",
164+
"path": "/nix/store/ihzhi2cgjfhvqbap36fx91hbj524ym5l-nixfmt-1.2.0",
165+
"default": true
166+
}
167+
],
168+
"store_path": "/nix/store/ihzhi2cgjfhvqbap36fx91hbj524ym5l-nixfmt-1.2.0"
169+
}
170+
}
171+
},
172+
"shfmt@latest": {
173+
"last_modified": "2026-02-23T15:40:43Z",
174+
"resolved": "github:NixOS/nixpkgs/80d901ec0377e19ac3f7bb8c035201e2e098cc97#shfmt",
175+
"source": "devbox-search",
176+
"version": "3.12.0",
177+
"systems": {
178+
"aarch64-darwin": {
179+
"outputs": [
180+
{
181+
"name": "out",
182+
"path": "/nix/store/sc8kb91395fw69qcmij89m3bxdmj8gwb-shfmt-3.12.0",
183+
"default": true
184+
}
185+
],
186+
"store_path": "/nix/store/sc8kb91395fw69qcmij89m3bxdmj8gwb-shfmt-3.12.0"
187+
},
188+
"aarch64-linux": {
189+
"outputs": [
190+
{
191+
"name": "out",
192+
"path": "/nix/store/a80kl3brskqmq8k861x8hjwnlw94kyfn-shfmt-3.12.0",
193+
"default": true
194+
}
195+
],
196+
"store_path": "/nix/store/a80kl3brskqmq8k861x8hjwnlw94kyfn-shfmt-3.12.0"
197+
},
198+
"x86_64-darwin": {
199+
"outputs": [
200+
{
201+
"name": "out",
202+
"path": "/nix/store/hax40r2y50jv8z0rlryfc11gvnhfx7hz-shfmt-3.12.0",
203+
"default": true
204+
}
205+
],
206+
"store_path": "/nix/store/hax40r2y50jv8z0rlryfc11gvnhfx7hz-shfmt-3.12.0"
207+
},
208+
"x86_64-linux": {
209+
"outputs": [
210+
{
211+
"name": "out",
212+
"path": "/nix/store/822axjnnxnscgxwval6lrc1bp5q4n9li-shfmt-3.12.0",
213+
"default": true
214+
}
215+
],
216+
"store_path": "/nix/store/822axjnnxnscgxwval6lrc1bp5q4n9li-shfmt-3.12.0"
217+
}
218+
}
219+
},
220+
"treefmt@latest": {
221+
"last_modified": "2026-02-23T15:40:43Z",
222+
"resolved": "github:NixOS/nixpkgs/80d901ec0377e19ac3f7bb8c035201e2e098cc97#treefmt",
223+
"source": "devbox-search",
224+
"version": "2.4.0",
225+
"systems": {
226+
"aarch64-darwin": {
227+
"outputs": [
228+
{
229+
"name": "out",
230+
"path": "/nix/store/gza41a4j5hypl5vl6f7x5s0xgnx0g06h-treefmt-2.4.0",
231+
"default": true
232+
}
233+
],
234+
"store_path": "/nix/store/gza41a4j5hypl5vl6f7x5s0xgnx0g06h-treefmt-2.4.0"
235+
},
236+
"aarch64-linux": {
237+
"outputs": [
238+
{
239+
"name": "out",
240+
"path": "/nix/store/rz6d1w4a8gkkrd9gk4nfadskzyz75h4v-treefmt-2.4.0",
241+
"default": true
242+
}
243+
],
244+
"store_path": "/nix/store/rz6d1w4a8gkkrd9gk4nfadskzyz75h4v-treefmt-2.4.0"
245+
},
246+
"x86_64-darwin": {
247+
"outputs": [
248+
{
249+
"name": "out",
250+
"path": "/nix/store/h7xb3dssb16yny6wg713w78lawivzjay-treefmt-2.4.0",
251+
"default": true
252+
}
253+
],
254+
"store_path": "/nix/store/h7xb3dssb16yny6wg713w78lawivzjay-treefmt-2.4.0"
255+
},
256+
"x86_64-linux": {
257+
"outputs": [
258+
{
259+
"name": "out",
260+
"path": "/nix/store/vp95nd69hq59rqpdlgrg63wncy4yw8fd-treefmt-2.4.0",
261+
"default": true
262+
}
263+
],
264+
"store_path": "/nix/store/vp95nd69hq59rqpdlgrg63wncy4yw8fd-treefmt-2.4.0"
265+
}
266+
}
267+
},
152268
"yarn-berry@latest": {
153269
"last_modified": "2025-12-31T03:27:36Z",
154270
"resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#yarn-berry",

0 commit comments

Comments
 (0)