bod-cli 0.10.4 → 0.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -39,10 +39,23 @@ jobs:
|
|
|
39
39
|
git add package.json
|
|
40
40
|
git commit -m "chore: release v${VERSION} [skip ci]"
|
|
41
41
|
|
|
42
|
+
- name: Pull NPM_TOKEN from bodify secrets store
|
|
43
|
+
# The npm token is NOT a per-repo secret — a repo-scoped NPM_TOKEN goes stale silently and every
|
|
44
|
+
# publish then dies on a 404. Pull the canonical token from bodify at publish time, so rotating it
|
|
45
|
+
# in ONE place fixes every repo. Only GitHub secret needed: BODIFY_API_KEY.
|
|
46
|
+
env:
|
|
47
|
+
BODIFY_API_KEY: ${{ secrets.BODIFY_API_KEY }}
|
|
48
|
+
run: |
|
|
49
|
+
TOKEN=$(curl -fsS -H "Authorization: Bearer $BODIFY_API_KEY" \
|
|
50
|
+
"https://bodify.bod.ee/api/apps/9ddba0fb-03bc-4490-8577-5e094b5b6792/env/NPM_TOKEN?environment=prod" \
|
|
51
|
+
| jq -r '.value')
|
|
52
|
+
[ -n "$TOKEN" ] && [ "$TOKEN" != "null" ] || { echo "::error::could not fetch NPM_TOKEN from bodify"; exit 1; }
|
|
53
|
+
echo "::add-mask::$TOKEN"
|
|
54
|
+
echo "NODE_AUTH_TOKEN=$TOKEN" >> "$GITHUB_ENV"
|
|
42
55
|
- name: Publish to npm
|
|
43
56
|
run: npm publish --access public
|
|
44
57
|
env:
|
|
45
|
-
NODE_AUTH_TOKEN: ${{
|
|
58
|
+
NODE_AUTH_TOKEN: ${{ env.NODE_AUTH_TOKEN }}
|
|
46
59
|
|
|
47
60
|
- name: Push tag
|
|
48
61
|
run: |
|
package/package.json
CHANGED
package/src/utils/excludes.ts
CHANGED
|
@@ -47,8 +47,12 @@ export const DEFAULT_EXCLUDES: { pattern: string; why: string }[] = [
|
|
|
47
47
|
{ pattern: '.tmp', why: 'repo-wide scratch convention — never runtime input' },
|
|
48
48
|
{ pattern: 'scratchpad', why: 'agent scratch dir, same class as .tmp' },
|
|
49
49
|
{ pattern: '.bodify', why: 'local `bod serve` state / dev database' },
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
// Enumerating these by hand is what failed: `.mcp-android`/`.mcp-ios` were listed
|
|
51
|
+
// while `.mcp-playwright/profile` (41.8MB) and `.mcp-cursor/cache` (7.3MB) sailed
|
|
52
|
+
// through on para-li. The family is the unit, not each member. Still a BARE
|
|
53
|
+
// pattern (no leading `*/`), so it matches at top level too — pinned by test.
|
|
54
|
+
{ pattern: '.mcp-*', why: 'local MCP tool state (android/ios/playwright/cursor/…)' },
|
|
55
|
+
{ pattern: '.bodify-bak*', why: 'local `bod serve` db backups — same class as .bodify' },
|
|
52
56
|
{ pattern: '.frame-dev', why: 'frame dev-server cache' },
|
|
53
57
|
{ pattern: '.DS_Store', why: 'macOS Finder metadata' },
|
|
54
58
|
]
|
package/test/excludes.test.ts
CHANGED
|
@@ -28,6 +28,9 @@ beforeAll(() => {
|
|
|
28
28
|
f('packages/x/.agent/state.json')
|
|
29
29
|
f('.claude/settings.json'); f('.cursor/rules'); f('.tmp/junk'); f('scratchpad/note')
|
|
30
30
|
f('.bodify/dev.db'); f('.mcp-ios/x'); f('.mcp-android/x'); f('.vscode/settings.json')
|
|
31
|
+
// the family members hand-enumeration missed on para-li (41.8MB + 7.3MB)
|
|
32
|
+
f('.mcp-playwright/profile/p.bin'); f('.mcp-cursor/cache/c.bin')
|
|
33
|
+
f('packages/x/.mcp-ios/s.json'); f('.bodify-bak-1/data.db')
|
|
31
34
|
f('.frame-dev/cache'); f('.DS_Store'); f('.env.local', 'SECRET=1')
|
|
32
35
|
// per-app exclusion target
|
|
33
36
|
f('native/App.js')
|
|
@@ -37,6 +40,7 @@ beforeAll(() => {
|
|
|
37
40
|
f('dist/bundle.js', 'built') // re-included via the `!dist` escape hatch
|
|
38
41
|
f('src/store/index.ts') // a real source dir named like a hand-rolled exclude
|
|
39
42
|
f('src/test/unit.ts')
|
|
43
|
+
f('src/mcp-client/keep.ts') // a real source dir the `.mcp-*` family must NOT eat
|
|
40
44
|
})
|
|
41
45
|
afterAll(() => {
|
|
42
46
|
rmSync(FIX, { recursive: true, force: true })
|
|
@@ -97,6 +101,8 @@ describe('the real upload tarball', () => {
|
|
|
97
101
|
'.claude/settings.json', '.cursor/rules', '.tmp/junk', 'scratchpad/note',
|
|
98
102
|
'.bodify/dev.db', '.mcp-ios/x', '.mcp-android/x', '.vscode/settings.json',
|
|
99
103
|
'.frame-dev/cache', '.DS_Store', '.env.local',
|
|
104
|
+
'.mcp-playwright/profile/p.bin', '.mcp-cursor/cache/c.bin',
|
|
105
|
+
'packages/x/.mcp-ios/s.json', '.bodify-bak-1/data.db',
|
|
100
106
|
]) expect(members).not.toContain(gone)
|
|
101
107
|
})
|
|
102
108
|
|
|
@@ -115,6 +121,7 @@ describe('the real upload tarball', () => {
|
|
|
115
121
|
expect(members).toContain('config.generated.json') // untracked-but-needed
|
|
116
122
|
expect(members).toContain('src/store/index.ts')
|
|
117
123
|
expect(members).toContain('src/test/unit.ts')
|
|
124
|
+
expect(members).toContain('src/mcp-client/keep.ts') // `.mcp-*` is dot-anchored, not a substring
|
|
118
125
|
})
|
|
119
126
|
})
|
|
120
127
|
|