Skip to content

tuist/magnolia

Repository files navigation

🌸 Magnolia

All Contributors

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.

🌸 The Magnolia Manifesto

[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

📦 Installation

mise use -g ubi:tuist/magnolia

Or download from releases.

🚀 Usage

Running Pipelines Locally

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-interactive

Example 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 application

Migrating from External CI Providers

Seamlessly 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-interactive

Example 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.yml

Common 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 github

Supported Migration Sources:

  • Bitrise (bitrise.yml or .bitrise/bitrise.yml)
  • Codemagic (codemagic.yaml or .codemagic/codemagic.yaml)
  • CircleCI (.circleci/config.yml)
  • AppCircle (appcircle.yaml, configuration.yaml, or .appcircle/config.yaml)
  • Buildkite (.buildkite/pipeline.yml or .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 claude or codex CLI for AI-powered migration
  • The migration feature uses the agentic client protocol to delegate complex translation tasks

⚡ Execution

  • 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 on runs-on: runner
    • Executes marketplace actions (uses:) - composite, Docker, and Node.js actions supported
    • Actions are downloaded once and cached locally in ~/.magnolia/actions

🔧 Supported Systems

  • 🦊 GitLab CI (.gitlab-ci.yml)
  • 🐙 GitHub Actions (.github/workflows/*.yml)
  • 🍵 Forgejo/Gitea Actions (.forgejo/workflows/*.yml or .gitea/workflows/*.yml)

📄 License

MIT

Contributors ✨

Thanks goes to these wonderful people (emoji key):

James Jackson
James Jackson

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

About

Run your CI pipelines locally

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 7

Languages