1919 type : boolean
2020 required : true
2121 default : false
22+ npm :
23+ description : " Publish NPM packages"
24+ type : boolean
25+ required : true
26+ default : false
2227 release :
2328 description : " Create GitHub release and publish Docker images"
2429 type : boolean
@@ -31,9 +36,11 @@ concurrency:
3136
3237env :
3338 GO_VERSION : " 1.22.x"
39+ PNPM_VERSION : " 9.4.x"
3440
3541jobs :
3642 # Run tests
43+ # TODO(joshuasing): run PoP Miner / NPM package tests once added
3744 test :
3845 name : " Test"
3946 uses : ./.github/workflows/go.yml
@@ -97,15 +104,15 @@ jobs:
97104 check-latest : true
98105
99106 - name : " Download and verify dependencies"
100- run : make deps
107+ run : make GOCACHE="$(go env GOCACHE)" go- deps
101108
102109 - name : " Create binary archive for ${{ matrix.goos }}/${{ matrix.goarch }}"
103110 env :
104111 GOOS : " ${{ matrix.goos }}"
105112 GOARCH : " ${{ matrix.goarch }}"
106113 CGO_ENABLED : 0 # Disable CGO.
107114 GOGC : off # Disable GC during build, faster but uses more RAM.
108- run : make archive
115+ run : make GOCACHE="$(go env GOCACHE)" archive
109116
110117 - name : " Upload artifacts"
111118 uses : actions/upload-artifact@v4
@@ -181,11 +188,81 @@ jobs:
181188 ghcr.io/hemilabs/${{ matrix.service }}:latest
182189 ghcr.io/hemilabs/${{ matrix.service }}:${{ needs.prepare.outputs.tag }}
183190
191+ # Publish NPM packages
192+ npm :
193+ name : " npm"
194+ runs-on : " ubuntu-latest"
195+ if : github.event_name == 'push' || inputs.npm
196+ needs : [ "prepare" ]
197+ permissions :
198+ contents : read
199+ steps :
200+ - name : " Checkout repository"
201+ uses : actions/checkout@v4
202+
203+ - name : " Setup Go ${{ env.GO_VERSION }}"
204+ uses : actions/setup-go@v5
205+ with :
206+ go-version : " ${{ env.GO_VERSION }}"
207+ cache : true
208+ check-latest : true
209+
210+ - name : " Setup pnpm ${{ env.PNPM_VERSION }}"
211+ uses : pnpm/action-setup@v4
212+ with :
213+ version : " ${{ env.PNPM_VERSION }}"
214+
215+ - name : " Setup Node"
216+ uses : actions/setup-node@v4
217+ with :
218+ node-version-file : " web/.nvmrc"
219+ check-latest : true
220+ cache : " pnpm"
221+ cache-dependency-path : " web/**/pnpm-lock.yaml"
222+ registry-url : " https://registry.npmjs.org"
223+
224+ - name : " Install dependencies"
225+ working-directory : " web/"
226+ run : pnpm install --frozen-lockfile
227+
228+ - name : " Install Go dependencies"
229+ working-directory : " web/"
230+ run : make deps
231+
232+ - name : " Set package.json versions"
233+ working-directory : " web/"
234+ env :
235+ VERSION : " ${{ needs.prepare.outputs.version }}"
236+ run : |
237+ # Prints all package.json files
238+ PACKAGE_FILES=$(find . -path '**/node_modules' -prune -o -name 'package.json' -print)
239+ for file in $PACKAGE_FILES; do
240+ # Set "version" in package.json file to $VERSION.
241+ TMP_FILE="$(mktemp)"
242+ jq --arg v "$VERSION" '.version = $v' "$file" > "$TMP_FILE"
243+ mv "$TMP_FILE" "$file"
244+ done
245+
246+ # TODO(joshuasing): Install and use binaryen
247+ - name : " Build @hemilabs/pop-miner WebAssembly binary"
248+ working-directory : " web/"
249+ run : make wasm
250+
251+ - name : " Build @hemilabs/pop-miner package"
252+ working-directory : " web/"
253+ run : pnpm build:pop-miner
254+
255+ - name : " Publish @hemilabs/pop-miner package"
256+ working-directory : " web/"
257+ run : pnpm publish packages/pop-miner --access public --no-git-checks
258+ env :
259+ NODE_AUTH_TOKEN : " ${{ secrets.NPM_TOKEN }}"
260+
184261 # Create GitHub Release
185262 release :
186263 name : " Release"
187264 runs-on : " ubuntu-latest"
188- needs : [ "prepare", "build", "docker" ]
265+ needs : [ "prepare", "build", "docker", "npm" ]
189266 permissions :
190267 # Permission to write contents is required to create GitHub releases.
191268 # Builds are performed in a separate job with more restrictive permissions
0 commit comments