-
Why are you starting this discussion?Question What GitHub Actions topic or product is this about?General Discussion DetailsI read that GitHub Docs mentions the workflow conclusions. What's missing there is a matrix how GitHub aggregates multiple conclusions to an overall conclusion. Especially the
Hence, |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 1 reply
-
|
GitHub’s check aggregation logic is effectively this: There is no tri-state logic. GitHub does binary gating: “Is this commit safe to merge automatically or not?” If the answer is not an unambiguous YES, GitHub returns ❌. That’s it. ⸻ Why cancelled is treated as failure (even though it isn’t one) You’re correct: From GitHub’s perspective: So GitHub collapses: into the same bucket: “this check did not prove the code is safe” That bucket renders as ❌. ⸻ Why your example shows ❌ despite more successes than cancellations GitHub does NOT do majority voting. Conceptually: So: This is intentional and consistent. ⸻ Why GitHub does NOT have ❗ or 🛑 (inconclusive) Because it would break automation guarantees. Think about: These systems need deterministic outcomes: An “inconclusive” state would force humans back into the loop, which defeats the purpose of CI enforcement. GitHub optimizes for: “Safe automation over semantic purity” Even if that annoys people who think carefully about states (like you). ⸻ About your specific cancellation reasons You listed: You’re right that some of these are benign. But GitHub does not distinguish intent at aggregation time because: So GitHub chooses the conservative rule: Cancelled = not proven = block ⸻ Is this a documentation gap? Yes. Absolutely. GitHub Docs explain individual conclusions, but they avoid documenting aggregation rules because: But the behavior is stable and intentional. ⸻ Would your proposed ❗ be “better”? Semantically? Yes. Because then GitHub would need: GitHub is not going to add that complexity. ⸻ The correct mental model (this is the key takeaway) Stop thinking in terms of: “Was this run a failure?” Start thinking in terms of: “Did this run produce a success signal that GitHub can trust?” If not → ❌. That’s the whole system. ⸻ If you want different behavior Your only real options are: Anything else is fighting GitHub’s design, and you’ll lose. ⸻ |
Beta Was this translation helpful? Give feedback.
-
|
This is a valid point regarding how GitHub aggregates statuses. Currently, GitHub follows a strict 'Success or Fail' logic for the top-level commit status. If any job in a workflow is cancelled, it means the intended CI/CD pipeline did not complete its validation. Because the state is not 'Success', GitHub marks the entire run as failed (Red X) to prevent accidental deployments or merges of incomplete checks. If you want specific jobs to not affect the overall status when they don't succeed, you can use the continue-on-error: true property in your workflow YAML. This will allow the job to fail or be interrupted without turning the entire workflow status red. However, regarding your suggestion for a different 'inconclusive' icon: many users have requested more granular status badges. For now, the Red X remains the default for anything that isn't a total success to ensure maximum safety in development pipelines. |
Beta Was this translation helpful? Give feedback.
-
|
GitHub aggregates workflow conclusions using strict AND logic for required checks. Any job that isn’t success (failure, cancelled, timed_out, or skipped) blocks the overall workflow. Cancelled jobs aren’t failures per se, but they don’t produce a trustable success signal, so GitHub treats them as ❌ to ensure merge safety. There’s no tri-state or “inconclusive” because automation (branch protection, auto-merge, CI/CD pipelines) relies on deterministic outcomes. To avoid unwanted failures, mark cancellable jobs as optional or use continue-on-error: true. |
Beta Was this translation helpful? Give feedback.


This is a valid point regarding how GitHub aggregates statuses.
Currently, GitHub follows a strict 'Success or Fail' logic for the top-level commit status. If any job in a workflow is cancelled, it means the intended CI/CD pipeline did not complete its validation. Because the state is not 'Success', GitHub marks the entire run as failed (Red X) to prevent accidental deployments or merges of incomplete checks.
If you want specific jobs to not affect the overall status when they don't succeed, you can use the continue-on-error: true property in your workflow YAML. This will allow the job to fail or be interrupted without turning the entire workflow status red.
However, regarding your sugges…