52e17aefbf
--type linux (REQ-161): - internal/linux/bootstrap.go: SSH bootstrap for generic Linux workers (orcas pubkey, system user, drift-events dir; no PVE role/sudoers) - internal/cli/node.go: joinLinux function + --type linux dispatch - peer-setup kept as documented fallback UAT plan (REQ-162): - docs/uat.md: 3-host topology (lead Ubuntu + pve01 Proxmox + worker01 Ubuntu), 22 step-by-step commands, 35-claim matrix, Proxmox prerequisite + alternative 3xUbuntu path (C-48), signoff procedure UAT signoff script (REQ-163, C-47): - scripts/uat-signoff.sh: 35 idempotent read-only assertions, exit 0 iff all pass. Includes 4 critical-path assertions: job deploys to remote, ACL deny-by-default, seal/unseal round-trip, OIDC health - scripts/uat-smoke.sh: 13 CI-tested pure-CLI assertions for .coreci.yml Tests: node join --type linux test, fingerprint test updated, smoke test all 13 pass. ---ci--- project: orca phase: 12 milestone: v0.13 status: complete requirements: covered: [161, 162, 163] ---/ci---
65 lines
1.9 KiB
Bash
Executable File
65 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# orca UAT smoke test — CI-automated subset of uat-signoff.sh (REQ-163)
|
|
# Runs pure-CLI assertions that don't require a live cluster.
|
|
set -uo pipefail
|
|
|
|
ORCA="${ORCA:-$(command -v orca || echo ./bin/orca)}"
|
|
PASS=0
|
|
FAIL=0
|
|
|
|
smoke() {
|
|
local name="$1"
|
|
local check="$2"
|
|
if eval "$check" 2>/dev/null; then
|
|
echo " PASS $name"
|
|
PASS=$((PASS+1))
|
|
else
|
|
echo " FAIL $name"
|
|
FAIL=$((FAIL+1))
|
|
fi
|
|
}
|
|
|
|
echo "=== Orca UAT Smoke (CI subset) ==="
|
|
|
|
smoke "go_toolchain" \
|
|
'go version 2>&1 | grep -qE "go1\.25\.1[2-9]|go1\.2[6-9]"'
|
|
|
|
smoke "build" \
|
|
'test -x "$ORCA"'
|
|
|
|
smoke "no_pprof_all_interfaces" \
|
|
'! grep -rn "pprof-allow-public" internal/daemon/pprof.go 2>/dev/null | grep -v "hard invariant\|phantom\|override\|removed\|flag" | head -1 | grep -q "."'
|
|
|
|
smoke "no_password_in_docs" \
|
|
'! grep -rn "ORCA_PROXMOX_PASSWORD" examples/ 2>/dev/null | head -1 | grep -q "."'
|
|
|
|
smoke "acl_file_mode_in_code" \
|
|
'grep -q "0o600" internal/cli/acl.go 2>/dev/null'
|
|
|
|
smoke "doctor_modes_exists" \
|
|
'grep -q "doctorModesCmd\|doctor.*modes" internal/cli/doctor.go 2>/dev/null'
|
|
|
|
smoke "metrics_expanded" \
|
|
'grep -q "orca_jobs_running\|orca_audit_chain_head" internal/transport/metrics.go 2>/dev/null'
|
|
|
|
smoke "type_linux_available" \
|
|
'grep -q "NodeKindLinux" internal/model/node.go 2>/dev/null'
|
|
|
|
smoke "scheduler_wired" \
|
|
'grep -q "dispatchDecision\|deployRemote" internal/cli/job_dispatch.go 2>/dev/null'
|
|
|
|
smoke "acl_check_wired" \
|
|
'grep -q "acl.Check\|aclPolicy\|Check(" internal/daemon/acl.go 2>/dev/null'
|
|
|
|
smoke "seal_implemented" \
|
|
'grep -q "clusterSealCmd\|func.*runClusterSeal\|cluster seal" internal/cli/cluster.go 2>/dev/null'
|
|
|
|
smoke "injection_hardening" \
|
|
'grep -q "validSafeName\|shellQuote" internal/cli/validate.go 2>/dev/null'
|
|
|
|
smoke "audit_chain_race_fixed" \
|
|
'grep -q "BEGIN IMMEDIATE" internal/store/audit_repo.go 2>/dev/null'
|
|
|
|
echo "=== PASS: $PASS, FAIL: $FAIL ==="
|
|
exit $FAIL
|