Author SHA1 Message Date
Steve-Glass c449ffc50a Change status to Public Preview in README
Updated README to reflect the change from Private to Public Preview status and improved wording for clarity.
2026-02-01 08:59:40 -05:00
Francesco Renzi aeda0a5af4 Add --labels support in docker example (#51) 2026-01-30 13:41:46 +00:00
Nikola Jokic c841c96f1c Add debug info while issuing request (#50)
* Add debug info while issuing request

* wip

* wip

* Rework tests
2026-01-30 13:03:22 +01:00
Francesco Renzi 145b7e382f Add more details about the API in the readme (#47) 2026-01-13 17:19:32 +00:00
Francesco Renzi 0015641f99 Remove unused fields (#48) 2026-01-13 17:19:16 +00:00
Nikola Jokic 1208e1216e Hide session handling and generate session client from the main client (#42) 2026-01-05 18:19:41 +01:00
Francesco Renzi ebe67dba45 Add missing sections to readme (#45) 2026-01-02 16:53:12 +00:00
Francesco Renzi 5cb859334b Add CONTRIBUTING.md (#44) 2026-01-02 16:52:57 +00:00
Francesco Renzi 3fe477d93e Add SUPPORT.md (#43)
Updated support instructions and removed TODOs.
2026-01-02 10:44:46 -06:00
Nikola JokicandCopilot f3ab19d2b8 Use system info and build info as user agent, and expose DebugInfo (#41)
* Refactor setting and unsetting system info

* detect version on init

* Update client.go

* Update client_test.go

Co-authored-by: Copilot <[email protected]>

* Update client.go

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2025-12-17 16:29:45 +01:00
Francesco Renzi 40342b1e2a Add CODEOWNERS file for repository ownership (#40) 2025-12-08 15:08:51 +01:00
Francesco Renzi d9d8d097da Add Contributor Covenant Code of Conduct (#38) 2025-12-04 11:48:21 +00:00
Francesco Renzi e346584c2d Create SECURITY.md for reporting vulnerabilities (#39)
Added guidelines for reporting security issues and policies.
2025-12-04 11:48:07 +00:00
Francesco Renzi be0376b5b5 Add MIT License to the project (#37) 2025-12-04 12:32:40 +01:00
Nikola Jokic 7e0eae99a6 Modify error API and add Listener tests (#36)
* Modify error API to not include exception, but to test on type

* reformat

* address renames and documentations from the review

* test is errors

* document
2025-12-02 18:23:40 +01:00
Nikola Jokic 01adae723f Implement dockerscaleset e2e tests (#25)
* wip: setting up e2e tests

* rebase
2025-11-27 17:18:00 +01:00
Francesco Renzi e37307f46f Use retryablehttp for token calls too (#35) 2025-11-27 12:36:11 +00:00
Nikola Jokic 23bfd4848d Remove example module and revert back to ints for simpler usage (#34)
* Remove example module and revert back to ints for simpler usage

* fmt

* remove unused transformations

* add max runners to the scaler
2025-11-27 13:31:44 +01:00
Francesco Renzi a2a8af97b6 Add scripts (#33)
* Add scripts

* Fix errors test
2025-11-27 13:05:42 +01:00
Francesco Renzi 60ce378d14 Enable cache in test jobs (#31) 2025-11-26 17:08:22 +00:00
Francesco Renzi dde6b4631c Deserialize scale messages in the client (#28)
* Deserialize scale messages in the client

* fix tests
2025-11-26 17:08:00 +00:00
Francesco Renzi fe39658434 Update devcontainer configuration with features and settings (#32)
* Update devcontainer configuration with features and settings

* Add devcontainer Dockerfile

* Comment why node

* \n
2025-11-26 17:07:35 +00:00
Francesco RenziandCopilot cec89c5b7b Add godoc comments and unexport (#27)
* Add separate constructors for each credential type

* Add godoc comments to client

* Unexport GitHubConfig

* Add godoc comments for listener package

* Apply suggestions from code review

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2025-11-26 15:05:39 +00:00
Nikola Jokic 7442885c99 Use strong typing and allow atomic change of the max runners (#24)
* Use strong typing and allow atomic change of the max runners

* prepare type change in dockerscaleset
2025-11-26 12:10:39 +01:00
Francesco Renzi 6d1c317b90 Return error on failed runner start (#17) 2025-11-24 11:06:19 +00:00
Nikola JokicandCopilot 45800be002 Add error messages instead of just returning an error (#16)
* Add error messages instead of just returning an error

* Apply suggestions from code review

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2025-11-24 12:05:49 +01:00
Nikola Jokic 16a9c915cb Use buildinfo to set the client version in the user agent (#13)
* Use go:generate to set the user agent version and sha

* regenerate

* buildinfo

* remove unused

* use init to source buildinfo
2025-11-21 14:38:55 +00:00
Francesco Renzi c2f0a53402 Add command to work around auth issues (#15) 2025-11-10 10:41:03 +00:00
Francesco RenziandCopilot 5f370484a7 Add READMEs (#10)
* Add READMEs

* Apply suggestions from code review

Co-authored-by: Copilot <[email protected]>

* feedback

---------

Co-authored-by: Copilot <[email protected]>
2025-10-31 15:15:26 +00:00
Francesco Renzi 8104f571eb Update module name (#12) 2025-10-31 14:25:50 +00:00
Francesco Renzi 4cc97e220a Rename Handler -> Scaler (#11) 2025-10-31 14:06:27 +00:00
Nikola Jokic 8155f87a58 Remove replace in example go.mod (#9) 2025-10-31 14:02:56 +00:00
Nikola Jokic 83fb2e2837 Set user agent as soon as the scale set is created, and remove the proxy info (#8)
* Set user agent as soon as the scale set is created

* fix test
2025-10-31 14:16:02 +01:00
Nikola Jokic 1f22d2441c move testserver to internal package (#7) 2025-10-31 14:10:56 +01:00
Francesco Renzi e9e5ca3282 Consolidate tests in a single file (#6) 2025-10-31 12:00:11 +00:00
51aa04a4b2 Add Docker example (#5)
* Renames, style changes and unesports

* use signal handling

* remove unused fields, unexport packages, have a working example

* remove viper

* fix logger

* fix test

* remove unused var

* Added few log lines

* max runners fixed

* Restructure example

* Improve naming for app auth

* Apply suggestions from code review

Co-authored-by: Copilot <[email protected]>

* Remove old comment

---------

Co-authored-by: Francesco Renzi <[email protected]>
Co-authored-by: Francesco Renzi <[email protected]>
Co-authored-by: Copilot <[email protected]>
2025-10-31 11:35:41 +00:00
Francesco Renzi 39ffa2e560 Remove acquire jobs (#4) 2025-10-30 14:52:11 +01:00
Nikola Jokic b1dcbc44e6 Renames, style changes and unexports (#3) 2025-10-30 14:24:07 +01:00
Francesco Renzi 287d3410da Merge pull request #2 from actions/nikola-jokic/remove-interface-and-mocks
Remove interfaces, mocks, and unused identity_test
2025-10-30 10:42:13 +00:00
Nikola Jokic c549549283 Remove interfaces, mocks, and unused identity_test 2025-10-30 11:35:35 +01:00
Francesco Renzi a2aa9f9ea9 Merge pull request #1 from actions/rentziass/ginkgo
Remove dependency on ginkgo
2025-10-30 10:24:51 +00:00
Francesco Renzi dd4c9f2481 Remove dependency on ginkgo 2025-10-30 10:21:06 +00:00
Nikola Jokic 8b43e9e5c9 Initial commit containing ARC github/actions client 2025-10-30 10:15:01 +01:00
5 changed files with 5 additions and 9 deletions

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright GitHub, Inc.
Copyright (c) 2025 GitHub
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+2 -2
View File
@@ -4,7 +4,7 @@
This repository provides a standalone Go client for the GitHub Actions **Runner Scale Set** APIs. It is extracted from the `actions-runner-controller` project so that platform teams, integrators, and infrastructure providers can build **their own custom autoscaling solutions** for GitHub Actions runners.
You do *not* need to adopt the full controller (and Kubernetes) to take advantage of scale sets. This package contains all the primitives you need: create/update/delete scale sets, generate just‑in‑time (JIT) runner configs, and manage message sessions.
You don't need to adopt the full controller or Kubernetes to take advantage of scale sets. The client supports the same platforms as the GitHub Actions runner, including containers and virtual machines running Windows, Linux, and macOS. This package contains all the primitives you need: create, update, and delete scale sets; generate just-in-time (JIT) runner configs; and manage message sessions.
---
@@ -12,7 +12,7 @@ You do *not* need to adopt the full controller (and Kubernetes) to take advantag
A runner scale set is a group of self-hosted runners that autoscales based on workflow demand. Here's how it works:
1. **Registration**: You create a scale set with a name, which also serves as the label workflows use to target it (e.g., `runs-on: my-scale-set`). Multiple labels can be assigned per scale set. Like regular self-hosted runners, scale sets can be registered at the repository, organization, or enterprise level.
1. **Registration**: You create a scale set with a name, which also serves as the label workflows use to target it (e.g., `runs-on: my-scale-set`). Like regular self-hosted runners, scale sets can be registered at the repository, organization, or enterprise level.
2. **Polling**: Your scale set client continuously polls the API, reporting its maximum capacity (how many runners it can produce).
3. **Job matching**: GitHub matches jobs to your scale set based on the label and runner group policies, just like regular self-hosted runners.
4. **Scaling signal**: The API responds with how many runners your scale set needs online (`statistics.TotalAssignedJobs`).
+2 -3
View File
@@ -126,9 +126,9 @@ type ProxyFunc func(req *http.Request) (*url.URL, error)
type SystemInfo struct {
// System is the name of the scale set implementation
System string `json:"system"`
// Version is the version of the client
// Version is the version of the controller
Version string `json:"version"`
// CommitSHA is the git commit SHA of the client
// CommitSHA is the git commit SHA of the controller
CommitSHA string `json:"commit_sha"`
// ScaleSetID is the ID of the scale set
ScaleSetID int `json:"scale_set_id"`
@@ -222,7 +222,6 @@ type userAgent struct {
SystemInfo
BuildVersion string `json:"build_version"`
BuildCommitSHA string `json:"build_commit_sha"`
Kind string `json:"kind"`
}
func (c *Client) newGitHubAPIRequest(ctx context.Context, method, path string, body io.Reader) (*http.Request, error) {
-1
View File
@@ -137,7 +137,6 @@ func (c *commonClient) setUserAgent() {
SystemInfo: c.systemInfo,
BuildVersion: buildInfo.version,
BuildCommitSHA: buildInfo.commitSHA,
Kind: "scaleset",
})
c.userAgent = string(b)
}
-2
View File
@@ -124,7 +124,6 @@ func TestUserAgent(t *testing.T) {
SystemInfo: testSystemInfo,
BuildCommitSHA: sha,
BuildVersion: version,
Kind: "scaleset",
}
b, err := json.Marshal(wantInfo)
require.NoError(t, err, "failed to marshal expected user agent")
@@ -145,7 +144,6 @@ func TestUserAgent(t *testing.T) {
SystemInfo: userAgentInfo,
BuildCommitSHA: sha,
BuildVersion: version,
Kind: "scaleset",
}
b, err = json.Marshal(wantInfo)
require.NoError(t, err, "failed to marshal expected user agent after SetSystemInfo")