Skip to content

ci: pin linux build runners to ubuntu-22.04#9

Merged
jh-lee-cryptolab merged 2 commits into
CryptoLabInc:mainfrom
jh-lee-cryptolab:ci/pin-ubuntu-2204
Jun 2, 2026
Merged

ci: pin linux build runners to ubuntu-22.04#9
jh-lee-cryptolab merged 2 commits into
CryptoLabInc:mainfrom
jh-lee-cryptolab:ci/pin-ubuntu-2204

Conversation

@jh-lee-cryptolab
Copy link
Copy Markdown
Contributor

@jh-lee-cryptolab jh-lee-cryptolab commented Jun 2, 2026

What

Three related CI changes, building on each other:

  1. Pin linux build runners to ubuntu-22.04 / ubuntu-22.04-arm (was ubuntu-latest = 24.04, ubuntu-24.04-arm) across build.yml, build-llama.yml, release.yaml. Building on the older glibc keeps the shipped llama-server / runed binaries compatible with older distros.

  2. Name artifacts by the build OS, read from the running image (RUNNER_OS + /etc/os-release / sw_vers) rather than the runner label (which can be a rolling alias):

    • llama-server GHCR OCI tag: <ref>-<os>-<arch><ref>-<os-type>-<os-version>-<arch> (e.g. b9352-ubuntu-2204-amd64, b9352-mac-14-arm64). An OS bump now busts the cache and forces a fresh build instead of pulling a binary linked against an incompatible glibc.
    • release tarball: runed-<ver>-<goos>-<goarch>.tar.gzruned-<ver>-ubuntu-2204-amd64.tar.gz / runed-<ver>-mac-14-arm64.tar.gz (via OS_LABEL in the Makefile, defaulting to GOOS so local builds are unchanged).
  3. Drop Windows from CI for now — remove the windows-latest matrix entries and all windows-only steps (llama-server.exe build/pull/push, the release .zip), and drop the now-empty *.zip from the publish glob.

Why the OS-version tag is required

The OCI tag was keyed only on <ref>-<os>-<arch>, so the build baseline was invisible to the cache. Pinning the runner alone was not enough: existing tags built on 24.04 still matched, so the workflow pulled the old binary, which needs GLIBC_2.38 the 22.04 runner (glibc 2.35) lacks:

bin/llama-server: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found

Resulting release assets

runed-<ver>-ubuntu-2204-amd64.tar.gz (+.sha256)
runed-<ver>-ubuntu-2204-arm64.tar.gz (+.sha256)
runed-<ver>-mac-14-arm64.tar.gz      (+.sha256)
manifest.json

Notes

  • macos-14 runner unchanged; the publish job stays on ubuntu-latest (no compiled output).
  • CI artifact names (llama-server-<os>-<arch>) are unchanged, so the vendor → build/release consumers are unaffected.

Pin the linux build/release matrix runners from ubuntu-latest (24.04)
and ubuntu-24.04-arm to ubuntu-22.04 / ubuntu-22.04-arm across the
llama-server and binary build workflows.

Building on 22.04 links against an older glibc, so the shipped
llama-server and runed binaries stay compatible with older distros
than building on 24.04 would allow. The publish job is left on
ubuntu-latest since it only assembles artifacts and creates the
release (no compiled output).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jh-lee-cryptolab jh-lee-cryptolab self-assigned this Jun 2, 2026
@couragehong couragehong self-requested a review June 2, 2026 07:19
Two related cleanups on top of the ubuntu-22.04 runner pin:

1. Encode the build OS in artifact names so the glibc/SDK baseline is
   visible and cacheable, read from the running image (RUNNER_OS +
   /etc/os-release / sw_vers) rather than the runner label (which can be
   a rolling alias like ubuntu-latest):
     - llama-server GHCR OCI tag:
         <ref>-<os>-<arch>  ->  <ref>-<os-type>-<os-version>-<arch>
         e.g. b9352-ubuntu-2204-amd64 / b9352-mac-14-arm64
       An OS bump now busts the cache and forces a fresh build instead of
       reusing a binary linked against an incompatible glibc.
     - release tarball (Makefile, via OS_LABEL passed by release.yaml):
         runed-<ver>-<goos>-<goarch>.tar.gz
         -> runed-<ver>-ubuntu-2204-amd64.tar.gz / runed-<ver>-mac-14-arm64.tar.gz
       OS_LABEL defaults to GOOS so local `make release-tarball` is unchanged.

2. Drop Windows from CI for now: remove the windows-latest matrix entries
   and all windows-only steps from build-llama.yml and release.yaml (the
   llama-server.exe build/pull/push and the release zip), and drop the
   now-empty `*.zip` from the publish upload glob. Stale Windows comments
   in the Makefile are removed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jh-lee-cryptolab jh-lee-cryptolab marked this pull request as draft June 2, 2026 07:34
@jh-lee-cryptolab jh-lee-cryptolab marked this pull request as ready for review June 2, 2026 07:53
jh-lee-cryptolab added a commit to CryptoLabInc/rune-mcp that referenced this pull request Jun 2, 2026
rune-mcp links envector-go-sdk via CGO, so the linux release binaries are
dynamically linked against the build image's glibc. Building on ubuntu-latest
(24.04, glibc 2.39) makes them fail to run on older distros.

- Pin the linux build matrix to ubuntu-22.04 / ubuntu-22.04-arm (was
  ubuntu-latest / ubuntu-24.04-arm) for a broad glibc baseline. macos-14
  and the publish job are unchanged.
- Name release assets by the build OS read from the running image:
  rune-mcp-<os>-<arch> -> rune-mcp-ubuntu-2204-<arch> / rune-mcp-mac-14-arm64,
  so the glibc/SDK baseline is visible. The publish file list is globbed
  (dist/rune-mcp-*) instead of hardcoding the old os-arch names.

Matches the same scheme applied to runed (CryptoLabInc/runed#9). The rune
CLI's manifest generation is updated in tandem to point at the new names.
jh-lee-cryptolab added a commit to CryptoLabInc/rune that referenced this pull request Jun 2, 2026
runed and rune-mcp now name their release assets by build OS
(runed-<ver>-ubuntu-2204-amd64.tar.gz / runed-<ver>-mac-14-arm64.tar.gz,
rune-mcp-ubuntu-2204-amd64, ...) instead of GOOS, to encode the glibc
baseline — see CryptoLabInc/runed#9 and the matching rune-mcp change.

The manifest generator hardcoded the old runed-<ver>-<goos>-<arch>.tar.gz
and rune-mcp-<goos>-<arch> names, so it would build dead URLs and fail to
read the sha256 entries.

Resolve each platform's asset from the downloaded sha256 / checksums.txt
files instead: map the manifest platform's GOOS to the os-type the
downstream repos emit (linux -> ubuntu, darwin -> mac) and glob the exact
OS version from the filenames, so a downstream runner bump needs no change
here. The manifest platform keys (linux-amd64, darwin-arm64, ...) — the
GOOS-GOARCH keys the rune CLI looks up at runtime — are unchanged.
@jh-lee-cryptolab jh-lee-cryptolab merged commit b0692f7 into CryptoLabInc:main Jun 2, 2026
9 checks passed
@jh-lee-cryptolab jh-lee-cryptolab deleted the ci/pin-ubuntu-2204 branch June 2, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants