Skip to content

Commit 97a2540

Browse files
committed
Add support for Bearer token in action archive downloads
1 parent 7ff994b commit 97a2540

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

src/Runner.Common/Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public static class Features
178178
public static readonly string SendJobLevelAnnotations = "actions_send_job_level_annotations";
179179
public static readonly string EmitCompositeMarkers = "actions_runner_emit_composite_markers";
180180
public static readonly string BatchActionResolution = "actions_batch_action_resolution";
181+
public static readonly string UseBearerTokenForCodeload = "actions_use_bearer_token_for_codeload";
181182
}
182183

183184
// Node version migration related constants

src/Runner.Worker/ActionManager.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,16 +1367,28 @@ private static string GetDownloadInfoLookupKey(Pipelines.ActionStep action)
13671367
return $"{repositoryReference.Name}@{repositoryReference.Ref}";
13681368
}
13691369

1370-
private AuthenticationHeaderValue CreateAuthHeader(string token)
1370+
private AuthenticationHeaderValue CreateAuthHeader(IExecutionContext executionContext, string downloadUrl, string token)
13711371
{
13721372
if (string.IsNullOrEmpty(token))
13731373
{
13741374
return null;
13751375
}
13761376

1377-
var base64EncodingToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"x-access-token:{token}"));
1378-
HostContext.SecretMasker.AddValue(base64EncodingToken);
1379-
return new AuthenticationHeaderValue("Basic", base64EncodingToken);
1377+
if (executionContext.Global.Variables.GetBoolean(Constants.Runner.Features.UseBearerTokenForCodeload) == true &&
1378+
Uri.TryCreate(downloadUrl, UriKind.Absolute, out var parsedUrl) &&
1379+
!string.IsNullOrEmpty(parsedUrl?.Host) &&
1380+
parsedUrl.Host.StartsWith("codeload.", StringComparison.OrdinalIgnoreCase))
1381+
{
1382+
Trace.Info("Using Bearer token for action archive download directly to codeload.");
1383+
return new AuthenticationHeaderValue("Bearer", token);
1384+
}
1385+
else
1386+
{
1387+
Trace.Info("Using Basic token for action archive download.");
1388+
var base64EncodingToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"x-access-token:{token}"));
1389+
HostContext.SecretMasker.AddValue(base64EncodingToken);
1390+
return new AuthenticationHeaderValue("Basic", base64EncodingToken);
1391+
}
13801392
}
13811393

13821394
private async Task DownloadRepositoryArchive(IExecutionContext executionContext, string downloadUrl, string downloadAuthToken, string archiveFile)
@@ -1401,7 +1413,7 @@ private async Task DownloadRepositoryArchive(IExecutionContext executionContext,
14011413
using (var httpClientHandler = HostContext.CreateHttpClientHandler())
14021414
using (var httpClient = new HttpClient(httpClientHandler))
14031415
{
1404-
httpClient.DefaultRequestHeaders.Authorization = CreateAuthHeader(downloadAuthToken);
1416+
httpClient.DefaultRequestHeaders.Authorization = CreateAuthHeader(executionContext, downloadUrl, downloadAuthToken);
14051417

14061418
httpClient.DefaultRequestHeaders.UserAgent.AddRange(HostContext.UserAgents);
14071419
using (var response = await httpClient.GetAsync(downloadUrl))

0 commit comments

Comments
 (0)