Hi Nuttx project,

Further to my last mail of 2026-08-03 20:09:
https://lists.apache.org/thread.html/cncnnxz5lvfyz7of8qgm2cq875fxp6f9
, we are seeing your project at the top of the list for consumption of
GitHub hosted Actions runners for the past week, 50% higher than the
2nd most consuming project.

In addition to the information I provided last time, I have included
some suggestions from prompting Claude to examine your project repo's
workflow code thus, "Analyze the GitHub Actions workflows in this repo
and suggest changes that would be beneficial for the goal of a)
Reducing the number of concurrent workflow jobs started and b) The
duration of the jobs that do start https://github.com/apache/nuttx "

The suggested changes are listed below, of course generated by GenAI,
so use your discretion and own reading there and I am no GitHub
Actions SME, so have not curated them, just listed them here.

Note, there is also now a skill available that has been developed by
the magpie project which can be used to give more detailed feedback on
CI:
https://github.com/apache/magpie/blob/main/docs/repo-health/README.md#workflow-optimization-experimental

Make every effort to optimise your usage ASAP as the near constant
100% utilisation of our available GitHub hosted runner jobs is making
it practically impossible for all projects to get their CI jobs to
start and complete in a reasonable length of time, and it is incumbent
on all projects to do their part to help other projects get their fair
share of this limited resource.

Thanks.
Kind regards,
-Bob Thomson,
on behalf of ASF Infrastructure

Apache NuttX

Fewer concurrent jobs

In Fetch-Source, map changed paths to board groups (using the globs in
tools/ci/testlist/*.dat) and pass the result to the Linux matrix. This
replaces the label-based selection in arch.yml, which only shrinks the
matrix for PRs labeled exactly Arch+Size or Board+Size.
Replace the four *-Arch selector jobs with one job that outputs all
selections. Delete macOS-Arch and the macOS job, since arch.yml always
skips macOS.
Add max-parallel: 3 to MemBrowse analyze, and gate it on the same
board selection or on Build succeeding.
Add a paths: filter (**.py, **.yml, **.yaml, setup.cfg) to lint.yml.
If it’s a required check, adjust branch protection first.
Add github.event.workflow_run.conclusion != 'cancelled' to the if: in
depends-on-comment.yml.
In membrowse-comment.yml, check the step if: env.MEMBROWSE_API_KEY !=
''. A step’s if likely can’t see its own env:, so the step may never
run.

Shorter jobs

Make PR jobs restore-only for ccache (actions/cache/restore). Add a
nightly job on master that saves it under a stable key, since PRs
currently start cold.
Change the Linux artifact upload from if: always() to if: failure(),
and set retention-days.
Replace fetch-depth: 0 in check.yml and lint.yml with a blobless
filter or a limited depth.
Add timeout-minutes to the Linux and MemBrowse jobs.
Cache or bake into the image the per-job pip install ntfc and
test-case clone, and enable buildx caching in docker_linux.yml.

Reply via email to