diff --git a/src/Runner.Common/BrokerServer.cs b/src/Runner.Common/BrokerServer.cs index f3a3a5715..090c3c27d 100644 --- a/src/Runner.Common/BrokerServer.cs +++ b/src/Runner.Common/BrokerServer.cs @@ -17,7 +17,7 @@ namespace GitHub.Runner.Common { Task ConnectAsync(Uri serverUrl, VssCredentials credentials); - Task GetRunnerMessageAsync(CancellationToken token, TaskAgentStatus status, string version); + Task GetRunnerMessageAsync(CancellationToken token, TaskAgentStatus status, string version, string os, string architecture); } public sealed class BrokerServer : RunnerService, IBrokerServer @@ -44,11 +44,11 @@ namespace GitHub.Runner.Common } } - public Task GetRunnerMessageAsync(CancellationToken cancellationToken, TaskAgentStatus status, string version) + public Task GetRunnerMessageAsync(CancellationToken cancellationToken, TaskAgentStatus status, string version, string os, string architecture) { CheckConnection(); var jobMessage = RetryRequest( - async () => await _brokerHttpClient.GetRunnerMessageAsync(version, status, cancellationToken), cancellationToken); + async () => await _brokerHttpClient.GetRunnerMessageAsync(version, status, os, architecture, cancellationToken), cancellationToken); return jobMessage; } diff --git a/src/Runner.Common/RunnerServer.cs b/src/Runner.Common/RunnerServer.cs index 34da3be63..85084e494 100644 --- a/src/Runner.Common/RunnerServer.cs +++ b/src/Runner.Common/RunnerServer.cs @@ -38,7 +38,7 @@ namespace GitHub.Runner.Common Task CreateAgentSessionAsync(Int32 poolId, TaskAgentSession session, CancellationToken cancellationToken); Task DeleteAgentMessageAsync(Int32 poolId, Int64 messageId, Guid sessionId, CancellationToken cancellationToken); Task DeleteAgentSessionAsync(Int32 poolId, Guid sessionId, CancellationToken cancellationToken); - Task GetAgentMessageAsync(Int32 poolId, Guid sessionId, Int64? lastMessageId, TaskAgentStatus status, string runnerVersion, CancellationToken cancellationToken); + Task GetAgentMessageAsync(Int32 poolId, Guid sessionId, Int64? lastMessageId, TaskAgentStatus status, string runnerVersion, string os, string architecture, CancellationToken cancellationToken); // job request Task GetAgentRequestAsync(int poolId, long requestId, CancellationToken cancellationToken); @@ -272,10 +272,10 @@ namespace GitHub.Runner.Common return _messageTaskAgentClient.DeleteAgentSessionAsync(poolId, sessionId, cancellationToken: cancellationToken); } - public Task GetAgentMessageAsync(Int32 poolId, Guid sessionId, Int64? lastMessageId, TaskAgentStatus status, string runnerVersion, CancellationToken cancellationToken) + public Task GetAgentMessageAsync(Int32 poolId, Guid sessionId, Int64? lastMessageId, TaskAgentStatus status, string runnerVersion, string os, string architecture, CancellationToken cancellationToken) { CheckConnection(RunnerConnectionType.MessageQueue); - return _messageTaskAgentClient.GetMessageAsync(poolId, sessionId, lastMessageId, status, runnerVersion, cancellationToken: cancellationToken); + return _messageTaskAgentClient.GetMessageAsync(poolId, sessionId, lastMessageId, status, runnerVersion, os, architecture, cancellationToken: cancellationToken); } //----------------------------------------------------------------- diff --git a/src/Runner.Listener/BrokerMessageListener.cs b/src/Runner.Listener/BrokerMessageListener.cs index f770fd8ac..22224c363 100644 --- a/src/Runner.Listener/BrokerMessageListener.cs +++ b/src/Runner.Listener/BrokerMessageListener.cs @@ -73,7 +73,7 @@ namespace GitHub.Runner.Listener _getMessagesTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token); try { - message = await _brokerServer.GetRunnerMessageAsync(_getMessagesTokenSource.Token, runnerStatus, BuildConstants.RunnerPackage.Version); + message = await _brokerServer.GetRunnerMessageAsync(_getMessagesTokenSource.Token, runnerStatus, BuildConstants.RunnerPackage.Version, VarUtil.OS, VarUtil.OSArchitecture); if (message == null) { diff --git a/src/Runner.Listener/MessageListener.cs b/src/Runner.Listener/MessageListener.cs index 686877e11..e0aa809e4 100644 --- a/src/Runner.Listener/MessageListener.cs +++ b/src/Runner.Listener/MessageListener.cs @@ -9,6 +9,7 @@ using System.Threading; using System.Threading.Tasks; using GitHub.DistributedTask.WebApi; using GitHub.Runner.Common; +using GitHub.Runner.Common.Util; using GitHub.Runner.Listener.Configuration; using GitHub.Runner.Sdk; using GitHub.Services.Common; @@ -219,6 +220,8 @@ namespace GitHub.Runner.Listener _lastMessageId, runnerStatus, BuildConstants.RunnerPackage.Version, + VarUtil.OS, + VarUtil.OSArchitecture, _getMessagesTokenSource.Token); // Decrypt the message body if the session is using encryption diff --git a/src/Sdk/DTGenerated/Generated/TaskAgentHttpClientBase.cs b/src/Sdk/DTGenerated/Generated/TaskAgentHttpClientBase.cs index 482d0b522..12100d768 100644 --- a/src/Sdk/DTGenerated/Generated/TaskAgentHttpClientBase.cs +++ b/src/Sdk/DTGenerated/Generated/TaskAgentHttpClientBase.cs @@ -461,6 +461,8 @@ namespace GitHub.DistributedTask.WebApi long? lastMessageId = null, TaskAgentStatus? status = null, string runnerVersion = null, + string os = null, + string architecture = null, object userState = null, CancellationToken cancellationToken = default) { @@ -483,6 +485,16 @@ namespace GitHub.DistributedTask.WebApi queryParams.Add("runnerVersion", runnerVersion); } + if (os != null) + { + queryParams.Add("os", os); + } + + if (architecture != null) + { + queryParams.Add("architecture", architecture); + } + return SendAsync( httpMethod, locationId, diff --git a/src/Sdk/WebApi/WebApi/BrokerHttpClient.cs b/src/Sdk/WebApi/WebApi/BrokerHttpClient.cs index 42d69ee46..40821f1c6 100644 --- a/src/Sdk/WebApi/WebApi/BrokerHttpClient.cs +++ b/src/Sdk/WebApi/WebApi/BrokerHttpClient.cs @@ -59,6 +59,8 @@ namespace GitHub.Actions.RunService.WebApi public async Task GetRunnerMessageAsync( string runnerVersion, TaskAgentStatus? status, + string os = null, + string architecture = null, CancellationToken cancellationToken = default ) { @@ -75,6 +77,16 @@ namespace GitHub.Actions.RunService.WebApi queryParams.Add("runnerVersion", runnerVersion); } + if (os != null) + { + queryParams.Add("os", os); + } + + if (architecture != null) + { + queryParams.Add("architecture", architecture); + } + var result = await SendAsync( new HttpMethod("GET"), requestUri: requestUri, diff --git a/src/Test/L0/Listener/MessageListenerL0.cs b/src/Test/L0/Listener/MessageListenerL0.cs index b2db393bf..f85f360b8 100644 --- a/src/Test/L0/Listener/MessageListenerL0.cs +++ b/src/Test/L0/Listener/MessageListenerL0.cs @@ -192,8 +192,8 @@ namespace GitHub.Runner.Common.Tests.Listener _runnerServer .Setup(x => x.GetAgentMessageAsync( - _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny())) - .Returns(async (Int32 poolId, Guid sessionId, Int64? lastMessageId, TaskAgentStatus status, string runnerVersion, CancellationToken cancellationToken) => + _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(async (Int32 poolId, Guid sessionId, Int64? lastMessageId, TaskAgentStatus status, string runnerVersion, string os, string architecture, CancellationToken cancellationToken) => { await Task.Yield(); return messages.Dequeue(); @@ -208,7 +208,7 @@ namespace GitHub.Runner.Common.Tests.Listener //Assert _runnerServer .Verify(x => x.GetAgentMessageAsync( - _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny()), Times.Exactly(arMessages.Length)); + _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(arMessages.Length)); } } @@ -293,7 +293,7 @@ namespace GitHub.Runner.Common.Tests.Listener _runnerServer .Setup(x => x.GetAgentMessageAsync( - _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny())) + _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Throws(new TaskAgentAccessTokenExpiredException("test")); try { @@ -311,7 +311,7 @@ namespace GitHub.Runner.Common.Tests.Listener //Assert _runnerServer .Verify(x => x.GetAgentMessageAsync( - _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny()), Times.Once); + _settings.PoolId, expectedSession.SessionId, It.IsAny(), TaskAgentStatus.Online, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _runnerServer .Verify(x => x.DeleteAgentSessionAsync(