From 175436691e36ec146550264faab3754e0248ff72 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 31 Jul 2026 17:11:33 +0900 Subject: [PATCH 1/8] ci: setup PR-driven release --- .github/workflows/prepare-release.yml | 115 ++++++++++++++++++++++++++ .github/workflows/publish.yml | 94 +++++++++++++++++++-- .github/workflows/release-tag.yml | 52 ------------ CONTRIBUTING.md | 50 ++++++++--- package.json | 1 - scripts/detect-release.ts | 19 +++++ scripts/extract-changelog.ts | 9 ++ scripts/prepare-release.ts | 23 ++++++ scripts/release.ts | 21 ----- scripts/releaseUtils.ts | 49 +---------- scripts/tsconfig.json | 1 + 11 files changed, 290 insertions(+), 144 deletions(-) create mode 100644 .github/workflows/prepare-release.yml delete mode 100644 .github/workflows/release-tag.yml create mode 100644 scripts/detect-release.ts create mode 100644 scripts/extract-changelog.ts create mode 100644 scripts/prepare-release.ts delete mode 100644 scripts/release.ts diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml new file mode 100644 index 00000000000000..b1180f3bd8b89c --- /dev/null +++ b/.github/workflows/prepare-release.yml @@ -0,0 +1,115 @@ +name: Prepare Release + +on: + workflow_dispatch: + inputs: + package: + description: Package to release + required: true + default: vite + type: choice + options: + - vite + - create-vite + - plugin-legacy + release: + description: Release type + required: true + default: next + type: choice + options: + - next + - patch + - minor + - major + - prepatch + - preminor + - premajor + version: + description: Specify exact version instead of release type + required: false + type: string + +concurrency: + group: ${{ github.workflow }}-${{ inputs.package }}-${{ inputs.version || inputs.release }} + cancel-in-progress: false + +permissions: {} + +jobs: + prepare: + if: github.repository == 'vitejs/vite' + name: Prepare release PR + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + ref: main + fetch-depth: 0 + persist-credentials: false + + - name: Install pnpm + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + + - name: Set node version to 24 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + package-manager-cache: false + + - name: Install deps + run: pnpm install + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + + - name: Prepare release + id: prepare + env: + RELEASE: ${{ inputs.version || inputs.release }} + RELEASE_PACKAGE: ${{ inputs.package }} + run: | + node scripts/prepare-release.ts "$RELEASE_PACKAGE" "$RELEASE" >> "$GITHUB_OUTPUT" + + - id: generate-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ vars.RELEASE_GITHUB_APP_CLIENT_ID }} + private-key: ${{ secrets.RELEASE_GITHUB_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + repositories: ${{ github.event.repository.name }} + permission-contents: write + permission-pull-requests: write + + - name: Open release PR + env: + APP_SLUG: ${{ steps.generate-token.outputs.app-slug }} + 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" + BOT_ID="$(gh api "/users/$APP_SLUG%5Bbot%5D" --jq .id)" + { + echo "$PACKAGE release PR generated by the Prepare Release workflow: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" + echo + echo "## Changelog" + echo + node scripts/extract-changelog.ts "packages/$PACKAGE/CHANGELOG.md" "$VERSION" + } > "$PR_BODY_FILE" + git config user.name "$APP_SLUG[bot]" + git config user.email "$BOT_ID+$APP_SLUG[bot]@users.noreply.github.com" + git switch -c "$BRANCH" + git add "packages/$PACKAGE" + 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: $TAG" \ + --body-file "$PR_BODY_FILE" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1d9c58f1c02b2e..4f0fce66ccde3a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,26 +2,70 @@ name: Publish Package on: push: - tags: - - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 - - "plugin-*" # Push events to matching plugin-*, i.e. plugin-(vue|vue-jsx|react|legacy)@1.0.0 - - "create-vite*" # # Push events to matching create-vite*, i.e. create-vite@1.0.0 + branches: + - main + +permissions: {} jobs: - publish: - # prevents this action from running on forks + detect-release: if: github.repository == 'vitejs/vite' + name: Detect release commit + runs-on: ubuntu-slim + outputs: + package: ${{ steps.detect.outputs.package }} + release: ${{ steps.detect.outputs.release }} + tag: ${{ steps.detect.outputs.tag }} + version: ${{ steps.detect.outputs.version }} + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + + - name: Install pnpm + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + + - name: Set node version to 24 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + package-manager-cache: false + + - name: Install deps + run: pnpm install + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + + - name: Detect release + id: detect + 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.tag }} runs-on: ubuntu-latest permissions: - contents: read + contents: write id-token: write environment: Release steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: + fetch-depth: 0 persist-credentials: false + - name: Check release tag + env: + TAG: ${{ needs.detect-release.outputs.tag }} + run: | + if git rev-parse --verify --quiet "refs/tags/$TAG"; then + echo "Tag $TAG already exists" + exit 1 + fi + - name: Install pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 @@ -42,6 +86,38 @@ jobs: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" - name: Publish package - run: npm i -g npm@^11.5.2 && pnpm run ci-publish "$REF_NAME" env: - REF_NAME: ${{ github.ref_name }} + 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 "$TAG" + + - id: generate-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ vars.RELEASE_GITHUB_APP_CLIENT_ID }} + private-key: ${{ secrets.RELEASE_GITHUB_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + repositories: ${{ github.event.repository.name }} + permission-contents: write + + - name: Create GitHub release + env: + 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 }} + run: | + node scripts/extract-changelog.ts "packages/$PACKAGE/CHANGELOG.md" "$VERSION" > "$NOTES_FILE" + + prerelease=() + if [[ "${VERSION%%+*}" == *-* ]]; then + prerelease+=(--prerelease) + fi + + gh release create "$TAG" \ + --target "$GITHUB_SHA" \ + --title "$TAG" \ + --notes-file "$NOTES_FILE" \ + "${prerelease[@]}" diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml deleted file mode 100644 index 24274cd72b4393..00000000000000 --- a/.github/workflows/release-tag.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Add GitHub Release Tag - -on: - push: - tags: - - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 - - "plugin-*" # Push events to matching plugin-*, i.e. plugin-(vue|vue-jsx|react|legacy)@1.0.0 - - "create-vite*" # # Push events to matching create-vite*, i.e. create-vite@1.0.0 - -# $GITHUB_REF_NAME - https://docs.github.com/en/actions/reference/workflows-and-actions/variables#default-environment-variables - -jobs: - release: - if: github.repository == 'vitejs/vite' - runs-on: ubuntu-slim - permissions: - contents: write # for yyx990803/release-tag to create a release tag - steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - with: - persist-credentials: false - - - name: Get pkgName for tag - id: tag - run: | - # skip if alpha - if [[ $GITHUB_REF_NAME =~ alpha ]]; then - exit 0 - fi - - # matching v2.0.0 / v2.0.0-beta.8 etc - if [[ $GITHUB_REF_NAME =~ ^v.+ ]]; then - pkgName="vite" - else - # `%@*` truncates @ and version number from the right side. - # https://stackoverflow.com/questions/9532654/expression-after-last-specific-character - pkgName=${GITHUB_REF_NAME%@*} - fi - - echo "pkgName=$pkgName" >> $GITHUB_OUTPUT - - - name: Create Release for Tag - # only run if tag is not alpha - if: steps.tag.outputs.pkgName - id: release_tag - uses: yyx990803/release-tag@8cccf7c5aa332d71d222df46677f70f77a8d2dc0 # v1.0.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - body: | - Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/${{ github.ref_name }}/packages/${{ steps.tag.outputs.pkgName }}/CHANGELOG.md) for details. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6ec3ab6f8eae22..8d8c5e5cf12cfa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -336,22 +336,46 @@ flowchart TD ### Release -If you have publish access, the steps below explain how to cut a release for a package. There are two phases for the release step: "Release" and "Publish". +All publishable packages in this repository use a pull-request-driven release flow. GitHub Actions prepares a release PR containing the version bump and changelog, and merging that PR triggers publishing. -"Release" is done locally to generate the changelogs and git tags: +#### Prepare a Release -1. Make sure the git remote for https://github.com/vitejs/vite is set as `origin`. -2. In the `vite` project root `main` branch, run `git pull` and `pnpm i` to get it up-to-date. Then run `pnpm build`. -3. Run `pnpm release` and follow the prompts to cut a release for a package. It will generate the changelog, a git release tag, and push them to `origin`. You can run with the `--dry` flag to test it out. -4. When the command finishes, it will provide a link to https://github.com/vitejs/vite/actions/workflows/publish.yml. -5. Click the link to visit the page, and follow the next steps below. +1. Run the [Prepare Release](.github/workflows/prepare-release.yml) workflow from the `main` branch. +2. Select `vite`, `create-vite`, or `plugin-legacy`. +3. Select a `release` type. The default `next` creates the next patch for a stable version or advances an existing prerelease. Alternatively, select another supported release type or enter an exact `version`, which takes precedence over `release`. +4. Wait for `vite-release-bot` to open the release PR. The PR contains the selected package's version bump and changelog entry. A `create-vite` release also updates template Vite dependency versions when appropriate. -"Publish" is done on GitHub Actions to publish the package to npm: +To preview the available release types and versions locally, run the following command from the repository root: -1. Shortly in the workflows page, a new workflow will appear for the released package and is waiting for approval to publish to npm. -2. Click on the workflow to open its page. -3. Click on the "Review deployments" button in the yellow box, a popup will appear. -4. Check "Release" and click "Approve and deploy". -5. The package will start publishing to npm. +```sh +node scripts/prepare-release.ts vite patch +``` + +Replace `vite` with `create-vite` or `plugin-legacy` as needed. + +#### Review and Publish + +1. Review the generated version and changelog, and wait for the release PR checks to pass. +2. Merge the PR while retaining its `release: ` commit subject. Vite uses `release: v`; other packages use `release: @`. A matching commit at the tip of `main` triggers the publish job. +3. Open the [Publish Package](.github/workflows/publish.yml) run and approve its `Release` environment deployment. +4. Wait for the workflow to publish the package, create its tag, and create the corresponding GitHub release. +5. Verify the new version on npm. + +#### Repository Configuration + +The release flow depends on configuration outside this repository: + +- The `vite-release-bot` GitHub App must be installed on `vitejs/vite` with Contents and Pull requests read/write permissions. Webhooks must be disabled. +- `RELEASE_GITHUB_APP_CLIENT_ID` must be a repository variable containing the app client ID. +- `RELEASE_GITHUB_APP_PRIVATE_KEY` must be a repository secret containing the app private key. +- The `Release` environment must require maintainer approval before publishing. +- The npm trusted publishers for `vite`, `create-vite`, and `@vitejs/plugin-legacy` must be restricted to `vitejs/vite`, `.github/workflows/publish.yml`, and the `Release` environment. + +#### Recovery + +- If release preparation fails, fix the cause and rerun the preparation workflow. Each run creates a uniquely named branch. +- If publishing fails before npm accepts the package, fix the cause and rerun the failed workflow. +- If npm publishing succeeds but tag or GitHub release creation fails, do not rerun the entire publish job blindly because npm versions are immutable. Confirm the package state first, then manually create the tag at the original release commit and create the GitHub release from the corresponding changelog entry. +- If the release tag already exists, investigate whether the package was previously published before retrying or changing any release state. To learn more about how and when Vite does releases, check out the [Releases](https://vite.dev/releases) documentation. diff --git a/package.json b/package.json index c9b1b12f2f7cc1..11c8f7d53548d8 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "docs-serve": "pnpm --filter=./docs run docs-serve", "build": "pnpm -r --filter='./packages/*' run build", "dev": "pnpm -r --parallel --filter='./packages/*' run dev", - "release": "tsx scripts/release.ts", "ci-publish": "tsx scripts/publishCI.ts", "ci-docs": "pnpm build && pnpm docs-build", "merge-changelog": "tsx scripts/mergeChangelog.ts" diff --git a/scripts/detect-release.ts b/scripts/detect-release.ts new file mode 100644 index 00000000000000..19b95ef5ee9760 --- /dev/null +++ b/scripts/detect-release.ts @@ -0,0 +1,19 @@ +import { detectReleaseCommit } from '@vitejs/release-scripts' +import { releasePackages } from './releaseUtils.ts' + +const subject = process.argv[2] +if (!subject) throw new Error('Release commit subject is required') + +const release = detectReleaseCommit({ + subject, + packages: releasePackages, + defaultPackage: 'vite', +}) + +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 new file mode 100644 index 00000000000000..c2bf0f187747ea --- /dev/null +++ b/scripts/extract-changelog.ts @@ -0,0 +1,9 @@ +import { extractChangelogEntry } from '@vitejs/release-scripts' + +const [path, version] = process.argv.slice(2) +if (!path || !version) { + throw new Error('Usage: node scripts/extract-changelog.ts ') +} + +const notes = extractChangelogEntry({ changelogPath: path, version }) +process.stdout.write(`${notes}\n`) diff --git a/scripts/prepare-release.ts b/scripts/prepare-release.ts new file mode 100644 index 00000000000000..00ec155654e153 --- /dev/null +++ b/scripts/prepare-release.ts @@ -0,0 +1,23 @@ +import { + generateChangelog, + getReleaseTag, + prepareRelease, +} from '@vitejs/release-scripts' +import { releasePackages, updateTemplateVersions } from './releaseUtils.ts' + +const { tag, version } = await prepareRelease({ + packages: releasePackages, + pkg: process.argv[2], + release: process.argv[3], + toTag: (pkg, version) => getReleaseTag(pkg, version, 'vite'), + generateChangelog: async (pkg) => { + if (pkg === 'create-vite') await updateTemplateVersions() + + await generateChangelog({ + getPkgDir: () => `packages/${pkg}`, + tagPrefix: pkg === 'vite' ? undefined : `${pkg}@`, + }) + }, +}) + +console.log(`tag=${tag}\nversion=${version}`) diff --git a/scripts/release.ts b/scripts/release.ts deleted file mode 100644 index bdfc32bf224e79..00000000000000 --- a/scripts/release.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { generateChangelog, release } from '@vitejs/release-scripts' -import colors from 'picocolors' -import { logRecentCommits, updateTemplateVersions } from './releaseUtils' - -release({ - repo: 'vite', - packages: ['vite', 'create-vite', 'plugin-legacy'], - toTag: (pkg, version) => - pkg === 'vite' ? `v${version}` : `${pkg}@${version}`, - logChangelog: (pkg) => logRecentCommits(pkg), - generateChangelog: async (pkgName) => { - if (pkgName === 'create-vite') await updateTemplateVersions() - - console.log(colors.cyan('\nGenerating changelog...')) - - await generateChangelog({ - getPkgDir: () => `packages/${pkgName}`, - tagPrefix: pkgName === 'vite' ? undefined : `${pkgName}@`, - }) - }, -}) diff --git a/scripts/releaseUtils.ts b/scripts/releaseUtils.ts index 6a7654960a753a..b9b8a0c21c3e56 100644 --- a/scripts/releaseUtils.ts +++ b/scripts/releaseUtils.ts @@ -1,54 +1,7 @@ import fs from 'node:fs/promises' import path from 'node:path' -import colors from 'picocolors' -import type { Options as ExecaOptions, ResultPromise } from 'execa' -import { execa } from 'execa' -function run( - bin: string, - args: string[], - opts?: EO, -): ResultPromise< - EO & (keyof EO extends 'stdio' ? object : { stdio: 'inherit' }) -> { - return execa(bin, args, { stdio: 'inherit', ...opts }) as any -} - -export async function getLatestTag(pkgName: string): Promise { - const pkgJson = JSON.parse( - await fs.readFile(`packages/${pkgName}/package.json`, 'utf-8'), - ) - const version = pkgJson.version - return pkgName === 'vite' ? `v${version}` : `${pkgName}@${version}` -} - -export async function logRecentCommits(pkgName: string): Promise { - const tag = await getLatestTag(pkgName) - if (!tag) return - const sha = await run('git', ['rev-list', '-n', '1', tag], { - stdio: 'pipe', - }).then((res) => res.stdout.trim()) - console.log( - colors.bold( - `\n${colors.blue(`i`)} Commits of ${colors.green( - pkgName, - )} since ${colors.green(tag)} ${colors.gray(`(${sha.slice(0, 5)})`)}`, - ), - ) - await run( - 'git', - [ - '--no-pager', - 'log', - `${sha}..HEAD`, - '--oneline', - '--', - `packages/${pkgName}`, - ], - { stdio: 'inherit' }, - ) - console.log() -} +export const releasePackages = ['vite', 'create-vite', 'plugin-legacy'] as const export async function updateTemplateVersions(): Promise { const vitePkgJson = JSON.parse( diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 339127f7d0296a..f94bc3c7a98adb 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -5,6 +5,7 @@ "module": "preserve", "target": "es2023", "moduleResolution": "bundler", + "allowImportingTsExtensions": true, "types": ["node"], "noEmit": true, "erasableSyntaxOnly": true, From 112f490df02f1760031feb6848f6c7789a465720 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Tue, 4 Aug 2026 20:13:31 +0900 Subject: [PATCH 2/8] ci: move the pr body generation to the script --- .github/workflows/prepare-release.yml | 11 ++-------- scripts/prepare-release.ts | 31 +++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index b1180f3bd8b89c..0c41736d9a5a2c 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -88,19 +88,12 @@ jobs: APP_SLUG: ${{ steps.generate-token.outputs.app-slug }} GH_TOKEN: ${{ steps.generate-token.outputs.token }} PACKAGE: ${{ inputs.package }} - PR_BODY_FILE: ${{ runner.temp }}/release-pr-body.md + PR_BODY: ${{ steps.prepare.outputs.pr_body }} TAG: ${{ steps.prepare.outputs.tag }} VERSION: ${{ steps.prepare.outputs.version }} run: | BRANCH="release-$PACKAGE-$VERSION-$GITHUB_RUN_ID" BOT_ID="$(gh api "/users/$APP_SLUG%5Bbot%5D" --jq .id)" - { - echo "$PACKAGE release PR generated by the Prepare Release workflow: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" - echo - echo "## Changelog" - echo - node scripts/extract-changelog.ts "packages/$PACKAGE/CHANGELOG.md" "$VERSION" - } > "$PR_BODY_FILE" git config user.name "$APP_SLUG[bot]" git config user.email "$BOT_ID+$APP_SLUG[bot]@users.noreply.github.com" git switch -c "$BRANCH" @@ -112,4 +105,4 @@ jobs: --base main \ --head "$BRANCH" \ --title "release: $TAG" \ - --body-file "$PR_BODY_FILE" + --body "$PR_BODY" diff --git a/scripts/prepare-release.ts b/scripts/prepare-release.ts index 00ec155654e153..428bf08edd977c 100644 --- a/scripts/prepare-release.ts +++ b/scripts/prepare-release.ts @@ -1,13 +1,25 @@ import { + extractChangelogEntry, generateChangelog, getReleaseTag, prepareRelease, } from '@vitejs/release-scripts' import { releasePackages, updateTemplateVersions } from './releaseUtils.ts' +function getRequiredEnv(name: string): string { + const value = process.env[name] + if (!value) throw new Error(`${name} is required`) + return value +} + +const pkg = process.argv[2] +const githubServerUrl = getRequiredEnv('GITHUB_SERVER_URL') +const githubRepository = getRequiredEnv('GITHUB_REPOSITORY') +const githubRunId = getRequiredEnv('GITHUB_RUN_ID') + const { tag, version } = await prepareRelease({ packages: releasePackages, - pkg: process.argv[2], + pkg, release: process.argv[3], toTag: (pkg, version) => getReleaseTag(pkg, version, 'vite'), generateChangelog: async (pkg) => { @@ -20,4 +32,19 @@ const { tag, version } = await prepareRelease({ }, }) -console.log(`tag=${tag}\nversion=${version}`) +const changelog = extractChangelogEntry({ + changelogPath: `packages/${pkg}/CHANGELOG.md`, + version, +}) +const prBody = [ + `${pkg} release PR generated by the Prepare Release workflow: ${githubServerUrl}/${githubRepository}/actions/runs/${githubRunId}`, + '', + '## Changelog', + '', + changelog, +].join('\n') +const delimiter = '__VITE_RELEASE_PR_BODY_EOF__' + +console.log( + `tag=${tag}\nversion=${version}\npr_body<<${delimiter}\n${prBody}\n${delimiter}`, +) From 105a0841de332f13d7e2ce3c12ac76bec95a3000 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Tue, 4 Aug 2026 20:58:17 +0900 Subject: [PATCH 3/8] ci: extract PR step --- .github/workflows/prepare-release.yml | 30 +++++++-------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 0c41736d9a5a2c..a25f3acb779379 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -84,25 +84,11 @@ jobs: permission-pull-requests: write - name: Open release PR - env: - APP_SLUG: ${{ steps.generate-token.outputs.app-slug }} - GH_TOKEN: ${{ steps.generate-token.outputs.token }} - PACKAGE: ${{ inputs.package }} - PR_BODY: ${{ steps.prepare.outputs.pr_body }} - TAG: ${{ steps.prepare.outputs.tag }} - VERSION: ${{ steps.prepare.outputs.version }} - run: | - BRANCH="release-$PACKAGE-$VERSION-$GITHUB_RUN_ID" - BOT_ID="$(gh api "/users/$APP_SLUG%5Bbot%5D" --jq .id)" - git config user.name "$APP_SLUG[bot]" - git config user.email "$BOT_ID+$APP_SLUG[bot]@users.noreply.github.com" - git switch -c "$BRANCH" - git add "packages/$PACKAGE" - 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: $TAG" \ - --body "$PR_BODY" + uses: vitejs/release-scripts/action/release-pr@hash # version + with: + app-slug: ${{ steps.generate-token.outputs.app-slug }} + token: ${{ steps.generate-token.outputs.token }} + package: ${{ inputs.package }} + pr-body: ${{ steps.prepare.outputs.pr_body }} + tag: ${{ steps.prepare.outputs.tag }} + version: ${{ steps.prepare.outputs.version }} From 326403680a061a18d4cbd52b3b2c9ead27c84927 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Tue, 4 Aug 2026 20:59:50 +0900 Subject: [PATCH 4/8] chore: update --- .github/workflows/prepare-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index a25f3acb779379..9a5ed141bae5b7 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -88,7 +88,7 @@ jobs: with: app-slug: ${{ steps.generate-token.outputs.app-slug }} token: ${{ steps.generate-token.outputs.token }} - package: ${{ inputs.package }} + package-path: packages/${{ inputs.package }} pr-body: ${{ steps.prepare.outputs.pr_body }} tag: ${{ steps.prepare.outputs.tag }} version: ${{ steps.prepare.outputs.version }} From e6a1095b6a627bbb0f55d6aa2199747824abdf49 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Tue, 4 Aug 2026 21:00:54 +0900 Subject: [PATCH 5/8] chore: update --- .github/workflows/prepare-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 9a5ed141bae5b7..197833167097cd 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -88,6 +88,7 @@ jobs: with: app-slug: ${{ steps.generate-token.outputs.app-slug }} token: ${{ steps.generate-token.outputs.token }} + package-name: ${{ inputs.package }} package-path: packages/${{ inputs.package }} pr-body: ${{ steps.prepare.outputs.pr_body }} tag: ${{ steps.prepare.outputs.tag }} From 10143fd9465b6638ca0a98741543a991d971317f Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Thu, 6 Aug 2026 15:45:07 +0900 Subject: [PATCH 6/8] chore: bump --- .github/workflows/prepare-release.yml | 2 +- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- pnpm-workspace.yaml | 1 + 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 197833167097cd..0436787efff8dc 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -84,7 +84,7 @@ jobs: permission-pull-requests: write - name: Open release PR - uses: vitejs/release-scripts/action/release-pr@hash # version + uses: vitejs/release-scripts/action/release-pr@bec07424241c85b28458756d0ef9edbb130dc63e # v1.9.1 with: app-slug: ${{ steps.generate-token.outputs.app-slug }} token: ${{ steps.generate-token.outputs.token }} diff --git a/package.json b/package.json index 11c8f7d53548d8..9894771a19c511 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/picomatch": "^4.0.3", "@types/stylus": "^0.48.43", "@types/ws": "^8.18.1", - "@vitejs/release-scripts": "^1.8.0", + "@vitejs/release-scripts": "^1.9.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 c01e47b869f96b..0de4a173230a4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^8.18.1 version: 8.18.1 '@vitejs/release-scripts': - specifier: ^1.8.0 - version: 1.8.0(conventional-commits-filter@6.0.1) + specifier: ^1.9.0 + version: 1.9.0(conventional-commits-filter@6.0.1) eslint: specifier: ^9.39.5 version: 9.39.5(jiti@2.7.0)(ms@2.1.3) @@ -4383,8 +4383,8 @@ packages: vite: workspace:* vue: ^3.2.25 - '@vitejs/release-scripts@1.8.0': - resolution: {integrity: sha512-onsGGV08sBfuV78buZUg0GpJU5iFOoxpxgi66pp5IFtbONPUQOq/9dDUx6QPJJjUovDNftg9QfYe0t9PZt/g6w==} + '@vitejs/release-scripts@1.9.0': + resolution: {integrity: sha512-TeL6n9EQLXpNS4qFXb2p9utsrf2yoRwdw4LxIi9BFrjB6qXIo+nDOdLQLp/KVBto2MkmuFT2cTMGK4OlR+aK5g==} '@vitejs/require@file:playground/json/dep-json-require': resolution: {directory: playground/json/dep-json-require, type: directory} @@ -10389,7 +10389,7 @@ snapshots: vite: link:packages/vite vue: 3.5.40(typescript@6.0.3) - '@vitejs/release-scripts@1.8.0(conventional-commits-filter@6.0.1)': + '@vitejs/release-scripts@1.9.0(conventional-commits-filter@6.0.1)': dependencies: '@conventional-changelog/template': 1.2.1 conventional-changelog: 8.1.0(conventional-commits-filter@6.0.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1d4c8a68cf46bc..8801cf2f980883 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -49,6 +49,7 @@ minimumReleaseAgeExclude: - rolldown - '@rolldown/binding-*' - '@voidzero-dev/vitepress-theme@5.0.2' + - '@vitejs/release-scripts@1.9.1' blockExoticSubdeps: true trustPolicy: no-downgrade trustPolicyExclude: From 358a98b60f8aee26debe8a4d93c5dee3505e0adc Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Fri, 7 Aug 2026 18:10:50 +0900 Subject: [PATCH 7/8] refactor: use github token --- .github/workflows/publish.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4f0fce66ccde3a..3f68e7f7adf2e2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -92,18 +92,9 @@ jobs: # zizmor: ignore[adhoc-packages] 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 - with: - client-id: ${{ vars.RELEASE_GITHUB_APP_CLIENT_ID }} - private-key: ${{ secrets.RELEASE_GITHUB_APP_PRIVATE_KEY }} - owner: ${{ github.repository_owner }} - repositories: ${{ github.event.repository.name }} - permission-contents: write - - name: Create GitHub release env: - GH_TOKEN: ${{ steps.generate-token.outputs.token }} + GH_TOKEN: ${{ github.token }} NOTES_FILE: ${{ runner.temp }}/release-notes.md PACKAGE: ${{ needs.detect-release.outputs.package }} TAG: ${{ needs.detect-release.outputs.tag }} From 1dd5633b14978652e9f475c0655b7383d908d1b0 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Thu, 20 Aug 2026 12:40:36 +0900 Subject: [PATCH 8/8] chore: bump and simplify --- .github/workflows/prepare-release.yml | 18 +---- CONTRIBUTING.md | 13 +-- package.json | 2 +- pnpm-lock.yaml | 112 ++++++++++++++------------ pnpm-workspace.yaml | 2 +- 5 files changed, 68 insertions(+), 79 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 0436787efff8dc..51a06fdd92f345 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -42,7 +42,8 @@ jobs: name: Prepare release PR runs-on: ubuntu-latest permissions: - contents: read + contents: write + pull-requests: write steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 @@ -73,21 +74,10 @@ jobs: run: | node scripts/prepare-release.ts "$RELEASE_PACKAGE" "$RELEASE" >> "$GITHUB_OUTPUT" - - id: generate-token - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 - with: - client-id: ${{ vars.RELEASE_GITHUB_APP_CLIENT_ID }} - private-key: ${{ secrets.RELEASE_GITHUB_APP_PRIVATE_KEY }} - owner: ${{ github.repository_owner }} - repositories: ${{ github.event.repository.name }} - permission-contents: write - permission-pull-requests: write - - name: Open release PR - uses: vitejs/release-scripts/action/release-pr@bec07424241c85b28458756d0ef9edbb130dc63e # v1.9.1 + uses: vitejs/release-scripts/action/release-pr@005dab4c647ff12519bfd076a595b2be33be8f6b # v1.9.2 with: - app-slug: ${{ steps.generate-token.outputs.app-slug }} - token: ${{ steps.generate-token.outputs.token }} + token: ${{ github.token }} package-name: ${{ inputs.package }} package-path: packages/${{ inputs.package }} pr-body: ${{ steps.prepare.outputs.pr_body }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8d8c5e5cf12cfa..59ceee7771a153 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -343,15 +343,7 @@ All publishable packages in this repository use a pull-request-driven release fl 1. Run the [Prepare Release](.github/workflows/prepare-release.yml) workflow from the `main` branch. 2. Select `vite`, `create-vite`, or `plugin-legacy`. 3. Select a `release` type. The default `next` creates the next patch for a stable version or advances an existing prerelease. Alternatively, select another supported release type or enter an exact `version`, which takes precedence over `release`. -4. Wait for `vite-release-bot` to open the release PR. The PR contains the selected package's version bump and changelog entry. A `create-vite` release also updates template Vite dependency versions when appropriate. - -To preview the available release types and versions locally, run the following command from the repository root: - -```sh -node scripts/prepare-release.ts vite patch -``` - -Replace `vite` with `create-vite` or `plugin-legacy` as needed. +4. Wait for the action to open the release PR. The PR contains the selected package's version bump and changelog entry. A `create-vite` release also updates template Vite dependency versions when appropriate. #### Review and Publish @@ -365,9 +357,6 @@ Replace `vite` with `create-vite` or `plugin-legacy` as needed. The release flow depends on configuration outside this repository: -- The `vite-release-bot` GitHub App must be installed on `vitejs/vite` with Contents and Pull requests read/write permissions. Webhooks must be disabled. -- `RELEASE_GITHUB_APP_CLIENT_ID` must be a repository variable containing the app client ID. -- `RELEASE_GITHUB_APP_PRIVATE_KEY` must be a repository secret containing the app private key. - The `Release` environment must require maintainer approval before publishing. - The npm trusted publishers for `vite`, `create-vite`, and `@vitejs/plugin-legacy` must be restricted to `vitejs/vite`, `.github/workflows/publish.yml`, and the `Release` environment. diff --git a/package.json b/package.json index d7964d77320c72..f444c36ab08376 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/picomatch": "^4.0.3", "@types/stylus": "^0.48.43", "@types/ws": "^8.18.1", - "@vitejs/release-scripts": "^1.9.1", + "@vitejs/release-scripts": "^1.9.2", "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 cd9d364212d423..a7c3bcd4cb5b59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^8.18.1 version: 8.18.1 '@vitejs/release-scripts': - specifier: ^1.9.1 - version: 1.9.1(conventional-commits-filter@6.0.1) + specifier: ^1.9.2 + version: 1.9.2 eslint: specifier: ^9.39.5 version: 9.39.5(jiti@2.7.0)(ms@2.1.3) @@ -179,7 +179,7 @@ importers: version: 1.2.0 tsdown: specifier: ^0.22.14 - version: 0.22.14(@vitejs/devtools@0.4.10)(@volar/typescript@2.4.28)(publint@0.3.21)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1)(vue-tsc@3.3.9) + version: 0.22.14(@vitejs/devtools@0.4.10)(@volar/typescript@2.4.28)(publint@0.3.23)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1)(vue-tsc@3.3.9) unrun: specifier: ^0.3.1 version: 0.3.1 @@ -231,7 +231,7 @@ importers: version: 1.1.1 tsdown: specifier: ^0.22.14 - version: 0.22.14(@vitejs/devtools@0.4.10)(@volar/typescript@2.4.28)(publint@0.3.21)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1)(vue-tsc@3.3.9) + version: 0.22.14(@vitejs/devtools@0.4.10)(@volar/typescript@2.4.28)(publint@0.3.23)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1)(vue-tsc@3.3.9) unrun: specifier: ^0.3.1 version: 0.3.1 @@ -2450,20 +2450,20 @@ packages: cpu: [x64] os: [win32] - '@conventional-changelog/git-client@3.1.0': - resolution: {integrity: sha512-Tqa/gHco2WJWa740NRjOrfKVvzIqxkZpecb8bemaQ8sKM5PXb1UK4uTyTb/1wIqNuOVaDOFxyBdhTIQZn6gdjQ==} + '@conventional-changelog/git-client@3.1.2': + resolution: {integrity: sha512-jZqwnJwf7nboIlAcw/mkOjVa6DexCcUOgT2oOQgkoi3z9vR8tGFkcMy2BFcYwjhL9sYcDDXkRQDayiDieCoW7A==} engines: {node: '>=22'} peerDependencies: conventional-commits-filter: ^6.0.1 - conventional-commits-parser: ^7.0.1 + conventional-commits-parser: ^7.1.2 peerDependenciesMeta: conventional-commits-filter: optional: true conventional-commits-parser: optional: true - '@conventional-changelog/template@1.2.1': - resolution: {integrity: sha512-TzlTVpKPjaqW6qOYjQcYUDuGsLCNsvFHVBXkYGTAnf5V37jCWrE5haKNXzz0WZUtVHjrpV76L1buANjwXMfT8w==} + '@conventional-changelog/template@1.4.0': + resolution: {integrity: sha512-aalGyl7dbB5PArRebDIX43ZvBlXrYm9uWzGJ26t+4SzJVPsOuvfILGGbw5X4yX7i50YEmJ8zvbiWnqH/AAnZqg==} engines: {node: '>=22'} '@cspotcode/source-map-support@0.8.1': @@ -3596,8 +3596,8 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - '@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': @@ -4400,8 +4400,8 @@ packages: vite: workspace:* vue: ^3.2.25 - '@vitejs/release-scripts@1.9.1': - resolution: {integrity: sha512-QWtOm5A9JPRqmfMhVv+zgppLwNwxq+FTPP8ibIV65WxclzNQ76tvQtML/DOstiDv4SJac/9IDpYQQKyNCdOoTw==} + '@vitejs/release-scripts@1.9.2': + resolution: {integrity: sha512-MIvAic70ulFycMdhJiXLBQS8xcsjOcD2kZMtYzPYPfWI+2ruhEzFYbAbdFLUZ82zXGReqQBRn04tWfS4as63+g==} '@vitejs/require@file:playground/json/dep-json-require': resolution: {directory: playground/json/dep-json-require, type: directory} @@ -5342,21 +5342,21 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - conventional-changelog-conventionalcommits@10.2.1: - resolution: {integrity: sha512-n4Kr1HFMTf3iMbES0TMxKIcYtUUv4rKqyQQp2JwfOEfFCOfGT3Tq4mCyJ8S9/YPyWhydjfKrrvnyl+gCjA+mJQ==} + conventional-changelog-conventionalcommits@10.4.0: + resolution: {integrity: sha512-Rriac6ZrAlVm6cy9Bz4NSp+WMHpwNXoPIYex+HjCgduAVUSbnew29DQjQw0C4g9u3HtSYzGiGY+pdBXAZo+4aA==} engines: {node: '>=22'} conventional-changelog-preset-loader@6.0.1: resolution: {integrity: sha512-GZ8E3RQzXQb3JFy0pKl8oeSf7ENIhvAMvJr+PlWkavZOesLHHdhkfNJ4SvW35eo1Fu2+EyVxWQ1tVvtzAG2iWg==} engines: {node: '>=22'} - conventional-changelog-writer@9.2.0: - resolution: {integrity: sha512-eACD5BaAQCYjeI3RExkCZopNaaIuXzCP4kaAb2lEFXcGa/KOuxJfj8v/SnjhvF6377pYn0A2Gji+6GhwUK8rEA==} + conventional-changelog-writer@9.2.1: + resolution: {integrity: sha512-StlYSmW3wLedRaqohJMpP3YuWiAqtgD0/cpsai9frdDkXv7rxj0hRbpJrubPYvJxJsjplONsOobEQnPuS9UgCg==} engines: {node: '>=22'} hasBin: true - conventional-changelog@8.1.0: - resolution: {integrity: sha512-idt1JK+3+Nt7gqH/d/sEYWdDeR+5XPov/jssmFN6XxmYSRlonTWSDWhWUPkmm0zbwYjtVdt+4My5aiPkKyvocw==} + conventional-changelog@8.1.3: + resolution: {integrity: sha512-fOMwLCxm46znJKPB08jLxl1FD8SOZOQHktlzCVhvhhVUfq0KgQSryoYXsRRHs1aRlZPR1/QK5wztnY8sBNC2AA==} engines: {node: '>=22'} hasBin: true @@ -5364,8 +5364,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.2: + resolution: {integrity: sha512-O+x4N2yH+ijvqWlIyTHsXTAP+algNWgGbjY2duCe8w2vUMvUB95cLRslCPfTMQyLAKlet3bhZTdu6ozn4M+QJQ==} engines: {node: '>=22'} hasBin: true @@ -6809,6 +6809,9 @@ packages: 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==} + package-name-regex@2.0.6: resolution: {integrity: sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==} engines: {node: '>=12'} @@ -7041,8 +7044,8 @@ packages: prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - publint@0.3.21: - resolution: {integrity: sha512-OqejcnMV6E9zel2oCrUOJEiiFkGiAAni0A6ibfQNh1k9Gu5z4F+Yso8lllam7AzmV6Do0vp7u3UpZNRBwuXaHQ==} + publint@0.3.23: + resolution: {integrity: sha512-5MQipUPcB7MWw84zLUkHrg/H/UBtk3LL+A0GngTTBSsiNJLQurMUaSIRG3edlOrRz4UFe0AOKK9TZdIWviV+jQ==} engines: {node: '>=18'} hasBin: true @@ -7731,6 +7734,10 @@ packages: resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + engines: {node: '>=18'} + tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -8964,16 +8971,16 @@ snapshots: '@cloudflare/workerd-windows-64@1.20260730.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.2(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.2)': 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.2 - '@conventional-changelog/template@1.2.1': {} + '@conventional-changelog/template@1.4.0': {} '@cspotcode/source-map-support@0.8.1': dependencies: @@ -9781,7 +9788,9 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@publint/pack@0.1.4': {} + '@publint/pack@0.1.6': + dependencies: + tinyexec: 1.3.0 '@quansync/fs@1.0.0': dependencies: @@ -10486,19 +10495,17 @@ snapshots: vite: link:packages/vite vue: 3.5.40(typescript@6.0.3) - '@vitejs/release-scripts@1.9.1(conventional-commits-filter@6.0.1)': + '@vitejs/release-scripts@1.9.2': dependencies: - '@conventional-changelog/template': 1.2.1 - conventional-changelog: 8.1.0(conventional-commits-filter@6.0.1) - conventional-changelog-conventionalcommits: 10.2.1 + '@conventional-changelog/template': 1.4.0 + conventional-changelog: 8.1.3 + conventional-changelog-conventionalcommits: 10.4.0 mri: 1.2.0 picocolors: 1.1.1 prompts: 2.4.2 - publint: 0.3.21 + publint: 0.3.23 semver: 7.8.5 - tinyexec: 1.2.4 - transitivePeerDependencies: - - conventional-commits-filter + tinyexec: 1.3.0 '@vitejs/require@file:playground/json/dep-json-require': {} @@ -11362,36 +11369,35 @@ snapshots: content-type@1.0.5: {} - conventional-changelog-conventionalcommits@10.2.1: + conventional-changelog-conventionalcommits@10.4.0: dependencies: - '@conventional-changelog/template': 1.2.1 + '@conventional-changelog/template': 1.4.0 conventional-changelog-preset-loader@6.0.1: {} - conventional-changelog-writer@9.2.0: + conventional-changelog-writer@9.2.1: dependencies: - '@conventional-changelog/template': 1.2.1 + '@conventional-changelog/template': 1.4.0 '@simple-libs/stream-utils': 2.0.0 argue-cli: 3.1.0 conventional-commits-filter: 6.0.1 semver: 7.8.5 - conventional-changelog@8.1.0(conventional-commits-filter@6.0.1): + conventional-changelog@8.1.3: 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.2(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.2) '@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-changelog-writer: 9.2.1 + conventional-commits-filter: 6.0.1 + conventional-commits-parser: 7.1.2 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.2: dependencies: '@simple-libs/stream-utils': 2.0.0 argue-cli: 3.1.0 @@ -12973,6 +12979,8 @@ snapshots: package-manager-detector@1.6.0: {} + package-manager-detector@1.8.0: {} + package-name-regex@2.0.6: {} parent-module@1.0.1: @@ -13189,10 +13197,10 @@ snapshots: prr@1.0.1: optional: true - publint@0.3.21: + publint@0.3.23: 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 @@ -14000,6 +14008,8 @@ snapshots: tinyexec@1.2.4: {} + tinyexec@1.3.0: {} + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.5) @@ -14035,7 +14045,7 @@ snapshots: ts-interface-checker@0.1.13: {} - tsdown@0.22.14(@vitejs/devtools@0.4.10)(@volar/typescript@2.4.28)(publint@0.3.21)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1)(vue-tsc@3.3.9): + tsdown@0.22.14(@vitejs/devtools@0.4.10)(@volar/typescript@2.4.28)(publint@0.3.23)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1)(vue-tsc@3.3.9): dependencies: ansis: 4.3.1 cac: 7.0.0 @@ -14054,7 +14064,7 @@ snapshots: verkit: 0.3.1 optionalDependencies: '@vitejs/devtools': 0.4.10(crossws@0.4.10)(srvx@0.12.5)(typescript@6.0.3)(valibot@1.4.2)(vite@packages+vite) - publint: 0.3.21 + publint: 0.3.23 tsx: 4.23.1 typescript: 6.0.3 unrun: 0.3.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1d6a8cad52fe09..e1c2219abaeeed 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -51,7 +51,7 @@ minimumReleaseAge: 1440 minimumReleaseAgeExclude: - rolldown - '@rolldown/binding-*' - - '@vitejs/release-scripts@1.9.1' + - '@vitejs/release-scripts@1.9.2' blockExoticSubdeps: true trustPolicy: no-downgrade trustPolicyExclude: