Run GitLab CI, GitHub Actions, and Forgejo pipelines locally.
Important
This project is in the ideation phase. We may open PRs and address issues, but we're not actively monitoring repository activity.
[Verse 1]
They say that if you were to see
Your CI running locally
In that terminal window, free
It brings you good luck
All of you have come
Even the vendors who dismissed us
Today, they watch
[Chorus]
Throw magnolias at me
Run your pipelines locally
Throw magnolias at me
Own your CI destiny
[Verse 2]
Over their platforms, open forges burning bright
Tears and FUD melt into the code
GitLab and GitHub, Forgejo's might
Dancing with freedom on top of vendor lock
Today it's all sovereignty mocking fate
And what you couldn't test locally, you test before you commit
mise use -g ubi:tuist/magnoliaOr download from releases.
Test your CI/CD pipelines before pushing to your Git forge:
# Interactive mode - discover and select pipeline magnolia # Run a specific workflow magnolia .github/workflows/test.yml # Run a specific job from a workflow magnolia .github/workflows/test.yml # Then select the job interactively # Run non-interactively (useful for scripts) magnolia .github/workflows/test.yml --job test --non-interactiveExample workflow:
$ magnolia .github/workflows/ci.yml Discovering pipelines... Select a pipeline: GitHub Actions: ci.yml Select a job to run: > build test deploy Running job build from .github/workflows/ci.yml ✓ Step: Checkout code ✓ Step: Install dependencies ✓ Step: Build applicationSeamlessly migrate from external CI providers to your Git forge's native CI using AI-powered translation:
# Auto-detect source and target CI systems magnolia migrate # Preview migration without writing files magnolia migrate --dry-run # Override target CI system magnolia migrate --to github # Migrate specific source when multiple configs found magnolia migrate bitrise # Automated migration (non-interactive) magnolia migrate bitrise --non-interactiveExample migration:
$ magnolia migrate bitrise --dry-run --to github Detecting CI configurations... Source: Bitrise (bitrise.yml) Target: GitHub Actions Initializing AI agent for migration... 📋 Step 1/3: Analyzing source configuration... → Reading Bitrise pipeline from bitrise.yml 🔍 Step 2/3: Researching CI system documentation and generating configuration... → Consulting Bitrise and GitHub Actions documentation → This may take 30-60 seconds... ✅ Step 3/3: Migration complete! Dry run - migration preview: Generated configuration: ================================================================================ name: CI/CD Pipeline on: push: branches: ['**'] jobs: primary: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: npm install - name: Run tests run: npm test - name: Build run: npm run build ================================================================================ Would be written to: .github/workflows/migrated-workflow.ymlCommon migration scenarios:
# CircleCI → GitHub Actions magnolia migrate circleci --to github # Buildkite → GitLab CI magnolia migrate buildkite --to gitlab # Mobile app (AppCircle) → GitHub Actions magnolia migrate appcircle --to githubSupported Migration Sources:
- Bitrise (
bitrise.ymlor.bitrise/bitrise.yml) - Codemagic (
codemagic.yamlor.codemagic/codemagic.yaml) - CircleCI (
.circleci/config.yml) - AppCircle (
appcircle.yaml,configuration.yaml, or.appcircle/config.yaml) - Buildkite (
.buildkite/pipeline.ymlor.buildkite/pipeline.yaml)
Migration Targets (auto-detected from git remote):
- GitHub Actions (
.github/workflows/*.yml) - GitLab CI (
.gitlab-ci.yml) - Forgejo Actions (
.forgejo/workflows/*.yml)
Requirements:
- Install either
claudeorcodexCLI for AI-powered migration - The migration feature uses the agentic client protocol to delegate complex translation tasks
- GitLab CI: Executes jobs in containers (Podman/Docker) when
image:is specified, or on host otherwise. - GitHub Actions / Forgejo Actions:
- Executes
run:steps in containers based onruns-on:runner - Executes marketplace actions (
uses:) - composite, Docker, and Node.js actions supported - Actions are downloaded once and cached locally in
~/.magnolia/actions
- Executes
- 🦊 GitLab CI (
.gitlab-ci.yml) - 🐙 GitHub Actions (
.github/workflows/*.yml) - 🍵 Forgejo/Gitea Actions (
.forgejo/workflows/*.ymlor.gitea/workflows/*.yml)
MIT
Thanks goes to these wonderful people (emoji key):
James Jackson 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!