Files
wehub-resource-sync 426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

189 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# rocm_runner.sh — build the ROCm/HIP target and run model-backed graph smoke.
#
# This runner intentionally fails without a real AMD GPU and a GGUF smoke
# model. There is not yet a standalone HIP fixture harness equivalent to
# cuda_verify; this script verifies the built fork routes the configured KV
# cache types through a HIP-backed llama-bench + llama-completion invocation
# (the fork's llama-cli is conversation-only and busy-loops on stdin EOF).
#
# Environment overrides:
# ROCM_TARGET default linux-x64-rocm
# ROCM_BUILD_FORK default 1; build the target before verifying
# ROCM_SKIP_GRAPH_SMOKE default 0; set 1 only for preflight bring-up
# ELIZA_MTP_CMAKE_FLAGS default gfx90a/gfx942/RDNA3 HIP arch list
# ELIZA_MTP_HARDWARE_REPORT_DIR
# graph-smoke log directory, default verify/hardware-results
# ELIZA_MTP_SMOKE_MODEL required unless ROCM_SKIP_GRAPH_SMOKE=1
# ELIZA_MTP_SMOKE_CACHE_TYPES/TOKENS/NGL/PROMPT/EXTRA_ARGS
# forwarded to runtime_graph_smoke.sh
set -euo pipefail
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(git -C "$HERE" rev-parse --show-toplevel)"
TARGET="${ROCM_TARGET:-linux-x64-rocm}"
REPORT_PATH="${ELIZA_MTP_HARDWARE_REPORT:-}"
STARTED_AT="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
FAIL_REASON=""
GPU_INFO=""
TOOLCHAIN_INFO=""
GRAPH_SMOKE_STATUS="required"
usage() {
cat <<'USAGE' >&2
Usage:
rocm_runner.sh [--report <path>]
Options:
--report <path> Write machine-readable JSON evidence for pass/fail.
USAGE
}
while [[ $# -gt 0 ]]; do
case "$1" in
--report)
REPORT_PATH="${2:-}"; shift 2 ;;
-h|--help)
usage; exit 0 ;;
*)
usage; echo "[rocm_runner] unknown argument: $1" >&2; exit 1 ;;
esac
done
fail() {
FAIL_REASON="$*"
echo "[rocm_runner] $FAIL_REASON" >&2
exit 1
}
on_error() {
local line="$1"
local command="$2"
if [[ -z "$FAIL_REASON" ]]; then
FAIL_REASON="command failed at line $line: $command"
fi
}
model_sha256() {
local model="${ELIZA_MTP_SMOKE_MODEL:-}"
[[ -n "$model" && -f "$model" ]] || return 0
if command -v sha256sum >/dev/null 2>&1; then
sha256sum "$model" | awk '{print $1}'
elif command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$model" | awk '{print $1}'
fi
}
write_report() {
local exit_code="$1"
[[ -n "$REPORT_PATH" ]] || return 0
mkdir -p "$(dirname "$REPORT_PATH")"
RUNNER="rocm_runner.sh" \
STATUS="$([[ "$exit_code" == "0" ]] && printf pass || printf fail)" \
PASS_RECORDABLE="$([[ "$exit_code" == "0" && "$GRAPH_SMOKE_STATUS" == "required" ]] && printf true || printf false)" \
EXIT_CODE="$exit_code" \
FAIL_REASON="$FAIL_REASON" \
STARTED_AT="$STARTED_AT" \
FINISHED_AT="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" \
HOST_OS="$(uname -s 2>/dev/null || true)" \
HOST_ARCH="$(uname -m 2>/dev/null || true)" \
TARGET="$TARGET" \
GPU_INFO="$GPU_INFO" \
TOOLCHAIN_INFO="$TOOLCHAIN_INFO" \
CMAKE_FLAGS="${ELIZA_MTP_CMAKE_FLAGS:-}" \
MODEL="${ELIZA_MTP_SMOKE_MODEL:-}" \
MODEL_SHA256="$(model_sha256)" \
GRAPH_SMOKE_STATUS="$GRAPH_SMOKE_STATUS" \
REPORT_PATH="$REPORT_PATH" \
node <<'NODE'
const fs = require('node:fs');
const env = process.env;
const report = {
schemaVersion: 1,
runner: env.RUNNER,
status: env.STATUS,
passRecordable: env.PASS_RECORDABLE === 'true',
exitCode: Number(env.EXIT_CODE || 0),
failureReason: env.FAIL_REASON || null,
startedAt: env.STARTED_AT,
finishedAt: env.FINISHED_AT,
host: { os: env.HOST_OS, arch: env.HOST_ARCH },
target: env.TARGET,
requirements: {
os: 'Linux',
arch: 'x86_64/amd64',
toolchain: ['hipcc', 'rocminfo'],
hardware: 'gfx* AMD GPU agent reported by rocminfo',
graphSmoke: env.GRAPH_SMOKE_STATUS,
fixtureParity: 'blocked until HIP fixture harness exists'
},
evidence: {
gpuInfo: env.GPU_INFO || null,
toolchainInfo: env.TOOLCHAIN_INFO || null,
cmakeFlags: env.CMAKE_FLAGS || null,
model: env.MODEL || null,
modelSha256: env.MODEL_SHA256 || null
}
};
fs.writeFileSync(env.REPORT_PATH, `${JSON.stringify(report, null, 2)}\n`);
NODE
}
finish() {
local exit_code=$?
write_report "$exit_code"
}
trap finish EXIT
trap 'on_error "$LINENO" "$BASH_COMMAND"' ERR
if [[ "$(uname -s)" != "Linux" ]]; then
fail "ROCm verification requires Linux; this host is $(uname -s)."
fi
case "$(uname -m)" in
x86_64|amd64) ;;
*)
fail "$TARGET currently expects x86_64 Linux; host arch is $(uname -m)."
;;
esac
for cmd in hipcc rocminfo; do
if ! command -v "$cmd" >/dev/null 2>&1; then
fail "$cmd not on PATH — install ROCm/HIP before verifying."
fi
done
ROCINFO_LOG="${ELIZA_MTP_HARDWARE_REPORT_DIR:-$HERE/hardware-results}/rocm-rocminfo.log"
mkdir -p "$(dirname "$ROCINFO_LOG")"
if ! rocminfo >"$ROCINFO_LOG" 2>&1; then
fail "rocminfo failed; see $ROCINFO_LOG"
fi
if ! grep -Eiq 'Name:[[:space:]]+gfx[0-9a-f]+' "$ROCINFO_LOG"; then
fail "rocminfo did not report a gfx AMD GPU agent; refusing to count this as hardware verification; see $ROCINFO_LOG"
fi
TOOLCHAIN_INFO="$(hipcc --version)"
GPU_INFO="$(grep -Ei 'Name:[[:space:]]+gfx|Marketing Name' "$ROCINFO_LOG" | head -20 || true)"
printf '%s\n' "$TOOLCHAIN_INFO"
printf '%s\n' "$GPU_INFO"
if [[ -z "${ELIZA_MTP_CMAKE_FLAGS:-}" ]]; then
# MI250/MI300 + RDNA3 defaults; operators can override for a narrower lab.
export ELIZA_MTP_CMAKE_FLAGS='-DCMAKE_HIP_ARCHITECTURES=gfx90a;gfx942;gfx1100;gfx1101;gfx1102'
fi
if [[ "${ROCM_BUILD_FORK:-1}" != "0" ]]; then
node "$REPO_ROOT/packages/app-core/scripts/build-llama-cpp-mtp.mjs" --target "$TARGET"
fi
if [[ "${ROCM_SKIP_GRAPH_SMOKE:-0}" == "1" ]]; then
GRAPH_SMOKE_STATUS="skipped"
fail "ROCM_SKIP_GRAPH_SMOKE=1 — build/hardware preflight only; graph dispatch NOT verified, so no hardware pass can be recorded"
fi
"$HERE/runtime_graph_smoke.sh" \
--target "$TARGET" \
--backend-pattern 'HIP|ROCm|rocBLAS|ggml_hip|AMD' \
--gen-check