I hate GitHub Actions with passion
Core Pain: Slow, Opaque Feedback Loop
- Main frustration is the “edit → commit → push → wait” cycle for even trivial workflow fixes, especially when failures occur only on specific OS/arch runners (notably macOS and ARM).
- Lack of first‑class “SSH into failed runner” support makes debugging painful; you’re forced to guess via logs and repeated runs.
- Several commenters think the blog post over-attributes a dependency/install problem to Actions itself, but still agree the debugging story is bad.
Local Scripts vs YAML Logic
- Very strong consensus: do not embed real logic in GitHub Actions YAML.
- Common pattern: workflow should just:
- Check out code
- Call a repo‑local script / Makefile / task runner
- This preserves local debuggability, reduces lock‑in, and makes migration to another CI or local runners easier.
- Some note this isn’t unique to GHA: any CI becomes painful if logic lives in the CI config rather than scripts.
Tooling for Local/Interactive Runs
actis frequently suggested as a local runner; people find it helpful but:- Not a full drop‑in, Linux-only for proper runner emulation, and struggles with complex workflows and macOS use cases.
- SSH-style debugging actions (tmate, now upterm; custom SSH/cloudflared actions) partially address the pain by allowing live shell access to a failing job.
- Other CIs (SourceHut, Semaphore, some self-hosted setups) are praised for “rebuild with SSH” capabilities.
Environment, Caching, and Reproducibility
- Installing tools inside Actions is a recurring source of flakiness and time waste.
- Patterns to mitigate:
- Use containers or Nix/mise to define reproducible dev/CI environments; let Actions only orchestrate.
- Use hash-based caching keyed on lockfiles; rely on
actions/cacheor similar. - Some build custom images or run everything inside a single container/VM they can also run locally.
Language & Scripting Debates
- Disagreement over best scripting layer:
- Some argue bash + Make/task runners are sufficient “plumbing.”
- Others highlight bash’s fragility and prefer Python, PowerShell, Deno/TypeScript, or other higher-level tools for anything non-trivial.
- General agreement that whatever is used must be runnable locally and cross-platform where possible.
GitHub Actions vs Alternatives & Responsibility
- Mixed views: many dislike GHA UX and see strong vendor lock‑in; others find it still better than Jenkins/Travis and invaluable for free OSS compute and broad OS/arch coverage.
- Alternatives mentioned: GitLab CI, Bitbucket Pipelines, SourceHut, OneDev, self-hosted Forgejo/Gitea, plus newer platforms (Dagger, RWX, Depot).
- Some call the blog’s scenario a “skill issue” (misusing Actions for dependency installation), while others stress that the lack of tight feedback loops and interactive debugging is a genuine systemic flaw.