Yeah, GHA has a massive plugin ecosystem. A common pattern is using an “action” from a plugin as one CI step/job. So these are dependencies that get resolved at runtime when GHA puts together your workload.
Other CI platforms have plugins, but the “plugins” in GitHub really get used as the core primitive of the system, which is part of what makes it so simple & easy to use… for really basic workflows. You just hook up a couple actions like this and you’re good to go, no shell scripting required. (Though you can totally do that too.)
I mean at the end of the day, it’s a big part of the value proposition, even if I prefer a much more bare metal approach. GHA is really not great at massive CI workloads.