From a64c20f29293c8c309996958492a7bae86a7535d Mon Sep 17 00:00:00 2001 From: Muhammad Danish <88161975+mdanish-kh@users.noreply.github.com> Date: Thu, 9 Jan 2025 08:49:06 +0500 Subject: [PATCH 1/2] Make direct API call to sync fork --- src/WingetCreateCore/Common/GitHub.cs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/WingetCreateCore/Common/GitHub.cs b/src/WingetCreateCore/Common/GitHub.cs index 2518e6e2..f5d1aacc 100644 --- a/src/WingetCreateCore/Common/GitHub.cs +++ b/src/WingetCreateCore/Common/GitHub.cs @@ -7,7 +7,10 @@ namespace Microsoft.WingetCreateCore.Common using System.Collections.Generic; using System.IO; using System.Linq; + using System.Net.Http; using System.Security.Cryptography; + using System.Text; + using System.Text.Json.Nodes; using System.Threading.Tasks; using Jose; using Microsoft.WingetCreateCore.Common.Exceptions; @@ -483,8 +486,23 @@ private async Task UpdateForkedRepoWithUpstreamCommits(Repository forkedRepo) throw new NonFastForwardException(commitsAheadBy); } - var upstreamBranchReference = await this.github.Git.Reference.Get(upstream.Id, $"heads/{upstream.DefaultBranch}"); - await this.github.Git.Reference.Update(forkedRepo.Id, $"heads/{forkedRepo.DefaultBranch}", new ReferenceUpdate(upstreamBranchReference.Object.Sha)); + // Octokit .NET doesn't support sync fork endpoint, so we make a direct call to the GitHub API. + // https://docs.github.com/en/rest/branches/branches?apiVersion=2022-11-28#sync-a-fork-branch-with-the-upstream-repository + HttpClient httpClient = new HttpClient(); + + // Headers + httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", this.github.Credentials.Password); + httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github+json"); + httpClient.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28"); + httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.ProgramName); + + // Payload + JsonObject jsonObject = new JsonObject { { "branch", forkedRepo.DefaultBranch } }; + var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); + + var url = $"https://api.github.com/repos/{forkedRepo.Owner.Login}/{forkedRepo.Name}/merge-upstream"; + var response = await httpClient.PostAsync(url, content); + response.EnsureSuccessStatusCode(); } } From 87f514d805c5623648d2fe52ebf99e3374996752 Mon Sep 17 00:00:00 2001 From: Muhammad Danish <88161975+mdanish-kh@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:41:44 +0500 Subject: [PATCH 2/2] add references --- src/WingetCreateCore/Common/GitHub.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/WingetCreateCore/Common/GitHub.cs b/src/WingetCreateCore/Common/GitHub.cs index f5d1aacc..03d99d45 100644 --- a/src/WingetCreateCore/Common/GitHub.cs +++ b/src/WingetCreateCore/Common/GitHub.cs @@ -487,7 +487,8 @@ private async Task UpdateForkedRepoWithUpstreamCommits(Repository forkedRepo) } // Octokit .NET doesn't support sync fork endpoint, so we make a direct call to the GitHub API. - // https://docs.github.com/en/rest/branches/branches?apiVersion=2022-11-28#sync-a-fork-branch-with-the-upstream-repository + // Tracking issue for the request: https://github.com/octokit/octokit.net/issues/2989 + // API reference: https://docs.github.com/en/rest/branches/branches?apiVersion=2022-11-28#sync-a-fork-branch-with-the-upstream-repository HttpClient httpClient = new HttpClient(); // Headers