Boost logo

Boost :

From: Alexander Grund (alexander.grund_at_[hidden])
Date: 2024-12-09 19:04:15


Dear maintainers,

I made a bunch of PRs to fix the Github Actions CI for almost 40 repositories.
Opening a PR in GitHub is manual work while I was able to apply similar changes over all those repositories using a script which commits to a single branch (and hence PR) per repo. Hence the PRs contain a few related changes that in combination allow the CI to pass again.

To avoid repeating this in each PR I wanted to shortly explain the changes here:

  1. macos-12 runners are dropped by github and jobs won't start anymore. at least macos-13 needs to be used

  2. Ubuntu 23.* doesn't work anymore as e.g. some APT repositories don't exist anymore. Ubuntu 24.04 can be used instead
  3. clang 17 (and partly 16) don't work in C++23/2b mode with the stdlibc++ (12) installed on ubuntu 24.04, clang 18+ and/or the other C++ standards can still be used
  4. Support for Node 16 was recently fully dropped by Github Actions so the @v3 actions must be upgraded to @v4, which require Node 20. The workaround using $ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION has no effect anymore
  5. The node 20 version available by default conflicts with the glibc version in the Ubuntu 16/18 container images used for testing older compilers.

I addressed all of them with last one being the major one:
Installing a compatible version inside a custom image to be used instead doesn't work because GHA mounts the node 20 installation from the host os.

The solution I implemented downloads an unofficial node 20 built against the correct/older glibc and creates 2 mount points such that we can put that node onto the host runner and mount that instead of what github gives us using the idea from https://github.com/dixyes/ghactionsplay/blob/bf889ee2fed8dcd72cc8e32bfd4789be177c958f/.github/workflows/glibc217node20.yml
To avoid overloading the unofficial-builds.nodejs.org server we use a copy hosted at boost.io

Download and extraction requires curl and xz-utils to be installed which I added where required.

Additionally I noticed additional failures due to use of C++03 where the dependencies require C++11, or of C++0x using GCC < 4.9 where e.g. C++11 `alignof`, required by the Boost.SmartPtr dependency, is not available.
For (only) those I removed the C++03 and/or GCC 4.7/4.8 jobs (which cannot succeed).

I think combining those changes into a single PR avoids a lot of additional manual work by me and allows to verify that the changes are sufficient to make CI pass again. Keeping e.g. C++03 builds, that cannot succeed due to dependencies, makes verifying the success of the Node 20 fix harder/less clear

If anyone prefers to separate those changes into multiple PRs please mention that in the relevant PR for me to keep track of, or cherry-pick the individual changes. However it might be sufficient to check the status of the CI for the individual commits to compare the state (success/failure) for the jobs fixed or removed by the next commit.

I realize maintaining the CI is a PITA and hope this helps.

Regards,
Alex


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk