From 202a97ab12833b4916ad7312b1cf235e4b802f0c Mon Sep 17 00:00:00 2001 From: Nikola Jokic Date: Fri, 8 Dec 2023 13:16:29 +0100 Subject: [PATCH] Modify user agent format with subsystem and is proxy configured information (#3116) --- cmd/githubrunnerscalesetlistener/main.go | 7 +++++ .../autoscalingrunnerset_controller.go | 2 ++ github/actions/client.go | 26 ++++++++++++------- github/actions/user_agent_test.go | 24 +++++++++++++++++ 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 github/actions/user_agent_test.go diff --git a/cmd/githubrunnerscalesetlistener/main.go b/cmd/githubrunnerscalesetlistener/main.go index 15b3b8a0..ebe7fd57 100644 --- a/cmd/githubrunnerscalesetlistener/main.go +++ b/cmd/githubrunnerscalesetlistener/main.go @@ -176,6 +176,8 @@ func run(ctx context.Context, rc config.Config, logger logr.Logger, opts runOpti Version: build.Version, CommitSHA: build.CommitSHA, ScaleSetID: rc.RunnerScaleSetId, + HasProxy: hasProxy(), + Subsystem: "githubrunnerscalesetlistener", }) if err != nil { return fmt.Errorf("failed to create an Actions Service client: %w", err) @@ -235,3 +237,8 @@ func newActionsClientFromConfig(config config.Config, creds *actions.ActionsAuth return actions.NewClient(config.ConfigureUrl, creds, options...) } + +func hasProxy() bool { + proxyFunc := httpproxy.FromEnvironment().ProxyFunc() + return proxyFunc != nil +} diff --git a/controllers/actions.github.com/autoscalingrunnerset_controller.go b/controllers/actions.github.com/autoscalingrunnerset_controller.go index ff8e7694..fe2a5953 100644 --- a/controllers/actions.github.com/autoscalingrunnerset_controller.go +++ b/controllers/actions.github.com/autoscalingrunnerset_controller.go @@ -466,6 +466,8 @@ func (r *AutoscalingRunnerSetReconciler) createRunnerScaleSet(ctx context.Contex Version: build.Version, CommitSHA: build.CommitSHA, ScaleSetID: runnerScaleSet.Id, + HasProxy: autoscalingRunnerSet.Spec.Proxy != nil, + Subsystem: "controller", }) logger.Info("Created/Reused a runner scale set", "id", runnerScaleSet.Id, "runnerGroupName", runnerScaleSet.RunnerGroupName) diff --git a/github/actions/client.go b/github/actions/client.go index dd7f2329..7113893e 100644 --- a/github/actions/client.go +++ b/github/actions/client.go @@ -109,23 +109,31 @@ type ProxyFunc func(req *http.Request) (*url.URL, error) type ClientOption func(*Client) type UserAgentInfo struct { - Version string - CommitSHA string + // Version is the version of the controller + Version string + // CommitSHA is the git commit SHA of the controller + CommitSHA string + // ScaleSetID is the ID of the scale set ScaleSetID int + // HasProxy is true if the controller is running behind a proxy + HasProxy bool + // Subsystem is the subsystem such as listener, controller, etc. + // Each system may pick its own subsystem name. + Subsystem string } func (u UserAgentInfo) String() string { - var scaleSetID = "NA" + scaleSetID := "NA" if u.ScaleSetID > 0 { scaleSetID = strconv.Itoa(u.ScaleSetID) } - return fmt.Sprintf( - "actions-runner-controller/%s CommitSHA/%s ScaleSetID/%s", - u.Version, - u.CommitSHA, - scaleSetID, - ) + proxy := "Proxy/disabled" + if u.HasProxy { + proxy = "Proxy/enabled" + } + + return fmt.Sprintf("actions-runner-controller/%s (%s; %s) ScaleSetID/%s (%s)", u.Version, u.CommitSHA, u.Subsystem, scaleSetID, proxy) } func WithLogger(logger logr.Logger) ClientOption { diff --git a/github/actions/user_agent_test.go b/github/actions/user_agent_test.go new file mode 100644 index 00000000..e79586b6 --- /dev/null +++ b/github/actions/user_agent_test.go @@ -0,0 +1,24 @@ +package actions_test + +import ( + "testing" + + "github.com/actions/actions-runner-controller/github/actions" + "github.com/stretchr/testify/assert" +) + +func TestUserAgentInfoString(t *testing.T) { + userAgentInfo := actions.UserAgentInfo{ + Version: "0.1.0", + CommitSHA: "1234567890abcdef", + ScaleSetID: 10, + HasProxy: true, + Subsystem: "test", + } + + userAgent := userAgentInfo.String() + expectedProduct := "actions-runner-controller/0.1.0 (1234567890abcdef; test)" + assert.Contains(t, userAgent, expectedProduct) + expectedScaleSet := "ScaleSetID/10 (Proxy/enabled)" + assert.Contains(t, userAgent, expectedScaleSet) +}