What this converter does
Paste a .gitlab-ci.yml and you get a GitHub Actions workflow plus a list of everything that did not map cleanly. YAML anchors and extends: are resolved first, so hidden .template jobs work. Conversion runs entirely in your browser; nothing is uploaded.
The output is a starting point, not a finished migration. Anything without a clean equivalent becomes a TODO step that fails loudly, and the notes list the repository secrets and variables you need to create.
How GitLab CI concepts map to GitHub Actions
| GitLab CI | GitHub Actions | Notes |
|---|---|---|
stages + stage: | needs: on every job of the next stage | Same ordering; needs: [] starts immediately. |
needs: | needs: | Jobs that are needed and have artifacts get a download-artifact step. |
image: | container: | Linux runners only. docker: images are flagged: run Docker on the runner instead. |
services: | services: | alias becomes the service name; docker:dind is dropped. |
rules: if: | if: | $CI_COMMIT_BRANCH, $CI_PIPELINE_SOURCE, $CI_COMMIT_TAG comparisons; when: never negates. |
only: / except: | if: | Branch names, tags, merge_requests, regex patterns. |
variables: | env: | Workflow-level and job-level; CI/CD settings variables must be recreated. |
$CI_COMMIT_SHA, $CI_REGISTRY_IMAGE … | env: shim | Used CI_* variables are defined from the github context, so scripts stay unchanged. |
artifacts: paths | actions/upload-artifact | expire_in becomes retention-days; reports: junit becomes a test-report action. |
cache: | actions/cache | key: files: becomes hashFiles(). |
parallel: N / parallel: matrix | strategy.matrix | Index matrix or variable matrix. |
when: manual | environment: manual-approval | Add required reviewers to the environment. |
environment: | environment: | |
allow_failure, timeout, resource_group | continue-on-error, timeout-minutes, concurrency | |
before_script / after_script | separate steps | after_script runs with if: always(). |
include:, trigger:, workflow: rules | notes / TODO | Included files are not fetched; downstream pipelines become gh workflow run or reusable workflows. |
Things to check by hand
- Merge request pipelines.
$CI_PIPELINE_SOURCE == "merge_request_event"becomesgithub.event_name == 'pull_request', andon.pull_requestis added. - Container registry.
$CI_REGISTRY_IMAGEpoints atghcr.io/owner/repowithGITHUB_TOKEN; addpermissions: packages: write. - Jobs without an image run directly on the runner, where service containers need published
ports:.
FAQ
Is my pipeline uploaded anywhere?
No. The page is static and the converter runs in your tab. Read gitlab.js on GitHub.
How does this compare with GitHub Actions Importer?
Actions Importer is a CLI that connects to your GitLab instance and converts in bulk. This page is for one file at a time with nothing to install. The same converter is available as npx jenkins-to-actions convert .gitlab-ci.yml.
Migrating a whole organisation?
The same converters ship as a command-line audit. Point it at a GitHub organisation, a GitLab group, an Azure DevOps organisation, a Bitbucket workspace or a Jenkins server and it inventories every CI configuration it finds, converts what it can, estimates the effort per repository and lists the secrets to create. With --open-prs it opens a pull request in each GitHub repository with the workflow and the notes. Nothing is sent anywhere except the platform you point it at.
GITHUB_TOKEN=… npx jenkins-to-actions audit --github-org acme # report + workflows GITHUB_TOKEN=… npx jenkins-to-actions audit --github-org acme --open-prs # one PR per repository GITLAB_TOKEN=… npx jenkins-to-actions audit --gitlab-group acme/platform AZURE_DEVOPS_TOKEN=… npx jenkins-to-actions audit --azure-org acme npx jenkins-to-actions audit --bitbucket-workspace acme --user me --token APP_PASSWORD npx jenkins-to-actions audit --url https://jenkins.example.com --user me --token APITOKEN
See a real result: this pull request was opened by one command on a repository holding one config per system. The README has the details, and the migration page describes the fixed-fee audit if you would rather have it done for you. Once you are on Actions, the cost calculator and the free CI Cost Report action show what the minutes cost.