Skip to content

feat(ci): add GitHub Actions -> Depot CI migration workflow#429

Merged
lukevmorris merged 13 commits intodepot:mainfrom
paulbalaji:pb/ci-migration
Feb 18, 2026
Merged

feat(ci): add GitHub Actions -> Depot CI migration workflow#429
lukevmorris merged 13 commits intodepot:mainfrom
paulbalaji:pb/ci-migration

Conversation

@paulbalaji
Copy link
Contributor

Summary

  • add new depot ci command group with migrate, secrets, vars, status, and logs
  • implement migration engine for .github -> .depot workflows/actions, compatibility analysis, and secret detection
  • add CI API client + CLI commands for managing CI secrets and variables
  • include unit tests across API, compatibility, and migration flows

Follow-up fixes in this branch

  • honor selected workflows in migrate flow instead of copying all workflows
  • make --yes mode overwrite existing .depot without an extra prompt
  • skip invalid workflow YAML with warnings instead of aborting entire migration
  • align compatibility rules/analysis to current Depot CI beta docs
  • wire depot ci secrets add --description through to API payload
  • handle empty success bodies in CI API request helper

Verification

  • go build ./cmd/depot
  • go test ./...
  • go vet ./...
  • manual command checks for depot ci --help, depot ci migrate --help, depot ci secrets --help, depot ci vars --help, depot ci status, depot ci logs

paulbalaji and others added 13 commits February 17, 2026 12:50
Add foundational type definitions for CI migration:
- compat package: SupportLevel, CompatibilityRule, CompatibilityIssue, CompatibilityReport
- migrate package: WorkflowFile, JobInfo, MigrationPlan, MigrationResult
- All types include JSON serialization tags and comprehensive tests

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add API types for CI secret and variable management:
- CISecretAddRequest, CISecretBatchAddRequest, CISecretMeta, CISecretListResponse
- CIVariableAddRequest, CIVariableMeta, CIVariableListResponse
- All types include JSON serialization tags for API communication

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@paulbalaji paulbalaji marked this pull request as ready for review February 18, 2026 18:33
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c330b20952

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +145 to +146
destFile, err := os.OpenFile(destPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
if err != nil {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve executable modes when copying GitHub action files

CopyGitHubToDepot writes every copied file with a hard-coded 0644 mode, so executable files in .github/actions lose their +x bit during migration. This breaks common custom action setups that invoke local scripts/binaries (for example ./entrypoint.sh) and will surface as runtime permission denied failures after migration. The copy logic should preserve source permissions (at least executable bits) instead of forcing non-executable output.

Useful? React with 👍 / 👎.

Comment on lines +221 to +223
secretAssignments, err := parseSecretAssignments(opts.secrets)
if err != nil {
return err

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate secret flags before mutating migration outputs

runMigrate parses --secret assignments only after it has already copied files into .depot, so an invalid flag like --secret FOO returns an error but still leaves a partially migrated filesystem state. This makes failure paths non-idempotent and can break automation that expects no side effects when argument validation fails. Parse and validate secret assignments before calling the copy steps.

Useful? React with 👍 / 👎.

Copy link
Member

@lukevmorris lukevmorris left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks so much @paulbalaji! 🎉

@lukevmorris lukevmorris merged commit b066d1d into depot:main Feb 18, 2026
5 checks passed
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.

2 participants

Comments