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
- Verify the filter matches packages: `turbo ls --filter='<pattern>'` (or a `--dry` run) and fix the pattern
- Confirm the task is defined in turbo.json `tasks` or in the matched packages' package.json scripts
- Check that the base ref in `--filter=...[origin/main]` exists and is the intended comparison point
- 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
- Sanity-check filters in CI with `turbo ls --filter=...` or a `--dry` run before the real invocation
- Treat an empty run summary (attempted 0) as a pipeline smell — exit non-zero in wrapper scripts
- Keep task names in turbo.json in sync with CI invocations after renames
- Re-check the base ref in `...[origin/main]` filters whenever the default branch changes
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
- Error writing run summary: {err}
- Found both turbo.json and turbo.jsonc in the same directory:
- Found both turbo.json and turbo.jsonc in the same directory:
- refusing to write structured log to symlink: {}
- error creating log file directory: {err:?}
AI-assisted analysis of vercel/turborepo@f9245100cf (2026-08-17).
Data as JSON: /api/errors/da41addd81227b09.
Report an issue: GitHub.