Tracking issue for a typed, IR-driven migration tool from GitHub Actions to GitLab CI/CD, replacing the freehand-LLM approach that gitlab-org/ci-cd/github-actions-to-gitlab-ci uses today.
Both lexicons already ship YAML parsers, IR, code generators, typed constructors, and lint rules. This work wires them together: GH yaml → GH IR → GitLab IR (new transformer) → GitLab yaml or chant TS, with per-node provenance recorded as SARIF.
The end-state CLI:
npx @intentius/chant-lexicon-gitlab migrate \
.github/workflows/ci.yml \
--emit yaml --output .gitlab-ci.yml \
--report migration-report.sarif
Sub-issues
Deferred to follow-ups: composite actions (.github/actions/*/action.yml), reusable workflows with inputs:/outputs:, multi-file workflow trees, reverse direction (GitLab→GitHub), extraction to @intentius/chant-migrate.
Inspired by
Tracking issue for a typed, IR-driven migration tool from GitHub Actions to GitLab CI/CD, replacing the freehand-LLM approach that
gitlab-org/ci-cd/github-actions-to-gitlab-ciuses today.Both lexicons already ship YAML parsers, IR, code generators, typed constructors, and lint rules. This work wires them together: GH yaml → GH IR → GitLab IR (new transformer) → GitLab yaml or chant TS, with per-node provenance recorded as SARIF.
The end-state CLI:
Sub-issues
chant migrateCLI (--emit yaml)ActionMappingregistry + Tier 1 mappings--emit ts(TypeScript output)--strict--validate(glci/glab integration)--use-compositespattern recognisers (Node first)migration.mdx+ inspiration sectionchant-gitlab-migrateskillmigrateDeferred to follow-ups: composite actions (
.github/actions/*/action.yml), reusable workflows withinputs:/outputs:, multi-file workflow trees, reverse direction (GitLab→GitHub), extraction to@intentius/chant-migrate.Inspired by
gitlab-org/ci-cd/github-actions-to-gitlab-ci— https://gitlab.com/gitlab-org/ci-cd/github-actions-to-gitlab-ci. The four-category provenance model (Translated/Approximated/NeedsReview/Lost), the tiered marketplace-action mapping, the syntax-mapping reference, and theglci/glabvalidator-as-final-stage pattern are direct ports. The chant version is the same translation rules wearing a compiler instead of a prompt.