Commit b0e0f98

Anton Golub <antongolub@antongolub.com>
2025-08-18 13:05:41
ci: include manifest build tasks into the main flow, attach pkgjsons to upload-artifact (#1322)
* ci: include manifest build tasks into the main flow, attach pkgjsons to upload-artifact * ci: update test wf artifact paths * ci: update pkg scripts tasks
1 parent 51aed2e
.github/workflows/dev-publish.yml
@@ -20,10 +20,6 @@ jobs:
       - run: npm test
         env:
           FORCE_COLOR: 3
-      - run: |
-          npm run build:jsr
-          npm run build:lite
-          npm run build:pkgjson
       - uses: actions/upload-artifact@v4
         with:
           name: build-${{ github.run_id }}
@@ -32,6 +28,7 @@ jobs:
             jsr.json
             package.json
             package-lite.json
+            package-main.json
           retention-days: 1
 
   version:
@@ -84,8 +81,15 @@ jobs:
         with:
           name: build-${{ github.run_id }}
 
+      - name: pushing lite snapshot to ${{ env.GOOGLE_NPM_REGISTRY }}
+        run: |
+          mv -f package-lite.json package.json
+          cat <<< $(jq '.version="${{ env.ZX_LITE_DEV_VERSION }}"' package.json) > package.json
+          npm publish --provenance --access=public --no-git-tag-version --tag dev --registry https://${{ env.GOOGLE_NPM_REGISTRY }}
+
       - name: pushing to ${{ env.GOOGLE_NPM_REGISTRY }}
         run: |
+          mv -f package-main.json package.json
           cat <<< $(jq '.version="${{ env.ZX_DEV_VERSION }}"' package.json) > package.json
           npm publish --provenance --access=public --no-git-tag-version --tag dev --registry https://${{ env.GOOGLE_NPM_REGISTRY }}
 
@@ -94,12 +98,6 @@ jobs:
           cat <<< $(jq '.name="@${{ github.repository }}"' package.json) > package.json
           npm publish --no-git-tag-version --access=public --tag dev --registry https://${{ env.GH_NPM_REGISTRY }}
 
-      - name: pushing lite snapshot to ${{ env.GOOGLE_NPM_REGISTRY }}
-        run: |
-          mv package-lite.json package.json
-          cat <<< $(jq '.version="${{ env.ZX_LITE_DEV_VERSION }}"' package.json) > package.json
-          npm publish --provenance --access=public --no-git-tag-version --tag dev --registry https://${{ env.GOOGLE_NPM_REGISTRY }}
-
   jsr-publish:
     needs: [build, version]
     runs-on: ubuntu-latest
.github/workflows/jsr-publish.yml
@@ -20,7 +20,6 @@ jobs:
       - run: npm test
         env:
           FORCE_COLOR: 3
-      - run: node scripts/build-jsr.mjs
       - uses: actions/upload-artifact@v4
         with:
           name: build-${{ github.run_id }}
.github/workflows/publish.yml
@@ -22,10 +22,6 @@ jobs:
       - run: npm test
         env:
           FORCE_COLOR: 3
-      - run: |
-          npm run build:jsr
-          npm run build:lite
-          npm run build:pkgjson
       - uses: actions/upload-artifact@v4
         with:
           name: build-${{ github.run_id }}
@@ -34,6 +30,7 @@ jobs:
             jsr.json
             package.json
             package-lite.json
+            package-main.json
           retention-days: 1
 
   version:
@@ -82,7 +79,9 @@ jobs:
           name: build-${{ github.run_id }}
 
       - name: pushing to ${{ env.GOOGLE_NPM_REGISTRY }}
-        run: npm publish --provenance --access=public --registry https://${{ env.GOOGLE_NPM_REGISTRY }}
+        run: |
+          mv -f package-main.json package.json
+          npm publish --provenance --access=public --registry https://${{ env.GOOGLE_NPM_REGISTRY }}
 
       - name: pushing to ${{ env.GH_NPM_REGISTRY }}
         run: |
@@ -91,7 +90,7 @@ jobs:
 
       - name: pushing lite snapshot to ${{ env.GOOGLE_NPM_REGISTRY }}
         run: |
-          mv package-lite.json package.json
+          mv -f package-lite.json package.json
           npm publish --provenance --access=public --no-git-tag-version --tag lite --registry https://${{ env.GOOGLE_NPM_REGISTRY }}
 
   jsr-publish:
.github/workflows/test.yml
@@ -32,7 +32,10 @@ jobs:
           name: build
           path: |
             build
+            jsr.json
             package.json
+            package-lite.json
+            package-main.json
           retention-days: 1
 
   checks:
scripts/build-jsr.mjs
@@ -81,3 +81,5 @@ fs.writeFileSync(
     2
   )
 )
+
+console.log('jsr.json prepared for JSR')
scripts/build-lite.mjs → scripts/build-pkgjson-lite.mjs
@@ -88,4 +88,4 @@ const pkgJson = {
 
 fs.writeFileSync('package-lite.json', JSON.stringify(pkgJson, null, 2))
 
-console.log('package-lite.json prepared for zx-lite publishing')
+console.log('package-lite.json prepared for npm')
scripts/build-pkgjson.mjs → scripts/build-pkgjson-main.mjs
@@ -47,6 +47,6 @@ const whitelist = new Set([
 const pkgJson = Object.fromEntries(
   Object.entries(_pkgJson).filter(([k]) => whitelist.has(k))
 )
-fs.writeFileSync(pkgJsonFile, JSON.stringify(pkgJson, null, 2))
+fs.writeFileSync('package-main.json', JSON.stringify(pkgJson, null, 2))
 
-console.log('package.json optimized for npm publishing')
+console.log('package-main.json prepared for npm')
test/it/build-npm.test.js
@@ -46,12 +46,13 @@ describe('npm artifact', () => {
           'build',
           'man',
           'package.json',
+          'package-main.json',
           'README.md',
           'LICENSE',
         ])
 
         // pack / unpack
-        await $`npm run build:pkgjson`
+        await $`mv package-main.json package.json`
         const pack = await $`npm pack`
         await $`tar xf ${pack}`
         await $`rm ${pack}`.nothrow()
@@ -131,16 +132,14 @@ describe('npm artifact', () => {
         await sync(root, tmp, [
           'build',
           'package.json',
+          'package-lite.json',
           'README.md',
           'LICENSE',
           'scripts',
         ])
 
-        // prepare package.json for lite
-        await $`npm run build:lite`
-        await $`mv package-lite.json package.json`
-
         // pack / unpack
+        await $`mv package-lite.json package.json`
         const pack = await $`npm pack`
         await $`tar xf ${pack}`
         await $`rm ${pack}`.nothrow()
.gitignore
@@ -10,3 +10,4 @@ test/fixtures/ts-project/build/
 jsr.json
 .npmrc
 package-lite.json
+package-main.json
package.json
@@ -70,7 +70,7 @@
     "fmt": "prettier --write .",
     "fmt:check": "prettier --check .",
     "prebuild": "rm -rf build",
-    "build": "npm run build:versions && npm run build:js && npm run build:dts && npm run build:tests",
+    "build": "npm run build:versions && npm run build:js && npm run build:dts && npm run build:tests && npm run build:manifest",
     "build:js": "node scripts/build-js.mjs --format=cjs --hybrid --entry='src/{cli,core,deps,globals,index,internals,util,vendor*}.ts' && npm run build:vendor",
     "build:vendor": "node scripts/build-js.mjs --format=cjs --entry=src/vendor-*.ts --bundle=all --external='./internals.ts'",
     "build:versions": "node scripts/build-versions.mjs",
@@ -78,8 +78,9 @@
     "build:dts": "tsc --project tsconfig.json && node scripts/build-dts.mjs",
     "build:dcr": "docker build -f ./dcr/Dockerfile . -t zx",
     "build:jsr": "node scripts/build-jsr.mjs",
-    "build:lite": "node scripts/build-lite.mjs",
-    "build:pkgjson": "node scripts/build-pkgjson.mjs",
+    "build:lite": "node scripts/build-pkgjson-lite.mjs",
+    "build:pkgjson": "node scripts/build-pkgjson-main.mjs",
+    "build:manifest": "npm run build:pkgjson && npm run build:lite && npm run build:jsr",
     "postbuild": "node scripts/build-clean.mjs",
     "docs:dev": "vitepress dev docs",
     "docs:build": "vitepress build docs",