Free alternatives to Workers Builds: CircleCI, GitHub Actions, Oracle Cloud, and the difference between building and serving
It is barely day ten of the month. The dashboard announces that the monthly allowance is exhausted.
Excuse me? The calendar still has twenty days left. Is the website expected to fold its tiny server hands and enter hibernation?
Fortunately, running out of build minutes does not automatically take an already published website offline. Building software, responding to visitors, and serving finished files are different jobs. More importantly, build work can sometimes move to another provider's free execution allowance.
The figures below were checked against official documentation on October 10, 2026. Always recheck them before deploying: "free" is a plan, not a law of nature.
1. Identify which limit actually ran out
Cloudflare has several independent-looking limits. Treating them as one giant "cloud battery" is how an ordinary quota warning becomes a full-scale funeral.
- Workers Builds: code preparation and build time. The Free plan includes 3,000 build minutes per month, one concurrent build, and a 20-minute timeout per build.[1]
- Cloudflare Pages builds: how often Pages builds your site. Free permits 500 builds per month, one at a time.[2]
- Workers and Pages Functions requests: dynamic requests. On Free, Pages Functions share the 100,000 requests per day Workers allowance.[3]
- Static files: existing HTML, CSS, images, and other assets returned without invoking Functions. Static Pages requests are free and unlimited.[3]
If the first budget is exhausted, a new build may be blocked while previously deployed pages continue serving. A separate exhausted quota or dependency can still damage functionality. The correct diagnosis is not "Cloudflare is dead." It is "which meter hit zero?"
2. The day-ten math is worse than the error message
Suppose 3,000 build minutes disappeared in the first ten days. That is 300 minutes, or five hours, per day. At the same pace, thirty days would consume 9,000 minutes, leaving 6,000 minutes above the original allowance.
That does not mean buying or finding any service advertising 6,000 minutes solves the problem. Two runners can need different amounts of time for the same task. Memory limits, CPU performance, job timeouts, and setup steps all matter.
Before adding capacity, inspect consumption. Are content-only edits rebuilding the entire site? Are failed jobs retrying automatically? Are lightweight checks using a large machine? Sometimes the mystery villain is not a hacker. It is a polite button labeled "run again."
3. A runner, a scheduler, and a web API are not the same thing
Think of three distinct roles:
A job runner such as GitHub Actions or CircleCI actually executes tests, scripts, and builds. This is the relevant replacement for Workers Builds.
A scheduler such as cron-job.org calls a URL at a scheduled time. It is an alarm clock, not a substitute for the computer doing the work. The service supports intervals as short as one minute.[4]
An application runtime such as Cloudflare Workers or Deno Deploy responds to web requests. Serving a quick API call is not the same as carrying out a long content-production task.
Purchasing five alarm clocks has never produced five chefs. More triggers do not automatically mean more compute capacity.
4. GitHub Actions: convenient when your code already lives on GitHub
GitHub Actions can test, transform, and process files close to their source repository. For standard GitHub-hosted runners, GitHub Free includes 2,000 minutes per month for private repositories. Standard runners in public repositories are free under GitHub's rules, but publishing proprietary code solely to harvest minutes is a terrible privacy trade.[5]
Good candidates include article checks, combining translations, image preparation, and short scripts.
The trap is scheduling. GitHub warns that scheduled runs may be delayed or even dropped under heavy load.[6] A job expected at 10:00 may arrive after the cake has gone stale. A sound workflow recovers missed jobs instead of trusting a minute-perfect alarm.
Another trap: pull-request checks, monitoring jobs, and content processing draw from the same account allowance. Your article runner may not have the full 2,000 minutes to itself.
5. CircleCI: a separate free pool for serious jobs
CircleCI Free provides 30,000 credits per month, and the Free plan does not require a credit card. Each resource class consumes credits at a different rate.[7][8]
| Example runner | Credits/minute | Theoretical minutes from 30,000 credits |
|---|---|---|
| x86 Docker Small, 2 GB RAM | 5 | 6,000 |
| x86 Docker Medium, 4 GB | 10 | 3,000 |
| x86 Docker Large, 8 GB | 20 | 1,500 |
| Arm Docker Gen 2 beta, 8 GB | 6 | 5,000 |
Do not celebrate "6,000 free minutes" and then attempt an 8 GB build inside a 2 GB runner. That is not optimization; it is giving a whale a studio apartment.
The Arm Gen 2 beta rate is particularly interesting: 2 CPUs and 8 GB at 6 credits per minute. But validate availability on your plan, processor compatibility, dependencies, and runtime first. Storage and network consumption can also use credits.[9] CircleCI offers meaningful additional free capacity, not infinite capacity.
6. Oracle Cloud: a small machine instead of a minute counter
A different approach is running your own jobs on an Always Free virtual machine.
Correction that matters in 2026: Oracle's current Always Free Arm allowance for an Always Free tenancy is equivalent to 2 OCPUs and 12 GB RAM, rather than the older 4 OCPU / 24 GB often found in outdated guides. The official quotas are 1,500 OCPU-hours and 9,000 GB-hours per month.[10][11]
A VM can reduce dependence on per-job CI minutes. It also adds responsibility: OS updates, credentials, monitoring, recovery, and safe access control. Capacity may be unavailable in a region, and idle instances may be reclaimed.[10]
It is like getting a free workshop. Great news—until you realize you are now the electrician, locksmith, and night watchman.
7. Keep Cloudflare for the jobs it already does well
Moving the entire website is usually unnecessary.
A sensible division of labor is: GitHub stores the source; CircleCI and GitHub Actions handle longer content jobs; Cloudflare Pages serves finished static pages; Workers and Functions handle short dynamic requests; an optional VM handles additional long-running work.
Pages can invoke Functions for static-looking paths unless the deployment's routing rules exclude those paths. Cloudflare documents the _routes.json mechanism.[12] Never exclude a route that needs authentication, redirects, or security checks without testing it.
Remember the separate Pages Free limits: 500 builds per month and 20,000 files per site.[2] Escaping a minute cap by accidentally hitting a file cap is a classic cloud comedy sketch.
8. Other free services: useful, but not interchangeable
Deno Deploy may be suitable for some API endpoints, but software tied to Cloudflare-specific storage or stateful real-time rooms is not a copy-and-paste migration.[13]
Vercel's Hobby plan is restricted to non-commercial personal use. A site built to earn money through ads or paid features should not assume Hobby is an appropriate free commercial host.[14]
cron-job.org can call a URL every minute. But if the endpoint has already exhausted its compute quota, the alarm clock will faithfully wake a machine that cannot work.[4]
Finally, spreading legitimate jobs across providers is different from mass-creating accounts to evade terms. Respect each provider's policies.
9. The biggest migration risk is publishing the same article twice
Now imagine Cloudflare and CircleCI both taking the same article. One finishes quickly; the other overwrites it with yesterday's version. Congratulations: your free-infrastructure project just invented time travel.
To avoid that, keep one source of truth and one dispatcher. Give each task a unique ID and content version, assign it to one executor, record a time-limited claim, store the outcome, and reassign only after a failure or expired claim. Confirm the actual published URL and content after the work finishes.
Also keep tokens and unpublished content out of public logs. Grant runners only the access they require. A "free migration" that leaks credentials to the entire internet is not a savings plan.
10. The twenty-day recovery plan—and the punchline
First, identify whether the exhausted allowance is Workers Builds minutes, Pages build count, or daily Worker requests. Second, separate must-run publishing and quality checks from optional jobs. Third, measure remaining GitHub Actions capacity and test one small job on CircleCI before moving more work. Fourth, investigate an Always Free VM if long-running work remains expensive. Throughout, prevent duplicate execution.
FAQ: Does hitting Workers Builds limits automatically take the site down? No; it is a different meter from serving already-deployed static assets, although other limits can still affect service.[1][3]
Can CircleCI's 6,000 minutes plug a 6,000-minute gap exactly? Only as arithmetic for the small runner; your actual jobs may take different time or need larger resources.[7][8]
Does adding free services make the system immortal? Not remotely. Limits change, jobs fail, and somebody still needs to know what "done" means.
The conclusion: one build account reached its limit; the idea did not reach its limit.
Cloudflare: "I'm out of minutes."
GitHub: "I can cover the small jobs."
CircleCI: "Send a few over here."
Oracle: "There is a room, but maintain it yourself."
Operator: "So the free tier has… a shift schedule?"
Not checkmate. More like finding out the board has extra squares.
References (14)
- Cloudflare Workers Builds — limits and pricing developers.cloudflare.com
- Cloudflare Pages — platform limits developers.cloudflare.com
- Cloudflare Pages Functions — pricing and static requests developers.cloudflare.com
- cron-job.org — free URL scheduling, up to once per minute cron-job.org
- GitHub — Actions billing and included minutes docs.github.com
- GitHub — scheduled workflow delays and dropped runs docs.github.com
- CircleCI — official Free plan and 30,000-credit allowance circleci.com
- CircleCI — resource class price list, including Arm Gen 2 beta circleci.com
- CircleCI — credits, exhaustion, storage/network implications circleci.com
- Oracle — Always Free resources, revised 2026 Arm allowances and idle reclamation docs.oracle.com
- Oracle — Free Tier and current eligibility conditions docs.oracle.com
- Cloudflare Pages Functions — invocation routing and _routes.json developers.cloudflare.com
- Deno Deploy — runtime and pricing limitations, migration suitability docs.deno.com
- Vercel — Hobby plan, non-commercial restrictions vercel.com

