Skip to content

Commit 9d896f3

Browse files
committed
feat(ci): auto-update socketbin versions in provenance workflow
Add script to query npm registry for latest @socketbin/* package versions and update socket package.json optionalDependencies before publishing. This ensures the published socket package always references the most recent socketbin binary packages instead of placeholder versions. Changes: - Add scripts/update-socketbin-versions.mjs to query npm for latest versions - Update provenance.yml to run version update before preparing package - Queries all @socketbin/* packages and pins to latest published versions
1 parent be7e6ae commit 9d896f3

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

.github/workflows/provenance.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ jobs:
5252
- run: pnpm install
5353

5454
# Build and publish 'socket' package (default).
55+
- name: Update socketbin versions in socket package
56+
run: node scripts/update-socketbin-versions.mjs
5557
- name: Prepare socket package for publishing
5658
run: |
5759
SOCKET_VERSION=$(node -p "require('./packages/socket/package.json').version")
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/usr/bin/env node
2+
/**
3+
* @fileoverview Update optionalDependencies in socket package.json with latest @socketbin/* versions from npm.
4+
*/
5+
6+
import { readFileSync, writeFileSync } from 'node:fs'
7+
import { resolve } from 'node:path'
8+
import { execSync } from 'node:child_process'
9+
10+
const SOCKET_PKG_PATH = resolve('packages/socket/package.json')
11+
12+
async function getLatestVersion(packageName) {
13+
try {
14+
const result = execSync(`npm view ${packageName} version`, {
15+
encoding: 'utf-8',
16+
stdio: ['pipe', 'pipe', 'pipe'],
17+
})
18+
return result.trim()
19+
} catch (error) {
20+
console.error(`Failed to get version for ${packageName}:`, error.message)
21+
return null
22+
}
23+
}
24+
25+
async function main() {
26+
console.log('📦 Updating @socketbin/* versions in socket package.json...\n')
27+
28+
// Read package.json.
29+
const pkg = JSON.parse(readFileSync(SOCKET_PKG_PATH, 'utf-8'))
30+
31+
if (!pkg.optionalDependencies) {
32+
console.error('❌ No optionalDependencies found in socket package.json')
33+
process.exit(1)
34+
}
35+
36+
// Get all @socketbin/* packages.
37+
const socketbinPackages = Object.keys(pkg.optionalDependencies).filter(name =>
38+
name.startsWith('@socketbin/'),
39+
)
40+
41+
if (!socketbinPackages.length) {
42+
console.error('❌ No @socketbin/* packages found in optionalDependencies')
43+
process.exit(1)
44+
}
45+
46+
console.log(
47+
`Found ${socketbinPackages.length} @socketbin/* packages to update:\n`,
48+
)
49+
50+
// Update each package to latest version.
51+
const updates = []
52+
for (const packageName of socketbinPackages) {
53+
const currentVersion = pkg.optionalDependencies[packageName]
54+
const latestVersion = await getLatestVersion(packageName)
55+
56+
if (!latestVersion) {
57+
console.error(`❌ Failed to get latest version for ${packageName}`)
58+
process.exit(1)
59+
}
60+
61+
updates.push({
62+
name: packageName,
63+
old: currentVersion,
64+
new: latestVersion,
65+
})
66+
67+
pkg.optionalDependencies[packageName] = latestVersion
68+
console.log(
69+
` ${packageName}: ${currentVersion}${latestVersion}`,
70+
)
71+
}
72+
73+
// Write updated package.json.
74+
writeFileSync(SOCKET_PKG_PATH, `${JSON.stringify(pkg, null, 2)}\n`)
75+
76+
console.log(`\n✓ Updated ${updates.length} package versions`)
77+
console.log(`✓ Wrote changes to ${SOCKET_PKG_PATH}`)
78+
}
79+
80+
main().catch(error => {
81+
console.error('Error:', error)
82+
process.exit(1)
83+
})

0 commit comments

Comments
 (0)