Skip to content

Commit

Permalink
Pre-Release 23.3.2 artifacts | +semver: patch
Browse files Browse the repository at this point in the history
  • Loading branch information
raman-m committed Jun 11, 2024
1 parent 5872731 commit 73c4742
Showing 1 changed file with 74 additions and 45 deletions.
119 changes: 74 additions & 45 deletions build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,9 @@ var nugetFeedStableSymbolsUploadUrl = "https://www.nuget.org/api/v2/package";
// internal build variables - don't change these.
string committedVersion = "0.0.0-dev";
GitVersion versioning = null;
int releaseId = 0;
bool IsTechnicalRelease = true;
string gitHubUsername = "raman-m";
string gitHubPassword = Environment.GetEnvironmentVariable("OCELOT_GITHUB_API_KEY_2");
//string gitHubUsername = "raman-m";
//string gitHubToken = Environment.GetEnvironmentVariable("OCELOT_GITHUB_API_KEY_2");

var target = Argument("target", "Default");
var slnFile = (target == Release) ? $"./Ocelot.{Release}.sln" : "./Ocelot.sln";
Expand Down Expand Up @@ -491,19 +490,16 @@ Task("PublishGitHubRelease")
.IsDependentOn("CreateArtifacts")
.Does(() =>
{
if (IsRunningOnCircleCI())
{
var path = packagesDir.ToString() + @"/**/*";
CreateGitHubRelease();
foreach (var file in GetFiles(path))
{
UploadFileToGitHubRelease(file);
}
//if (!IsRunningOnCircleCI()) return;
CompleteGitHubRelease();
dynamic release = CreateGitHubRelease();
var path = packagesDir.ToString() + @"/**/*";
foreach (var file in GetFiles(path))
{
UploadFileToGitHubRelease(release, file);
}
CompleteGitHubRelease(release);
});

Task("EnsureStableReleaseRequirements")
Expand Down Expand Up @@ -639,28 +635,49 @@ private void PublishPackages(ConvertableDirectoryPath packagesDir, ConvertableFi
}
}

private void CreateGitHubRelease()
private void SetupGitHubClient(System.Net.Http.HttpClient client)
{
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"main\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"{ReleaseNotesAsJson()}\", \"draft\": true, \"prerelease\": true }}";

string token = Environment.GetEnvironmentVariable("OCELOT_GITHUB_API_KEY_2");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
"Bearer",
token // Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(gitHubPassword)) // token actually
);
client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github+json");
client.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28");
}

private dynamic CreateGitHubRelease()
{
//var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"main\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"{ReleaseNotesAsJson()}\", \"draft\": true, \"prerelease\": true }}";
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"main\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"{ReleaseNotesAsJson()}\", \"draft\": true, \"prerelease\": true, \"generate_release_notes\": false }}";
var content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");

using (var client = new System.Net.Http.HttpClient())
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{gitHubUsername}:{gitHubPassword}"))
);
client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");

var result = client.PostAsync("https://api.github.com/repos/ThreeMammals/Ocelot/releases", content).Result;
// client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
// "Basic",
// Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{gitHubUsername}:{gitHubPassword}"))
// );
// client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
// "Bearer",
// Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(gitHubPassword)) // token actually
// );
// client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");
// client.DefaultRequestHeaders.Add("Accept", "application/vnd.github+json");
// client.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28");
SetupGitHubClient(client);
var result = client.PostAsync("https://api.github.com/repos/ThreeMammals/Ocelot/releases", content)
.Result;
if(result.StatusCode != System.Net.HttpStatusCode.Created)
{
throw new Exception("CreateGitHubRelease result.StatusCode = " + result.StatusCode);
}
var returnValue = result.Content.ReadAsStringAsync().Result;
dynamic test = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(returnValue);
releaseId = test.id;
var releaseData = result.Content.ReadAsStringAsync().Result;
dynamic releaseJSON = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(releaseData);
Information("CreateGitHubRelease: Release ID is " + releaseJSON.id);
//releaseId = test.id;
return releaseJSON; //.id;
}
}

Expand All @@ -669,46 +686,58 @@ private string ReleaseNotesAsJson()
return System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(System.IO.File.ReadAllText(releaseNotesFile));
}

private void UploadFileToGitHubRelease(FilePath file)
private void UploadFileToGitHubRelease(dynamic release, FilePath file)
{
var data = System.IO.File.ReadAllBytes(file.FullPath);
var content = new System.Net.Http.ByteArrayContent(data);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

using (var client = new System.Net.Http.HttpClient())
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{gitHubUsername}:{gitHubPassword}"))
);
client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");

var result = client.PostAsync($"https://uploads.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}/assets?name={file.GetFilename()}", content).Result;
if(result.StatusCode != System.Net.HttpStatusCode.Created)
// client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
// "Basic",
// Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{gitHubUsername}:{gitHubPassword}"))
// );
// client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");
SetupGitHubClient(client);
int releaseId = release.id;
var fileName = file.GetFilename();
string uploadUrl = release.upload_url.ToString();
Information($"UploadFileToGitHubRelease: uploadUrl is {uploadUrl}");
string[] parts = uploadUrl.Split('{');
uploadUrl = parts[0] + $"?name={fileName}"; // $"https://uploads.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}/assets?name={fileName}"
Information($"UploadFileToGitHubRelease: uploadUrl is {uploadUrl}");
var result = client.PostAsync(uploadUrl, content).Result;
if (result.StatusCode != System.Net.HttpStatusCode.Created)
{
throw new Exception("UploadFileToGitHubRelease result.StatusCode = " + result.StatusCode);
Information($"UploadFileToGitHubRelease: StatusCode is {result.StatusCode}. Release ID is {releaseId}. Failed to upload file '{fileName}' to URL: {uploadUrl}");
throw new Exception("UploadFileToGitHubRelease: StatusCode is " + result.StatusCode);
}
}
}

private void CompleteGitHubRelease()
private void CompleteGitHubRelease(dynamic release)
{
int releaseId = release.id;
string url = release.url;
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"main\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"{ReleaseNotesAsJson()}\", \"draft\": false, \"prerelease\": false }}";
var request = new System.Net.Http.HttpRequestMessage(new System.Net.Http.HttpMethod("Patch"), $"https://api.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}");
var request = new System.Net.Http.HttpRequestMessage(new System.Net.Http.HttpMethod("Patch"), url); // $"https://api.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}");
request.Content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");

using (var client = new System.Net.Http.HttpClient())
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{gitHubUsername}:{gitHubPassword}"))
);
client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");
// client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
// "Basic",
// Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{gitHubUsername}:{gitHubPassword}"))
// );
// client.DefaultRequestHeaders.Add("User-Agent", "Ocelot Release");
SetupGitHubClient(client);

var result = client.SendAsync(request).Result;
if (result.StatusCode != System.Net.HttpStatusCode.OK)
{
throw new Exception("CompleteGitHubRelease result.StatusCode = " + result.StatusCode);
Information($"CompleteGitHubRelease: StatusCode is {result.StatusCode}. Release ID is {releaseId}. Failed to patch release with URL: {url}");
throw new Exception("CompleteGitHubRelease: StatusCode = " + result.StatusCode);
}
}
}
Expand Down

0 comments on commit 73c4742

Please sign in to comment.