Run GitHub Actions locally

2025-05-168:55273133github.com

Run your GitHub Actions locally 🚀. Contribute to nektos/act development by creating an account on GitHub.

You can’t perform that action at this time.


Read the original article

Comments

  • By ryangg 2025-05-1618:108 reply

    Just this week I tried giving this another chance to debug some weird CI failures for ruby tests. I’m on M-series macs so there is an inherent platform mismatch. That coupled with us using depot images as action runners. I was never able to get it running past the dry-run stage. There is just a lot of differences between CI runners and my local docker images. I even gave the image from catthehacker a try. Which is like >15GB. It still wouldn’t run. Finally gave up.

    • By Ameo 2025-05-1920:061 reply

      Sounds similar to my own experiences trying to debug GH actions locally.

      I've tried twice now to get it working, pulling down many GBs of images and installing stuff and then getting stuck in some obscure configuration or environment issue. I was even running Linux locally which I figured would be the happiest path.

      I'm not eager to try again, and unless there's a CI that's very slow or GH actions that need to be updated often for some reason, I feel like it's better to just brute-force it - waiting for CI to run remotely.

      • By dcherman 2025-05-204:102 reply

        There's another alternative - debug in CI itself. There's a few ways that you can pause your CI at a specific step and get a shell to do some debugging, usually via SSH. I've found that to be the most useful.

        • By dayjah 2025-05-2015:53

          Came here to say this, and to recommend: https://github.com/appleboy/ssh-action

          It’s slow and arduous work to inject at the right point and find out what went wrong. But it’s miles better than act. act is a noble idea, and I hope it can meet its target, but it falls short currently.

          ssh-action gets you on the host, and lets you quickly establish what is happening and implement fixes. It’s top notch!

          (I’m unaffiliated, just a big fan of ssh-action).

    • By 90s_dev 2025-05-201:201 reply

      GH Actions have always worked flawlessly for me, as long as I don't ever do anything unusual.

      Last week I moved from a custom server back to GH Pages + GH Actions, and broke a feature that depended on an out dir existing after one build phase and before another. I have no idea how to fix it. It's probably simple, I'm just burnt out.

      • By lukevp 2025-05-202:021 reply

        Each job runs on a separate runner. If you want to pass data across, use artifacts to upload and then retrieve the specified file(s).

        • By cedws 2025-05-205:47

          You can pass outputs between jobs by declaring one job as a dependency of another with needs:, then reference that dependency's outputs with needs.<job>.outputs

    • By cedws 2025-05-205:45

      ChristopherHX publishes Docker images which are created directly from packing up the root filesystem into a tarball from inside a runner. The images are huge though.

      https://github.com/ChristopherHX/runner-image-blobs/pkgs/con...

    • By suryao 2025-05-172:47

      Something like this may help by letting you ssh into the running instance so you can debug with the exact context: https://docs.warpbuild.com/tools/action-debugger

    • By jlongman 2025-05-172:31

      It’s even worse than that, it’s 20GB compressed and 60GB uncompressed. Regardless, if your VM runs out of disk space there’s no meaningful error (well 12 months ago) except a failure to start. (Possibly colima-specific I dunno I uninstalled docker-docker)

      I do find that some things just work locally and fail in real actions and vice versa. For the most part it’s made it easier to move the bar forward though.

    • By pxc 2025-05-2013:33

      This is really only for debugging the logic of your Actions, isn't it?

      On my team, Nix seems to work pretty well for encapsulating most of the interesting things CI jobs do. We don't use virtualization to run local versions of our jobs, and we don't run into architecture mismatch issues.

    • By philistine 2025-05-2013:021 reply

      My experience with Ruby on Apple Silicon as been far from seamless. The only way I could thoroughly get rid of problems was by running the most recent Ruby release and dealing with what THAT causes.

      I’m pretty sure GH actions don’t run the latest Ruby version.

      • By hk1337 2025-05-2013:111 reply

        My experience with both Ruby and Python Apple Silicon has been hit or miss. Mise has made it a lot simpler and seamless but if you need an older version or the absolute latest when it is released, you might have some issues. Mise has helped a lot, I generally do not expect to get an error.

        • By pseudocomposer 2025-05-2018:101 reply

          Are there specific problems? I’ve been primarily Ruby at work the last 6 or so years (before, also doing Ruby, but also lots of Java, Kotlin, Swift, FE stuff, and some Python)… exactly that period… and haven’t really noticed any issues. Granted, I don’t typically use a lot of obscure binary-only dependencies, or things whose C/C++/machine code wouldn’t mostly cross-compile fine.

          Granted, all this time I’ve always only used rbenv-managed Ruby versions (and rvm before that). I’ve long disliked/avoided Python because its ecosystem lacked any equivalent, but I know “uv” has gained popularity there, and perhaps Mise is good in Python land as well.

          • By hk1337 2025-05-213:18

            Usually just errors building it. Mostly python but I think I had an error with 3.4.3 the other day.

    • By larusso 2025-05-1919:58

      I had luck with my actions I tried to debug. But I also had the issue that the runtime difference is simply too big to 100% trust it. Too bad because I think the tool is quite good.

  • By Kinrany 2025-05-1922:199 reply

    Every mention of Github Actions is an occasion to start looking for the best alternative in <current_month>, let's go!

    Is Dagger usable yet? Is there still hope for Earthly? Are general purpose workflow systems winning any time soon, or are we still afraid of writing code? Any new systems out there that cover all the totally basic features like running locally, unlike Github Actions?

    • By akshayshah 2025-05-206:14

      Earthly has pivoted away from their CI/CD products: they’re shutting down Satellite, and they’re stopping active maintenance of the Earthly open source project.

      https://earthly.dev/blog/shutting-down-earthfiles-cloud/

    • By manx 2025-05-1922:263 reply

      I think we could build something on top of nix that is as easy to use and powerful as earthly, but gets all the nice stuff from nix: reproducibility, caching, just use any command from any nix package, etc

      • By z_mitchell 2025-05-2114:42

        That's mostly what we've built with Flox [1] (though I'm not exactly sure what you mean by run any command from any Nix package). It looks and feels like an amped up package manager, but uses Nix as kind of an infrastructure layer under the hood. Here's a typical workflow for an individual developer:

        - cd into repo

        - `flox activate` -> puts you into a subshell with your desired tools, environment variables, services, and runs any setup scripts you've defined

        - You do your work

        - `exit` -> you're back in your previous shell

        Setting up and managing an environment is also super easy:

        - cd into project directory

        - `flox init` -> creates an "environment"

        - `flox install python312` -> installing new packages is very simple

        - `flox edit` -> add any environment variables, setup scripts, services in an editor

        - `flox activate` -> get to work

        The reason we call these "environments" instead of "developer environments" is that what we provide is a generalization of developer environments, so they're useful in more than just local development contexts. For example, you can use Flox to replace Homebrew by creating a "default" environment in your home directory [2]. You can also bundle an environment up into a container [3] to fit Flox into your existing deployment tools, or use Flox in CI [4].

        All that stuff I described is free, but we have some enterprise features in development that won't be, and I think people are going to find those very appealing.

        [1] https://flox.dev

        [2] https://flox.dev/docs/tutorials/migrations/homebrew/

        [3] https://flox.dev/docs/reference/command-reference/flox-conta...

        [4] https://flox.dev/docs/tutorials/ci-cd/

      • By pxc 2025-05-2023:571 reply

        I built something like this out using an old version of Dagger and found it enormously complicated, and the they rewrote everything and abandoned the version of Dagger I used.

        When I they did, I said "fuck it" and just started distributing a Nix flake with wrappers for all the tools I want to run in CI so that at least that part gets handled safely and is easy to run locally.

        The worst and most annoying stuff to test is the CI platforms' accursed little pseudo-YAML DSLs. I still would like that piece.

        devenv.sh tasks might be a good basis for building on it. I think maybe bob.build also wants to be like this

        • By sea-gold 2025-05-2113:201 reply

          In addition to https://devenv.sh and https://bob.build , here are 2 others that are based on Nix.

          - https://flox.dev

          - https://www.jetify.com/devbox

          • By pxc 2025-05-2115:10

            Yes! I knew that those are comparable to devenv.sh (what my team uses; love it!) in terms of environment management but wasn't yet aware of whether or not they also have task runners like one might use to build CI/CD pipeline logic.

            I also want to say that this approach has largely spared my team the pain many users seem to have with Docker on aarch64 Macs. Nix works well on both aarch64 and x86_64, and doesn't require emulation to run. This is really more appropriate for running development tools locally, I think.

      • By asdffdasy 2025-05-2011:33

        that's actually the only good use for nix.

    • By globular-toast 2025-05-206:591 reply

      Gitlab? It's been around longer than Actions, it's much better and honestly not sure why anyone would consider anything else (but happy to hear if there are reasons).

      • By asdffdasy 2025-05-2011:35

        because they didn't keep sha1 and so it's not promoted as heavily as gh.

        /me puts tinfoilhat

    • By cobbzilla 2025-05-2010:581 reply

      Gitea can be easily self-hosted and supports Gitea Actions, which are largely compatible with GitHub Actions. I’m about to try it out. https://docs.gitea.com/next/usage/actions/overview

    • By tomrod 2025-05-200:356 reply

      How's Jenkins looking these days?

      • By Sleaker 2025-05-201:244 reply

        Seems fine to me, I don't really understand why people think CI is hard and they need to shop a different platform. All these systems are is a glorified shell script runner. It seems like developers just keep making up new DSLs over and over to do the same things.

        • By globular-toast 2025-05-206:581 reply

          We ended up running every job in a docker container, otherwise the Jenkins admin had to keep installing various tools on the runners. Gitlab supports this workflow natively so seemed the obvious choice.

          • By Sleaker 2025-05-3119:50

            Jenkins also supports this out of the box, and if it didn't have it for the pipeline DSL, again, Jenkins is a general purpose runner, you can just install docker, and run the script to run builds in the docker containers

        • By Groxx 2025-05-202:04

          More yaml will surely save us

        • By tayo42 2025-05-205:481 reply

          I wish jenkins had a better config as code option. Not crazy about groovy and you still need to click in the UI to get some set up before you can use. Maybe im stuck with an old version or something

          I mostly like Jenkins though, idk why people so desperately want to always move to something new. I guess I've never been on the maintenance side of running Jenkins for thousands of engineers though.

          • By rcleveng 2025-05-207:15

            I wanted to like the new Jenkinsfile approach, but the developer experience was beyond awful

        • By rcleveng 2025-05-207:13

          it's hard since you don't have the right environment, you can't debug, can't easily run locally and you have to push a change, and wait for the code to run on a remote machine 100x less powerful than you old laptop.

          If these systems thought a moment about the developer experience, they'd be magical, but they do not.

      • By cmehdy 2025-05-207:141 reply

        It's still a miserable experience to maintain it, update it, deal with mostly old plugins, dynamically loading the tooling, groovy idiosyncrasies.. and UI/UX that despite recent efforts continues to feel terrible.

        Managing the underlying infra is painful, and it remains a security liability even when not making obvious mistakes like exposing it to any open network.

        And good luck if you're having that fun at a windows shop and aren't using a managed instance (or 5).

        • By linsomniac 2025-05-2014:351 reply

          >It's still a miserable experience to maintain it...

          How so? I've been maintaining an instance for a decade, and it really doesn't seem that bad. Updating plugins we do about monthly, it's largely clicking a couple buttons in the UI. Updating Jenkins itself is an apt update. Groovy takes a bit to grok, sure, LLMs help a lot here. The UX isn't that bad, IMHO, but I can see why some would say that. We've switched over almost entirely to using a couple runners, docker, and Jenkinsfiles, which works great. We do still run deploys directly on the Jenkins box, largely because we need to run them single-threaded so they don't step on each-other with load balancer rotations.

          • By cmehdy 2025-05-2122:06

            Your use case is just fine because you're barely actually using Jenkins.

            I can give you a few examples of where it falls short:

            - security: there are constant CVEs about anything and everything in Jenkins

            - upgrade paths: if your company uses lots of plugins, the resulting spaghetti is of Italian proportions

            - if said company is in a Windows-only infra, on prem, and they still decided to use Jenkins then good luck doing anything. Try putting an agent on a non-system disk for example, Windows paths aren't handled and you find yourself already passing very specific "pre" commands that your master will send over ssh.

            - Said ssh connection can be lost due to a variety of things for which there are quite a few combinations of parameters when invoking Jenkins

            - While we're at it, SSO isn't exactly supported in Windows environments. There are two external plugins you can try, one created because the other doesn't work, and even then good luck with that.

            - At scale you end up having to be at least minimally interested in GC tuning, as Jenkins runs within the JVM

            - UI: normal "Views" are not informative, and a bunch of custom views need to be made but rarely work with all sorts of plugins that people using your CI can consider crucial (say, parametrized cronjobs)

            - Using the functionnalities Jenkins offers to "install tooling". Try to get it to use a certain version of node in a pipeline. Any current typical CI solution turns that into a straightforward task that's extendable, but in Jenkins you have to configure a very archaic and barely-working "tooling" area in your system to use that, and this barely works beyond the most basic tools.

            - Having to maintain enterprise-level groovy libraries. Good luck. It's Groovy but not exactly Groovy. It's all inside the JVM, but inside Jenkins's abstractions of it inside of the JVM.

            - Good luck monitoring lots of agents and doing typical tasks with them. Maintenance Windows are slowly coming in, monitoring sort-of-kinda-works via plugins..

            I've maintainted instances in small companies and larger ones. With less custom stuff and with a lot more. Compiling C++, C#, Java/Kotlin, Objective-C/Swift. Building webapps, iOS SDKs, Android SDKs, and native Windows apps.

            Jenkins can do everything if you bend it the way you want with some plugins and custom code. That's a strength that nothing else offers, but by and large it is a weakness of CI in the long run. Being opinionated isn't amazing, but sometimes it is required to be less complex, easier to maintain, more secure, easier to use, etc.

      • By h4kunamata 2025-05-200:451 reply

        With Git Actions at full speed..... it is dying.

        • By tomrod 2025-05-201:02

          Every org I have spoken with recently are in GH action cost reduction mode -- which always, always, always causes issues.

          Jenkins too going away, but, like Windows XP, people often reach back out for it.

      • By IshKebab 2025-05-207:28

        Still awful last I looked.

      • By hybrid_study 2025-05-200:46

        nyuk, nyuk, nyuk

    • By m_mueller 2025-05-209:30

      Let me throw another one out there: how about TeamCity on premise? Still can be done for free and the last time I used it (years ago) it left a very complete, stable and easy to use impression on me. Jenkins by comparison seems heavy and complicated.

    • By shepherdjerred 2025-05-2014:35

      I think Earthly is dead, but Dagger seems to be healthy still...

      Earthly was amazing. The exact same setup in CI and locally. They're reviving it with a community effort, but I'm not sure if it'll live

    • By esafak 2025-05-1923:091 reply

      earthly is config-based, so it's in the same league as GHA in my book. https://docs.earthly.dev/docs/earthly-config

      dagger is the only code-based solution. It works, but it does have some edges since it has a much bigger surface area and is constantly growing.

    • By ed_mercer 2025-05-200:46

      Can’t beat GitLab

  • By cadamsdotcom 2025-05-1923:543 reply

    Rather than tying CI & deployments to Github Actions, it is usually better to pull as much of it as possible out to shell scripts and call them in containers in GH actions..

    There are optimizations you’ll want (caching downloaded dependencies etc); if you wait to make those after your build is CI-agnostic you’ll be less tempted by vendor specific shortcuts.

    Usually means more code - but, easier to test locally. Also, swapping providers later will be difficult but not “spin up a team and spend 6 months” level.

    • By jiggawatts 2025-05-200:002 reply

      This is always the top comment in these kinds of threads, and I see this as an indication that the current state of CI/CD is pathetically propriety.

      It’s like the dark times before free and open source compilers.

      When are we going to push back and say enough is enough!?

      CI/CD desperately needs something akin to Kubernetes to claw back our control and ability to work locally.

      Personally, I’m fed up with pipeline development inner loops that involve a Git commit, push, and waiting around for five minutes with no debugger, no variable inspector, and dumping things to console logs like I’m writing C in the 1980s.

      You and I shouldn’t be reinventing these wheels while standing inside the tyre shop.

      • By rsanheim 2025-05-205:29

        We've had open source CI. We still have it. I remember ye olde days of Hudson, before it was renamed Jenkins. Lotsa orgs still use Jenkins all over the place, it just doesn't get much press. It predates GHA, Circle, and many of the popular cloud offerings.

        Turns out CI/CD is not an easy problem. I built a short-lived CI product before containers were really much of a thing ...you can guess how well that went.

        Also, I'll take _any_ CI solution, closed or open, that tries to be the _opposite_ of the complexity borg that is k8s.

      • By nitwit005 2025-05-2018:36

        Having a container makes debugging possible, but it's still generally going to be an unfriendly experience, compared to a script you can just run and debug immediately.

        It's inevitable that things will be more difficult to debug once you're using a third party asynchronous tool as part of the flow.

    • By jbmsf 2025-05-204:10

      That's mostly true.

      - You may need something to connect the dots between code changes and containers. It's not always possible to build everything on every change, especially in a multi/mono-repo setup.

      - You probably need some way to connect container outcomes back to branch protection rules. Again, if you are building everything, every time, it's pretty simple, but less so otherwise.

      - You likely want to have some control over the compute capacity on which the actions run, both for speed and cost control. And since caching matters, some compute solutions are better than others.

      I don't think GitHub Actions solves any of these problems well, but neither do containers on their own.

    • By Cloudef 2025-05-1923:581 reply

      Nix is in fact perfect for this.

HackerNews