title: "GitHub Actions EU Alternative: GDPR, the CLOUD Act, and Why 'EU Data Residency' Is Not Enough" date: "2026-05-07" description: "GitHub's EU data residency stores your code in Europe, but CLOUD Act liability attaches to the US-headquartered provider, not the data's location. This guide explains the Art.48 gap and which EU-native CI/CD alternatives — GitLab CE, Gitea Actions, Forgejo, Woodpecker CI — are viable for teams that need genuine sovereignty." tags: ["github-actions", "eu-alternative", "gdpr", "cloud-act", "data-residency", "gitlab-ci", "gitea", "woodpecker-ci", "developer-guide", "2026"]

GitHub Actions EU Alternative: GDPR, the CLOUD Act, and Why 'EU Data Residency' Is Not Enough

In March 2026, GitHub expanded its EU data residency region to include EFTA countries (Norway and Switzerland) alongside existing EU member state locations. In April 2026, GitHub Copilot added data residency for EU and US regions. On paper, GitHub has answered the GDPR data residency question.

In practice, EU developers searching for GitHub Actions EU alternatives have not stopped looking. The reason is a structural legal reality that EU data residency storage cannot resolve: GitHub is a US company, subject to the US CLOUD Act, regardless of where your data is physically stored.

This post explains exactly what GitHub's EU data residency does and does not cover, why GDPR Article 44-48 compliance requires more than storage geography, and which EU-native alternatives to GitHub Actions are viable for teams that need genuine data sovereignty.


What the CLOUD Act Actually Means for Your GitHub Repositories

The Clarifying Lawful Overseas Use of Data (CLOUD) Act of 2018 grants US federal authorities the power to compel any US-based cloud provider — including GitHub (owned by Microsoft) — to produce data stored anywhere in the world, including in EU data centers, without notifying the data subject or the data subject's national authorities.

This directly conflicts with GDPR Article 48, which requires that any transfer of personal data to a third country based on a judgment or decision of a court or administrative authority be recognized under an international agreement. No such agreement exists between the EU and the United States that covers CLOUD Act demands.

The practical consequence: your source code, issue comments, pull request history, CI/CD logs, and any personal data in your GitHub repositories can be accessed by US law enforcement under a CLOUD Act order, while your EU users have no notification rights and no GDPR Art.34 breach notification is triggered.

For source code repositories, this includes:

This is not a theoretical risk. The FISA Section 702 reauthorization in April 2024 extended warrantless collection authorities that can apply to data held by US cloud providers for another two years. NOYB has a pending Data Privacy Framework (DPF) challenge. The legal ground for EU-US data transfers continues to shift.


What GitHub Enterprise Cloud EU Data Residency Actually Covers (and Does Not Cover)

GitHub's EU data residency offering (GitHub Enterprise Cloud on ghe.com) stores your data on Azure infrastructure in EU/EFTA regions. This addresses GDPR Art.46 transfer mechanism requirements for standard contractual clauses — your data stays in the EU geographically.

What it covers:

What it does NOT cover:

The GitHub documentation for ghe.com is explicit about several limitations that directly affect GitHub Actions workflows:

  1. macOS runners are unavailable on ghe.com. Linux and Windows runners work, but macOS-dependent CI pipelines require workarounds or self-hosted runners.

  2. GitHub Marketplace is inaccessible from ghe.com. You cannot directly install marketplace Actions. Many widely-used third-party Actions hard-code calls to api.github.com and will not work on ghe.com without modifications. Actions that access GitHub.com resources fail entirely unless the action author has implemented custom token injection for secondary API calls.

  3. CLOUD Act exposure remains unchanged. Moving to ghe.com resolves the data residency geography argument for Art.46 SCCs. It does not change GitHub's status as a US-headquartered corporation subject to CLOUD Act compelled disclosure.

  4. Migrations REST API, repository traffic metrics, and GitHub Connect features have partial or no availability on ghe.com.

  5. Enterprise cost. GitHub Enterprise Cloud with data residency requires Enterprise licensing at a meaningful cost premium over standard GitHub Team plans. For indie developers and small teams, this tier is economically inaccessible.

The summary: ghe.com makes the storage geography argument easier. It does not eliminate CLOUD Act risk, does not cover all Actions workflows, and is priced for enterprise budgets, not indie teams.


GDPR's Actual Requirements: Article 44, 46, and 48

To evaluate GitHub Actions alternatives clearly, it helps to understand what GDPR actually requires for international data transfers.

Art.44 prohibits transfers to third countries unless an adequacy decision, appropriate safeguards (Art.46), or derogations (Art.49) apply. The EU-US Data Privacy Framework (DPF) is the current adequacy basis for GitHub-Microsoft.

Art.46 SCCs (Standard Contractual Clauses) are the backup if DPF is invalidated (as Safe Harbor was in Schrems I, and Privacy Shield was in Schrems II).

Art.48 is the underappreciated clause: even with SCCs or DPF in place, transfers ordered by a foreign court or authority (like a CLOUD Act demand) only have legal basis under GDPR if covered by an international agreement recognized by the EU. No such agreement exists for CLOUD Act demands.

This means: a technically GDPR-compliant setup (DPF, SCCs, EU region storage) does not make your data immune from CLOUD Act-ordered disclosure. Your Art.48 analysis must acknowledge this exposure in your Transfer Impact Assessment (TIA) under Art.46.

For teams that have completed a TIA and concluded the residual CLOUD Act risk is acceptable for their data categories, GitHub with EU data residency is a valid choice. For teams handling regulated data (health records, financial data, legal correspondence in source code or CI logs), the TIA conclusion may require moving to an EU-native provider with no US parent entity.


EU-Native GitHub Actions Alternatives: The Realistic Options

Option 1: Self-Hosted GitLab CE + GitLab CI (Best Full Parity)

GitLab Community Edition (CE) is free, open-source, and provides full GitHub-equivalent functionality: repositories, merge requests, issue tracking, container registry, package registry, and — critically — GitLab CI/CD as a built-in, self-contained pipeline system.

Why it addresses the CLOUD Act problem: Self-hosting GitLab on EU VPS infrastructure (Hetzner, OVHcloud, Scaleway) means the data never touches a US-headquartered company's servers. Your legal exposure is purely EU law.

GitLab CI vs GitHub Actions:

GitLab CI uses .gitlab-ci.yml with stages, jobs, and DAG (directed acyclic graph) pipelines. It is not syntax-compatible with GitHub Actions .github/workflows/*.yml. Migration from Actions to GitLab CI is a rewrite, not a rename — typically 1-2 weeks for an active team with non-trivial pipelines.

Key differences:

Cost: GitLab CE on a Hetzner CX22 (€3.79/month) covers small teams. A Hetzner CPX31 (~€12/month) handles medium teams with parallel jobs.

sota.io integration: Deploy GitLab to a VPS, connect your CI runners to sota.io managed PostgreSQL and object storage. Your entire DevOps chain stays within EU jurisdiction.

Option 2: Codeberg + Woodpecker CI (Lightweight, Zero Maintenance)

Codeberg is a Berlin-based non-profit running a Gitea instance. It is EU-hosted (Hetzner Frankfurt), GDPR-native, has an explicit anti-AI-training policy, and is free for public and private repositories.

Woodpecker CI is a fork of Drone CI designed for self-hosted deployment with no external dependencies. It integrates natively with Codeberg/Gitea and uses a YAML pipeline format that is conceptually closer to GitHub Actions than GitLab CI.

Woodpecker CI pipeline vs GitHub Actions: Woodpecker uses steps: instead of steps: under a jobs: key — structurally similar but not directly portable. The migration effort is moderate: a Woodpecker pipeline is readable to an Actions author but requires adaptation.

Woodpecker does not have a marketplace equivalent to GitHub Actions. All integrations are container-based: you reference a Docker image and run commands. This is less convenient but more auditable — every step in your pipeline is a deterministic container image you can inspect and pin.

Best for: Open source projects, indie developers, small teams with simple pipelines (test → build → deploy) that do not depend on complex marketplace Actions.

Option 3: Self-Hosted Gitea + Gitea Actions (Closest GitHub Actions Syntax Compatibility)

Since Gitea 1.19, Gitea Actions provides syntax-compatible execution of GitHub Actions workflow files. If you have GitHub Actions workflows, Gitea Actions can run them with minimal or no modification — this is the lowest migration-effort path.

Gitea uses act (the open-source GitHub Actions local runner) as its execution engine, meaning most workflows that run in GitHub Actions will run in Gitea Actions without changes.

Limitations:

Best for: Teams with existing GitHub Actions workflows that want the fastest path to self-hosted EU infrastructure with maximum syntax compatibility.

Option 4: Forgejo (Gitea Fork, Community Governance)

Forgejo is a hard fork of Gitea with a community governance model and explicit commitment to remaining free and open. It includes Forgejo Actions (syntax-compatible with GitHub Actions, same as Gitea Actions).

Codeberg migrated to Forgejo in 2023. For teams that want Codeberg-style governance (non-profit, anti-data-mining) but prefer self-hosted control, Forgejo is the natural choice.


Migration Effort: Honest Comparison

From GitHub Actions toSyntax CompatibilityEstimated Migration TimeCI/CD Feature Parity
GitLab CI (self-hosted)Low — full rewrite1-3 weeksFull (native DAG, templates)
Gitea Actions (self-hosted)High — mostly compatible1-3 daysGood (act-based, improving)
Forgejo Actions (self-hosted)High — mostly compatible1-3 daysGood (identical to Gitea Actions)
Woodpecker CIMedium — conceptual similarity3-7 daysGood for simple pipelines

The GDPR Art.28 Processor Agreement Dimension

When you use GitHub Actions for CI/CD, GitHub processes:

Under GDPR Art.28, GitHub is a data processor. Your DPA with GitHub (included in GitHub's Terms of Service) establishes the legal basis. However, for data categories that require stronger guarantees — particularly health data, financial data, or data subject to NIS2/DORA sector regulations — an EU-headquartered processor with no US parent entity provides a cleaner Art.28 posture.

A self-hosted Gitea or GitLab instance eliminates the processor relationship entirely for repository and CI data. Your own EU-resident VPS is infrastructure you control — not a processor relationship requiring a DPA.


Practical Migration Checklist: GitHub Actions to an EU-Native Alternative

1. Audit your Actions workflow dependencies. List all marketplace Actions used across .github/workflows/. Categorize: (a) available as container image alternative, (b) requires syntax conversion, (c) hard dependency on GitHub platform APIs.

2. Inventory secrets and environment variables. GitHub Actions secrets stored in repository or organization settings must be migrated. Audit for any values that should be rotated during migration (keys stored in secrets should be rotated, not just copied).

3. Assess runner requirements. If your pipelines use macOS runners, plan for self-hosted macOS runners or a cross-compilation approach. Linux and Windows runners are fully available in all EU alternatives.

4. Choose your migration target based on pipeline complexity. Simple pipelines (npm install → test → deploy): Gitea/Forgejo Actions for syntax compatibility. Complex pipelines (matrix builds, reusable workflows, OIDC integrations): GitLab CI for its mature DAG pipeline model.

5. Test in parallel before cutover. Run your pipelines in both GitHub Actions and your target system simultaneously for at least two weeks. Do not cut over on main branch until the new system has run all pipeline paths successfully.

6. Redirect external integrations. Status checks, webhook integrations, and deployment targets (like sota.io or Vercel) that read from GitHub must be updated to point to your new forge's webhook URLs and API endpoints.

7. Update your Transfer Impact Assessment. Once migrated to a self-hosted EU-native provider, your TIA for CI/CD data is significantly simplified: no third-country transfer, no DPF reliance, no CLOUD Act exposure. Document this in your Art.30 records of processing activities.


EU-Native CI/CD Storage: Where sota.io Fits

GitHub Actions workflows commonly interact with external storage: databases for integration tests, object storage for build artifacts, container registries for Docker images.

If you are migrating your CI/CD chain to an EU-native alternative, ensuring your ancillary storage is also EU-native completes the sovereignty picture. A GitLab CI pipeline running on a Hetzner VPS, connecting to sota.io managed PostgreSQL and object storage for integration test databases and build artifacts, keeps the entire chain within EU legal jurisdiction — no CLOUD Act exposure at any layer.


Summary: EU Data Residency Storage Is Not the Same as CLOUD Act Immunity

GitHub's EU data residency offering (ghe.com) addresses the storage geography question for GDPR Art.44-46. It does not address GDPR Art.48, and it does not eliminate CLOUD Act compelled-disclosure risk — because CLOUD Act liability attaches to the US-headquartered provider, not to the data's physical location.

For indie developers and small teams, GitHub Enterprise Cloud with data residency is also priced out of reach. The economically viable path to genuine EU sovereignty for CI/CD is self-hosted GitLab CE, Gitea, or Forgejo on EU VPS infrastructure.

The migration effort is real: 1-3 days for Gitea/Forgejo Actions (syntax-compatible), 1-3 weeks for GitLab CI (full rewrite). The compliance benefit — a clean Art.28 posture, no CLOUD Act exposure, a simplified TIA, no DPF invalidation risk — is durable and increasing in regulatory value as GDPR enforcement matures.

The question is not whether GitHub is GDPR-compatible. It is whether your data categories, your sector's regulatory requirements (NIS2, DORA, GDPR Art.28), and your residual risk tolerance under a plausible Schrems III scenario justify the migration effort.

For many teams, the answer in 2026 is: yes.