This commit is contained in:
Tatyana Kostromskaya
2022-10-21 13:22:10 +00:00
parent 271ed8cb4b
commit 8b5a9c9aa7
4 changed files with 82 additions and 17 deletions

13
.vscode/launch.json vendored
View File

@@ -12,7 +12,10 @@
],
"cwd": "${workspaceFolder}/src",
"console": "integratedTerminal",
"requireExactSource": false
"requireExactSource": false,
"env": {
"USE_BROKER_FLOW": "1"
}
},
{
"name": "Run",
@@ -24,7 +27,10 @@
],
"cwd": "${workspaceFolder}/src",
"console": "integratedTerminal",
"requireExactSource": false
"requireExactSource": false,
"env": {
"USE_BROKER_FLOW": "1"
}
},
{
"name": "Configure",
@@ -54,5 +60,4 @@
"requireExactSource": false
},
],
}
}

View File

@@ -466,12 +466,20 @@ namespace GitHub.Runner.Listener
Trace.Info("Refresh message received, skip autoupdate since a previous autoupdate is already running.");
}
}
else if (string.Equals(message.MessageType, "BrokerAgentRefresh", StringComparison.OrdinalIgnoreCase))
else if (string.Equals(message.MessageType, RunnerRefreshMessage.MessageType, StringComparison.OrdinalIgnoreCase))
{
if (autoUpdateInProgress == false)
{
autoUpdateInProgress = true;
var runnerUpdateMessage = JsonUtility.FromString<AgentRefreshMessage>(message.Body);
var runnerUpdateMessage = JsonUtility.FromString<RunnerRefreshMessage>(message.Body);
//////////////////////////////
_term.WriteLine($"TargetVersion: {runnerUpdateMessage.TargetVersion}");
_term.WriteLine($"AgentId: {runnerUpdateMessage.AgentId}");
_term.WriteLine($"Timeout: {runnerUpdateMessage.Timeout.ToString()}");
//////////////////////////////
var agentRefreshMessage = new AgentRefreshMessage(runnerUpdateMessage.AgentId, runnerUpdateMessage.TargetVersion, TimeSpan.FromMilliseconds(runnerUpdateMessage.Timeout));
#if DEBUG
// Can mock the update for testing
if (StringUtil.ConvertToBoolean(Environment.GetEnvironmentVariable("GITHUB_ACTIONS_RUNNER_IS_MOCK_UPDATE")))
@@ -488,17 +496,13 @@ namespace GitHub.Runner.Listener
var mockTargetVersion = mockUpdateMessages[BuildConstants.RunnerPackage.Version].TargetVersion;
_term.WriteLine($"Mocking update, using version {mockTargetVersion} instead of {runnerUpdateMessage.TargetVersion}");
Trace.Info($"Mocking update, using version {mockTargetVersion} instead of {runnerUpdateMessage.TargetVersion}");
runnerUpdateMessage = new AgentRefreshMessage(runnerUpdateMessage.AgentId, mockTargetVersion, runnerUpdateMessage.Timeout);
agentRefreshMessage = new AgentRefreshMessage(agentRefreshMessage.AgentId, mockTargetVersion, agentRefreshMessage.Timeout);
}
}
}
#endif
// var selfUpdater = HostContext.GetService<ISelfUpdater>();
// selfUpdateTask = selfUpdater.SelfUpdate(runnerUpdateMessage, jobDispatcher, false, HostContext.RunnerShutdownToken);
_term.WriteLine("BrokerAgentRefresh message received, kick-off selfupdate background process.");
_term.WriteLine($"TargetVersion: {runnerUpdateMessage.TargetVersion}");
_term.WriteLine($"AgentId: {runnerUpdateMessage.AgentId}");
_term.WriteLine($"Timeout: {runnerUpdateMessage.Timeout.ToString()}");
var selfUpdater = HostContext.GetService<ISelfUpdater>();
selfUpdateTask = selfUpdater.SelfUpdate(agentRefreshMessage, jobDispatcher, false, HostContext.RunnerShutdownToken);
Trace.Info("Refresh message received, kick-off selfupdate background process.");
}
else

View File

@@ -73,13 +73,12 @@ namespace GitHub.Runner.Listener
// we will just go with the full package.
var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token);
_cloneAndCalculateContentHashTask = CloneAndCalculateAssetsHash(_dotnetRuntimeCloneDirectory, _externalsCloneDirectory, linkedTokenSource.Token);
_terminal.WriteLine("Self-update");
if (!await UpdateNeeded(updateMessage.TargetVersion, token))
{
Trace.Info($"Can't find available update package.");
return false;
}
Trace.Info($"An update is available.");
_updateTrace.Enqueue($"RunnerPlatform: {_targetPackage.Platform}");
@@ -171,9 +170,12 @@ namespace GitHub.Runner.Listener
// old server won't send target version as part of update message.
if (string.IsNullOrEmpty(targetVersion))
{
_terminal.WriteLine("Debug 1");
var packages = await _runnerServer.GetPackagesAsync(_packageType, _platform, 1, true, token);
_terminal.WriteLine("Debug 2");
if (packages == null || packages.Count == 0)
{
_terminal.WriteLine("Debug 3");
Trace.Info($"There is no package for {_packageType} and {_platform}.");
return false;
}
@@ -182,14 +184,19 @@ namespace GitHub.Runner.Listener
}
else
{
_targetPackage = await _runnerServer.GetPackageAsync(_packageType, _platform, targetVersion, true, token);
_terminal.WriteLine("Debug 4");
_targetPackage = new PackageMetadata() { Platform = BuildConstants.RunnerPackage.PackageName,
Version = new PackageVersion(targetVersion),
DownloadUrl = $"https://github.com/actions/runner/releases/download/v{targetVersion}/actions-runner-{BuildConstants.RunnerPackage.PackageName}-{targetVersion}.tar.gz" };
_terminal.WriteLine("Debug 5");
if (_targetPackage == null)
{
_terminal.WriteLine("Debug 6");
Trace.Info($"There is no package for {_packageType} and {_platform} with version {targetVersion}.");
return false;
}
}
_terminal.WriteLine("Debug 7");
Trace.Info($"Version '{_targetPackage.Version}' of '{_targetPackage.Type}' package available in server.");
PackageVersion serverVersion = new PackageVersion(_targetPackage.Version);
Trace.Info($"Current running runner version is {BuildConstants.RunnerPackage.Version}");

View File

@@ -0,0 +1,49 @@
using Newtonsoft.Json;
using System;
using System.Runtime.Serialization;
namespace GitHub.DistributedTask.WebApi
{
[DataContract]
public sealed class RunnerRefreshMessage
{
public static readonly String MessageType = "RunnerRefresh";
[JsonConstructor]
internal RunnerRefreshMessage()
{
}
public RunnerRefreshMessage(
Int32 agentId,
String targetVersion,
int? timeout = null)
{
this.AgentId = agentId;
this.Timeout = timeout ?? TimeSpan.FromMinutes(60).Milliseconds;
this.TargetVersion = targetVersion;
}
[DataMember]
public Int32 AgentId
{
get;
private set;
}
[DataMember]
public int Timeout
{
get;
private set;
}
[DataMember]
public String TargetVersion
{
get;
private set;
}
}
}