-
Notifications
You must be signed in to change notification settings - Fork 88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Support for Archive Uploads to GitHub-Owned Storage with Multipart Upload Option #1261
Conversation
Unit Test Results0 tests 0 ✅ 0s ⏱️ Results for commit 25ea598. ♻️ This comment has been updated with latest results. |
src/OctoshiftCLI.Tests/bbs2gh/Commands/MigrateRepo/MigrateRepoCommandArgsTests.cs
Show resolved
Hide resolved
@@ -198,6 +200,22 @@ private async Task<string> UploadArchiveToAws(string bucketName, string archiveP | |||
return archiveBlobUrl; | |||
} | |||
|
|||
private async Task<string> UploadArchiveToGithub(string org, string archivePath) | |||
{ | |||
#pragma warning disable IDE0063 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason the warning was disabled? I think we can use using declaration
here.
src/OctoshiftCLI.Tests/bbs2gh/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs
Outdated
Show resolved
Hide resolved
src/OctoshiftCLI.Tests/gei/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dropped a couple more comments.
{ httpContent, "archive", archiveName } | ||
}; | ||
|
||
response = await _client.PostAsync(url, content); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A couple of observations:
- Even though this may work the
PostAsync
method will convert the data to JSON (basically base64 string) and will eventually createStringContent
so I am not sure if this is the intended use here because we're now dealing with aStream
rather than string content. So We may want to refactor the SendAsync method to also support aMultiPartFormDataContent
andStreamContent
. It can simply check to see if the passed inbody
is either of those and not convert it to a string content. - When dealing with a stream we shouldn't log the entire body as we do here instead as I suggested in option 1, we can check the body and if it's a multipart form data or a stream content we can just say
BLOB
orBinary data
instead of dumping the entire JSON encoded body!
Summary:
This PR introduces the ability for the GEI CLI to upload archives to GitHub-owned storage using multipart uploads. To enable this, a new CLI option, --use-github-storage, has been added. This option allows users to explicitly specify that their archives should be uploaded to GitHub's managed storage instead of their own.
Key Features:
Multipart Upload Support: Leveraging multipart upload for reliable and efficient large file uploads. This ensures the robustness of the uploads, minimizing the chances of failure during transmission. We're investigating libraries to handle multipart uploads, but for now, this feature is not rolled by hand unless necessary.
New Option: --use-github-storage:
This option is required to upload archives to GitHub-owned storage and will be hidden until GitHub-owned storage reaches general availability (GA).
By default, archives are still uploaded to user-specified storage locations unless the --use-github-storage flag is explicitly set.
Motivation:
As discussed during our EDR, we want to allow users to utilize GitHub-owned storage as an option without making it the default. This approach lets us roll out GitHub-managed storage in stages and gather feedback while providing an explicit way to opt-in to this feature.
Check in BBS MigrateRepoCommandArgs removed, relating to changes in this PR: #1057
Take it out for a 🚗 :
Migrating from GitHub Enterprise Server:
Successful migration_id:
RM_kgHaACQxMWNjY2RlMi1hNTAzLTQwMWItOTA1OS1kM2NkZjBiYjM4Y2Q
Closes: https://github.ghe.com/github/octoshift/issues/8969
ThirdPartyNotices.txt
(if applicable)