Skip to content

ci: modularize CI workflow#1193

Open
alandefreitas wants to merge 6 commits intocppalliance:developfrom
alandefreitas:develop
Open

ci: modularize CI workflow#1193
alandefreitas wants to merge 6 commits intocppalliance:developfrom
alandefreitas:develop

Conversation

@alandefreitas
Copy link
Copy Markdown
Collaborator

@alandefreitas alandefreitas commented May 1, 2026

CI has become the biggest bottleneck in the project by a wide margin. This PR extremely modularizes, simplifies, and optimizes the CI workflow.

  • The individual build jobs are now about ~10x faster when the cache is warm, and runners are available.
  • The main ci.yml entry point shrinks from 1172 lines to 62 lines and points to other scripts for customization points.
  • The total workflow goes from 1430 to 746 lines split across reusable modules.
  • Native action features are used for everything instead of custom bash scripts. The actions were adapted when necessary.

Tested by running the full CI matrix on this branch and by extending the bootstrap unit tests.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 1, 2026

🚧 Danger.js checks for MrDocs are experimental; expect some rough edges while we tune the rules.

⚠️ Warnings

Warning

Source changed but no tests or fixtures were updated.

🧾 Changes by Scope

Scope Lines Δ% Lines Δ Lines + Lines - Files Δ Files + Files ~ Files ↔ Files -
⚙️ CI 69% 2480 1077 1403 18 8 6 - 4
🔧 Toolchain Tests 17% 596 546 50 5 - 5 - -
🔧 Toolchain 11% 382 314 68 5 - 5 - -
🛠️ Source 2% 88 68 20 2 - 2 - -
📄 Docs 1% 20 20 - 1 - 1 - -
🏗️ Build <1% 13 8 5 1 - 1 - -
Total 100% 3579 2033 1546 32 8 20 - 4

Legend: Files + (added), Files ~ (modified), Files ↔ (renamed), Files - (removed)

🔝 Top Files

  • .github/workflows/ci.yml (CI): 1164 lines Δ (+27 / -1137)
  • .github/workflows/ci-releases.yml (CI): 350 lines Δ (+350 / -0)
  • util/bootstrap/tests/test_archive_fetcher_loader.py (Toolchain Tests): 289 lines Δ (+258 / -31)

Generated by 🚫 dangerJS against cf37078

@codecov
Copy link
Copy Markdown

codecov Bot commented May 1, 2026

Codecov Report

❌ Patch coverage is 82.90155% with 33 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.12%. Comparing base (966e652) to head (cf37078).

Files with missing lines Patch % Lines
util/bootstrap/src/recipes/fetcher.py 82.08% 18 Missing and 6 partials ⚠️
util/bootstrap/src/installer.py 79.16% 3 Missing and 2 partials ⚠️
util/bootstrap/src/core/ui.py 86.20% 3 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1193      +/-   ##
===========================================
+ Coverage    79.20%   82.12%   +2.92%     
===========================================
  Files          308       33     -275     
  Lines        32332     3149   -29183     
  Branches      6493      734    -5759     
===========================================
- Hits         25607     2586   -23021     
+ Misses        4355      387    -3968     
+ Partials      2370      176    -2194     
Flag Coverage Δ
bootstrap 82.12% <82.90%> (+0.22%) ⬆️
cpp ?

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@cppalliance-bot
Copy link
Copy Markdown

cppalliance-bot commented May 1, 2026

An automated preview of the documentation is available at https://1193.mrdocs.prtest2.cppalliance.org/index.html

If more commits are pushed to the pull request, the docs will rebuild at the same URL.

2026-05-01 21:09:42 UTC

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 85c4debe42

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/ci-releases.yml Outdated
Comment thread .github/workflows/ci-build.yml Outdated
@alandefreitas alandefreitas force-pushed the develop branch 3 times, most recently from 449ca29 to 5be5b35 Compare May 1, 2026 17:24
When use-system-stdlib is enabled and the compiler specified in the
compilation database cannot be found (e.g. synthetic databases that
reference "clang" on systems with only GCC), try common fallback
compilers (g++, gcc, clang++, clang, c++) to discover system include
paths. This prevents fatal "stddef.h not found" errors when running
mrdocs on systems where the database compiler isn't installed.
Only ASan and MSan require instrumented dependencies (libc++).
UBSan and TSan instrumentation is added at compile time to the
project itself, not to its dependencies. Passing the sanitizer
to LLVM builds for UBSan caused unnecessary 2+ hour rebuilds
and cache key mismatches.

Also simplify the stamp hash: only include compiler path and
flags when the sanitizer actually changes how deps are built.
This lets builds with different compilers share the same cached
LLVM when no sanitizer instrumentation is needed.
The banner was added when the rules were brand new; nothing has come back
about false positives since, so warnings can stand on their own like any
other check.
libstdc++-15 implements ranges::less via __not_overloaded_spaceship,
which probes operator<=> via ADL on the element type.  For SmallVector<Symbol*, 16>, ADL on Symbol* finds the generic mrdocs::operator<=> template.  Clang 19 substitutes T = Symbol* into that template and hard-errors on the resulting non-member operator<=> with no class/enum parameter, instead of SFINAE'ing the candidate out -- a regression present in 19 but not in 18 or >=20.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants