Skip to main content

Module os

Module os 

Source
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:

  1. 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. validate therefore returns Ok carrying a SupportWarning.
  2. Container actions and service containers require Linux. A host does not gain them by running Docker (01-current-architecture.md, edge case 2), so HostSupport::container_support reports the limitation and f2 surfaces 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§

DocumentedRelease
One documented operating system release, with the oldest version GitHub documents for it.
HostSupport
The verdict on one host.

Enums§

ContainerSupport
Whether this host can run container actions and service containers.
SupportStatus
How firmly GitHub supports a documented pair.
SupportWarning
Something an operator should be told about an accepted host.
UnsupportedHost
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 None when 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 None when 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.