vuejs/core · error · Error
CI for the latest commit has not passed yet. Only run the re
Error message
CI for the latest commit has not passed yet. Only run the release workflow after the CI has passed.
What it means
Thrown by Vue's release script when run with skipPrompts (non-interactive) and CI for the latest commit has NOT passed. The script checks CI status; in interactive mode it would offer to run local tests, but in skipPrompts mode a failing/unknown CI is a hard stop. release.js:300 refuses to release an unverified commit.
Source
Thrown at scripts/release.js:300
if (!skipTests) {
step('Checking CI status for HEAD...')
let isCIPassed = await getCIResult()
skipTests ||= isCIPassed
if (isCIPassed) {
if (!skipPrompts) {
/** @type {{ yes: boolean }} */
const { yes: promptSkipTests } = await prompt({
type: 'confirm',
name: 'yes',
message: `CI for this commit passed. Skip local tests?`,
})
skipTests = promptSkipTests
} else {
skipTests = true
}
} else if (skipPrompts) {
throw new Error(
'CI for the latest commit has not passed yet. ' +
'Only run the release workflow after the CI has passed.',
)
}
}
if (!skipTests) {
step('\nRunning tests...')
if (!isDryRun) {
await run('pnpm', ['run', 'test', '--run'])
} else {
console.log(`Skipped (dry run)`)
}
} else {
step('Tests skipped.')
}
}
View on GitHub (pinned to a2b40db9a8)
Solutions
- Wait for CI on the latest commit to pass, then re-run the release.
- Run the release interactively (without skipPrompts) so it can offer to run local tests as an alternative.
- If CI is genuinely green but the status check is misread, verify the CI workflow name and required-status context match what release.js queries.
- Re-trigger CI on the commit and only release once it reports success.
Example fix
# before node scripts/release.js patch --skipPrompts # CI not green yet # after — wait, then run # (after CI shows green on HEAD) node scripts/release.js patch --skipPrompts
Defensive patterns
Strategy: validation
Validate before calling
// (Vue release maintainers only) check CI status before a skipPrompts release.
async function ciPassedForHEAD() {
// query the same status context release.js uses
return await getLatestCIStatus(headSHA)
}
if (skipPrompts && !(await ciPassedForHEAD())) {
throw new Error('CI not green on HEAD; do not release yet.')
} Type guard
function ciStatusIsSuccess(status: string): boolean {
return status === 'success'
} Prevention
- Only run skipPrompts releases after CI on HEAD reports success.
- Run interactively so the script can offer local tests as a fallback.
- Ensure the CI workflow name matches what release.js queries as a required status.
When it happens
Trigger: Running `node scripts/release.js <ver> --skipPrompts` (or in CI) when the GitHub CI check for HEAD is pending, failed, or not found. Triggering an automated release before the build workflow finishes.
Common situations: An automated release job firing on push before CI completes; a CI workflow that reports failure; CI status API returning no successful run for the commit; network/GitHub-API issue making CI status unreadable so it is treated as not-passed.
Related errors
- invalid target version: ${targetVersion}
- Found the following treeshaking errors:\n\n- ${errors.join('
- enum cache needs to be initialized before creating plugin
- [@vue/compiler-core] decodeEntities option is required in br
- [@vue/compiler-sfc] <script> and <script setup> must have th
AI-assisted analysis of vuejs/core@a2b40db9a8 (2026-08-12).
Data as JSON: /api/errors/f4cc979436527e7e.
Report an issue: GitHub.