diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 00ee390e..743bf57a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,7 @@ on: - "v*" jobs: - build: + release: runs-on: ubuntu-latest permissions: contents: read @@ -15,19 +15,23 @@ jobs: with: node-version: "20.x" registry-url: "https://registry.npmjs.org" - - name: Build - run: | - npm install - npm run build:docs & npm run build:lib + + - name: Install dependencies + run: npm install + + - name: Build docs and library + run: npm run build:docs & npm run build:lib + + - name: Prune package.json + run: node scripts/build-package.js + - name: Publish package (stable) if: ${{ ! contains(github.ref, '-next') }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} - - # Currently, only npm supports publishing packages with provenance - # https://docs.npmjs.com/generating-provenance-statements run: | npm publish --provenance --access public + - name: Publish package (next) if: ${{ contains(github.ref, '-next') }} env: diff --git a/scripts/build-package.js b/scripts/build-package.js new file mode 100644 index 00000000..820b3de5 --- /dev/null +++ b/scripts/build-package.js @@ -0,0 +1,26 @@ +const fs = require("node:fs"); +const path = require("node:path"); + +const packagePath = path.join(process.cwd(), "package.json"); +const package = JSON.parse(fs.readFileSync(packagePath, "utf8")); + +const keys_to_remove = ["prettier", "standard-version", "devDependencies"]; +const scripts_to_keep = ["postinstall"]; + +for (const key of keys_to_remove) { + delete package[key]; +} + +if (package.scripts) { + const preserved_scripts = {}; + + for (const script of scripts_to_keep) { + if (package.scripts[script]) { + preserved_scripts[script] = package.scripts[script]; + } + } + + package.scripts = preserved_scripts; +} + +fs.writeFileSync(packagePath, JSON.stringify(package, null, 2) + "\n");