--- name: build-ci-migration-assistant description: Automatically migrates build systems and CI/CD configurations to target platforms. Use when modernizing build infrastructure, switching CI/CD providers, or standardizing across projects. Supports common migration paths including Maven↔Gradle, npm↔Yarn, Travis CI→GitHub Actions, CircleCI→GitHub Actions, Jenkins→GitLab CI, and GitLab CI→GitHub Actions. Analyzes existing configuration, generates equivalent target configuration, maps dependencies and commands, and provides validation and migration documentation. --- # Build/CI Migration Assistant Automatically migrate build systems and CI/CD configurations to target platforms while preserving functionality. ## Workflow ### 1. Analyze Source Configuration Identify the current build system or CI/CD platform: **Build Systems:** - Maven (pom.xml) - Gradle (build.gradle, build.gradle.kts) - npm (package.json) - Yarn (package.json + yarn.lock) - Make (Makefile) - CMake (CMakeLists.txt) **CI/CD Platforms:** - Travis CI (.travis.yml) - CircleCI (.circleci/config.yml) - Jenkins (Jenkinsfile) - GitLab CI (.gitlab-ci.yml) - GitHub Actions (.github/workflows/*.yml) Read and parse the source configuration to understand: - Dependencies and their versions - Build commands and lifecycle - Test configuration - Environment variables and secrets - Caching strategy - Deployment steps ### 2. Map to Target Platform Consult the appropriate reference guide: - **Build systems**: See [references/build-systems.md](references/build-systems.md) - **CI/CD platforms**: See [references/ci-platforms.md](references/ci-platforms.md) Map source concepts to target equivalents: - Dependencies → Target dependency format - Build commands → Target command syntax - Lifecycle phases → Target stages/jobs - Environment variables → Target secrets/variables - Caching → Target caching mechanism ### 3. Generate Target Configuration Create the target configuration file(s): **For build systems:** - Generate new build file (build.gradle, pom.xml, etc.) - Preserve dependency versions - Map plugins and tasks - Maintain build lifecycle **For CI/CD platforms:** - Generate workflow/pipeline file - Convert jobs and stages - Map triggers and conditions - Configure runners/agents - Set up caching and artifacts ### 4. Validate Migration Test the generated configuration: **Build system validation:** ```bash # Maven mvn clean install # Gradle ./gradlew build # npm npm install && npm test ``` **CI/CD validation:** - Create a test branch - Push generated configuration - Verify pipeline runs successfully - Check all jobs complete - Validate artifacts and deployments ### 5. Document Changes Provide migration summary including: - What was migrated - What requires manual review - Breaking changes or incompatibilities - Manual steps needed - Rollback instructions ## Common Migration Paths ### Maven to Gradle **Use case:** Modernize Java build, improve build performance **Steps:** 1. Read pom.xml 2. Map dependencies to Gradle format 3. Convert plugins to Gradle equivalents 4. Generate build.gradle 5. Test build: `./gradlew build` **Example:** Original Maven: ```xml org.springframework.boot spring-boot-starter-web 2.7.0 ``` Generated Gradle: ```groovy dependencies { implementation 'org.springframework.boot:spring-boot-starter-web:2.7.0' } ``` See [references/build-systems.md](references/build-systems.md) for complete mapping. ### Travis CI to GitHub Actions **Use case:** Migrate to GitHub-native CI/CD **Steps:** 1. Read .travis.yml 2. Map language/runtime setup 3. Convert matrix builds 4. Migrate environment variables to secrets 5. Generate .github/workflows/ci.yml 6. Test workflow **Example:** Original Travis CI: ```yaml language: python python: - "3.9" script: - pytest tests/ ``` Generated GitHub Actions: ```yaml name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.9' - run: pytest tests/ ``` See [references/ci-platforms.md](references/ci-platforms.md) for complete mapping. ### CircleCI to GitHub Actions **Use case:** Consolidate CI/CD on GitHub **Steps:** 1. Read .circleci/config.yml 2. Map Docker images to containers 3. Convert workflows to jobs with dependencies 4. Migrate orbs to actions 5. Generate GitHub Actions workflow 6. Test all jobs ### GitLab CI to GitHub Actions **Use case:** Migrate from GitLab to GitHub **Steps:** 1. Read .gitlab-ci.yml 2. Map stages to jobs 3. Convert services to GitHub Actions services 4. Migrate CI/CD variables to secrets 5. Generate workflow files 6. Test pipeline ## Migration Checklist ### Before Migration - [ ] Backup existing configuration - [ ] Document current build/CI behavior - [ ] Identify custom scripts and dependencies - [ ] List environment variables and secrets - [ ] Note any special requirements ### During Migration - [ ] Generate target configuration - [ ] Map all dependencies - [ ] Convert all commands - [ ] Migrate environment variables - [ ] Set up caching - [ ] Configure artifacts - [ ] Update deployment steps ### After Migration - [ ] Test build locally - [ ] Test CI/CD pipeline - [ ] Verify all jobs succeed - [ ] Check artifacts are generated - [ ] Validate deployments work - [ ] Update documentation - [ ] Train team on new system ## Validation Strategies ### Dry Run Test migration without committing: 1. Generate configuration in separate branch 2. Run build/CI locally if possible 3. Review generated files 4. Identify issues before committing ### Parallel Running Run both systems temporarily: 1. Keep old configuration 2. Add new configuration 3. Compare results 4. Fix discrepancies 5. Remove old configuration once validated ### Incremental Migration Migrate in stages: 1. Start with basic build 2. Add tests 3. Add caching 4. Add deployment 5. Validate each stage ## Common Patterns ### Dependency Version Management **Preserve exact versions:** ``` Maven: 2.7.0 → Gradle: implementation 'group:artifact:2.7.0' ``` **Convert version ranges:** ``` Maven: [1.0,2.0) → Gradle: implementation 'group:artifact:1.+' ``` ### Environment Variables **Travis CI:** ```yaml env: global: - DATABASE_URL=postgres://localhost/test ``` **GitHub Actions:** ```yaml env: DATABASE_URL: postgres://localhost/test ``` ### Matrix Builds **Travis CI:** ```yaml python: - "3.8" - "3.9" ``` **GitHub Actions:** ```yaml strategy: matrix: python-version: ['3.8', '3.9'] ``` ### Caching **CircleCI:** ```yaml - save_cache: paths: - node_modules key: deps-{{ checksum "package.json" }} ``` **GitHub Actions:** ```yaml - uses: actions/cache@v3 with: path: node_modules key: ${{ runner.os }}-deps-${{ hashFiles('package.json') }} ``` ## Troubleshooting ### Build Fails After Migration **Check:** - Dependency versions match - Build commands are correct - Environment variables are set - Required tools are installed **Solution:** - Compare old and new configurations - Run build with verbose output - Check for missing dependencies - Verify tool versions ### CI Pipeline Fails **Check:** - Workflow syntax is correct - Secrets are configured - Runner has required tools - Network access is available **Solution:** - Review pipeline logs - Test locally if possible - Check runner configuration - Verify permissions ### Tests Fail **Check:** - Test commands are correct - Test environment is set up - Database/services are running - Test data is available **Solution:** - Run tests locally - Check service configuration - Verify environment variables - Review test logs ## Best Practices ### Preserve Functionality - Keep exact dependency versions initially - Maintain build lifecycle order - Preserve all test configurations - Keep deployment steps identical ### Incremental Changes - Migrate one component at a time - Test after each change - Don't combine migration with upgrades - Document each step ### Documentation - Document what changed - Note manual steps required - Provide rollback instructions - Update team documentation ### Testing - Test locally before pushing - Use test branches - Run full test suite - Validate deployments ## References - **[build-systems.md](references/build-systems.md)**: Detailed mappings for Maven, Gradle, npm, Yarn, Make, CMake migrations - **[ci-platforms.md](references/ci-platforms.md)**: Complete guides for Travis CI, CircleCI, Jenkins, GitLab CI, GitHub Actions migrations ## Tips - **Start simple**: Migrate basic build first, add complexity later - **Test thoroughly**: Validate every aspect of the migration - **Keep backups**: Maintain old configuration until new one is proven - **Document changes**: Clear documentation helps team adoption - **Use references**: Consult reference files for detailed mappings - **Validate incrementally**: Test each component as you migrate it