1+ #! /bin/bash
2+ # Publish Verifiable OKF packages to npm
3+ # Usage:
4+ # ./scripts/publish-npm.sh [version]
5+ #
6+ # version: patch (default) | minor | major | specific version (e.g. 0.1.1)
7+ #
8+ # Publish order (dependency graph): canon → signer → verifier → visualizer → attest-zk-groth16
9+
10+ set -e
11+
12+ ALL_PACKAGES=(" canon" " signer" " verifier" " visualizer" " attest-zk-groth16" )
13+ NPM_SCOPE=" @verifiable-okf"
14+
15+ VERSION=" ${1:- patch} "
16+
17+ echo " 🚀 Publishing $NPM_SCOPE /* to npm"
18+ echo " Version: $VERSION "
19+
20+ # Check npm login
21+ if ! npm whoami & > /dev/null; then
22+ echo " ❌ Not logged into npm. Run 'npm login' first."
23+ exit 1
24+ fi
25+
26+ # Must run from repo root
27+ if [ ! -f " package.json" ]; then
28+ echo " ❌ Run from repository root"
29+ exit 1
30+ fi
31+
32+ # Build all packages
33+ echo " 📦 Building all packages..."
34+ pnpm -F " ./packages/*" build
35+
36+ # ── canon (leaf — no workspace deps) ──
37+ publish_canon () {
38+ cd packages/canon
39+ npm version " $VERSION " --no-git-tag-version
40+ local ver=$( node -p " require('./package.json').version" )
41+ echo " 🚀 Publishing $NPM_SCOPE /canon@$ver ..."
42+ npm publish --access public
43+ cd ../..
44+ echo " ✅ $NPM_SCOPE /canon@$ver "
45+ }
46+
47+ # ── signer (depends on canon) ──
48+ publish_signer () {
49+ cd packages/signer
50+ npm version " $VERSION " --no-git-tag-version
51+ cp package.json package.json.backup
52+
53+ local canon_ver=$( node -p " require('../canon/package.json').version" )
54+ node -e "
55+ const pkg = require('./package.json');
56+ pkg.dependencies['$NPM_SCOPE /canon'] = '^${canon_ver} ';
57+ require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');
58+ "
59+ local ver=$( node -p " require('./package.json').version" )
60+ echo " 🚀 Publishing $NPM_SCOPE /signer@$ver (canon: ^$canon_ver )..."
61+ npm publish --access public
62+ mv package.json.backup package.json
63+ cd ../..
64+ echo " ✅ $NPM_SCOPE /signer@$ver "
65+ }
66+
67+ # ── verifier (depends on canon) ──
68+ publish_verifier () {
69+ cd packages/verifier
70+ npm version " $VERSION " --no-git-tag-version
71+ cp package.json package.json.backup
72+
73+ local canon_ver=$( node -p " require('../canon/package.json').version" )
74+ node -e "
75+ const pkg = require('./package.json');
76+ pkg.dependencies['$NPM_SCOPE /canon'] = '^${canon_ver} ';
77+ require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');
78+ "
79+ local ver=$( node -p " require('./package.json').version" )
80+ echo " 🚀 Publishing $NPM_SCOPE /verifier@$ver (canon: ^$canon_ver )..."
81+ npm publish --access public
82+ mv package.json.backup package.json
83+ cd ../..
84+ echo " ✅ $NPM_SCOPE /verifier@$ver "
85+ }
86+
87+ # ── visualizer (depends on canon + verifier) ──
88+ publish_visualizer () {
89+ cd packages/visualizer
90+ npm version " $VERSION " --no-git-tag-version
91+ cp package.json package.json.backup
92+
93+ local canon_ver=$( node -p " require('../canon/package.json').version" )
94+ local verifier_ver=$( node -p " require('../verifier/package.json').version" )
95+ node -e "
96+ const pkg = require('./package.json');
97+ pkg.dependencies['$NPM_SCOPE /canon'] = '^${canon_ver} ';
98+ pkg.dependencies['$NPM_SCOPE /verifier'] = '^${verifier_ver} ';
99+ require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');
100+ "
101+ local ver=$( node -p " require('./package.json').version" )
102+ echo " 🚀 Publishing $NPM_SCOPE /visualizer@$ver (canon: ^$canon_ver , verifier: ^$verifier_ver )..."
103+ npm publish --access public
104+ mv package.json.backup package.json
105+ cd ../..
106+ echo " ✅ $NPM_SCOPE /visualizer@$ver "
107+ }
108+
109+ # ── attest-zk-groth16 (leaf — only external @lemmaoracle/sdk dep) ──
110+ publish_attest () {
111+ cd packages/attest-zk-groth16
112+ npm version " $VERSION " --no-git-tag-version
113+ local ver=$( node -p " require('./package.json').version" )
114+ echo " 🚀 Publishing $NPM_SCOPE /attest-zk-groth16@$ver ..."
115+ npm publish --access public
116+ cd ../..
117+ echo " ✅ $NPM_SCOPE /attest-zk-groth16@$ver "
118+ }
119+
120+ # ── Execute in dependency order ──
121+ publish_canon
122+ publish_signer
123+ publish_verifier
124+ publish_visualizer
125+ publish_attest
126+
127+ echo " "
128+ echo " 📋 Published:"
129+ for pkg in " ${ALL_PACKAGES[@]} " ; do
130+ local_ver=$( node -p " require('./packages/$pkg /package.json').version" )
131+ echo " - $NPM_SCOPE /$pkg @$local_ver "
132+ done
133+ echo " "
134+ echo " ⚠️ Version bumps applied to all package.json files."
135+ echo " Commit them after verifying: git diff packages/*/package.json"
136+ echo " ✅ Done!"
0 commit comments