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

  1. Wait for CI on the latest commit to pass, then re-run the release.
  2. Run the release interactively (without skipPrompts) so it can offer to run local tests as an alternative.
  3. 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.
  4. 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

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


AI-assisted analysis of vuejs/core@a2b40db9a8 (2026-08-12). Data as JSON: /api/errors/f4cc979436527e7e. Report an issue: GitHub.