From e55f83f26f33f4a784c46cf97016f83d1e88bf75 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Sat, 14 Mar 2026 15:13:54 +0900 Subject: [PATCH 1/2] feat: allow overriding rolldown version --- .github/workflows/ecosystem-ci-selected.yml | 5 +++ .github/workflows/ecosystem-ci.yml | 5 +++ ecosystem-ci.ts | 21 ++++++++++-- types.d.ts | 2 ++ utils.ts | 36 +++++++++++++++++++-- 5 files changed, 65 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ecosystem-ci-selected.yml b/.github/workflows/ecosystem-ci-selected.yml index c11abbe5..9db101ef 100644 --- a/.github/workflows/ecosystem-ci-selected.yml +++ b/.github/workflows/ecosystem-ci-selected.yml @@ -41,6 +41,9 @@ on: vite_plugin_react_repo: description: "vite-plugin-react repository to use" type: string + rolldownRef: + description: "rolldown commit sha to use from pkg.pr.new" + type: string suite: description: "testsuite to run" required: true @@ -101,12 +104,14 @@ jobs: pnpm tsx ecosystem-ci.ts "--$REF_TYPE" "$REF" --repo "$REPO" + ${ROLLDOWN_REF:+--rolldown-ref "$ROLLDOWN_REF"} "$SUITE" id: ecosystem-ci-run env: REF_TYPE: ${{ inputs.refType }} REF: ${{ inputs.ref }} REPO: ${{ inputs.repo }} + ROLLDOWN_REF: ${{ inputs.rolldownRef }} SUITE: ${{ inputs.suite }} VITE_PLUGIN_REACT_REF: ${{ inputs.vite_plugin_react_ref }} VITE_PLUGIN_REACT_REPO: ${{ inputs.vite_plugin_react_repo }} diff --git a/.github/workflows/ecosystem-ci.yml b/.github/workflows/ecosystem-ci.yml index c9aa6654..7401d26a 100644 --- a/.github/workflows/ecosystem-ci.yml +++ b/.github/workflows/ecosystem-ci.yml @@ -37,6 +37,9 @@ on: required: true type: string default: "vitejs/vite" + rolldownRef: + description: "rolldown commit sha to use from pkg.pr.new" + type: string sendDiscordReport: description: "send results to discord" type: boolean @@ -98,12 +101,14 @@ jobs: pnpm tsx ecosystem-ci.ts "--$REF_TYPE" "$REF" --repo "$REPO" + ${ROLLDOWN_REF:+--rolldown-ref "$ROLLDOWN_REF"} "$SUITE" id: ecosystem-ci-run env: REF_TYPE: ${{ inputs.refType || github.event.client_payload.refType || 'branch' }} REF: ${{ inputs.ref || github.event.client_payload.ref || 'main' }} REPO: ${{ inputs.repo || github.event.client_payload.repo || 'vitejs/vite' }} + ROLLDOWN_REF: ${{ inputs.rolldownRef || github.event.client_payload.rolldownRef }} SUITE: ${{ matrix.suite }} - if: always() && (inputs.sendDiscordReport || github.event_name != 'workflow_dispatch') run: pnpm tsx discord-webhook.ts diff --git a/ecosystem-ci.ts b/ecosystem-ci.ts index 98ae3cb1..5517d10c 100644 --- a/ecosystem-ci.ts +++ b/ecosystem-ci.ts @@ -22,10 +22,13 @@ cli .option('--tag ', 'vite tag to use') .option('--commit ', 'vite commit sha to use') .option('--release ', 'vite release to use from npm registry') + .option( + '--rolldown-ref ', + 'rolldown commit sha to use from pkg.pr.new', + ) .action(async (suites, options: CommandOptions) => { if (options.commit) { const url = `https://pkg.pr.new/vite@${options.commit}` - //eslint-disable-next-line n/no-unsupported-features/node-builtins const { status } = await fetch(url) if (status === 200) { options.release = url @@ -34,12 +37,25 @@ cli console.log(`continuous release available on ${url}`) } } + let rolldownRelease: string | undefined + if (options.rolldownRef) { + const url = `https://pkg.pr.new/rolldown@${options.rolldownRef}` + const { status } = await fetch(url) + if (status === 200) { + rolldownRelease = url + console.log(`rolldown continuous release available on ${url}`) + } else { + throw new Error( + `rolldown continuous release not found for ref ${options.rolldownRef} (HTTP ${status}): ${url}`, + ) + } + } const { root, vitePath, workspace } = await setupEnvironment() const suitesToRun = getSuitesToRun(suites, root) let viteMajor if (!options.release) { await setupViteRepo(options) - await buildVite({ verify: options.verify }) + await buildVite({ verify: options.verify, rolldownRelease }) viteMajor = parseViteMajor(vitePath) } else { viteMajor = parseMajorVersion(options.release) @@ -50,6 +66,7 @@ cli viteMajor, workspace, release: options.release, + rolldownRelease, verify: options.verify, skipGit: false, } diff --git a/types.d.ts b/types.d.ts index 55c24ae2..c7236a95 100644 --- a/types.d.ts +++ b/types.d.ts @@ -15,6 +15,7 @@ export interface RunOptions { verify?: boolean skipGit?: boolean release?: string + rolldownRelease?: string agent?: (typeof AGENTS)[number] build?: Task | Task[] test?: Task | Task[] @@ -34,6 +35,7 @@ export interface CommandOptions { release?: string verify?: boolean skipGit?: boolean + rolldownRef?: string } export interface RepoOptions { diff --git a/utils.ts b/utils.ts index 6e3ee361..8006d1ca 100644 --- a/utils.ts +++ b/utils.ts @@ -352,6 +352,9 @@ export async function runInRepo(options: RunOptions & RepoOptions) { ...localOverrides, } } + if (options.rolldownRelease) { + overrides.rolldown = options.rolldownRelease + } await applyPackageOverrides(agent, dir, pkg, overrides) await beforeBuildCommand?.(pkg.scripts) await buildCommand?.(pkg.scripts) @@ -414,12 +417,41 @@ export async function getPermanentRef() { } } -export async function buildVite({ verify = false }) { +export async function buildVite({ + verify = false, + rolldownRelease, +}: { verify?: boolean; rolldownRelease?: string } = {}) { cd(vitePath) + const frozenInstall = getCommand('pnpm', 'frozen') const runBuild = getCommand('pnpm', 'run', ['build']) const runTest = getCommand('pnpm', 'run', ['test']) - await $`${serializeCommand(frozenInstall)}` + + if (rolldownRelease) { + // Override rolldown in vite's monorepo so it builds against the specified version + const pnpmWorkspaceFile = path.join(vitePath, 'pnpm-workspace.yaml') + if (!fs.existsSync(pnpmWorkspaceFile)) { + throw new Error( + `pnpm-workspace.yaml not found in vite repo, expected at ${pnpmWorkspaceFile}`, + ) + } + let content = await fs.promises.readFile(pnpmWorkspaceFile, 'utf-8') + // Replace existing rolldown override value + const rolldownPattern = /^(\s+rolldown:\s+).+$/m + if (!rolldownPattern.test(content)) { + throw new Error(`rolldown override not found in ${pnpmWorkspaceFile}`) + } + content = content.replace( + rolldownPattern, + `$1${JSON.stringify(rolldownRelease)}`, + ) + await fs.promises.writeFile(pnpmWorkspaceFile, content, 'utf-8') + console.log(`overriding rolldown in vite repo with ${rolldownRelease}`) + + await $`pnpm install --no-frozen-lockfile` + } else { + await $`${serializeCommand(frozenInstall)}` + } await $`${serializeCommand(runBuild)}` if (verify) { await $`${serializeCommand(runTest)}` From 0c6356625010d7e4a34a69dd24016d0c73969546 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 23 Mar 2026 14:17:40 +0900 Subject: [PATCH 2/2] refactor: use `applyPackageOverrides` to override rolldown --- utils.ts | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/utils.ts b/utils.ts index 8006d1ca..a3a5b6d4 100644 --- a/utils.ts +++ b/utils.ts @@ -428,27 +428,13 @@ export async function buildVite({ const runTest = getCommand('pnpm', 'run', ['test']) if (rolldownRelease) { + const pkgFile = path.join(vitePath, 'package.json') + const pkg = JSON.parse(await fs.promises.readFile(pkgFile, 'utf-8')) // Override rolldown in vite's monorepo so it builds against the specified version - const pnpmWorkspaceFile = path.join(vitePath, 'pnpm-workspace.yaml') - if (!fs.existsSync(pnpmWorkspaceFile)) { - throw new Error( - `pnpm-workspace.yaml not found in vite repo, expected at ${pnpmWorkspaceFile}`, - ) - } - let content = await fs.promises.readFile(pnpmWorkspaceFile, 'utf-8') - // Replace existing rolldown override value - const rolldownPattern = /^(\s+rolldown:\s+).+$/m - if (!rolldownPattern.test(content)) { - throw new Error(`rolldown override not found in ${pnpmWorkspaceFile}`) - } - content = content.replace( - rolldownPattern, - `$1${JSON.stringify(rolldownRelease)}`, - ) - await fs.promises.writeFile(pnpmWorkspaceFile, content, 'utf-8') - console.log(`overriding rolldown in vite repo with ${rolldownRelease}`) - - await $`pnpm install --no-frozen-lockfile` + await applyPackageOverrides('pnpm', vitePath, pkg, { + rolldown: rolldownRelease, + }) + console.log(`overridden rolldown in vite repo with ${rolldownRelease}`) } else { await $`${serializeCommand(frozenInstall)}` }