mirror of
https://github.com/stablyai/orca.git
synced 2026-10-05 08:02:33 +00:00
* fix(ssh): classify a musl host missing libstdc++ as missing_lib, not wrong_libc musl's loader follows each missing-library line with one 'Error relocating ... symbol not found' per unresolved symbol, and the relocation pattern was checked first. Check missing libraries before relocation errors; the ld-linux/ld-musl interpreter case stays wrong_libc. * build(orcad): allow a partial deployment template for CI build-orcad-template --targets a,b builds and verifies only the named slots, so a CI job that can fill just the x64 Linux prebuild slots can still materialize rung A/C addons. Without the flag every target is still built and verified. * ci(ssh): hostile-host matrix for the relay runtime ladder Drives the real client-side relay deploy against Docker sshd targets and asserts the design D6 rung each lands on: Debian 10 and AlmaLinux 8 (glibc 2.28) and Alpine (musl) on rung A; Alpine without libstdc++ refused missing_lib down to D; Ubuntu 22.04 with a host Node 20 and a noexec home straight to D (home_noexec); CentOS 7 (glibc 2.17) refused libc_floor at A and C, falling to a host-npm path with no Node; and a no-egress Debian 10 still on rung A. Launched cells also prove the terminal echoes, no npm or compiler ran, a second connect reuses the uploaded runtime, and runtime GC keeps the in-use runtime while collecting an idle one. New workflow ssh-hostile-hosts.yml runs on dispatch and on path-filtered PRs. * test(ci): pin the hostile-host workflow to the headless-server builder images The matrix builds its runtime slots in copies of the node-server lanes' Alpine and manylinux images; this contract fails when NODE_RUNTIME_PIN or either builder digest moves in one workflow and not the other. * test(ssh): reconnect as the same client and retry a grace-held PTY owner in the hostile-host matrix --------- Co-authored-by: m4air <m4air@m4airs-Air.localdomain>
32 lines
1.0 KiB
JavaScript
32 lines
1.0 KiB
JavaScript
import { describe, expect, it } from 'vitest'
|
|
import { ORCAD_TEMPLATE_TARGETS } from '../../src/shared/node-runtime-pin.ts'
|
|
import { requestedTemplateTargets } from './build-orcad-template.mjs'
|
|
|
|
describe('requestedTemplateTargets', () => {
|
|
it('builds every target unless a subset is named', () => {
|
|
expect(requestedTemplateTargets(['node', 'build-orcad-template.mjs'])).toEqual(
|
|
ORCAD_TEMPLATE_TARGETS
|
|
)
|
|
})
|
|
|
|
it('accepts a named subset once each', () => {
|
|
expect(
|
|
requestedTemplateTargets([
|
|
'node',
|
|
'build-orcad-template.mjs',
|
|
'--targets',
|
|
'linux-x64-glibc,linux-x64-musl,linux-x64-glibc'
|
|
])
|
|
).toEqual(['linux-x64-glibc', 'linux-x64-musl'])
|
|
})
|
|
|
|
it.each([[['--targets']], [['--targets', '']], [['--targets', 'linux-x64-glibc,sunos-sparc']]])(
|
|
'refuses %j',
|
|
(args) => {
|
|
expect(() => requestedTemplateTargets(['node', 'build-orcad-template.mjs', ...args])).toThrow(
|
|
'--targets needs a comma-separated subset'
|
|
)
|
|
}
|
|
)
|
|
})
|