Move your CI to Forgejo Actions.

GitHub Actions ports with small edits. GitLab CI is a deliberate rewrite. Either way, secrets are re-entered and you confirm a green run before you cut over.

The shape of the work

Forgejo Actions runs the same workflow model as GitHub Actions, so pipelines coming from GitHub are usually a small edit. GitLab CI is a different model, so it is an explicit rewrite rather than a port. Secrets are the one constant: their values never migrate from any source, so you re-enter them on the new forge.

From GitHub Actions

  • Workflow YAML is close to GitHub Actions: `on`, `jobs`, `steps`, and `runs-on` carry over with small edits.
  • Repository and organization secrets become Forgejo Actions secrets. Re-enter them; secret values never migrate.
  • Marketplace actions that only run on GitHub-hosted infrastructure or call the GitHub API need review or replacement.
  • `GITHUB_TOKEN`-scoped steps map to Forgejo’s automatic token; adjust any that assume GitHub-only API surface.

From GitLab CI

  • `.gitlab-ci.yml` has no automatic port: `stages`, `rules`, `needs`, and `extends` are rewritten as Forgejo Actions jobs and conditions.
  • CI/CD variables and protected/masked variables become Forgejo Actions secrets and variables.
  • `cache:` and `artifacts:` map to caching and artifact steps; review paths and retention.
  • Container-registry and environment logic tied to GitLab is reworked against your forge and runners.

Runners and cutover

Dedicated runners on Team and Pro

Team and Pro forges can add dedicated, unmetered runners, so CI runs on capacity that is yours rather than a shared, metered pool. That is often the reason CI is the first thing teams want moved.

Confirm a green run before cutover

Port one representative pipeline first, get it green on the new runners, then move the rest. Keep the old CI running in parallel until you trust the new one; nothing forces a hard switch.

Repoint your remotes

Once CI is green, update each clone’s origin to the new instance and push to confirm. Branches, tags, and history are already there from the import.

git remote set-url origin https://<yourname>.fjord.host/<org>/<repo>.git