← Flutter Reference

GitHub Actions vs Codemagic

CI/CD

By Abdelrahman Saed — Senior Mobile Engineer. Last updated: 2026-08-10.

Quick answer

Use GitHub Actions if your code and review process already live in GitHub — the CI belongs next to the PRs. Use Codemagic if you want managed Mac infrastructure and iOS signing without the setup. For a GitHub-native team, GitHub Actions (with macos runners + Fastlane) gives tighter PR integration, branch protection, and release governance than a separate CI vendor.

We run GitHub Actions end-to-end at iStoria — including iOS builds on macos runners with Fastlane. The only reason to look at Codemagic is if iOS signing pain or Mac runner cost becomes unbearable.

Feature comparison

FeatureGitHub ActionsCodemagic
HostingGitHub (repo-native)External managed service
Config.github/workflows/*.ymlcodemagic.yaml / UI
PR integrationNative (checks, branch protection)Via commit status
EcosystemMassive (marketplace)Mobile-focused
Beyond mobile CIFull general-purpose CIMobile-CI-focused
iOS signingDIY (match + secrets)Fully managed
Mac runner costHigh (macOS minutes)Per-build pricing
Self-hosted runnersYesNo
Best forGitHub-native teams, broad automationSigning-averse mobile teams

Detailed comparison

Integration with your workflow

GitHub Actions runs in the repo: workflows are .github/workflows/*.yml, reviewed in PRs, triggered by pushes/PRs/issues/releases. Status checks feed branch protection directly. This tight loop is the main reason GitHub-native teams stay there.

Codemagic is an external service: you connect a repo, configure builds in its UI or a codemagic.yaml, and results report back via commit status. It works, but the configuration lives partly outside GitHub and the PR integration is less native.

Ecosystem and extensibility

GitHub Actions has the largest CI ecosystem on earth — the marketplace has thousands of actions for caching, linting, deployments, Slack notifications, you name it. You compose them in yaml. Codemagic has purpose-built steps for mobile but a smaller ecosystem for everything else.

For a team that automates more than just builds — PR hygiene bots, stale branch cleanup, Jira sync, AI review summaries (all of which we run) — GitHub Actions is the only realistic foundation. Codemagic is mobile-CI-shaped.

Cost

GitHub Actions: free minutes for public repos; for private repos, macOS minutes are ~10x Linux minutes and are the expensive part of Flutter iOS builds. Self-hosted mac runners cut this.

Codemagic: per-build pricing, with Mac plans being pricier. Predictable but a separate budget line. For high build volume, owned GitHub Actions runners can be cheaper; for low volume, Codemagic's free/cheap tier may win.

iOS signing

This is Codemagic's strongest card — fully managed signing. GitHub Actions requires you to manage certs (via Fastlane match, App Store Connect API keys, encrypted secrets). It is solved but requires setup and maintenance. If your team has no one who wants to own signing, Codemagic removes that burden.

Caching and build speed

Both platforms support caching, but the mechanics differ. GitHub Actions uses actions/cache to persist ~/.pub-cache, Gradle caches, and Pods directories between runs — you wire this yourself in the workflow yaml. Codemagic caches Flutter, Gradle, and CocoaPods automatically with less configuration. In practice, once you set up caching in GitHub Actions (a one-time ~20 lines of yaml), build times are comparable. The bigger speed lever is splitting your pipeline: run flutter test on Linux runners (cheap, fast) and reserve macOS runners for the iOS archive step only. Codemagic forces Mac pricing for the whole pipeline, which makes it less cost-efficient for test-heavy workflows.

Code comparison

Flutter iOS beta — GitHub Actions + Fastlane

# .github/workflows/beta.yml
name: Beta
on:
  push:
    branches: [main]
jobs:
  ios:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with: { flutter-version: '3.x' }
      - run: flutter pub get
      - run: flutter test
      - run: bundle exec fastlane beta
        env:
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_KEY: ${{ secrets.APP_STORE_KEY }}

Flutter iOS beta — Codemagic (managed signing)

workflows:
  beta:
    name: iOS Beta
    environment:
      flutter: stable
      ios_signing:
        distribution_type: app_store
        bundle_identifier: com.example.app
    scripts:
      - flutter test
      - flutter build ipa --release
    publishing:
      app_store_connect:
        api_key: $APP_STORE_KEY
        submit_to_testflight: true

The GitHub Actions version requires you to wire signing secrets; Codemagic manages signing in its environment. Both get you a TestFlight build — the choice is about where you want to own the complexity.

Which should you choose?

Choose GitHub Actions when: your code is in GitHub, you want CI config reviewed in PRs with native branch protection, you automate more than mobile builds (bots, hygiene, deployments), or you want self-hosted runners to cut macOS cost. This is our production choice.

Choose Codemagic when: iOS signing is a burden you want fully offloaded, you want managed Mac hardware, your CI needs are mobile-only, or you have no existing GitHub Actions investment. A strong choice for signing-averse or mobile-only teams.

Related definitions

Related reading

FAQ

Are GitHub Actions macOS minutes too expensive for Flutter?

They are pricier than Linux (~10x), but for most teams the total is manageable, especially with caching and self-hosted mac runners. If build volume is very high, self-hosted runners or Codemagic's pricing may be cheaper — do the math for your cadence.

Can Codemagic trigger from GitHub PRs?

Yes — Codemagic integrates with GitHub and can build on PRs, reporting status checks back. The integration is solid; it is just less native than GitHub Actions' in-repo workflows for branch-protection governance.

Which is better for a solo Flutter dev?

If you are already on GitHub, GitHub Actions + Fastlane is the path of least resistance and keeps everything in the repo. If you dread iOS signing, Codemagic's managed signing saves you a weekend of pain.

Can I run unit and widget tests on both platforms?

Yes — flutter test runs identically on GitHub Actions Linux runners and Codemagic. This is where GitHub Actions has a real cost advantage: unit and widget tests do not need macOS, so they run on cheap Linux minutes. Only iOS build/sign/archive steps require macos runners. A smart pipeline splits the job: run tests on Linux, then fan out to a macOS runner only for the iOS build. Codemagic charges Mac pricing for the entire pipeline, which makes test-heavy workflows more expensive per run.


Available for hire. Abdelrahman Saed is a Senior Mobile Engineer (Flutter) — open to full-time, fractional, contract, or advisory work. Hire me →

Book a 20-minute call · Download the CV (PDF) · See how I work