From fb96322afcf44931d53fd59ee605d768b0bd7825 Mon Sep 17 00:00:00 2001 From: Yaacov Rydzinski Date: Fri, 27 Feb 2026 00:02:10 +0200 Subject: [PATCH 1/4] Revert "add changesets to 17.x.x alpha (#4599)" This reverts commit ed7b1b8b352879b846931d0d3ba0b8ba0f71067a. --- .changeset/README.md | 14 - .changeset/config.json | 11 - .changeset/pre.json | 8 - .changeset/wacky-streets-obey.md | 5 - .github/CONTRIBUTING.md | 27 +- .github/workflows/changesets.yml | 45 -- package-lock.json | 1041 +----------------------------- package.json | 4 - resources/release-publish.ts | 30 - resources/utils.ts | 6 - 10 files changed, 27 insertions(+), 1164 deletions(-) delete mode 100644 .changeset/README.md delete mode 100644 .changeset/config.json delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/wacky-streets-obey.md delete mode 100644 .github/workflows/changesets.yml delete mode 100644 resources/release-publish.ts diff --git a/.changeset/README.md b/.changeset/README.md deleted file mode 100644 index 52a3b843cc..0000000000 --- a/.changeset/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Changesets in graphql-js - -This repo uses Changesets to manage version bumps and release PR automation. - -## Contributor flow - -1. Add a changeset file when the PR should affect a published package: - - `npm run changeset` - - Choose `patch`, `minor`, or `major` for `graphql` -2. Commit the generated `.changeset/*.md` file. - -## Release lines - -Changesets automation is currently enabled only on `17.x.x`. diff --git a/.changeset/config.json b/.changeset/config.json deleted file mode 100644 index ef39c3bbf5..0000000000 --- a/.changeset/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", - "changelog": false, - "commit": false, - "fixed": [], - "linked": [], - "access": "public", - "baseBranch": "17.x.x", - "updateInternalDependencies": "patch", - "ignore": [] -} diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index ed233dfbfb..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mode": "pre", - "tag": "alpha", - "initialVersions": { - "graphql": "17.0.0-alpha.10" - }, - "changesets": [] -} diff --git a/.changeset/wacky-streets-obey.md b/.changeset/wacky-streets-obey.md deleted file mode 100644 index 7af41c0618..0000000000 --- a/.changeset/wacky-streets-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'graphql': patch ---- - -Add changesets to 17.x.x alpha diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 170ba32952..5103a3e5c5 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -86,11 +86,28 @@ Feel free to reach out via the [graphql-js channel](https://discord.com/channels ## Release on NPM -Releases are managed by Changesets and GitHub Actions: - -- Contributors add changesets in PRs (`npm run changeset`) for user-facing changes. -- Changesets release automation is currently enabled only on `17.x.x`. -- Merging the release PR triggers publish to NPM. +_Only core contributors may release to NPM._ + +To release a new version on NPM, first ensure all tests pass with `npm test`, +then use `npm version patch|minor|major` in order to increment the version in +package.json and tag and commit a release. Then `git push && git push --tags` +to sync this change with source control. Then `npm publish npmDist` to actually +publish the release to NPM. +Once published, add [release notes](https://github.com/graphql/graphql-js/releases). +Use [semver](https://semver.org/) to determine which version part to increment. + +Example for a patch release: + +```sh +npm ci +npm test +npm version patch --ignore-scripts=false +git push --follow-tags +cd npmDist && npm publish +npm run changelog +``` + +Then upload the changelog to [https://github.com/graphql/graphql-js/releases](https://github.com/graphql/graphql-js/releases). ## License diff --git a/.github/workflows/changesets.yml b/.github/workflows/changesets.yml deleted file mode 100644 index 1d0a3a4c20..0000000000 --- a/.github/workflows/changesets.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Changesets -on: - push: - branches: - - 17.x.x - workflow_dispatch: -permissions: {} -jobs: - release: - name: Create release PR or publish - if: ${{ !github.event.repository.fork && github.ref_name == '17.x.x' }} - runs-on: ubuntu-latest - concurrency: - group: ${{ github.workflow }}-${{ github.ref_name }} - cancel-in-progress: true - permissions: - contents: write # for changesets action to commit/tag - pull-requests: write # for changesets action to create/update release PR - id-token: write # for npm trusted publishing via OIDC - steps: - - name: Checkout repo - uses: actions/checkout@v4 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - cache: npm - node-version-file: '.node-version' - - - name: Install Dependencies - run: npm ci --ignore-scripts - - - name: Run Changesets - uses: changesets/action@v1 - with: - title: 'chore(release): version packages' - commit: 'chore(release): version packages' - version: npm run release:version - publish: npm run release:publish - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_CONFIG_PROVENANCE: true diff --git a/package-lock.json b/package-lock.json index 90193d6c5a..336117c5a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "17.0.0-alpha.10", "license": "MIT", "devDependencies": { - "@changesets/cli": "2.29.8", "@swc/core": "1.15.11", "@types/chai": "5.2.3", "@types/mocha": "10.0.10", @@ -66,7 +65,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -248,16 +246,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -316,297 +304,6 @@ "node": ">=18" } }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", - "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/config": "^3.1.2", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" - } - }, - "node_modules/@changesets/apply-release-plan/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" - } - }, - "node_modules/@changesets/changelog-git": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0" - } - }, - "node_modules/@changesets/cli": { - "version": "2.29.8", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.29.8.tgz", - "integrity": "sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/apply-release-plan": "^7.0.14", - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/changelog-git": "^0.2.1", - "@changesets/config": "^3.1.2", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/get-release-plan": "^4.0.14", - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.6", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@changesets/write": "^0.4.0", - "@inquirer/external-editor": "^1.0.2", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" - }, - "bin": { - "changeset": "bin.js" - } - }, - "node_modules/@changesets/cli/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@changesets/config": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", - "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.8" - } - }, - "node_modules/@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", - "dev": true, - "license": "MIT", - "dependencies": { - "extendable-error": "^0.1.5" - } - }, - "node_modules/@changesets/get-dependents-graph": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" - } - }, - "node_modules/@changesets/get-release-plan": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", - "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/config": "^3.1.2", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.6", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "node_modules/@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@changesets/git": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.8", - "spawndamnit": "^3.0.1" - } - }, - "node_modules/@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.1.0" - } - }, - "node_modules/@changesets/parse": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", - "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "js-yaml": "^4.1.1" - } - }, - "node_modules/@changesets/pre": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" - } - }, - "node_modules/@changesets/read": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", - "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.2", - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" - } - }, - "node_modules/@changesets/should-skip-package": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "node_modules/@changesets/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@changesets/write": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "human-id": "^4.1.1", - "prettier": "^2.7.1" - } - }, - "node_modules/@changesets/write/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/@cspell/cspell-bundled-dicts": { "version": "9.6.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.6.4.tgz", @@ -740,7 +437,6 @@ "integrity": "sha512-lf6d+BdMkJIFCxx2FpajLpqVGGyaGUNFU6jhEM6QUPeGuoA5et2kJXrL0NSY2uWLOVyYYc/FPjzlbe8trA9tBQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=20" } @@ -822,8 +518,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.19.tgz", "integrity": "sha512-VYHtPnZt/Zd/ATbW3rtexWpBnHUohUrQOHff/2JBhsVgxOrksAxJnLAO43Q1ayLJBJUUwNVo+RU0sx0aaysZfg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-dart": { "version": "2.3.2", @@ -963,16 +658,14 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.14.tgz", "integrity": "sha512-2bf7n+kS92g+cMKV0wr9o/Oq9n8JzU7CcrB96gIh2GHgnF+0xDOqO2W/1KeFAqOfqosoOVE48t+4dnEMkkoJ2Q==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz", "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", @@ -1170,8 +863,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", @@ -1461,28 +1153,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -1604,172 +1274,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" - } - }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@manypkg/find-root/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@manypkg/find-root/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" - } - }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1795,7 +1299,6 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" @@ -2102,7 +1605,6 @@ "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -2152,7 +1654,6 @@ "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", @@ -2396,7 +1897,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2444,16 +1944,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", @@ -2557,16 +2047,6 @@ "dev": true, "license": "MIT" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -2743,19 +2223,6 @@ "node": ">=6.0.0" } }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-windows": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -2807,7 +2274,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2989,13 +2455,6 @@ "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", - "dev": true, - "license": "MIT" - }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -3012,22 +2471,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/clear-module": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", @@ -3583,16 +3026,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/diff": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", @@ -3603,19 +3036,6 @@ "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -3679,43 +3099,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/enquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/env-paths": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz", @@ -3951,7 +3334,6 @@ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4429,14 +3811,7 @@ "node_modules/eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/extendable-error": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, "license": "MIT" }, @@ -4457,36 +3832,6 @@ "node": ">=6.0.0" } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4501,16 +3846,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -4636,21 +3971,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4935,27 +4255,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -5111,16 +4410,6 @@ "dev": true, "license": "MIT" }, - "node_modules/human-id": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.3.tgz", - "integrity": "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==", - "dev": true, - "license": "MIT", - "bin": { - "human-id": "dist/cli.js" - } - }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", @@ -5137,23 +4426,6 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5611,19 +4883,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "better-path-resolve": "1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/is-symbol": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", @@ -5717,16 +4976,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -5881,16 +5130,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -5997,13 +5236,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, - "license": "MIT" - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -6130,16 +5362,6 @@ "node": ">= 0.4" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -6305,16 +5527,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6535,13 +5747,6 @@ "node": ">= 0.8.0" } }, - "node_modules/outdent": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true, - "license": "MIT" - }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -6560,19 +5765,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6605,26 +5797,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -6632,16 +5804,6 @@ "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/package-manager-detector": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "quansync": "^0.2.7" - } - }, "node_modules/parent-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", @@ -6706,16 +5868,6 @@ "dev": true, "license": "ISC" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6749,16 +5901,6 @@ "node": ">=0.10" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -6817,44 +5959,6 @@ "node": ">=6" } }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6872,46 +5976,6 @@ "dev": true, "license": "MIT" }, - "node_modules/read-yaml-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.6.1", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-yaml-file/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/read-yaml-file/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -7038,17 +6102,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -7056,30 +6109,6 @@ "dev": true, "license": "MIT" }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -7156,13 +6185,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -7347,16 +6369,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/slice-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", @@ -7387,24 +6399,6 @@ "url": "https://github.com/sponsors/cyyynthia" } }, - "node_modules/spawndamnit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", - "dev": true, - "license": "SEE LICENSE IN LICENSE", - "dependencies": { - "cross-spawn": "^7.0.5", - "signal-exit": "^4.0.1" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -7696,19 +6690,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", @@ -8006,7 +6987,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8065,16 +7045,6 @@ "dev": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -8568,7 +7538,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 745ca251a7..5baaa2f280 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "version": "node --import ./resources/register-ts-node.js resources/gen-version.ts && npm test && git add src/version.ts", "fuzzonly": "mocha --full-trace src/**/__tests__/**/*-fuzz.ts", "changelog": "node --import ./resources/register-ts-node.js resources/gen-changelog.ts", - "changeset": "changeset", "benchmark": "node --import ./resources/register-ts-node.js resources/benchmark.ts", "test": "npm run lint && npm run check && npm run testonly:cover && npm run prettier:check && npm run check:spelling && npm run check:integrations", "lint": "eslint --cache --max-warnings 0 .", @@ -48,15 +47,12 @@ "check:integrations": "mocha --full-trace resources/integration-test.ts", "build:npm": "node --import ./resources/register-ts-node.js resources/build-npm.ts", "build:deno": "node --import ./resources/register-ts-node.js resources/build-deno.ts", - "release:version": "changeset version && node --import ./resources/register-ts-node.js resources/gen-version.ts && npm install --ignore-scripts --package-lock-only && git add src/version.ts package-lock.json", - "release:publish": "node --import ./resources/register-ts-node.js resources/release-publish.ts", "diff:npm": "node --import ./resources/register-ts-node.js resources/diff-npm-package.ts", "gitpublish:npm": "bash ./resources/gitpublish.sh npm npmDist", "gitpublish:deno": "bash ./resources/gitpublish.sh deno denoDist", "prepare": "husky" }, "devDependencies": { - "@changesets/cli": "2.29.8", "@swc/core": "1.15.11", "@types/chai": "5.2.3", "@types/mocha": "10.0.10", diff --git a/resources/release-publish.ts b/resources/release-publish.ts deleted file mode 100644 index c6f74edfc3..0000000000 --- a/resources/release-publish.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { localRepoPath, npm, readPackageJSON } from './utils.js'; - -const packageName = 'graphql'; -const packageJSON = readPackageJSON(); -const packageSpec = `${packageName}@${packageJSON.version}`; -const publishTag = packageJSON.publishConfig.tag; -const taggedSpec = `${packageName}@${publishTag}`; - -const taggedVersion = getTaggedVersion(publishTag); - -if (taggedVersion != null) { - console.log( - `${taggedSpec} currently points to ${taggedVersion}; dry-running ${packageJSON.version}.`, - ); -} else { - console.log( - `${taggedSpec} does not exist yet; dry-running ${packageJSON.version}.`, - ); -} - -console.log(`${packageSpec} is not published yet, building artifacts...`); -npm().run('build:npm'); - -console.log(`Dry-running publish of ${packageSpec} from npmDist...`); -npm({ cwd: localRepoPath('npmDist') }).publish('--dry-run'); - -function getTaggedVersion(tag: string): string | undefined { - const value = npm().view(packageName, `dist-tags.${tag}`).trim(); - return value === '' ? undefined : value; -} diff --git a/resources/utils.ts b/resources/utils.ts index 2ac1c6df5c..d80d486a7e 100644 --- a/resources/utils.ts +++ b/resources/utils.ts @@ -63,12 +63,6 @@ export function npm(options?: NPMOptions) { diff(...args: ReadonlyArray): string { return spawnOutput(npmCmd, [...globalOptions, 'diff', ...args], options); }, - publish(...args: ReadonlyArray): void { - spawn(npmCmd, [...globalOptions, 'publish', ...args], options); - }, - view(...args: ReadonlyArray): string { - return spawnOutput(npmCmd, [...globalOptions, 'view', ...args], options); - }, }; } From f59e216c007ba7361eb2959b54e3869f5b7d9d17 Mon Sep 17 00:00:00 2001 From: Yaacov Rydzinski Date: Fri, 27 Feb 2026 06:13:02 +0200 Subject: [PATCH 2/4] update(changelog): aggregate label errors and handle missing tag - return list of PRs with errors rather than the first - handle a missing tag and, in internal script BREAKING CHANGE, assume that when the tag is missing we are preparing the release notes for the next release --- resources/gen-changelog.ts | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/resources/gen-changelog.ts b/resources/gen-changelog.ts index a117788ff3..4e0630274b 100644 --- a/resources/gen-changelog.ts +++ b/resources/gen-changelog.ts @@ -57,14 +57,16 @@ process.stdout.write(await genChangeLog()); async function genChangeLog(): Promise { const { version } = packageJSON; - + const releaseTag = `v${version}`; let tag: string | null = null; - let commitsList = git().revList('--reverse', `v${version}..`); - if (commitsList.length === 0) { + let commitsList: Array; + try { + commitsList = git().revList('--reverse', `${releaseTag}..`); + } catch { const parentPackageJSON = git().catFile('blob', 'HEAD~1:package.json'); const parentVersion = JSON.parse(parentPackageJSON).version; commitsList = git().revList('--reverse', `v${parentVersion}..HEAD~1`); - tag = `v${version}`; + tag = releaseTag; } const allPRs = await getPRsInfo(commitsList); @@ -72,6 +74,7 @@ async function genChangeLog(): Promise { const byLabel: { [label: string]: Array } = {}; const committersByLogin: { [login: string]: AuthorInfo } = {}; + const validationIssues: Array = []; for (const pr of allPRs) { const labels = pr.labels.nodes @@ -79,23 +82,34 @@ async function genChangeLog(): Promise { .filter((label) => label.startsWith('PR: ')); if (labels.length === 0) { - throw new Error(`PR is missing label. See ${pr.url}`); + validationIssues.push(`PR #${pr.number} is missing label. See ${pr.url}`); + continue; } + if (labels.length > 1) { - throw new Error( - `PR has conflicting labels: ${labels.join('\n')}\nSee ${pr.url}`, + validationIssues.push( + `PR #${pr.number} has conflicting labels: ${labels.join(', ')}\nSee ${pr.url}`, ); + continue; } const label = labels[0]; if (labelsConfig[label] == null) { - throw new Error(`Unknown label: ${label}. See ${pr.url}`); + validationIssues.push( + `PR #${pr.number} has unknown label: ${label}\nSee ${pr.url}`, + ); + continue; } + byLabel[label] ??= []; byLabel[label].push(pr); committersByLogin[pr.author.login] = pr.author; } + if (validationIssues.length > 0) { + throw new Error(validationIssues.join('\n\n')); + } + let changelog = `## ${tag ?? 'Unreleased'} (${date})\n`; for (const [label, config] of Object.entries(labelsConfig)) { const prs = byLabel[label]; From 879d43f5a384b7b314d9d3e3d32f579651855f62 Mon Sep 17 00:00:00 2001 From: Yaacov Rydzinski Date: Fri, 27 Feb 2026 06:13:35 +0200 Subject: [PATCH 3/4] internal: remove unused gitpublish scripts --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index 5baaa2f280..d71f0742d0 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,6 @@ "build:npm": "node --import ./resources/register-ts-node.js resources/build-npm.ts", "build:deno": "node --import ./resources/register-ts-node.js resources/build-deno.ts", "diff:npm": "node --import ./resources/register-ts-node.js resources/diff-npm-package.ts", - "gitpublish:npm": "bash ./resources/gitpublish.sh npm npmDist", - "gitpublish:deno": "bash ./resources/gitpublish.sh deno denoDist", "prepare": "husky" }, "devDependencies": { From bd11fa90e3557dfd5ed98383aae29bbd71e9e8b8 Mon Sep 17 00:00:00 2001 From: Yaacov Rydzinski Date: Fri, 27 Feb 2026 06:13:58 +0200 Subject: [PATCH 4/4] internal: add 17.x.x publish automation --- .github/CONTRIBUTING.md | 28 ++---- .github/workflows/release.yml | 122 ++++++++++++++++++++++++++ package.json | 2 + resources/gen-changelog.ts | 31 +++++-- resources/release-metadata.ts | 31 +++++++ resources/release-prepare.ts | 161 ++++++++++++++++++++++++++++++++++ resources/utils.ts | 32 +++++++ 7 files changed, 380 insertions(+), 27 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 resources/release-metadata.ts create mode 100644 resources/release-prepare.ts diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 5103a3e5c5..bfea7b09cb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -86,28 +86,16 @@ Feel free to reach out via the [graphql-js channel](https://discord.com/channels ## Release on NPM -_Only core contributors may release to NPM._ - -To release a new version on NPM, first ensure all tests pass with `npm test`, -then use `npm version patch|minor|major` in order to increment the version in -package.json and tag and commit a release. Then `git push && git push --tags` -to sync this change with source control. Then `npm publish npmDist` to actually -publish the release to NPM. -Once published, add [release notes](https://github.com/graphql/graphql-js/releases). -Use [semver](https://semver.org/) to determine which version part to increment. - -Example for a patch release: - -```sh -npm ci -npm test -npm version patch --ignore-scripts=false -git push --follow-tags -cd npmDist && npm publish -npm run changelog +Releases on `17.x.x` are managed by local scripts and GitHub Actions: + +```bash +git switch 17.x.x +git switch -c +export GH_TOKEN= # required to build changelog via GitHub API requests +npm run release:prepare -- 17.x.x patch ``` -Then upload the changelog to [https://github.com/graphql/graphql-js/releases](https://github.com/graphql/graphql-js/releases). +Push ``, open a PR from `` to `17.x.x`, wait for CI to pass, merge the PR, and then approve the GitHub Actions release workflow. The workflow currently runs in dry-run mode for testing. ## License diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..5b214004d7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,122 @@ +name: Release +on: + push: + branches: + - 17.x.x +permissions: {} +jobs: + check-publish: + name: Check for publish need and prepare artifacts + # Keep this guard on every job for defense-in-depth in case job dependencies are refactored. + if: ${{ !github.event.repository.fork && github.repository == 'graphql/graphql-js' && github.ref_name == '17.x.x' }} + runs-on: ubuntu-latest + outputs: + should_publish: ${{ steps.release_metadata.outputs.should_publish }} + tag: ${{ steps.release_metadata.outputs.tag }} + tarball_name: ${{ steps.release_metadata.outputs.tarball_name }} + concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: true + permissions: + contents: read # for actions/checkout + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + cache: npm + node-version-file: '.node-version' + + - name: Install Dependencies + run: npm ci --ignore-scripts + + - name: Read release metadata + id: release_metadata + run: | + npm run --silent release:metadata >> "${GITHUB_OUTPUT}" + + - name: Log publish decision + run: | + if [ "${{ steps.release_metadata.outputs.should_publish }}" = "true" ]; then + echo "${{ steps.release_metadata.outputs.package_spec }} is not published yet." + else + echo "${{ steps.release_metadata.outputs.package_spec }} is already published." + fi + + - name: Build NPM package + if: steps.release_metadata.outputs.should_publish == 'true' + run: npm run build:npm + + - name: Pack npmDist package + if: steps.release_metadata.outputs.should_publish == 'true' + run: npm pack ./npmDist --pack-destination . > /dev/null + + - name: Upload npm package tarball + if: steps.release_metadata.outputs.should_publish == 'true' + uses: actions/upload-artifact@v4 + with: + name: npmDist-tarball + path: ./${{ steps.release_metadata.outputs.tarball_name }} + + publish-release: + name: Publish, tag, and create release + needs: check-publish + # Keep this guard on every job for defense-in-depth in case job dependencies are refactored. + if: ${{ !github.event.repository.fork && github.repository == 'graphql/graphql-js' && github.ref_name == '17.x.x' && needs.check-publish.outputs.should_publish == 'true' && needs.check-publish.result == 'success' }} + runs-on: ubuntu-latest + environment: release + permissions: + contents: write # for creating/pushing tag and creating GitHub release + id-token: write # for npm trusted publishing via OIDC + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.node-version' + + - name: Download npmDist package + uses: actions/download-artifact@v4 + with: + name: npmDist-tarball + path: ./artifacts + + - name: Verify package tarball is present + run: | + tarball="./artifacts/${{ needs.check-publish.outputs.tarball_name }}" + if [ ! -f "${tarball}" ]; then + echo "::error::Expected package tarball ${tarball} is missing." + exit 1 + fi + + - name: Create release if needed + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + release_notes_file="./artifacts/release-notes.md" + gh api "repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}" \ + --jq '.commit.message | split("\n")[1:] | join("\n") | ltrimstr("\n")' \ + > "${release_notes_file}" + if [ ! -s "${release_notes_file}" ]; then + printf '## Release %s\n' "${{ needs.check-publish.outputs.tag }}" > "${release_notes_file}" + fi + + if gh release view "${{ needs.check-publish.outputs.tag }}" > /dev/null 2>&1; then + echo "GitHub release ${{ needs.check-publish.outputs.tag }} already exists." + else + gh release create "${{ needs.check-publish.outputs.tag }}" \ + --target "${GITHUB_SHA}" \ + --title "${{ needs.check-publish.outputs.tag }}" \ + --notes-file "${release_notes_file}" + fi + + - name: Dry-run npm publish + run: npm publish --provenance --dry-run "./artifacts/${{ needs.check-publish.outputs.tarball_name }}" diff --git a/package.json b/package.json index d71f0742d0..6d5f1d3009 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,8 @@ "version": "node --import ./resources/register-ts-node.js resources/gen-version.ts && npm test && git add src/version.ts", "fuzzonly": "mocha --full-trace src/**/__tests__/**/*-fuzz.ts", "changelog": "node --import ./resources/register-ts-node.js resources/gen-changelog.ts", + "release:prepare": "node --import ./resources/register-ts-node.js resources/release-prepare.ts", + "release:metadata": "node --import ./resources/register-ts-node.js resources/release-metadata.ts", "benchmark": "node --import ./resources/register-ts-node.js resources/benchmark.ts", "test": "npm run lint && npm run check && npm run testonly:cover && npm run prettier:check && npm run check:spelling && npm run check:integrations", "lint": "eslint --cache --max-warnings 0 .", diff --git a/resources/gen-changelog.ts b/resources/gen-changelog.ts index 4e0630274b..62d6941bac 100644 --- a/resources/gen-changelog.ts +++ b/resources/gen-changelog.ts @@ -55,19 +55,36 @@ const { githubOrg, githubRepo } = repoURLMatch.groups; process.stdout.write(await genChangeLog()); +function parseFromRevArg(rawArgs: ReadonlyArray): string | null { + if (rawArgs.length === 0) { + return null; + } + + if (rawArgs.length === 1 && rawArgs[0].trim() !== '') { + return rawArgs[0]; + } + + throw new Error( + 'Usage: npm run changelog [-- ]\n' + + 'Example: npm run changelog -- d41f59bbfdfc207712a2fc3778934694a3410ddf', + ); +} + async function genChangeLog(): Promise { const { version } = packageJSON; const releaseTag = `v${version}`; - let tag: string | null = null; - let commitsList: Array; - try { - commitsList = git().revList('--reverse', `${releaseTag}..`); - } catch { + const releaseTagExists = git().tagExists(releaseTag); + const tag = releaseTagExists ? null : releaseTag; + let baseRef = parseFromRevArg(process.argv.slice(2)); + if (releaseTagExists) { + baseRef ??= releaseTag; + } else if (baseRef == null) { const parentPackageJSON = git().catFile('blob', 'HEAD~1:package.json'); const parentVersion = JSON.parse(parentPackageJSON).version; - commitsList = git().revList('--reverse', `v${parentVersion}..HEAD~1`); - tag = releaseTag; + baseRef = `v${parentVersion}`; } + const commitsRange = releaseTagExists ? `${baseRef}..` : `${baseRef}..HEAD~1`; + const commitsList = git().revList('--reverse', commitsRange); const allPRs = await getPRsInfo(commitsList); const date = git().log('-1', '--format=%cd', '--date=short'); diff --git a/resources/release-metadata.ts b/resources/release-metadata.ts new file mode 100644 index 0000000000..0693c12491 --- /dev/null +++ b/resources/release-metadata.ts @@ -0,0 +1,31 @@ +import { npm, readPackageJSON } from './utils.js'; + +try { + const packageJSON = readPackageJSON(); + const { version } = packageJSON; + + if (typeof version !== 'string' || version === '') { + throw new Error('package.json is missing a valid "version" field.'); + } + + const tag = `v${version}`; + const packageSpec = `graphql@${version}`; + const tarballName = `graphql-${version}.tgz`; + + const versionsJSON = npm().view('graphql', 'versions', '--json'); + const parsedVersions = JSON.parse(versionsJSON) as unknown; + const versions = Array.isArray(parsedVersions) + ? parsedVersions + : [parsedVersions]; + const shouldPublish = versions.includes(version) ? 'false' : 'true'; + + process.stdout.write(`version=${version}\n`); + process.stdout.write(`tag=${tag}\n`); + process.stdout.write(`package_spec=${packageSpec}\n`); + process.stdout.write(`tarball_name=${tarballName}\n`); + process.stdout.write(`should_publish=${shouldPublish}\n`); +} catch (error) { + const message = error instanceof Error ? error.message : String(error); + process.stderr.write(message + '\n'); + process.exit(1); +} diff --git a/resources/release-prepare.ts b/resources/release-prepare.ts new file mode 100644 index 0000000000..a50b3be840 --- /dev/null +++ b/resources/release-prepare.ts @@ -0,0 +1,161 @@ +import { git, npm, readPackageJSON } from './utils.js'; + +let args: ParsedArgs; +try { + args = parseArgs(); + validateBranchState(args.releaseBranch); +} catch (error) { + console.error(error instanceof Error ? error.message : String(error)); + process.exit(1); +} + +console.log('Running npm version without creating a tag...'); +npm().version(...args.npmVersionArgs, '--no-git-tag-version'); + +const { version } = readPackageJSON(); +console.log(`Generating changelog for v${version}...`); +const changelogArgs = ['--silent', 'changelog']; +if (args.fromRev != null) { + changelogArgs.push('--', args.fromRev); +} +const releaseChangelog = npm().runOutput(...changelogArgs); +const releaseCommitTitle = `chore(release): v${version}`; + +console.log('Creating release commit...'); +git().add('package.json', 'package-lock.json', 'src/version.ts'); +git().commit('-m', releaseCommitTitle, '-m', releaseChangelog); + +const currentBranch = git({ quiet: true }).revParse('--abbrev-ref', 'HEAD'); + +console.log(''); +console.log(`Release commit created for v${version}.`); +console.log( + `Next steps: push "${currentBranch}", open a PR to "${args.releaseBranch}", wait for CI, then merge.`, +); + +interface ParsedArgs { + fromRev: string | null; + releaseBranch: string; + npmVersionArgs: Array; +} + +function parseArgs(): ParsedArgs { + const rawArgs = process.argv.slice(2); + const fromRevArgName = '--fromRev'; + let fromRev: string | null = null; + let releasePrepareArgs = rawArgs; + if (rawArgs[0] === fromRevArgName) { + fromRev = rawArgs[1] ?? null; + releasePrepareArgs = rawArgs.slice(2); + } else if (rawArgs.includes(fromRevArgName)) { + throwUsage(`${fromRevArgName} must be the first argument when provided.`); + } + + const releaseBranch = releasePrepareArgs[0]; + if (releaseBranch == null || releaseBranch.trim() === '') { + throwUsage('Missing required release branch as the first argument.'); + } + if (releaseBranch.startsWith('-')) { + throwUsage( + 'Missing required release branch as the first argument (before options).', + ); + } + + const npmVersionArgs = releasePrepareArgs.slice(1); + + if (npmVersionArgs.length === 0) { + throwUsage( + 'Missing npm version arguments (e.g. patch, major, prerelease --preid alpha).', + ); + } + + return { + fromRev, + releaseBranch, + npmVersionArgs, + }; +} + +function validateBranchState(releaseBranch: string): void { + const checkedBranch = git({ quiet: true }).revParse('--abbrev-ref', 'HEAD'); + if (checkedBranch === 'HEAD') { + throw new Error( + 'Git is in detached HEAD state (not on a local branch). ' + + 'Switch to a local branch based on the release branch first, for example:\n' + + ` git switch -c release-${releaseBranch.replace(/[^a-zA-Z0-9._-]/g, '-')} ${releaseBranch}`, + ); + } + if (checkedBranch === releaseBranch) { + throw new Error( + `Release prepare must not run on "${releaseBranch}". Create a local release branch first.`, + ); + } + + const status = git().status('--porcelain').trim(); + if (status !== '') { + throw new Error( + 'Working directory must be clean before running release:prepare.', + ); + } + + let releaseBranchHead: string; + try { + releaseBranchHead = git({ quiet: true }).revParse(releaseBranch); + } catch { + throw new Error( + `Release branch "${releaseBranch}" does not exist locally.`, + ); + } + + let releaseBranchUpstream: string; + try { + releaseBranchUpstream = git({ quiet: true }).revParse( + '--abbrev-ref', + `${releaseBranch}@{upstream}`, + ); + } catch { + throw new Error( + `Release branch "${releaseBranch}" does not track a remote branch. ` + + 'Set one first (for example: git branch --set-upstream-to ' + + `/${releaseBranch} ${releaseBranch}).`, + ); + } + + const upstreamRemote = releaseBranchUpstream.split('/')[0]; + try { + git().fetch('--quiet', upstreamRemote, releaseBranch); + } catch { + throw new Error( + `Failed to fetch "${releaseBranchUpstream}". ` + + 'Verify network access and git remote configuration, then retry.', + ); + } + + const upstreamReleaseBranchHead = git({ quiet: true }).revParse( + `${releaseBranch}@{upstream}`, + ); + if (releaseBranchHead !== upstreamReleaseBranchHead) { + throw new Error( + `Local "${releaseBranch}" is not up to date with "${releaseBranchUpstream}". ` + + `Update it first (for example: git switch ${releaseBranch} && git pull --ff-only).`, + ); + } + + const currentHead = git({ quiet: true }).revParse('HEAD'); + if (currentHead !== releaseBranchHead) { + throw new Error( + `Current branch "${checkedBranch}" must match "${releaseBranch}" before preparing a release.`, + ); + } +} + +function throwUsage(message: string): never { + throw new Error( + `${message}\n` + + 'Usage: npm run release:prepare -- [--fromRev ] \n' + + 'Examples:\n' + + ' npm run release:prepare -- 17.x.x patch\n' + + ' npm run release:prepare -- 17.x.x prerelease --preid alpha\n' + + ' npm run release:prepare -- --fromRev 17.x.x prerelease --preid alpha', + ); +} diff --git a/resources/utils.ts b/resources/utils.ts index d80d486a7e..30272406b7 100644 --- a/resources/utils.ts +++ b/resources/utils.ts @@ -48,6 +48,9 @@ export function npm(options?: NPMOptions) { run(...args: ReadonlyArray): void { spawn(npmCmd, [...globalOptions, 'run', ...args], options); }, + runOutput(...args: ReadonlyArray): string { + return spawnOutput(npmCmd, [...globalOptions, 'run', ...args], options); + }, install(...args: ReadonlyArray): void { spawn(npmCmd, [...globalOptions, 'install', ...args], options); }, @@ -57,12 +60,18 @@ export function npm(options?: NPMOptions) { exec(...args: ReadonlyArray): void { spawn(npmCmd, [...globalOptions, 'exec', ...args], options); }, + version(...args: ReadonlyArray): void { + spawn(npmCmd, [...globalOptions, 'version', ...args], options); + }, pack(...args: ReadonlyArray): string { return spawnOutput(npmCmd, [...globalOptions, 'pack', ...args], options); }, diff(...args: ReadonlyArray): string { return spawnOutput(npmCmd, [...globalOptions, 'diff', ...args], options); }, + view(...args: ReadonlyArray): string { + return spawnOutput(npmCmd, [...globalOptions, 'view', ...args], options); + }, }; } @@ -73,12 +82,24 @@ interface GITOptions extends SpawnOptions { export function git(options?: GITOptions) { const cmdOptions = options?.quiet === true ? ['--quiet'] : []; return { + add(...args: ReadonlyArray): void { + spawn('git', ['add', ...cmdOptions, ...args], options); + }, + commit(...args: ReadonlyArray): void { + spawn('git', ['commit', ...cmdOptions, ...args], options); + }, clone(...args: ReadonlyArray): void { spawn('git', ['clone', ...cmdOptions, ...args], options); }, checkout(...args: ReadonlyArray): void { spawn('git', ['checkout', ...cmdOptions, ...args], options); }, + fetch(...args: ReadonlyArray): void { + spawn('git', ['fetch', ...cmdOptions, ...args], options); + }, + status(...args: ReadonlyArray): string { + return spawnOutput('git', ['status', ...cmdOptions, ...args], options); + }, revParse(...args: ReadonlyArray): string { return spawnOutput('git', ['rev-parse', ...cmdOptions, ...args], options); }, @@ -87,6 +108,17 @@ export function git(options?: GITOptions) { const result = spawnOutput('git', allArgs, options); return result === '' ? [] : result.split('\n'); }, + tagExists(tag: string): boolean { + const result = childProcess.spawnSync( + 'git', + ['rev-parse', '--verify', '--quiet', `refs/tags/${tag}`], + { + stdio: 'ignore', + ...options, + }, + ); + return result.status === 0; + }, catFile(...args: ReadonlyArray): string { return spawnOutput('git', ['cat-file', ...cmdOptions, ...args], options); },