Expand description
Where this host stands in GitHub’s documented self-hosted runner support matrix.
The matrix is quoted in 01-current-architecture.md from GitHub’s
self-hosted runner reference:
GitHub documents Windows 10/11 64-bit and Windows Server 2016/2019/2022 64-bit, macOS 11.0 (Big Sur) or later, and nine Linux distributions (RHEL/CentOS/Oracle 8+, Fedora 29+, Debian 10+, Ubuntu 20.04+, Mint 20+, openSUSE 15.2+, SLES 15 SP2+) as supported runner platforms. Supported architectures are x64 on all three, ARM64 on all three (public preview), and ARM32 on Linux only.
Two consequences of that quotation shape this module, and both are requirements rather than conveniences:
- ARM64 warns; it does not reject. The persona’s host is an Apple
Silicon Mac mini, so a design that rejected public-preview architectures
would reject the primary target machine.
validatetherefore returnsOkcarrying aSupportWarning. - Container actions and service containers require Linux. A host does
not gain them by running Docker (
01-current-architecture.md, edge case 2), soHostSupport::container_supportreports the limitation andf2surfaces it on macOS and Windows policy validation.
§The types are the domain’s; the verdict is this module’s
Os and Arch come from runner-manager-domain and are not restated
here. An earlier version of this module defined its own HostOs/HostArch
on the reasoning that platform detection sits below the persistence model —
but this crate already depends on runner-manager-domain, so nothing was
being avoided, and two enums naming the same three values had begun to
disagree: arm32 against the domain’s arm, windows/macos against
win/osx. One of those spellings feeds runner-package selection, so a
disagreement there is a download of the wrong archive rather than a
cosmetic difference. The domain’s own documentation says as much —
“Enforcing that pairing is d1’s job; this enum only has to be able to
name the values” — which asks d1 to validate those types, not to mint
parallel ones.
For the same reason the two predicates the domain already answers are not
answered again here. SupportStatus and the ARM64 warning are derived
from Arch::is_public_preview, and ContainerSupport from
Os::supports_container_actions, so f2 reading either this module or
the domain gets the same verdict by construction rather than by two tables
being kept in step.
What is left is genuinely this module’s: which pairs are documented,
detection of the running host, the operator-facing text, and
documented_releases.
§Why the pair check is a match and not a table lookup
validate classifies with an exhaustive match over (Os, Arch) rather
than by searching a list of accepted pairs. That costs a few lines and buys
two things. Adding a variant to either enum becomes a compile error here —
the pair cannot be silently accepted or silently rejected by falling off the
end of a table. And the tests can then carry their own, independently
written copy of the documented matrix; asserting a table against itself
would prove nothing.
Structs§
- Documented
Release - One documented operating system release, with the oldest version GitHub documents for it.
- Host
Support - The verdict on one host.
Enums§
- Container
Support - Whether this host can run container actions and service containers.
- Support
Status - How firmly GitHub supports a documented pair.
- Support
Warning - Something an operator should be told about an accepted host.
- Unsupported
Host - A host that GitHub’s matrix does not document.
Constants§
- FULL_
DISK_ ACCESS_ SETTINGS_ URL - The macOS settings pane that grants a program Full Disk Access.
Functions§
- arch_
name - The architecture’s name as GitHub’s documentation writes it in prose.
- detect
- Classifies the host this binary is running on.
- detect_
arch - The architecture this binary was compiled for, or
Nonewhen that is not one of the three documented architectures. - detect_
host - The operating system and architecture this binary was compiled for.
- detect_
os - The operating system this binary was compiled for, or
Nonewhen that is not one of the three documented systems. - documented_
releases - The releases GitHub documents for one operating system.
- os_name
- The operating system’s name as GitHub’s documentation writes it in prose.
- validate
- Classifies a host against GitHub’s documented matrix.