Known limitations

CI/CD platforms have meaningful semantic differences. The converter handles the common cases deterministically, but every platform also has features that have no equivalent elsewhere — or features that require runtime context the converter cannot access. This page is an honest accounting of where you should expect manual work after running the converter.

Every limitation listed here is also surfaced in the audit panel when it applies to your specific input. The converter never silently drops information.

Cross-cutting limitations

These apply to every direction the converter supports.

  • No remote file resolution

    The converter reads only the YAML you paste. It does not fetch GitLab `include:` URLs, GitHub `uses:` repositories, CircleCI orb registries, or Bitbucket pipe Docker images. Flatten your config before converting if it depends on remote files.

  • No JavaScript execution

    GitHub Actions written in JavaScript (e.g. `actions/github-script`, custom JS actions) cannot be inspected. The converter emits a stub plus a TODO comment; rewrite the JavaScript by hand on the target.

    Affects: GitHub Actions

  • No Groovy / Jenkinsfile interpretation

    Jenkins declarative pipelines with custom shared libraries or Groovy scripting cannot be soundly translated. The converter does not support Jenkins as a source platform — see the roadmap.

  • Limited expression support

    The converter rewrites well-known context variables and predefined operators (==, !=, &&, ||) but does not parse the full expression grammar. Complex expressions involving function calls (toJSON, fromJSON, contains, hashFiles in unusual contexts) are emitted verbatim and flagged for review.

  • Secrets are name-only

    The converter reports every secret name it finds and adds them to the audit checklist, but it cannot transfer secret values between platforms. Recreate every secret on the target platform.

GitHub Actions

Limitations specific to converting from GitHub Actions.

  • Reusable workflows are flagged for review

    `uses: org/repo/.github/workflows/foo.yml@ref` is not auto-flattened. Replace with the equivalent GitLab `include:` / CircleCI `commands` / Bitbucket flattened steps before converting, or accept the manual-review TODO.

    Affects: GitLab CI, CircleCI, Bitbucket Pipelines

  • Composite actions are not flattened

    Custom composite actions (`runs.using: composite`) cannot be inlined without fetching their source. The converter emits a TODO with a link to the action.

    Affects: GitLab CI, CircleCI, Bitbucket Pipelines

  • Job permissions don't map directly

    GitHub Actions `permissions:` controls GITHUB_TOKEN scopes. Other platforms use distinct mechanisms (GitLab CI/CD job tokens, CircleCI contexts, Bitbucket OIDC providers). The audit log notes which permissions to recreate.

    Affects: GitLab CI, CircleCI, Bitbucket Pipelines

  • Concurrency cancellation is approximate

    GitHub `concurrency.group` and `cancel-in-progress` translate to GitLab `interruptible:` / CircleCI workflow cancellation rules, but the cancellation guarantees differ subtly between platforms.

    Affects: GitLab CI, CircleCI

GitLab CI

Limitations specific to converting from GitLab CI.

  • YAML anchors and extends:

    Anchors are resolved by the YAML parser. `extends:` is not auto-flattened — it is flagged for manual review. Inline templated jobs before converting if you need a clean output.

  • `include:` is not resolved

    Local, project, remote, and template includes are reported as warnings. Flatten the YAML before converting (e.g. `gitlab-ci-local --preview` if you have it installed locally).

  • Parent-child pipelines

    GitLab parent-child / multi-project pipelines (`trigger: include:`) have no equivalent on most platforms. The converter emits a stub on the parent side and a TODO suggesting reusable workflows / dynamic config / the path-filtering orb on the target.

  • GitLab Pages

    The `pages` job has no GitHub Actions / CircleCI / Bitbucket equivalent. The converter emits a stub plus a recommendation (use GitHub Pages, CloudFront, Netlify, etc.).

    Affects: GitHub Actions, CircleCI, Bitbucket Pipelines

CircleCI

Limitations specific to converting from CircleCI.

  • Custom orbs are not auto-translated

    The converter knows about a curated set of orbs (circleci/node, circleci/python, circleci/aws-cli, circleci/docker) and emits equivalent commands. Other orbs are flagged for review.

  • Dynamic config and continuation

    CircleCI dynamic config (the `setup: true` flag plus the continuation orb) cannot be translated since it generates configuration at runtime. Use GitHub reusable workflows / GitLab parent-child pipelines / Bitbucket conditional pipelines to model similar fan-out.

  • Resource classes

    CircleCI `resource_class:` values (`large`, `xlarge`, `arm.large`, etc.) translate to a comment. Pick the appropriate runner / executor on the target platform.

  • Workflow branch filters with regex

    CircleCI accepts regex in `filters.branches.only`. GitHub / GitLab / Bitbucket use glob patterns instead. The converter rewrites simple regex to globs where possible and flags the rest.

    Affects: GitHub Actions, GitLab CI, Bitbucket Pipelines

Bitbucket Pipelines

Limitations specific to converting from Bitbucket.

  • Schedules live in the UI

    Bitbucket schedules are configured in the repository UI and never appear in YAML. The converter cannot infer them; configure schedules manually on the target platform.

  • Deployment environments require manual setup

    `deployment:` annotations require pre-configured environments. The converter notes which environment names to recreate but cannot create them automatically.

  • Custom pipes are flagged for review

    Pipes are Docker images with a YAML wrapper. The converter handles common Atlassian pipes (S3 deploy, CloudFront invalidate, Slack notify, git-secrets-scan); custom pipes are emitted as `docker run` commands plus a TODO.

  • Maximum 100 steps per pipeline

    Bitbucket caps each pipeline at 100 steps. If your source workflow is larger, split it across multiple Bitbucket pipelines (one per branch / trigger) or refactor into custom pipelines.

    Affects: Bitbucket Pipelines

Related Tools