vercel/turborepo · warning

No tasks were executed as part of this run.

Error message

No tasks were executed as part of this run.

What it means

Emitted while printing the run summary when `attempted == 0`: turbo finished without executing a single task. It is not a crash — the command ran, but the resulting task graph contained no runnable tasks, typically because package filters matched nothing or the selected tasks do not exist in any matched package.

Source

Thrown at crates/turborepo-run-summary/src/execution.rs:173

        }

        if !failed_tasks.is_empty() {
            let mut formatted: Vec<_> = failed_tasks
                .iter()
                .map(|task| color!(ui, BOLD_RED, "{}", task.task_id()).to_string())
                .collect();
            formatted.sort();
            line_data.push(("Failed", formatted.join(", ")));
        }

        let max_length = line_data
            .iter()
            .map(|(header, _)| header.len())
            .max()
            .unwrap_or_default();

        if self.attempted == 0 {
            turborepo_log::warn(
                turborepo_log::Source::turbo(turborepo_log::Subsystem::Summary),
                "No tasks were executed as part of this run.",
            )
            .emit();
        }

        // All output goes through the Logger. The TerminalSink renders
        // ANSI codes for color; the StructuredLogSink strips them.
        turborepo_log::info(
            turborepo_log::Source::turbo(turborepo_log::Subsystem::Summary),
            "",
        )
        .emit();
        for (header, trailer) in &line_data {
            turborepo_log::info(
                turborepo_log::Source::turbo(turborepo_log::Subsystem::Summary),
                format!(
                    "{}",

View on GitHub (pinned to f9245100cf)

Solutions

  1. Verify the filter matches packages: `turbo ls --filter='<pattern>'` (or a `--dry` run) and fix the pattern
  2. Confirm the task is defined in turbo.json `tasks` or in the matched packages' package.json scripts
  3. Check that the base ref in `--filter=...[origin/main]` exists and is the intended comparison point
  4. Make CI fail on empty runs so a silent no-op is caught instead of skipped

Example fix

# before
turbo run build --filter=packge   # typo: matches nothing

# after
turbo run build --filter=package  # or --filter='./apps/**'
Defensive patterns

Strategy: validation

Validate before calling

# Verify the filter matches something before the real run
if [ -z "$(turbo ls --filter="$PACKAGE" 2>/dev/null)" ]; then
  echo "filter '$PACKAGE' matched no packages"; exit 1
fi
turbo run build --filter="$PACKAGE"

Prevention

When it happens

Trigger: `turbo run build --filter=<pattern>` where the filter matches no packages (typo, wrong scope syntax, an exclusion filter that removes everything), or a task name no matched package defines; the summary path also serves dry runs, so `--dry=json`/`--dry=text` runs that select nothing report it too.

Common situations: Typo'd filters like `--filter=packge` instead of `package`; `--filter=...[origin/main]` with a wrong or stale base ref; tasks missing from turbo.json after a rename; CI pipelines that silently do nothing and 'pass'.

Related errors


AI-assisted analysis of vercel/turborepo@f9245100cf (2026-08-17). Data as JSON: /api/errors/da41addd81227b09. Report an issue: GitHub.