Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
60da4b4
Initial commit for gl2gh. Copy and adapt bbs2gh for GitLab.
synthead Apr 7, 2026
ce5e253
Merge branch 'main' into add-gitlab-archive-adapter
synthead Apr 23, 2026
b9e52ac
Update GitlabApi to use GitLab API routes.
synthead Apr 29, 2026
1f689b7
Rename GitlabRepository with GitlabProject.
synthead Apr 29, 2026
9990aec
Don't pass credentials to GetRepositoryAndAttachmentsSize.
synthead Apr 29, 2026
1d3d489
Use correct "group" and "project" verbs in GitlabInspectorService.
synthead Apr 29, 2026
a8dce15
Add GetAsyncHttpResponseMessage.
synthead Apr 30, 2026
44d2fc4
Use repoPath in GitlabApi.
synthead Apr 30, 2026
85bb039
Omit simple=true in GitlabApi.
synthead Apr 30, 2026
e817605
Add GetMergeRequestCount to GitlabApi.
synthead Apr 30, 2026
33d8c21
Update ReposCsvGeneratorService to use GitLab.
synthead Apr 30, 2026
cf1bbd3
Use GroupsCsvGeneratorService for GitLab.
synthead Apr 30, 2026
93fca3d
Use groups in GitLab InventoryReportCommandHandler.
synthead Apr 30, 2026
6a6c46c
Use projects in GitLab InventoryReportCommandHandler.
synthead Apr 30, 2026
02f2113
Use ProjectsCsvGeneratorService for GitLab projects.
synthead Apr 30, 2026
8bcb543
Use Path in GitlabProject.
synthead Apr 30, 2026
89d45d2
Use groups and projects in GitLab InventoryReportCommand.
synthead Apr 30, 2026
5b876ad
Replace bbs with gitlab in InventoryReportCommand.
synthead Apr 30, 2026
252fd41
Use GitlabGroup in GitLab InventoryReportCommand.
synthead Apr 30, 2026
c97b47e
Use GitlabGroup in GitLab InventoryReportCommandArgs.
synthead Apr 30, 2026
50d4725
Use ProjectsCsvGeneratorService in GitLab Program.cs.
synthead Apr 30, 2026
399b919
Use groups in GitLab GenerateScriptCommandHandler.
synthead Apr 30, 2026
6453e84
Use GitlabGroup in GitLab GenerateScriptCommandArgs.
synthead Apr 30, 2026
becffbd
Use group paths in GitLab InventoryReportCommandHandler.
synthead Apr 30, 2026
29ba355
Use merge requests in GitLab ProjectsCsvGeneratorService.
synthead Apr 30, 2026
a5fef91
Use Path var in GitLabApi.
synthead Apr 30, 2026
f08020d
Call GetProjects from GitLab GenerateScriptCommandHandler.
synthead Apr 30, 2026
b8c9925
Use GetMergeRequestCount in GitLab ProjectsCsvGeneratorService.
synthead Apr 30, 2026
d4c8782
Use projectPath var in GitlabApi.
synthead Apr 30, 2026
bacdf1b
Use merge requests in GitLab GitlabInspectorService.
synthead Apr 30, 2026
48f7a68
Use merge requests in GitLab GroupsCsvGeneratorService.
synthead Apr 30, 2026
693d99a
Call GetProjectMergeRequestCount from GitLab ProjectsCsvGeneratorServ…
synthead Apr 30, 2026
890c4c1
Use groups and projects in GitLab MigrateRepoCommandHandler.
synthead Apr 30, 2026
17c8c8d
Consume "archived" value from project API for GitLab.
synthead Apr 30, 2026
fa6e445
Use group and project in GitLab MigrateRepoCommandArgs.
synthead Apr 30, 2026
a6a62f4
Use gitlab options in GitLab MigrateRepoCommandArgs.
synthead Apr 30, 2026
3a2c55a
Pass group and project to GetExport from GL MigrateRepoCommandHandler.
synthead Apr 30, 2026
6445ece
Return Path from GetGroups in GitlabInspectorService.
synthead May 11, 2026
6c7702c
Use GetProjectMergeRequestCount in GitlabInspectorService.
synthead May 11, 2026
ba99ac7
Remove username from GitLab auth.
synthead May 13, 2026
700b902
Use GitLab references in GitlabApiFactory.
synthead May 13, 2026
e5f0c72
Remove GITLAB_USERNAME env var from EnvironmentVariableProvider.
synthead May 13, 2026
5149a20
Use PAT args for GitLab.
synthead May 13, 2026
243d3af
Use IGitlabArchiveDownloader.cs for IGitlabArchiveDownloader.
synthead May 13, 2026
23e9fc5
Remove Samba and SSH options from GL GenerateScriptCommandHandler.
synthead May 13, 2026
3334f13
Update GL GenerateScriptCommandHandler to use GitLab options.
synthead May 13, 2026
72ac8ec
Remove Message from GotlabApi GetExport response.
synthead May 13, 2026
1fab75a
Update GL MigrateRepoCommand to use GitLab options.
synthead May 13, 2026
e2178a9
Use GitLab states in GL ExportState.
synthead May 13, 2026
662dd87
Return message from GitlabApi StartExport.
synthead May 13, 2026
3892154
Remove GitLab archive downloader.
synthead May 14, 2026
3e08782
Use GITLAB type for GitLab connector.
synthead May 14, 2026
cb7792a
Add octoshift_ll_gitlab_self_serve FF in headers.
synthead May 14, 2026
86ac89e
Add DownloadToFile to GitlabClient.
synthead May 14, 2026
a8b79ed
Add DownloadExportArchive to GitlabApi.
synthead May 14, 2026
5a3f518
Download GitLab archives with HttpDownloadService.
synthead May 14, 2026
b5a2337
Remove Samba and SSH args from MigrateRepoCommandArgs.
synthead May 14, 2026
4492c19
Remove Samba and SSH flow from GL GenerateScriptCommand.
synthead May 14, 2026
2cc70c6
Remove GitlabUsername from GL InventoryReportCommandArgs.
synthead May 14, 2026
c245bd2
Always include archived status in projects CSVs.
synthead May 14, 2026
7fe146f
Use GitLab terminology in GL InventoryReportCommand.
synthead May 14, 2026
80441cb
Remove Samba and shared home logic from GL MigrateRepoCommandHandler.
synthead May 14, 2026
f89ac2c
Merge branch 'main' into add-gitlab-archive-adapter
synthead May 18, 2026
dc467e4
delete stale tests and unused gitlabsettings
brianaj May 19, 2026
edf51a9
remove unused packagereferences in csproj
brianaj May 19, 2026
ebd01da
remove Kerberos
brianaj May 19, 2026
a37f4ac
clean up Kerberos from migrate repo
brianaj May 19, 2026
fd61692
clean-up bbs in inventoryreport
brianaj May 19, 2026
2419299
fix some existing tests
brianaj May 19, 2026
8c6a8c8
update generate script command
brianaj May 19, 2026
a5359a9
get migrate repo tests passing
brianaj May 19, 2026
fd6b9bb
fix inventory report command
brianaj May 20, 2026
2eaaf5e
log version and if CE or not
brianaj May 20, 2026
1485885
add integration test chanages
brianaj May 26, 2026
5b2431d
fix dotnet format
brianaj May 26, 2026
340ec0c
Bump global.json SDK to 8.0.421 to fix Windows dotnet format flake
brianaj May 26, 2026
60e03dc
update client to handle 429s with back-offs
brianaj May 27, 2026
3470c9f
dotnet format fixes
brianaj May 27, 2026
9b7fa93
more dotnet format fixes
brianaj May 27, 2026
b14fc8c
update devcontainer to include dotnet
brianaj May 27, 2026
f927cb4
fix codeql
brianaj May 27, 2026
fd716ca
update readme and releasenotes
brianaj May 27, 2026
4187838
address copilot pr feedback
brianaj May 27, 2026
2b3b433
update dev contianer
brianaj May 28, 2026
20b89f5
add CI yaml changes for publishing release
brianaj May 28, 2026
08d9acb
fix verify tests
brianaj May 28, 2026
8792089
Merge branch 'main' into add-gitlab-archive-adapter
brianaj May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@
},

"features": {
"ghcr.io/devcontainers/features/github-cli:1": {}
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "8.0"
}
},

"remoteUser": "vscode"
Expand Down
35 changes: 34 additions & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -148,12 +148,15 @@ jobs:
dist/linux-x64/ado2gh-linux-amd64
dist/linux-x64/bbs2gh-linux-amd64
dist/linux-x64/gei-linux-amd64
dist/linux-x64/gl2gh-linux-amd64
dist/osx-x64/ado2gh-darwin-amd64
dist/osx-x64/bbs2gh-darwin-amd64
dist/osx-x64/gei-darwin-amd64
dist/osx-x64/gl2gh-darwin-amd64
dist/win-x64/ado2gh-windows-amd64.exe
dist/win-x64/bbs2gh-windows-amd64.exe
dist/win-x64/gei-windows-amd64.exe
dist/win-x64/gl2gh-windows-amd64.exe

e2e-test:
permissions:
Expand All @@ -166,7 +169,7 @@ jobs:
fail-fast: false
matrix:
runner-os: [windows-latest, ubuntu-latest, macos-latest]
source-vcs: [AdoBasic, AdoCsv, Bbs, Ghes, Github]
source-vcs: [AdoBasic, AdoCsv, Bbs, Ghes, Github, Gitlab]
runs-on: ${{ matrix.runner-os }}
concurrency: integration-test-${{ matrix.source-vcs }}-${{ matrix.runner-os }}
steps:
Expand All @@ -191,9 +194,11 @@ jobs:
New-Item -Path "./" -Name "gh-gei" -ItemType "directory"
New-Item -Path "./" -Name "gh-ado2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-bbs2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-gl2gh" -ItemType "directory"
Copy-Item ./dist/linux-x64/gei-linux-amd64 ./gh-gei/gh-gei
Copy-Item ./dist/linux-x64/ado2gh-linux-amd64 ./gh-ado2gh/gh-ado2gh
Copy-Item ./dist/linux-x64/bbs2gh-linux-amd64 ./gh-bbs2gh/gh-bbs2gh
Copy-Item ./dist/linux-x64/gl2gh-linux-amd64 ./gh-gl2gh/gh-gl2gh
shell: pwsh

- name: Copy binary to root (windows)
Expand All @@ -202,9 +207,11 @@ jobs:
New-Item -Path "./" -Name "gh-gei" -ItemType "directory"
New-Item -Path "./" -Name "gh-ado2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-bbs2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-gl2gh" -ItemType "directory"
Copy-Item ./dist/win-x64/gei-windows-amd64.exe ./gh-gei/gh-gei.exe
Copy-Item ./dist/win-x64/ado2gh-windows-amd64.exe ./gh-ado2gh/gh-ado2gh.exe
Copy-Item ./dist/win-x64/bbs2gh-windows-amd64.exe ./gh-bbs2gh/gh-bbs2gh.exe
Copy-Item ./dist/win-x64/gl2gh-windows-amd64.exe ./gh-gl2gh/gh-gl2gh.exe
shell: pwsh

- name: Copy binary to root (macos)
Expand All @@ -213,16 +220,19 @@ jobs:
New-Item -Path "./" -Name "gh-gei" -ItemType "directory"
New-Item -Path "./" -Name "gh-ado2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-bbs2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-gl2gh" -ItemType "directory"
Copy-Item ./dist/osx-x64/gei-darwin-amd64 ./gh-gei/gh-gei
Copy-Item ./dist/osx-x64/ado2gh-darwin-amd64 ./gh-ado2gh/gh-ado2gh
Copy-Item ./dist/osx-x64/bbs2gh-darwin-amd64 ./gh-bbs2gh/gh-bbs2gh
Copy-Item ./dist/osx-x64/gl2gh-darwin-amd64 ./gh-gl2gh/gh-gl2gh
shell: pwsh

- name: Set execute permissions
run: |
chmod +x ./gh-gei/gh-gei
chmod +x ./gh-ado2gh/gh-ado2gh
chmod +x ./gh-bbs2gh/gh-bbs2gh
chmod +x ./gh-gl2gh/gh-gl2gh

- name: Install gh-gei extension
run: gh extension install .
Expand All @@ -245,6 +255,13 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install gh-gl2gh extension
run: gh extension install .
shell: pwsh
working-directory: ./gh-gl2gh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Integration Test
env:
ADO_PAT: ${{ secrets.ADO_PAT }}
Expand All @@ -266,6 +283,7 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_BUCKET_NAME: ${{ secrets.AWS_BUCKET_NAME }}
GITLAB_PAT: ${{ secrets.GITLAB_PAT }}
LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:${{ github.workspace }}/src/OctoshiftCLI.IntegrationTests/bin/Debug/net8.0/runtimes/ubuntu.18.04-x64/native"
run: dotnet test src/OctoshiftCLI.IntegrationTests/OctoshiftCLI.IntegrationTests.csproj --filter "${{ matrix.source-vcs }}ToGithub" --logger:"junit;LogFilePath=integration-tests.xml" --logger "console;verbosity=normal" /p:VersionPrefix=9.9

Expand Down Expand Up @@ -386,6 +404,21 @@ jobs:
./dist/osx-x64/bbs2gh-darwin-amd64
./dist/osx-arm64/bbs2gh-darwin-arm64

- name: Create gh-gl2gh Release
# a06a81a03ee405af7f2048a818ed3f03bbf83c7b is tag v2, pinned to avoid supply chain attacks
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b
with:
body_path: ./RELEASENOTES.md
repository: github/gh-gl2gh
token: ${{ secrets.RELEASE_NOTES_PAT }}
files: |
./dist/win-x86/gl2gh-windows-386.exe
./dist/win-x64/gl2gh-windows-amd64.exe
./dist/linux-x64/gl2gh-linux-amd64
./dist/linux-arm64/gl2gh-linux-arm64
./dist/osx-x64/gl2gh-darwin-amd64
./dist/osx-arm64/gl2gh-darwin-arm64

- name: Archive Release Notes
shell: pwsh
run: |
Expand Down
20 changes: 19 additions & 1 deletion .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,20 +78,23 @@ jobs:
dist/linux-x64/ado2gh-linux-amd64
dist/linux-x64/bbs2gh-linux-amd64
dist/linux-x64/gei-linux-amd64
dist/linux-x64/gl2gh-linux-amd64
dist/osx-x64/ado2gh-darwin-amd64
dist/osx-x64/bbs2gh-darwin-amd64
dist/osx-x64/gei-darwin-amd64
dist/osx-x64/gl2gh-darwin-amd64
dist/win-x64/ado2gh-windows-amd64.exe
dist/win-x64/bbs2gh-windows-amd64.exe
dist/win-x64/gei-windows-amd64.exe
dist/win-x64/gl2gh-windows-amd64.exe

e2e-test:
needs: [ build-for-e2e-test ]
strategy:
fail-fast: false
matrix:
runner-os: [windows-latest, ubuntu-latest, macos-latest]
source-vcs: [AdoBasic, AdoCsv, Bbs, Ghes, Github]
source-vcs: [AdoBasic, AdoCsv, Bbs, Ghes, Github, Gitlab]
runs-on: ${{ matrix.runner-os }}
concurrency: integration-test-${{ matrix.source-vcs }}-${{ matrix.runner-os }}
steps:
Expand Down Expand Up @@ -124,9 +127,11 @@ jobs:
New-Item -Path "./" -Name "gh-gei" -ItemType "directory"
New-Item -Path "./" -Name "gh-ado2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-bbs2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-gl2gh" -ItemType "directory"
Copy-Item ./dist/linux-x64/gei-linux-amd64 ./gh-gei/gh-gei
Copy-Item ./dist/linux-x64/ado2gh-linux-amd64 ./gh-ado2gh/gh-ado2gh
Copy-Item ./dist/linux-x64/bbs2gh-linux-amd64 ./gh-bbs2gh/gh-bbs2gh
Copy-Item ./dist/linux-x64/gl2gh-linux-amd64 ./gh-gl2gh/gh-gl2gh
shell: pwsh

- name: Copy binary to root (windows)
Expand All @@ -135,9 +140,11 @@ jobs:
New-Item -Path "./" -Name "gh-gei" -ItemType "directory"
New-Item -Path "./" -Name "gh-ado2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-bbs2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-gl2gh" -ItemType "directory"
Copy-Item ./dist/win-x64/gei-windows-amd64.exe ./gh-gei/gh-gei.exe
Copy-Item ./dist/win-x64/ado2gh-windows-amd64.exe ./gh-ado2gh/gh-ado2gh.exe
Copy-Item ./dist/win-x64/bbs2gh-windows-amd64.exe ./gh-bbs2gh/gh-bbs2gh.exe
Copy-Item ./dist/win-x64/gl2gh-windows-amd64.exe ./gh-gl2gh/gh-gl2gh.exe
shell: pwsh

- name: Copy binary to root (macos)
Expand All @@ -146,16 +153,19 @@ jobs:
New-Item -Path "./" -Name "gh-gei" -ItemType "directory"
New-Item -Path "./" -Name "gh-ado2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-bbs2gh" -ItemType "directory"
New-Item -Path "./" -Name "gh-gl2gh" -ItemType "directory"
Copy-Item ./dist/osx-x64/gei-darwin-amd64 ./gh-gei/gh-gei
Copy-Item ./dist/osx-x64/ado2gh-darwin-amd64 ./gh-ado2gh/gh-ado2gh
Copy-Item ./dist/osx-x64/bbs2gh-darwin-amd64 ./gh-bbs2gh/gh-bbs2gh
Copy-Item ./dist/osx-x64/gl2gh-darwin-amd64 ./gh-gl2gh/gh-gl2gh
shell: pwsh

- name: Set execute permissions
run: |
chmod +x ./gh-gei/gh-gei
chmod +x ./gh-ado2gh/gh-ado2gh
chmod +x ./gh-bbs2gh/gh-bbs2gh
chmod +x ./gh-gl2gh/gh-gl2gh

- name: Install gh-gei extension
run: gh extension install .
Expand All @@ -178,6 +188,13 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install gh-gl2gh extension
run: gh extension install .
shell: pwsh
working-directory: ./gh-gl2gh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Integration Test
env:
ADO_PAT: ${{ secrets.ADO_PAT }}
Expand All @@ -199,6 +216,7 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_BUCKET_NAME: ${{ secrets.AWS_BUCKET_NAME }}
GITLAB_PAT: ${{ secrets.GITLAB_PAT }}
GEI_DEBUG_MODE: 'true'
LD_LIBRARY_PATH: '$LD_LIBRARY_PATH:${{ github.workspace }}/src/OctoshiftCLI.IntegrationTests/bin/Debug/net8.0/runtimes/ubuntu.18.04-x64/native'
run: dotnet test src/OctoshiftCLI.IntegrationTests/OctoshiftCLI.IntegrationTests.csproj --filter "${{ matrix.source-vcs }}ToGithub" --logger:"junit;LogFilePath=integration-tests.xml" --logger "console;verbosity=normal" /p:VersionPrefix=9.9
Expand Down
28 changes: 27 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ The [GitHub Enterprise Importer](https://docs.github.com/en/migrations/using-git
> GEI is generally available for repository migrations originating from Azure DevOps or GitHub that target GitHub Enterprise Cloud. It is in public beta for repository migrations from BitBucket Server and Data Center to GitHub Enterprise Cloud.

## Using the GEI CLI
There are 3 separate CLIs that we ship as extensions for the official [GitHub CLI](https://github.com/cli/cli#installation):
There are 4 separate CLIs that we ship as extensions for the official [GitHub CLI](https://github.com/cli/cli#installation):
- `gh gei` - Run migrations between GitHub products
- `gh ado2gh` - Run migrations from Azure DevOps to GitHub
- `gh bbs2gh` - Run migrations from BitBucket Server or Data Center to GitHub
- `gh gl2gh` - Run migrations from GitLab to GitHub _(not yet generally available)_

To use `gh gei` first install the latest [GitHub CLI](https://github.com/cli/cli#installation), then run the command
>`gh extension install github/gh-gei`
Expand All @@ -22,6 +23,11 @@ To use `gh ado2gh` first install the latest [GitHub CLI](https://github.com/cli/
To use `gh bbs2gh` first install the latest [GitHub CLI](https://github.com/cli/cli#installation), then run the command
>`gh extension install github/gh-bbs2gh`

To use `gh gl2gh` first install the latest [GitHub CLI](https://github.com/cli/cli#installation), then run the command
>`gh extension install github/gh-gl2gh`

> **Note:** `gh gl2gh` is not yet generally available. The extension repo and releases may not be published yet.

We update the extensions frequently, so make sure you update them on a regular basis:
>`gh extension upgrade github/gh-gei`

Expand All @@ -33,6 +39,8 @@ To see the available commands and options run:

>`gh bbs2gh --help`

>`gh gl2gh --help`

### GitHub to GitHub Usage (GitHub.com -> GitHub.com)
1. Create Personal Access Tokens with access to the source GitHub org, and the target GitHub org (for more details on scopes needed refer to our [official documentation](https://docs.github.com/en/migrations/using-github-enterprise-importer/preparing-to-migrate-with-github-enterprise-importer/managing-access-for-github-enterprise-importer)).

Expand Down Expand Up @@ -87,6 +95,24 @@ Refer to the [official documentation](https://docs.github.com/en/migrations/usin

Refer to the [official documentation](https://docs.github.com/en/migrations/using-github-enterprise-importer/migrating-repositories-with-github-enterprise-importer/migrating-repositories-from-bitbucket-server-to-github-enterprise-cloud) for more details.

### GitLab to GitHub Usage
1. Create a Personal Access Token for the source GitLab instance (with `api` and `read_repository` scopes) and one for the target GitHub org (for more details on scopes needed refer to our [official documentation](https://docs.github.com/en/migrations/using-github-enterprise-importer/preparing-to-migrate-with-github-enterprise-importer/managing-access-for-github-enterprise-importer)).

2. Set the `GITLAB_PAT` and `GH_PAT` environment variables.

3. Run the `generate-script` command to generate a migration script.
```
> gh gl2gh generate-script --gitlab-server-url GITLAB-SERVER-URL \
--github-org DESTINATION \
--output FILENAME
```

The `--gitlab-server-url` flag accepts both GitLab.com (`https://gitlab.com`) and self-hosted GitLab instances.

4. The previous command will have created a `migrate.ps1` PowerShell script. Review the steps in the generated script and tweak if necessary.

5. The `migrate.ps1` script requires PowerShell to run. If not already installed see the [install instructions](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.2) to install PowerShell on Windows, Linux, or Mac. Then run the script.

### Skipping version checks

When the CLI is launched, it logs if a newer version of the CLI is available. You can skip this check by setting the `GEI_SKIP_VERSION_CHECK` environment variable to `true`.
Expand Down
1 change: 1 addition & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Added new `gl2gh` CLI (not yet generally available) for migrating GitLab repositories (GitLab.com and self-hosted) to GitHub. Includes `migrate-repo`, `generate-script`, and `inventory-report` along with the standard supporting commands (e.g. `download-logs`, `wait-for-migration`, `abort-migration`, `grant-migrator-role`, `revoke-migrator-role`, `create-team`, `generate-mannequin-csv`, `reclaim-mannequin`). Archives can be uploaded via Azure Blob Storage, AWS S3, or GitHub-owned storage.
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "8.0.410",
"version": "8.0.421",
"rollForward": "minor"
}
}
14 changes: 12 additions & 2 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ run-ado2gh *args: build
run-bbs2gh *args: build
dotnet run --project src/bbs2gh/bbs2gh.csproj {{args}}

# Build and run the gl2gh CLI locally
run-gl2gh *args: build
dotnet run --project src/gl2gh/gl2gh.csproj {{args}}

# Watch and auto-rebuild gei on changes
watch-gei:
dotnet watch build --project src/gei/gei.csproj
Expand All @@ -72,6 +76,10 @@ watch-ado2gh:
watch-bbs2gh:
dotnet watch build --project src/bbs2gh/bbs2gh.csproj

# Watch and auto-rebuild gl2gh on changes
watch-gl2gh:
dotnet watch build --project src/gl2gh/gl2gh.csproj

# Build self-contained binaries for all platforms (requires PowerShell)
publish:
pwsh ./publish.ps1
Expand Down Expand Up @@ -115,19 +123,21 @@ install-extensions: publish-linux
set -euo pipefail

# Create extension directories
mkdir -p gh-gei gh-ado2gh gh-bbs2gh
mkdir -p gh-gei gh-ado2gh gh-bbs2gh gh-gl2gh

# Copy binaries
cp ./dist/linux-x64/gei-linux-amd64 ./gh-gei/gh-gei
cp ./dist/linux-x64/ado2gh-linux-amd64 ./gh-ado2gh/gh-ado2gh
cp ./dist/linux-x64/bbs2gh-linux-amd64 ./gh-bbs2gh/gh-bbs2gh
cp ./dist/linux-x64/gl2gh-linux-amd64 ./gh-gl2gh/gh-gl2gh

# Set execute permissions
chmod +x ./gh-gei/gh-gei ./gh-ado2gh/gh-ado2gh ./gh-bbs2gh/gh-bbs2gh
chmod +x ./gh-gei/gh-gei ./gh-ado2gh/gh-ado2gh ./gh-bbs2gh/gh-bbs2gh ./gh-gl2gh/gh-gl2gh

# Install extensions
cd gh-gei && gh extension install . && cd ..
cd gh-ado2gh && gh extension install . && cd ..
cd gh-bbs2gh && gh extension install . && cd ..
cd gh-gl2gh && gh extension install . && cd ..

echo "Extensions installed successfully!"
Loading
Loading