Zhivko Todorov
ALL CASE STUDIES

CASE 138 · KINDLING · 2023

GITLAB → GITHUBGHASELF-HOSTEDOPERATIONAL

Self-hosted GitLab, retired without losing a commit.

A fintech ran self-hosted GitLab on a 24-core EC2 instance with a Postgres backend, paying for the licence plus operating the infrastructure. The team’s opinion had quietly shifted to "let GitHub Enterprise host it." We migrated 312 repos, 40k issues, and 14 CI pipelines, lost nothing.

INDUSTRY

Fintech

DOMAIN

MIGRATION

DELIVERED

2023

STACK

GITHUB ENTERPRISE CLOUD·GITHUB ACTIONS·GITLAB IMPORTER·GITLAB (TRANSITIONAL)·S3 (LFS BRIDGE)

RESULTS

What changed, by the numbers.

GITLAB OPERATIONAL HOURS

0

WAS ~8h / WEEK

REPOS MIGRATED

312

WITH HISTORY

ISSUES + MRs

40K

IMPORTED + REMAPPED

CI MIGRATION

14 PIPELINES

GITLAB-CI → GHA

HOW IT WENT

The team had built real GitLab muscle: backup procedures, upgrade runbooks, the careful art of major-version migration. They had also stopped enjoying any of it. Two engineers had a quietly disliked "rotate the GitLab on-call" responsibility.

GitHub’s GitLab importer handled repos, issues, merge requests, and milestones — with imperfect-but-acceptable mapping. We wrote a thin remapper for the metadata that fell through the cracks (some custom labels, some GitLab-specific approval rules). CI pipelines got rewritten manually; gitlab-ci syntax doesn’t machine-translate cleanly to GHA.

After ten weeks, GitLab was read-only and the team was on GitHub. The 24-core EC2 instance was terminated; the operational burden ended. Nobody misses the on-call rotation.

READY WHEN YOU ARE

Let's get your AWS bill (and architecture) in order.

The discovery call is free. You walk away with at least one concrete idea — even if we never work together.

Or email directly →