diff --git a/src/Runner.Listener/Runner.cs b/src/Runner.Listener/Runner.cs index 13cc7fe97..f3a76f59d 100644 --- a/src/Runner.Listener/Runner.cs +++ b/src/Runner.Listener/Runner.cs @@ -466,6 +466,46 @@ 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)) + { + if (autoUpdateInProgress == false) + { + autoUpdateInProgress = true; + var runnerUpdateMessage = JsonUtility.FromString(message.Body); +#if DEBUG + // Can mock the update for testing + if (StringUtil.ConvertToBoolean(Environment.GetEnvironmentVariable("GITHUB_ACTIONS_RUNNER_IS_MOCK_UPDATE"))) + { + + // The mock_update_messages.json file should be an object with keys being the current version and values being the targeted mock version object + // Example: { "2.283.2": {"targetVersion":"2.284.1"}, "2.284.1": {"targetVersion":"2.285.0"}} + var mockUpdatesPath = Path.Combine(HostContext.GetDirectory(WellKnownDirectory.Root), "mock_update_messages.json"); + if (File.Exists(mockUpdatesPath)) + { + var mockUpdateMessages = JsonUtility.FromString>(File.ReadAllText(mockUpdatesPath)); + if (mockUpdateMessages.ContainsKey(BuildConstants.RunnerPackage.Version)) + { + 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); + } + } + } +#endif + // var selfUpdater = HostContext.GetService(); + // 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()}"); + Trace.Info("Refresh message received, kick-off selfupdate background process."); + } + else + { + Trace.Info("Refresh message received, skip autoupdate since a previous autoupdate is already running."); + } + } else if (string.Equals(message.MessageType, JobRequestMessageTypes.PipelineAgentJobRequest, StringComparison.OrdinalIgnoreCase)) { if (autoUpdateInProgress || runOnceJobReceived)