We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake?

Published 2026-05-22 · Updated 2026-05-22

---

It happened on a Tuesday. We were celebrating a successful release, a new feature finally hitting our users, and feeling generally good about our DevOps setup. Then, the notification popped up: GitHub Actions was billing us $300 a month. Just for running lint. Seriously. We’d been happily deploying code for months, and this was a complete surprise. It wasn’t a catastrophic failure, but it was a brutal reminder of how quickly costs can spiral out of control when you don’t have a clear understanding of your cloud infrastructure. And frankly, we weren't alone. This seemingly isolated incident sparked a conversation with our community, and we heard stories of similar, often baffling, overspending. Let’s unpack this.

The macOS Runner Revelation

Our initial investigation was… frustrating. We’d been using GitHub Actions to run linters and static analysis tools on macOS runners as part of our nightly builds. The runner was configured to automatically trigger whenever a pull request was created or updated. It seemed logical – catch potential issues before they hit production. But the bills kept rolling in. Digging deeper, we realized the runner wasn't just running the linters. It was running *everything*. Every step in the workflow was executing on the macOS runner, and because the runner was configured to run continuously, it was essentially running all the time. The cost wasn’t the lint itself; it was the cost of maintaining a fully-fledged macOS environment, running idle, waiting for a pull request. It was a perfect storm of misconfiguration and a lack of vigilance. This experience highlighted a critical truth: you don't pay for the tools you use, you pay for the *consumption* of the infrastructure that supports them.

The Common Thread: Unmonitored Runners

The stories we heard from other DevOps teams echoed this same theme. Many were running GitHub Actions runners on macOS – often for testing and quality assurance – without actively monitoring their usage or cost. One team we spoke with had a similar situation, using runners for testing native iOS apps. They’d initially configured runners to automatically start when a pull request was opened, but hadn’t set any limits or budgets. They only discovered the expense when their monthly bill spiked dramatically. Another team was using runners for running Cypress tests, and had inadvertently left the runner running 24/7 because they hadn’t implemented any scheduling or timeout mechanisms. The common factor wasn't the tools themselves, but the *ongoing operation* of the runner infrastructure. It’s easy to get caught up in the immediate needs of a project and overlook the long-term costs.

Actionable Detail: Runner Pools and Rate Limits

So, what can you do to avoid this? The first step is understanding GitHub Actions runner pools and rate limits. GitHub Actions allows you to create different pools of runners, each configured with specific operating systems and architectures. You should only create pools that you *actually need*. Don't create a macOS pool if you only need Linux runners for your CI/CD pipeline. Secondly, familiarize yourself with rate limits. GitHub Actions imposes limits on the number of concurrent workflows you can run. Exceeding these limits will cause your workflows to fail, but more importantly, it’s a built-in cost control mechanism. Using a tool like GitHub’s Actions Insights can help you visualize your workflow execution and identify potential bottlenecks or excessive activity. For example, if you notice your nightly build workflow is consistently exceeding the rate limit, you can adjust your workflow to run less frequently or optimize it for faster execution.

The Importance of Scheduled Runners & Timeout Mechanisms

Beyond pools and rate limits, implementing scheduled runners and timeout mechanisms is crucial. Instead of having runners constantly running, schedule them to only run during specific times, like nightly builds or when a new pull request is created. Crucially, set a timeout for each runner. If a runner isn't used within a certain period (e.g., 15 minutes), it automatically shuts down. This prevents idle runners from racking up unnecessary costs. We implemented this change immediately, and the difference in our monthly bill was staggering. We also introduced a monitoring dashboard that displayed real-time runner usage and cost data. This gave us immediate visibility into potential issues and allowed us to quickly identify and address any overspending.

Don’t Just Run, Optimize

The $300/month incident wasn’t just about the cost of running linters; it was a wake-up call about the importance of proactive cost management in cloud environments. It forced us to shift our mindset from simply “running” our workflows to actively “optimizing” them. It’s easy to assume that the cloud is free, but it’s not. Every resource you consume – from compute time to storage – has a cost. Regularly review your GitHub Actions workflows, identify potential inefficiencies, and implement cost-saving measures. This includes carefully selecting the appropriate runner types, setting rate limits, scheduling runners, and monitoring usage.

**Takeaway:** Don't let a seemingly small detail like a continuously running macOS runner become a $300/month surprise. Regularly audit your cloud infrastructure, understand your consumption patterns, and implement proactive cost management strategies. Your bottom line – and your sanity – will thank you.

---


Frequently Asked Questions

What is the most important thing to know about We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake??

The core takeaway about We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake? is to focus on practical, time-tested approaches over hype-driven advice.

Where can I learn more about We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake??

Authoritative coverage of We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake? can be found through primary sources and reputable publications. Verify claims before acting.

How does We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake? apply right now?

Use We accidentally spent $300/month running lint on macOS runners. What's your worst GitHub Actions cost mistake? as a lens to evaluate decisions in your situation today, then revisit periodically as the topic evolves.