denoland/deno · error · AnyError

No CI runs found for branch

Error message

No CI runs found for branch '{branch}'. CI may not have run yet.

What it means

The `gh run list` call for the branch succeeded but returned zero run IDs, so Deno has no CI runs to search for artifacts. Unlike a failed lookup, this is specifically 'no runs yet': the branch exists but GitHub Actions has not recorded completed runs for it (or none matched the query).

Solutions

  1. Wait for the branch's CI to run and upload artifacts, then retry.
  2. Check the branch's checks page (or `gh run list --branch <b> --repo denoland/deno`) to confirm runs exist.
  3. If workflows are disabled/skipped for the branch, trigger one or pick a branch with CI.
  4. Build the branch locally if you cannot wait.
Defensive patterns

Strategy: retry

Validate before calling

until gh run list --branch "$BRANCH" --repo denoland/deno --limit 1 --json databaseId -q '.[].databaseId' 2>/dev/null | grep -q .; do
  echo "waiting for CI on $BRANCH…"; sleep 60
done
deno upgrade --branch "$BRANCH"

Try / catch

for i in 1 2 3; do deno upgrade --branch "$BRANCH" && break || sleep 180; done

Prevention

When it happens

Trigger: Upgrading from a freshly pushed branch before its workflows start; a branch whose workflow runs are still queued/in progress with no completed runs; workflows skipped for that branch; runs list filtered out by the query parameters.

Common situations: Tracking a maintainer's in-progress work right after push; branches in repos where Actions are disabled or path-filtered; GitHub delays in workflow scheduling.

Related errors


AI-assisted analysis of denoland/deno@9ad36f7a2c (2026-08-20). Data as JSON: /api/errors/7d9ff56f5dc07814. Report an issue: GitHub.

Appendix: source

Thrown at cli/tools/upgrade.rs:881

      ".[].databaseId",
    ])
    .output()
    .context("failed to query CI runs")?;

  if !runs_output.status.success() {
    let stderr = String::from_utf8_lossy(&runs_output.stderr);
    bail!("Failed to find CI runs for branch '{branch}': {stderr}");
  }

  let run_ids: Vec<String> = String::from_utf8_lossy(&runs_output.stdout)
    .trim()
    .lines()
    .filter(|l| !l.is_empty())
    .map(|s| s.to_string())
    .collect();

  if run_ids.is_empty() {
    bail!(
      "No CI runs found for branch '{branch}'. \
       CI may not have run yet."
    );
  }

  let temp_dir =
    tempfile::TempDir::new().context("failed to create temporary directory")?;
  let download_dir = temp_dir.path();

  let mut downloaded = false;
  for run_id in &run_ids {
    for name in [&artifact_name, &debug_artifact_name] {
      log::info!(
        "{}",
        colors::gray(format!("Trying run {run_id}, artifact \"{name}\"..."))
      );

      let dl_result = Command::new("gh")

View on GitHub (pinned to 9ad36f7a2c)