Skip to content Skip to footer
The Pain That Is GitHub Actions by qianli_cs

The Pain That Is GitHub Actions by qianli_cs

29 Comments

  • Post Author
    cresolutejw
    Posted March 20, 2025 at 4:33 am

    [flagged]

  • Post Author
    lxe
    Posted March 20, 2025 at 4:48 am

    Should have been zero permissions by default. The current model is a mess of global settings, workflow permissions, and job tokens that nobody understands.

  • Post Author
    jiggawatts
    Posted March 20, 2025 at 4:49 am

    Azure DevOps is nearly identical, but with slightly different zoo of issues that are less well documented in public sources.

    It also has the problem of not having a local dev runner for actions. The "inner loop" is atrociously slow and involves spamming your colleagues with "build failed" about a thousand times, whether you like it or not.

    IMHO, a future DevOps runner system must be an open-source, local-first. Anything else is madness.

    Right now we're in the "mainframe era" of DevOps, where we edit text files in baroque formats with virtually no tooling assistance, "submit" that to a proprietary batch system on a remote server that puts it into a queue… then come back after our coffee to read through the log printout.

    I should buy a dot matrix printer to really immerse myself into the paradigm.

  • Post Author
    rsanheim
    Posted March 20, 2025 at 4:50 am

    tldr but: don't use GitHub Actions. Its a mess, the availability is often atrocious, and the UI around it is _still_ as clunky as when they first rolled it out many years ago.

    There are better solutions out there.

  • Post Author
    goosejuice
    Posted March 20, 2025 at 4:50 am

    After using Gitlab CI for years and setting up some pretty complex scenarios, when I switched over to GitHub I found the UX to be pretty rough. Seems very opaque and I find the documentation to be at best hard to navigate.

    Maybe it was just the pain of switching but that was my initial impression.

  • Post Author
    sepositus
    Posted March 20, 2025 at 4:51 am

    Also an Earthly casualty here. Now having to look at Dagger.

  • Post Author
    peterldowns
    Posted March 20, 2025 at 4:53 am

    These are all real pains, author definitely has done a lot of work in Github Actions; respect. I'm sure these notes will save a lot of people a lot of frustration in the future, since Github Actions isn't going away — it's too damn convenient.

    I wonder why they chose to move back to Github Actions rather than evaluate something like Buildkite? At least they didn't choose Cloud Build.

  • Post Author
    fourteenminutes
    Posted March 20, 2025 at 4:56 am

    Used to use GH actions quite a bit. At my current company we set up RWX Mint (rwx.com/mint) and haven't looked back. (disclaimer: used to work at rwx but no longer affiliated)

  • Post Author
    silisili
    Posted March 20, 2025 at 4:57 am

    I worked at companies using Gitlab for a decade, and got familiar with runners.

    Recently switched to a company using Github, and assumed I'd be blown away by their offering because of their size.

    Well, I was, but not in the way I'd hoped. They're absolutely awful in comparison, and I'm beyond confused how it got to that state.

    If I were running a company and had to choose between the two, I'd pick Gitlab every time just because of Github actions.

  • Post Author
    hn_throwaway_99
    Posted March 20, 2025 at 5:00 am

    > A few days ago, someone compromised a popular GitHub Action. The response? "Just pin your dependencies to a hash." Except as comments also pointed out, almost no one does.

    I used GitHub actions when building a fin services app, so I absolutely used the hash to specify Action dependencies.

    I agree that this should be the default, or even the required, way to pull in Action dependencies, but saying "almost no one does" is a pretty lame excuse when talking about your own risk. What other people do has no bearing on your options here.

    Pin to hashes when pulling in Actions – it's much, much safer

  • Post Author
    larusso
    Posted March 20, 2025 at 5:00 am

    Interesting. I‘m also moving our CI to GitHub actions after years of using Jenkins with custom pipelines written in groovy etc. I checked out GitHub actions every now and then to feel if a move finally makes sense. I started with simple builds then tested adding our Jenkins macOS agents as self hosted runners. Just yesterday I wrote two actions to build and test a new .net project. I was able to run the whole thing with „act“ locally before running it on GitHub proper. I also played around and created a custom action in typescript (kicked off from the available predefined templates) to see how much work maintaining that means. All in all I‘m super happy and see no bigger issues. But here are some things that might be a reason:
    I split CI in build system logic which should and need to run locally and just stuff that GitHub needs to execute. At best that means describing what runs in parallel, and making specific connections. Any complicated logic needs to be abstracted away behind a a setup that is itself testable. I handle it the same for our build system components. We use gradle a lot and of a few custom plugins which encapsulate specific build / automations. It’s like dividing your problem into many smaller pieces which are tested and developed in isolation.

    Next to json I also used travisCI and appveyor for projects. And they all had the same (commit and pray) setup that ai hate. I wish if „act“ was a tool directly maintained by the GitHub folks though.

    https://github.com/nektos/act

  • Post Author
    GauntletWizard
    Posted March 20, 2025 at 5:03 am

    Whenever I get mad at GitHub Actions, I refer to it by it's true name: VisualSourceSafe Actions. Because that's what it is, and it shows. If you check out their Action Runner's source code[1], you'll find the VSS prefix all over, showing it's lineage.

    [1] https://github.com/actions/runner/blob/6654f6b3ded8463331fb0…

  • Post Author
    jamesu
    Posted March 20, 2025 at 5:03 am

    One thing I found useful was writing a runner for giteas actions CI which is similar to GHA. When you dig down and ask "what is ACTUALLY happening to run this job" then a lot of things such as the docker entrypoint not being modifiable make perfect sense.

  • Post Author
    yoyohello13
    Posted March 20, 2025 at 5:03 am

    My team uses GitLab and most other teams are on Azure dev ops. They keep trying to get us to switch telling us how amazing pipelines are. Glad to know we are not missing anything.

  • Post Author
    itissid
    Posted March 20, 2025 at 5:05 am

    I can relate to this pain. Isn't gitlab CI better at this especially the documentation and simplicity of it?

  • Post Author
    lemagedurage
    Posted March 20, 2025 at 5:05 am

    I wonder if the complexity of fixing trivial code mistakes in CI is worth it compared to catching them in a pre-commit hook.

  • Post Author
    mcqueenjordan
    Posted March 20, 2025 at 5:10 am

    Usually if you’re using it, it’s because you’re forced to.

    In my experience, the best strategy is to minimize your use of it — call out to binaries or shell scripts and minimize your dependence on any of the GHA world. Makes it easier to test locally too.

  • Post Author
    kelseydh
    Posted March 20, 2025 at 5:13 am

    We recently had a developer — while trying to debug container builds for a version upgrade for a PR on their local branch — accidentally trigger a deployment of their local branch's docker container to production (!) while messing around with Github action workflow files in their pull request (not main).

    Outside of locking down edit access to the .github workflow yml files I'm not sure how vulnerabilities like this can be prevented.

  • Post Author
    silverwind
    Posted March 20, 2025 at 5:16 am

    GHA is full of such obure behaviours. One I recently discovered is that one action can not trigger another:

    If one action pushes a tag to the repo, `on:tag` does not trigger. The workaround apparently is to make the first action push the tag using a custom SSH key, which magically has the ability to trigger `on:tag`.

  • Post Author
    jicea
    Posted March 20, 2025 at 5:17 am

    Genuine question: what's the GitLab equivalent of GitHub Actions?

    I'm using GitHub Actions to easily reuse some predefined job setup (like installing a certain Python version on Linux, macOS, Windows runners). For these tyoe of tasks, I find GitHub actions very useful and convenient. If you want to reuse predefined jobs, written by someone else, with GitLab CI/CD, what can I use?

  • Post Author
    ThomasRooney
    Posted March 20, 2025 at 5:23 am

    > A few days ago, someone compromised a popular GitHub Action. The response? "Just pin your dependencies to a hash." Except as comments also pointed out, almost no one does.

    I'm surprised nobody has mentioned dependabot yet. It automates this, keeping action dependencies pinned by hash automatically whilst also bringing in stable upgrades.

  • Post Author
    wordofx
    Posted March 20, 2025 at 5:30 am

    GHA feels like a discontinued product that people use so they can’t switch it off.

  • Post Author
    kfarr
    Posted March 20, 2025 at 5:46 am

    I was updating an old action last night to update gh pages and it’s from peaceiris. And it’s not bad, it did the job. But it feels kinda weird.

  • Post Author
    jalaziz
    Posted March 20, 2025 at 5:47 am

    GitHub Actions started off great as they were quickly iterating, but it very much seems that GitHub has taken its eye of the ball and the improvements have all but halted.

    It's really upsetting how little attention Actions is getting these days (<https://github.com/orgs/community/discussions/categories/act…> tells the story — the most popular issues have gone completely unanswered).

    Sad to see Earthly halting development and Dagger jumping on the AI train :(. Hopefully we'll get a proper alternative.

    On a related note, if you're considering https://www.blacksmith.sh/, you really should consider https://depot.dev/. We evaluated both but went with Depot because the team is insanely smart and they've solved some pretty neat challenges. One of the cooler features is that their caching works with the default actions/cache action. There's absolutely no need to switch out popular third party actions in favor of patched ones.

  • Post Author
    voidr
    Posted March 20, 2025 at 5:47 am

    I don't get the obsession with YAML and making things declarative that really should not be declarative.

    I'm so much happier on projects where I can use the non-declarative Jenkins pipelines instead of GH Actions or BB pipelines.

    These YAML pipelines are bad enough on their own, but throw in a department that is gatekeeping them and use runners as powerful as my Raspberry Pi and you have a situation where a lot of developers just give up and run things locally instead of the CI.

  • Post Author
    kylegalbraith
    Posted March 20, 2025 at 5:50 am

    This was an interesting read and highlighted some of the author's top-of-mind pain points and rough edges. However, in my experience, this is definitely not an exhaustive list, and there are actually many, many, many more.

    Things like 10 GB cache limits in GitHub, concurrency limits based on runner type, the expensive price tag for larger GitHub runners, and that's before you even get to the security ones.

    Having been building Depot[0] for the past 2.5 years, I can say there are so many foot guns in GitHub Actions that you don't realize until you start seeing how folks are bending YAML workflows to their will.

    We've been quite surprised by the `container` job. Namely, folks want to try to use it to create a reproducible CI sandbox for their build to happen in. But it's surprisingly difficult to work with. Permissions are wonky, Docker layer caching is slow and limited, and paths don't quite work as you thought they did.

    With Depot, we've been focusing on making GitHub Actions exponentially faster and removing as many of these rough edges as possible.

    We started by making Docker image builds exponentially faster, but we have now brought that architecture and performance to our own GHA runners [1]. Building up and optimizing the compute and processes around the runner to make jobs extremely fast, like making caching 2-10x faster without having to replace or use any special cache actions of ours. Our Docker image builders are right next door on dedicated compute with fast caching, making the `container` job a lot better because we can build the image quickly, and then you can use that image right from our registry in your build job.

    All in all, GHA is wildly popular. But, the sentiment around even it's biggest fans is that it could be a lot better.

    [0] https://depot.dev/

    [1] https://depot.dev/products/github-actions

  • Post Author
    stephencoxza
    Posted March 20, 2025 at 5:58 am

    Not sure if I'm the odd one out here. I thoroughly enjoy making the best of whatever the company wants to use. The flavour of CI/CD can be a debate similar to programming languages

  • Post Author
    suryao
    Posted March 20, 2025 at 6:14 am

    There definitely are a ton of issues with GitHub actions. To add to the OP's list:

    – Self-hosting on your aws/gcp/azure account can get a little tricky. `actions-runner-controller` is nice but runs your workflows within a docker container in k8s, which leads to complex handling for isolation, cost controls because of NAT etc.

    – Multi-arch container builds require emulation and can be extremely slow by default.

    – The cache limits are absurd.

    – The macos runners are slow and overpriced (arguably, most of their runners are).

    Over the last year, we spent a good amount of time solving many of these issues with WarpBuild[1]. Having unlimited cache sizes, remote multi-arch docker builders with automatic caching, and ability to self-host runners in your aws/gcp/azure account are valuable to minimize cost and optimize performance.

    [1] https://warpbuild.com

  • Post Author
    lars512
    Posted March 20, 2025 at 6:24 am

    At Our World In Data we ended up using Buildkite to run custom CI jobs, integrated with GitHub, but on cheap, massive Hetzner machines. I can really recommend the experience!

Leave a comment

In the Shadows of Innovation”

© 2025 HackTech.info. All Rights Reserved.

Sign Up to Our Newsletter

Be the first to know the latest updates

Whoops, you're not connected to Mailchimp. You need to enter a valid Mailchimp API key.