Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 14 additions & 0 deletions src/Runner.Worker/JobExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
using GitHub.Runner.Worker.Dap;
using GitHub.Services.Common;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Pipelines = GitHub.DistributedTask.Pipelines;

namespace GitHub.Runner.Worker
Expand Down Expand Up @@ -159,6 +160,19 @@ public async Task<List<IStep>> InitializeJob(IExecutionContext jobContext, Pipel
context.Output($"{entry.Key}: {entry.Value}");
}
context.Output("##[endgroup]");

try {
// serialize permissions into an env var
var contractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy(true, false) };
var permissionsJson = JsonConvert.SerializeObject(permissions, new JsonSerializerSettings() { ContractResolver = contractResolver, Formatting = Formatting.None });
context.Global.EnvironmentVariables["GITHUB_TOKEN_PERMISSIONS"] = permissionsJson;
context.SetEnvContext("GITHUB_TOKEN_PERMISSIONS", permissionsJson);
}
catch (Exception ex)
{
context.Output($"Fail to serialize GITHUB_TOKEN_PERMISSIONS: {ex.Message}");
Trace.Error(ex);
}
}
}
catch (Exception ex)
Expand Down
20 changes: 20 additions & 0 deletions src/Test/L0/Worker/JobExtensionL0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,26 @@ public async Task DebuggerClientConnectionTimeoutIsNotAnInfrastructureFailure()
}
}

[Fact]
[Trait("Level", "L0")]
[Trait("Category", "Worker")]
public async Task GITHUB_TOKEN_PERMISSIONS_IsSetInEnvContext()
{
using (TestHostContext hc = CreateTestContext())
{
var jobExtension = new JobExtension();
jobExtension.Initialize(hc);

_actionManager.Setup(x => x.PrepareActionsAsync(It.IsAny<IExecutionContext>(), It.IsAny<IEnumerable<Pipelines.JobStep>>(), It.IsAny<Guid>()))
.Returns(Task.FromResult(new PrepareResult(new List<JobExtensionRunner>(), new Dictionary<Guid, IActionRunner>())));

_jobEc.Global.Variables.Set("system.github.token.permissions", "{\"Actions\": \"write\", \"Contents\": \"write\", \"PullRequests\": \"read\"}");
await jobExtension.InitializeJob(_jobEc, _message);

Assert.Equal("{\"actions\":\"write\",\"contents\":\"write\",\"pull_requests\":\"read\"}", _jobEc.Global.EnvironmentVariables["GITHUB_TOKEN_PERMISSIONS"]);
}
}

private void EnableDebuggerOnMessage(TestHostContext hc)
{
_message.EnableDebugger = true;
Expand Down