Migrates a project from one GitLab instance to another using specified access tokens and URLs.
Input Schema
| Property | Type | Description | Required |
|---|---|---|---|
| sourceUrl | string | - | |
| destinationUrl | string | - | |
| sourceFullPath | string | Full path to the project in the source Gitlab instance | |
| sourceAccessToken | string | - | |
| destinationAccessToken | string | - |
Output Schema
| Property | Type | Description | Required |
|---|---|---|---|
| migrationId | number | Id of the migration that imports the project | |
| importedRepoUrl | string | URL to the newly imported repo |
Usage Examples
Migrate from a self-managed GitLab to GitLab.com and register in the catalog
Moves an existing project from an internal GitLab instance to GitLab.com. After import, it registers the repository’s catalog-info.yaml using catalog:register.
steps:
- id: migrate-to-gitlab-com
action: gitlab:group:migrate
input:
destinationAccessToken: ${{ parameters.gitlabComToken }}
destinationUrl: https://gitlab.com
sourceAccessToken: ${{ parameters.internalGitlabToken }}
sourceFullPath: platform/payments/api-service
sourceUrl: https://gitlab.internal.acme.com
- id: register-in-catalog
action: catalog:register
input:
catalogInfoUrl: ${{ steps.migrate-to-gitlab-com.output.importedRepoUrl }}/-/blob/main/catalog-info.yamlMigrate a project between groups within the same GitLab instance
Uses the same GitLab host for source and destination to move a project from a legacy group to a new group. After import, it registers the develop branch catalog descriptor with catalog:register.
steps:
- id: migrate-within-instance
action: gitlab:group:migrate
input:
destinationAccessToken: ${{ parameters.instanceAdminToken }}
destinationUrl: https://gitlab.internal.acme.com
sourceAccessToken: ${{ parameters.legacyMaintainerToken }}
sourceFullPath: legacy-group/subgroup/service-a
sourceUrl: https://gitlab.internal.acme.com
- id: register-develop
action: catalog:register
input:
catalogInfoUrl: ${{ steps.migrate-within-instance.output.importedRepoUrl }}/-/blob/develop/catalog-info.yamlMigrate from GitLab.com to an on-prem staging environment
Imports a GitLab.com project into an on-prem GitLab instance on a nonstandard port. After import, it registers the catalog file using catalog:register.
steps:
- id: migrate-to-staging
action: gitlab:group:migrate
input:
destinationAccessToken: ${{ parameters.stagingGitlabToken }}
destinationUrl: https://gitlab.staging.acme.net:8443
sourceAccessToken: ${{ parameters.gitlabComToken }}
sourceFullPath: acme-labs/experiments/feature-flags
sourceUrl: https://gitlab.com
- id: register-staging
action: catalog:register
input:
catalogInfoUrl: ${{ steps.migrate-to-staging.output.importedRepoUrl }}/-/blob/main/catalog-info.yamlMigrate two related services in a single workflow
Runs the migration action twice to move two repositories as part of a coordinated migration. Each imported repository is then registered with catalog:register.
steps:
- id: migrate-orders
action: gitlab:group:migrate
input:
destinationAccessToken: ${{ parameters.destToken }}
destinationUrl: https://gitlab.com
sourceAccessToken: ${{ parameters.srcToken }}
sourceFullPath: commerce/legacy/orders-service
sourceUrl: https://gitlab.internal.acme.com
- id: register-orders
action: catalog:register
input:
catalogInfoUrl: ${{ steps.migrate-orders.output.importedRepoUrl }}/-/blob/main/catalog-info.yaml
- id: migrate-inventory
action: gitlab:group:migrate
input:
destinationAccessToken: ${{ parameters.destToken }}
destinationUrl: https://gitlab.com
sourceAccessToken: ${{ parameters.srcToken }}
sourceFullPath: commerce/legacy/inventory-service
sourceUrl: https://gitlab.internal.acme.com
- id: register-inventory
action: catalog:register
input:
catalogInfoUrl: ${{ steps.migrate-inventory.output.importedRepoUrl }}/-/blob/main/catalog-info.yamlFully parameterized migration with dynamic source path
Collects all values from template parameters and builds the source path from a group and repo name. After migration, it registers the imported repository using catalog:register.
steps:
- id: migrate-dynamic
action: gitlab:group:migrate
input:
destinationAccessToken: ${{ parameters.destinationToken }}
destinationUrl: ${{ parameters.destinationUrl }}
sourceAccessToken: ${{ parameters.sourceToken }}
sourceFullPath: ${{ parameters.sourceGroup }}/${{ parameters.repoName }}
sourceUrl: ${{ parameters.sourceUrl }}
- id: register-dynamic
action: catalog:register
input:
catalogInfoUrl: ${{ steps.migrate-dynamic.output.importedRepoUrl }}/-/blob/${{ parameters.defaultBranch || 'main' }}/catalog-info.yaml