Your CI should be disposable
Your CI should have one job: scheduling. It should decide when to do the thing. Your builds itself, should be controlled by you. Use Docker, Nix, a Makefile or what have you. The ideal workflow file looks like this:
steps:
name: Do the thing
run: nix build .#
This way, you can always run your CI locally, its just one command after all.
Don't use CI as a way to install packages, compilers, shared libraries, toolchains. Do use it to schedule builds.
The next time GitHub Actions goes down, you'll still be able to deliver your software. Consider an alternative though.