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..a3a5b6d4 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,27 @@ 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) { + 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 + await applyPackageOverrides('pnpm', vitePath, pkg, { + rolldown: rolldownRelease, + }) + console.log(`overridden rolldown in vite repo with ${rolldownRelease}`) + } else { + await $`${serializeCommand(frozenInstall)}` + } await $`${serializeCommand(runBuild)}` if (verify) { await $`${serializeCommand(runTest)}`