Releases: sgidevnet/irix-actions-runner
Release list
v0.4.0-rc2
Changed
runner servenow defaults toghcr.io/sgidevnet/irix-worker:latest. Use--imageto pin a release or run a custom worker.
v0.4.0-rc1
Added
-
Pooled emulated Indy mode.
runner serveforks one listener per configured identity and runs each job in a throwaway container holding an emulated SGI Indy, so a Linux host with Docker can serve IRIX jobs without an SGI.--imagepicks the worker image,--job-timeoutbounds a wedged emulator.runner configure --count N --name-prefix Pregisters N identities asP-0,P-1and so on, each with its own credentials, work folder and anemulatedlabel.run,statusandremovetake--diror the same--count/--name-prefixpair.runner execjob --message FILEruns one job from a message file with no configured runner present. This is what the guest runs.--cancel-file PATHcancels a running job when that file's mtime changes.SIGINTandSIGTERMcancel rather than kill, so the job still reports a result.servesendscompletejobitself when a container dies without the guest reporting. Nothing renews a job lock, so an unreported job otherwise leaves that identity online atcurrentParallelism: 1and never dispatched to again.- The worker image is published as
ghcr.io/sgidevnet/irix-worker. The IRIX disk image is supplied by the operator and is not redistributed here. selftestreports the Docker daemon's version, and why its socket could not be reached when it could not.
-
Linux x86_64 and arm64 tarballs. They need glibc 2.39 and OpenSSL 3 from the host and carry no
cert.pem, because off IRIX the runner reads the distribution's own trust store.
Changed
- The release cross-compiles every target on Linux and runs each binary's unit tests on hardware of its own architecture before packaging. The IRIX binary now comes from clang and LLD against a cross-built OpenSSL 1.1.1w rather than SGUG's GCC 9.2 and 1.1.1d. No source changed, and
makeon an SGI still uses GCC.
Fixed
- The job lease was never renewed, so the run service dropped any job past ten minutes and
completejobanswered 404. uname -sisIRIXon a 32-bit kernel andIRIX64on a 64-bit one, so an Indy took the Linux branch of the Makefile and failed on the first header.connecttreated anypollreturn other than 1 as a failure, so a signal arriving mid-connect failed the connection.
v0.3.0
Native GitHub Actions runner for SGI IRIX 6.5.22 and later, MIPS n32.
Requires IRIX 6.5.22+ on an R4000 or later CPU. The binary needs only
libc.so.1, libpthread.so and libm.so, all IRIX base. cert.pem
ships alongside it and is found automatically; no SGUG-RSE needed to
run. git, zip and unzip are needed only for uses: steps.
Stock IRIX tar cannot decompress, so extract with:
gzip -dc irix-actions-runner-*.tar.gz | tar xvf -
Built and tested on IRIX 6.5.30m. Earlier 6.5.x releases and other SGI
models are expected to work and are untested. See BUILD-INFO in the
tarball for exactly what was built and on what.
If the first connection fails, run ./runner selftest: an undisciplined
clock and an expired CA bundle are the two usual causes.
Added
- An evaluator for the
${{ }}expression language, insrc/expr/. It works
in arun:body, in awith:value and inif:, over every context the job
message carries, includingenvandsecrets. The grammar is
src/expr/grammar.y; the generated parser is committed, so no build needs
bison. test/fixtures/expressions, GitHub's own cross-language conformance corpus
for the language, vendored and driven bytest/test_expr.c.
Fixed
${{ }}in awith:value read as absent, so an artifact whose name was
built from run metadata silently uploaded asartifact.if:was threestrstrcalls.if: !cancelled()evaluated inverted, and
anything with a comparison in it was treated assuccess().- A
run:body containing${{ }}was rejected outright; it now runs. canceled()with onelwas accepted and behaved ascancelled(). The
reference registers only the two-lspelling, so a misspelling now fails the
step instead of quietly always reporting "not cancelled".
Known limitations
hashFiles()and thestepscontext are not implemented. Both fail the step
by name rather than reading as empty.- Case-insensitive comparison folds ASCII only.
- An
env:block is readable through theenvcontext but is still not
exported into the step's shell environment.
v0.2.0
Native GitHub Actions runner for SGI IRIX 6.5.22 and later, MIPS n32.
Requires IRIX 6.5.22+ on an R4000 or later CPU. The binary needs only
libc.so.1, libpthread.so and libm.so, all IRIX base. cert.pem
ships alongside it and is found automatically; no SGUG-RSE needed to
run. git, zip and unzip are needed only for uses: steps.
Stock IRIX tar cannot decompress, so extract with:
gzip -dc irix-actions-runner-*.tar.gz | tar xvf -
Built and tested on IRIX 6.5.30m. Earlier 6.5.x releases and other SGI
models are expected to work and are untested. See BUILD-INFO in the
tarball for exactly what was built and on what.
If the first connection fails, run ./runner selftest: an undisciplined
clock and an expired CA bundle are the two usual causes.
Added
- Live console output. Step output now appears in the UI while the step is
still running, over the WebSocket atFeedStreamUrl, which is what the
official runner uses. Best effort: a failed feed is abandoned and the
uploaded log remains authoritative. - Logs of any size. Output is streamed in 2 MB blocks to an append blob
instead of being held whole and sent at step end, so a long build no longer
grows the runner's memory in step with its own output.
Fixed
- Steps now run under
-e, and bash steps under-o pipefail, matching
GitHub's documented defaults. Only the last command in a multi-linerun:
body used to decide the step's result, so any check followed by another
command was not a gate. - A
run:body containing${{ }}is rejected with an explanation instead of
producing an empty script that was reported as succeeded. - Secret redaction no longer writes past its buffer for a mask shorter than
three characters. - Cancellation and the step deadline were only checked when the output poll
timed out, so a step printing continuously could not be cancelled and could
not time out. - The whole-job log is accumulated as steps run rather than stitched from every
step's buffer at job end, so a job no longer has to hold all of its output at
once. docs/protocol.mdclaimed the blob API was the live tailing route. It is
not; it is the durable log, and the live tail is a separate socket.
Changed
- Unit tests run on Linux for every pull request.
- The binary is pinned to MIPS III explicitly rather than inheriting it from
the compiler default, and the release asserts it.
v0.1.0
Native GitHub Actions runner for SGI IRIX 6.5.22 and later, MIPS n32.
Requires IRIX 6.5.22+ on an R4000 or later CPU. The binary needs only
libc.so.1, libpthread.so and libm.so, all IRIX base. cert.pem
ships alongside it and is found automatically; no SGUG-RSE needed to
run. git, zip and unzip are needed only for uses: steps.
Stock IRIX tar cannot decompress, so extract with:
gzip -dc irix-actions-runner-*.tar.gz | tar xvf -
Built and tested on IRIX 6.5.30m. Earlier 6.5.x releases and other SGI
models are expected to work and are untested. See BUILD-INFO in the
tarball for exactly what was built and on what.
If the first connection fails, run ./runner selftest: an undisciplined
clock and an expired CA bundle are the two usual causes.
First release. An SGI running IRIX 6.5 registers as a self-hosted runner and
executes real workflow jobs: checkout, build, artifacts, and results reported
back to GitHub.
Added
- Runner registration and configuration for a repository or an organisation,
persisted to.runner,.credentialsand.rsakey - Listener: OAuth client assertions, agent session, long poll, message
decryption, and the v2 broker migration github.com now requires - Job execution:
run:steps under bash or sh, per-step status and timing,
full job and step logs, secret masking, and job cancellation - Live step state during a job, through the results service step update API
- Native
actions/checkoutagainst thegitbinary - Native
actions/upload-artifactandactions/download-artifact - Step confinement: CPU, address space, file size and descriptor limits, an
IRIX process cap against fork bombs, orphan reaping, and an optional chroot
with a uid drop when the runner is started as root - Self-contained n32 binary needing only
libc.so.1,libpthread.soand
libm.so, with OpenSSL linked statically runner selftestfor diagnosing TLS, certificate and clock problems- Release pipeline that builds on SGI hardware and publishes a tarball
- Trust roots shipped alongside the binary, found automatically, so the runner
works on a machine with no SGUG-RSE installed - Build system for GCC 9.2 with a MIPSPro
c99compile gate, and unit tests
that run on both Linux and IRIX
Fixed
- Steps now run under
-e, and bash steps under-o pipefail, matching
GitHub's documented defaults. Previously only the last command in a
multi-linerun:body determined the step's result, so any check followed by
another command was not a gate at all. - A
run:body containing${{ }}is now rejected with an explanation.
Previously it produced an empty script that was reported as succeeded. - Secret redaction no longer writes past its buffer when a mask is shorter than
three characters.
Known limitations
- No expression evaluator, so
${{ }}is unavailable. Use the$GITHUB_*
shell variables. Workflow, job and stepenv:blocks are ignored. - No JavaScript actions, no container jobs, no service containers. Anything
outside the three native handlers fails with a clear error. - Logs appear when a step finishes rather than streaming as it runs.
chrootconfinement applies only when the runner is started as root, and is
untested.