From 3833d3558e247131bb4125380b64c936aed6468e Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 31 Jul 2026 17:10:07 +0900 Subject: [PATCH] ci: use utils from `@vitejs/release-scripts` --- .github/workflows/prepare-release.yml | 10 +- .github/workflows/publish.yml | 44 ++++--- package.json | 1 - pnpm-lock.yaml | 174 +++++--------------------- scripts/detect-release.ts | 17 +++ scripts/extract-changelog.ts | 14 +-- scripts/prepare-release.ts | 77 ++++-------- scripts/publishCI.ts | 6 - scripts/release-utils.ts | 14 --- 9 files changed, 99 insertions(+), 258 deletions(-) create mode 100644 scripts/detect-release.ts delete mode 100644 scripts/release-utils.ts diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 5a99e2cbd..5eaae0cf5 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -13,7 +13,7 @@ on: - plugin-react-swc - plugin-rsc release: - description: Bumpp release type + description: Release type required: true default: next type: choice @@ -71,8 +71,7 @@ jobs: RELEASE: ${{ inputs.version || inputs.release }} RELEASE_PACKAGE: ${{ inputs.package }} run: | - node scripts/prepare-release.ts "$RELEASE_PACKAGE" "$RELEASE" - echo "version=$(jq -r .version packages/$RELEASE_PACKAGE/package.json)" >> "$GITHUB_OUTPUT" + node scripts/prepare-release.ts "$RELEASE_PACKAGE" "$RELEASE" >> "$GITHUB_OUTPUT" - id: generate-token uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 @@ -90,6 +89,7 @@ jobs: GH_TOKEN: ${{ steps.generate-token.outputs.token }} PACKAGE: ${{ inputs.package }} PR_BODY_FILE: ${{ runner.temp }}/release-pr-body.md + TAG: ${{ steps.prepare.outputs.tag }} VERSION: ${{ steps.prepare.outputs.version }} run: | BRANCH="release-$PACKAGE-$VERSION-$GITHUB_RUN_ID" @@ -105,11 +105,11 @@ jobs: git config user.email "$BOT_ID+$APP_SLUG[bot]@users.noreply.github.com" git switch -c "$BRANCH" git add "packages/$PACKAGE/package.json" "packages/$PACKAGE/CHANGELOG.md" - git commit -m "release: $PACKAGE@$VERSION" + git commit -m "release: $TAG" git push -u "https://x-access-token:$GH_TOKEN@github.com/$GITHUB_REPOSITORY.git" HEAD gh pr create \ --assignee "$GITHUB_ACTOR" \ --base main \ --head "$BRANCH" \ - --title "release: $PACKAGE@$VERSION" \ + --title "release: $TAG" \ --body-file "$PR_BODY_FILE" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 92fa295a2..40eaa5137 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,6 +15,7 @@ jobs: outputs: package: ${{ steps.detect.outputs.package }} release: ${{ steps.detect.outputs.release }} + tag: ${{ steps.detect.outputs.tag }} version: ${{ steps.detect.outputs.version }} steps: - name: Checkout @@ -22,28 +23,28 @@ jobs: with: persist-credentials: false + - name: Install pnpm + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + + - name: Set node version + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: 24 + package-manager-cache: false + + - name: Install deps + run: pnpm install --filter . --frozen-lockfile --ignore-scripts + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1' + - name: Detect release id: detect - run: | - SUBJECT="$(git log -1 --format=%s)" - for PACKAGE in plugin-react plugin-react-swc plugin-rsc; do - VERSION="$(jq -r .version "packages/$PACKAGE/package.json")" - EXPECTED="release: $PACKAGE@$VERSION" - if [[ "$SUBJECT" == "$EXPECTED"* ]]; then - echo "package=$PACKAGE" >> "$GITHUB_OUTPUT" - echo "release=true" >> "$GITHUB_OUTPUT" - echo "version=$VERSION" >> "$GITHUB_OUTPUT" - echo "Detected $PACKAGE release $VERSION" - exit 0 - fi - done - echo "release=false" >> "$GITHUB_OUTPUT" - echo "No release commit found at HEAD" + run: node scripts/detect-release.ts "$(git log -1 --format=%s)" >> "$GITHUB_OUTPUT" publish-release: if: needs.detect-release.outputs.release == 'true' needs: detect-release - name: Publish ${{ needs.detect-release.outputs.package }} + name: Publish ${{ needs.detect-release.outputs.tag }} runs-on: ubuntu-latest permissions: contents: write @@ -58,10 +59,8 @@ jobs: - name: Check release tag env: - PACKAGE: ${{ needs.detect-release.outputs.package }} - VERSION: ${{ needs.detect-release.outputs.version }} + TAG: ${{ needs.detect-release.outputs.tag }} run: | - TAG="$PACKAGE@$VERSION" if git rev-parse --verify --quiet "refs/tags/$TAG"; then echo "Tag $TAG already exists" exit 1 @@ -91,11 +90,10 @@ jobs: - name: Publish package env: - PACKAGE: ${{ needs.detect-release.outputs.package }} - VERSION: ${{ needs.detect-release.outputs.version }} + TAG: ${{ needs.detect-release.outputs.tag }} # npm 11.5.2+ is required for trusted publishing. # zizmor: ignore[adhoc-packages] - run: npm i -g npm@^11.5.2 && pnpm run ci-publish "$PACKAGE@$VERSION" + run: npm i -g npm@^11.5.2 && pnpm run ci-publish "$TAG" - id: generate-token uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 @@ -108,7 +106,6 @@ jobs: - name: Create GitHub release run: | - TAG="$PACKAGE@$VERSION" node scripts/extract-changelog.ts "packages/$PACKAGE/CHANGELOG.md" "$VERSION" > "$NOTES_FILE" prerelease=() @@ -125,4 +122,5 @@ jobs: GH_TOKEN: ${{ steps.generate-token.outputs.token }} NOTES_FILE: ${{ runner.temp }}/release-notes.md PACKAGE: ${{ needs.detect-release.outputs.package }} + TAG: ${{ needs.detect-release.outputs.tag }} VERSION: ${{ needs.detect-release.outputs.version }} diff --git a/package.json b/package.json index 4d85b7f2a..5f2ba4ee6 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "@types/fs-extra": "^11.0.4", "@types/node": "^24.13.3", "@vitejs/release-scripts": "^1.8.0", - "bumpp": "^10.4.1", "eslint": "^9.39.5", "eslint-plugin-import-x": "^4.17.1", "eslint-plugin-n": "^18.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b52829e4..11da53892 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,6 @@ importers: '@vitejs/release-scripts': specifier: ^1.8.0 version: 1.8.0(conventional-commits-filter@6.0.1) - bumpp: - specifier: ^10.4.1 - version: 10.4.1 eslint: specifier: ^9.39.5 version: 9.39.5(jiti@2.7.0) @@ -104,7 +101,7 @@ importers: version: 1.2.0 tsdown: specifier: ^0.22.14 - version: 0.22.14(publint@0.3.21)(typescript@6.0.3) + version: 0.22.14(publint@0.3.22)(typescript@6.0.3) vite: specifier: ^8.1.5 version: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.0) @@ -138,7 +135,7 @@ importers: version: 3.6.2 tsdown: specifier: ^0.22.14 - version: 0.22.14(publint@0.3.21)(typescript@6.0.3) + version: 0.22.14(publint@0.3.22)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -496,7 +493,7 @@ importers: version: 1.2.4 tsdown: specifier: ^0.22.14 - version: 0.22.14(publint@0.3.21)(typescript@6.0.3) + version: 0.22.14(publint@0.3.22)(typescript@6.0.3) packages/plugin-rsc/examples/action-reachability: dependencies: @@ -2251,8 +2248,8 @@ packages: '@poppinss/exception@1.2.2': resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==} - '@publint/pack@0.1.4': - resolution: {integrity: sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==} + '@publint/pack@0.1.6': + resolution: {integrity: sha512-3uVNyGcVplhPZSLVyeIpL7+cIRn1YCSNHLG/rUIlBQMVH8YuN9++YF+5+UDIIO9RW98dujiUoTltO7RDB5bFJA==} engines: {node: '>=18'} '@quansync/fs@1.0.0': @@ -3216,9 +3213,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - args-tokenizer@0.3.0: - resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} - argue-cli@3.1.0: resolution: {integrity: sha512-DhBpBfXL4SS2uC0N922MMajKR3CdrTG0u2or1PNYgXMsrSzViJrbtvT0nCLlLGUI0plam/ZZCs7aAauHtW9thw==} engines: {node: '>=22'} @@ -3270,27 +3264,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bumpp@10.4.1: - resolution: {integrity: sha512-X/bwWs5Gbb/D7rN4aHLB7zdjiA6nGdjckM1sTHhI9oovIbEw2L5pw5S4xzk8ZTeOZ8EnwU/Ze4SoZ6/Vr3pM2Q==} - engines: {node: '>=18'} - hasBin: true - bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - c12@3.3.4: - resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} - peerDependencies: - magicast: '*' - peerDependenciesMeta: - magicast: - optional: true - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -3328,10 +3305,6 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} - collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -3352,9 +3325,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.2.4: - resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} - connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -3381,8 +3351,8 @@ packages: resolution: {integrity: sha512-cs+LadpH7Kpw0M3k8wurk+sOVVDAENA0iK4OBOrkL94j5lEVYRJ4j3zd2bhY9qgzyrPqthdcYT3axzRN7AliMg==} engines: {node: '>=22'} - conventional-commits-parser@7.1.0: - resolution: {integrity: sha512-DPp6hkUjvwIivxbkrTiLXeRswNv1A/4GFA2X6scXma0AMa9632V3TwxmrlkUIEtUktiM3Ln+RrSH2xlP3/jUTw==} + conventional-commits-parser@7.1.1: + resolution: {integrity: sha512-B0f42jI++V5Vb7qK+DDw68r0dNxz5hk+RdKUkx2NOi39emc9hsHa3u2M3doF7QQhRFzCrAj7uM90teG+RBTaYQ==} engines: {node: '>=22'} hasBin: true @@ -3468,9 +3438,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -3478,10 +3445,6 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dotenv@17.4.2: - resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} - engines: {node: '>=12'} - dts-resolver@3.0.0: resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} engines: {node: ^22.18.0 || >=24.0.0} @@ -3662,9 +3625,6 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - exsolve@1.1.1: - resolution: {integrity: sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -3750,10 +3710,6 @@ packages: resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} engines: {node: '>=20.20.0'} - giget@3.3.1: - resolution: {integrity: sha512-r+mvuDjrjMpsdw46Kmeydb8bdHm7wOKw8wNBtTndkjbPjgAp5oUJUxRE76wZFknxIPokfWvep2qSXK37aXE6zg==} - hasBin: true - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -3926,9 +3882,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -4274,8 +4227,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + package-manager-detector@1.8.0: + resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -4326,9 +4279,6 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - pkg-types@2.3.1: - resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} - playwright-chromium@1.62.0: resolution: {integrity: sha512-zigjm5a+G5PUky+O9XMnZDhHFD+SqVgdp0Kki4mU2/vtAmSGJTpl2AiumLknu5485gQLIA8PjF6VPDIALkUQlg==} engines: {node: '>=20'} @@ -4378,8 +4328,8 @@ packages: property-information@6.4.0: resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} - publint@0.3.21: - resolution: {integrity: sha512-OqejcnMV6E9zel2oCrUOJEiiFkGiAAni0A6ibfQNh1k9Gu5z4F+Yso8lllam7AzmV6Do0vp7u3UpZNRBwuXaHQ==} + publint@0.3.22: + resolution: {integrity: sha512-6Z/scsr5CA7APdwyF35EY88CqgDj1textWuY788DVTJYPCWVv/Wn9G6KmLnrVRnStgYcahqN4wCDLZGSbQJ69w==} engines: {node: '>=18'} hasBin: true @@ -4390,9 +4340,6 @@ packages: quansync@1.0.0: resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - rc9@3.0.1: - resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} - react-compiler-runtime@1.0.0: resolution: {integrity: sha512-rRfjYv66HlG8896yPUDONgKzG5BxZD1nV9U6rkm+7VCuvQc903C4MjcoZR4zPw53IKSOX9wMQVpA1IAbRtzQ7w==} peerDependencies: @@ -4443,10 +4390,6 @@ packages: resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} - refa@0.12.1: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -5265,14 +5208,14 @@ snapshots: '@cloudflare/workerd-windows-64@1.20260722.1': optional: true - '@conventional-changelog/git-client@3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.0)': + '@conventional-changelog/git-client@3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.1)': dependencies: '@simple-libs/child-process-utils': 2.0.0 '@simple-libs/stream-utils': 2.0.0 semver: 7.8.5 optionalDependencies: conventional-commits-filter: 6.0.1 - conventional-commits-parser: 7.1.0 + conventional-commits-parser: 7.1.1 '@conventional-changelog/template@1.2.1': {} @@ -5796,7 +5739,9 @@ snapshots: '@poppinss/exception@1.2.2': {} - '@publint/pack@0.1.4': {} + '@publint/pack@0.1.6': + dependencies: + tinyexec: 1.2.4 '@quansync/fs@1.0.0': dependencies: @@ -6361,7 +6306,7 @@ snapshots: mri: 1.2.0 picocolors: 1.1.1 prompts: 2.4.2 - publint: 0.3.21 + publint: 0.3.22 semver: 7.8.5 tinyexec: 1.2.4 transitivePeerDependencies: @@ -6552,8 +6497,6 @@ snapshots: argparse@2.0.1: {} - args-tokenizer@0.3.0: {} - argue-cli@3.1.0: {} astring@1.8.6: {} @@ -6601,43 +6544,10 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) - bumpp@10.4.1: - dependencies: - ansis: 4.3.1 - args-tokenizer: 0.3.0 - c12: 3.3.4 - cac: 6.7.14 - escalade: 3.2.0 - jsonc-parser: 3.3.1 - package-manager-detector: 1.6.0 - semver: 7.8.5 - tinyexec: 1.2.4 - tinyglobby: 0.2.17 - yaml: 2.9.0 - transitivePeerDependencies: - - magicast - bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 - c12@3.3.4: - dependencies: - chokidar: 5.0.0 - confbox: 0.2.4 - defu: 6.1.7 - dotenv: 17.4.2 - exsolve: 1.1.1 - giget: 3.3.1 - jiti: 2.7.0 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 2.1.0 - pkg-types: 2.3.1 - rc9: 3.0.1 - - cac@6.7.14: {} - cac@7.0.0: {} callsites@3.1.0: {} @@ -6663,10 +6573,6 @@ snapshots: character-reference-invalid@2.0.1: {} - chokidar@5.0.0: - dependencies: - readdirp: 5.0.0 - collapse-white-space@2.1.0: {} color-convert@2.0.1: @@ -6681,8 +6587,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.2.4: {} - connect@3.7.0: dependencies: debug: 2.6.9 @@ -6708,20 +6612,20 @@ snapshots: conventional-changelog@8.1.0(conventional-commits-filter@6.0.1): dependencies: - '@conventional-changelog/git-client': 3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.0) + '@conventional-changelog/git-client': 3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.1) '@simple-libs/hosted-git-info': 2.0.0 '@simple-libs/normalize-package-data': 1.0.0 argue-cli: 3.1.0 conventional-changelog-preset-loader: 6.0.1 conventional-changelog-writer: 9.2.0 - conventional-commits-parser: 7.1.0 + conventional-commits-parser: 7.1.1 fd-package-json: 2.0.0 transitivePeerDependencies: - conventional-commits-filter conventional-commits-filter@6.0.1: {} - conventional-commits-parser@7.1.0: + conventional-commits-parser@7.1.1: dependencies: '@simple-libs/stream-utils': 2.0.0 argue-cli: 3.1.0 @@ -6789,16 +6693,12 @@ snapshots: dequal@2.0.3: {} - destr@2.0.5: {} - detect-libc@2.1.2: {} devlop@1.1.0: dependencies: dequal: 2.0.3 - dotenv@17.4.2: {} - dts-resolver@3.0.0: {} ee-first@1.1.1: {} @@ -7025,8 +6925,6 @@ snapshots: expect-type@1.3.0: {} - exsolve@1.1.1: {} - extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -7108,8 +7006,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - giget@3.3.1: {} - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -7269,8 +7165,6 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.3.1: {} - jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -7790,7 +7684,7 @@ snapshots: dependencies: p-limit: 3.1.0 - package-manager-detector@1.6.0: {} + package-manager-detector@1.8.0: {} parent-module@1.0.1: dependencies: @@ -7840,12 +7734,6 @@ snapshots: picomatch@4.0.5: {} - pkg-types@2.3.1: - dependencies: - confbox: 0.2.4 - exsolve: 1.1.1 - pathe: 2.0.3 - playwright-chromium@1.62.0: dependencies: playwright-core: 1.62.0 @@ -7890,10 +7778,10 @@ snapshots: property-information@6.4.0: {} - publint@0.3.21: + publint@0.3.22: dependencies: - '@publint/pack': 0.1.4 - package-manager-detector: 1.6.0 + '@publint/pack': 0.1.6 + package-manager-detector: 1.8.0 picocolors: 1.1.1 sade: 1.8.1 @@ -7901,11 +7789,6 @@ snapshots: quansync@1.0.0: {} - rc9@3.0.1: - dependencies: - defu: 6.1.7 - destr: 2.0.5 - react-compiler-runtime@1.0.0(react@18.3.1): dependencies: react: 18.3.1 @@ -7950,8 +7833,6 @@ snapshots: react@19.2.8: {} - readdirp@5.0.0: {} - refa@0.12.1: dependencies: '@eslint-community/regexpp': 4.12.2 @@ -8223,7 +8104,7 @@ snapshots: dependencies: typescript: 6.0.3 - tsdown@0.22.14(publint@0.3.21)(typescript@6.0.3): + tsdown@0.22.14(publint@0.3.22)(typescript@6.0.3): dependencies: ansis: 4.3.1 cac: 7.0.0 @@ -8241,7 +8122,7 @@ snapshots: unconfig-core: 7.5.0 verkit: 0.3.0 optionalDependencies: - publint: 0.3.21 + publint: 0.3.22 typescript: 6.0.3 transitivePeerDependencies: - '@typescript/native-preview' @@ -8508,7 +8389,8 @@ snapshots: yaml@1.10.2: {} - yaml@2.9.0: {} + yaml@2.9.0: + optional: true yocto-queue@0.1.0: {} diff --git a/scripts/detect-release.ts b/scripts/detect-release.ts new file mode 100644 index 000000000..ab3ab4227 --- /dev/null +++ b/scripts/detect-release.ts @@ -0,0 +1,17 @@ +import { detectReleaseCommit } from '@vitejs/release-scripts' + +const subject = process.argv[2] +if (!subject) throw new Error('Release commit subject is required') + +const release = detectReleaseCommit({ + subject, + packages: ['plugin-react', 'plugin-react-swc', 'plugin-rsc'], +}) + +if (release) { + console.log( + `package=${release.pkg}\nrelease=true\ntag=${release.tag}\nversion=${release.version}`, + ) +} else { + console.log('release=false') +} diff --git a/scripts/extract-changelog.ts b/scripts/extract-changelog.ts index 3f3ced11b..a492a41d4 100644 --- a/scripts/extract-changelog.ts +++ b/scripts/extract-changelog.ts @@ -1,4 +1,4 @@ -import { readFileSync } from 'node:fs' +import { extractChangelogEntry } from '@vitejs/release-scripts' function main() { const [path, version] = process.argv.slice(2) @@ -6,17 +6,7 @@ function main() { throw new Error('Usage: node scripts/extract-changelog.ts ') } - const sections = readFileSync(path, 'utf-8').split(/^## /m).slice(1) - const section = sections.find((section) => { - const heading = section.split('\n', 1)[0] - return ( - heading.includes(`[${version}](`) || heading.startsWith(`${version} (`) - ) - }) - if (!section) throw new Error(`Missing changelog entry for ${version}`) - - const notes = section.split('\n').slice(1).join('\n').trim() - if (!notes) throw new Error(`Empty changelog entry for ${version}`) + const notes = extractChangelogEntry({ changelogPath: path, version }) process.stdout.write(`${notes}\n`) } diff --git a/scripts/prepare-release.ts b/scripts/prepare-release.ts index 4a7f7dbfc..788b6d78d 100644 --- a/scripts/prepare-release.ts +++ b/scripts/prepare-release.ts @@ -1,7 +1,5 @@ import { readFileSync, writeFileSync } from 'node:fs' -import { generateChangelog } from '@vitejs/release-scripts' -import { versionBump } from 'bumpp' -import { validatePublishVersion } from './release-utils.ts' +import { generateChangelog, prepareRelease } from '@vitejs/release-scripts' const releasePackages = [ 'plugin-react', @@ -9,57 +7,34 @@ const releasePackages = [ 'plugin-rsc', ] as const -type ReleasePackage = (typeof releasePackages)[number] - -function parseReleasePackage(value: string | undefined): ReleasePackage { - if ((releasePackages as readonly (string | undefined)[]).includes(value)) { - return value as ReleasePackage - } - throw new Error( - `Invalid release package ${JSON.stringify(value)}. Expected one of: ${releasePackages.join(', ')}`, - ) -} - async function main() { - const releasePackage = parseReleasePackage(process.argv[2]) - const release = process.argv[3] - - const pkgDir = `packages/${releasePackage}` - const pkgPath = `${pkgDir}/package.json` - - await versionBump({ - files: [pkgPath], - release, - commit: false, - tag: false, - push: false, - printCommits: false, - confirm: !release, + const { tag, version } = await prepareRelease({ + packages: releasePackages, + pkg: process.argv[2], + release: process.argv[3], + generateChangelog: async (pkg, version) => { + const pkgDir = `packages/${pkg}` + if (pkg === 'plugin-rsc') { + await generateChangelog({ + getPkgDir: () => pkgDir, + tagPrefix: `${pkg}@`, + }) + return + } + const changelogPath = `${pkgDir}/CHANGELOG.md` + const changelog = readFileSync(changelogPath, 'utf-8') + const date = new Date().toISOString().slice(0, 10) + writeFileSync( + changelogPath, + changelog.replace( + '## Unreleased', + `## Unreleased\n\n## ${version} (${date})`, + ), + ) + }, }) - const { version } = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { - version: string - } - validatePublishVersion(version) - - if (releasePackage === 'plugin-rsc') { - await generateChangelog({ - getPkgDir: () => pkgDir, - tagPrefix: `${releasePackage}@`, - }) - return - } - - const changelogPath = `${pkgDir}/CHANGELOG.md` - const changelog = readFileSync(changelogPath, 'utf-8') - const date = new Date().toISOString().slice(0, 10) - writeFileSync( - changelogPath, - changelog.replace( - '## Unreleased', - `## Unreleased\n\n## ${version} (${date})`, - ), - ) + console.log(`tag=${tag}\nversion=${version}`) } main().catch((error) => { diff --git a/scripts/publishCI.ts b/scripts/publishCI.ts index 6a8973ec1..ebc52654f 100644 --- a/scripts/publishCI.ts +++ b/scripts/publishCI.ts @@ -1,12 +1,6 @@ import { publish } from '@vitejs/release-scripts' -import { validatePublishVersion } from './release-utils.ts' async function main() { - const tag = process.argv[2] - const version = tag?.split('@')[1] - if (!version) throw new Error(`Invalid package tag ${JSON.stringify(tag)}`) - validatePublishVersion(version) - await publish({ getPkgDir(pkg) { if (pkg === 'plugin-react-swc') { diff --git a/scripts/release-utils.ts b/scripts/release-utils.ts deleted file mode 100644 index 4e2ee1abc..000000000 --- a/scripts/release-utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function validatePublishVersion(version: string): void { - const prerelease = version.match(/^\d+\.\d+\.\d+-([^+]+)/)?.[1] - // only allow alpha and beta prereleases - // as @vitejs/release-scripts only supports these two types - if ( - prerelease && - !prerelease.includes('alpha') && - !prerelease.includes('beta') - ) { - throw new Error( - `Only alpha and beta prereleases are supported, received ${version}`, - ) - } -}