Skip to content

feat(migrate): add migrate command with GitHub Actions and Bamboo support#226

Open
Viktor (tiulpin) wants to merge 2 commits into
mainfrom
feat/migrate-foundation-gha
Open

feat(migrate): add migrate command with GitHub Actions and Bamboo support#226
Viktor (tiulpin) wants to merge 2 commits into
mainfrom
feat/migrate-foundation-gha

Conversation

@tiulpin

@tiulpin Viktor (tiulpin) commented Apr 13, 2026

Copy link
Copy Markdown
Member

First in a series splitting up #217. Foundation + GitHub Actions + Bamboo converters. Rebased onto main now that the shared pipelineschema/schema-cache refactor (#370) and the migrate issue template (#371) have merged.

What's in

  • teamcity migrate: detect → convert → validate → write .tc.yml
  • GitHub Actions: actionlint-based, ~60 action transformers
  • Bamboo Specs: stage flattening, ~30 task transformers, ${bamboo.*}%param%
  • Builds on the shared internal/pipelineschema + cmdutil.FetchOrCachePipelineSchema (refactor(pipeline): extract pipelineschema package and shared schema cache #370)
  • skills/migrate-to-teamcity/ covers GHA + Bamboo (mappings, gotchas, schema)
  • FUS telemetry: emits teamcity.cli.migrate.completed (source / outcome / validation_status / is_dry_run) and adds migrate to the command enum. (The fus-reporting-api-go bump for the anonymized-field regexp#hash fix landed in refactor(pipeline): extract pipelineschema package and shared schema cache #370.) Metadata registration tracked in FUS-8018.
  • Addresses all 8 findings from the 55-repo validation report (schema-valid runs-on derived from the server schema, matrix/expression runners no longer dropped, reusable-workflow with:/secrets: preserved, Bamboo !include + nested spec detection, consistent exit codes)

Output uses ✓ / ⚠ / ✗ per file. Each future CI adds one <ci>.go + fixture + switch case.

Follow-ups

GitLab → Jenkins → CircleCI → Azure → Bitbucket → Travis. Reference branch: #217.

QA

Binaries: https://cli.teamcity.com/pipeline/CLI_CiCd/10884?job=10887&focusLine=1&logView=linear&tab=artifacts&pipelineRunTab=pipeline

# extract the right archive for your OS, then:
./teamcity migrate --help

GitHub Actions:

cd <any repo with .github/workflows/*.yml>
./teamcity migrate --dry-run
./teamcity migrate                # writes <name>.tc.yml next to source
./teamcity pipeline validate <name>.tc.yml

Bamboo:

cd <any repo with bamboo-specs/*.yml or bamboo.yml>
./teamcity migrate --dry-run
./teamcity migrate
./teamcity pipeline validate <name>.tc.yml

Filter to one source: --from github-actions or --from bamboo. JSON output: --json.

Check that Manual setup needed: lists triggers / secrets / branch filters / (Bamboo) final-tasks / manual stages — those are intentionally not auto-converted.

Skill

migrate-to-teamcity ships in the binary; install for your AI agent (Claude Code / Cursor / etc.):

./teamcity skill list                      # confirm migrate-to-teamcity is bundled
./teamcity skill install migrate-to-teamcity --project
# or globally:
./teamcity skill install migrate-to-teamcity

Then in the agent, ask it to migrate a repo (e.g. "migrate this Bamboo project to TeamCity"). It should pull the skill, run teamcity migrate, fix stubs from mappings.md, and surface manual-setup items from gotchas.md. Remove with ./teamcity skill remove migrate-to-teamcity.

Test plan

  • go test ./...
  • golangci-lint run
  • teamcity migrate --dry-run on GHA fixture
  • teamcity migrate --dry-run on Bamboo fixture
  • Dogfooded on a real repo

chatgpt-codex-connector[bot]

This comment was marked as outdated.

@tiulpin Viktor (tiulpin) added the do-not-merge Reference-only; do not merge label Apr 18, 2026
@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 872cb6d to c0c89c6 Compare May 6, 2026 11:02
@tiulpin Viktor (tiulpin) removed the do-not-merge Reference-only; do not merge label May 6, 2026
@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from c0c89c6 to 211f94d Compare May 6, 2026 11:36
@tiulpin Viktor (tiulpin) changed the title feat(migrate): add migrate command with GitHub Actions support feat(migrate): add migrate command with GitHub Actions and Bamboo support May 6, 2026
@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 211f94d to f155bea Compare May 6, 2026 11:42
@tiulpin Viktor (tiulpin) marked this pull request as ready for review May 6, 2026 11:43
@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from f155bea to 71fb1f9 Compare May 6, 2026 12:05
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 71fb1f9 to 1d50a6d Compare May 6, 2026 13:34
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 1d50a6d to 25b73dc Compare May 6, 2026 13:44
@chatgpt-codex-connector

This comment was marked as resolved.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 25b73dc to e08f061 Compare May 28, 2026 14:07
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from a061c53 to 46a80c6 Compare May 28, 2026 16:27
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 41a2b2d to bb68f35 Compare May 28, 2026 17:30
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

chatgpt-codex-connector[bot]

This comment was marked as outdated.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from f089f19 to 354843f Compare June 19, 2026 06:24
chatgpt-codex-connector[bot]

This comment was marked as outdated.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 354843f to 2e991a6 Compare June 19, 2026 06:59
@tiulpin Viktor (tiulpin) changed the base branch from main to refactor/extract-pipeline-schema June 19, 2026 06:59
Base automatically changed from refactor/extract-pipeline-schema to main June 19, 2026 07:01
chatgpt-codex-connector[bot]

This comment was marked as outdated.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 2e991a6 to 808e4b1 Compare June 19, 2026 07:09
chatgpt-codex-connector[bot]

This comment was marked as outdated.

@tiulpin Viktor (tiulpin) force-pushed the feat/migrate-foundation-gha branch from 808e4b1 to 00a22dc Compare June 19, 2026 07:28
chatgpt-codex-connector[bot]

This comment was marked as outdated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant