Skip to content

Commit 0fe05b2

Browse files
committed
Merge origin/develop into RISC-V cleanup branch
Merge latest origin/develop (3231145) while preserving the RISC-V validation cleanup stack. Validated: - docker eliza-soc-tools make evidence-regression-test - docker eliza-soc-tools make lint typecheck - docker eliza-soc-tools make cocotb-cross-domain - docker eliza-soc-tools make strict-release-gate-test
2 parents d86d9c2 + 3231145 commit 0fe05b2

1,973 files changed

Lines changed: 224754 additions & 60565 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build-linux-iso.yml

Lines changed: 48 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
name: Build elizaOS Linux ISO
22

3+
# One unified multi-arch live-build at packages/os/linux/elizaos. The build
4+
# runs inside a Docker builder container (`make build ARCH=<arch>`), so the
5+
# runner only needs Docker — no host live-build/just/rust install. amd64 is
6+
# the gating leg; arm64/riscv64 run continue-on-error until they have
7+
# produced+validated artifacts.
8+
39
on:
410
workflow_call:
511
inputs:
@@ -25,189 +31,100 @@ on:
2531
release:
2632
types: [created]
2733

28-
# Default to least privilege. Override per-job where needed.
2934
permissions:
3035
contents: read
3136

3237
jobs:
3338
build-iso:
3439
runs-on: ubuntu-latest
3540
timeout-minutes: 120
41+
strategy:
42+
fail-fast: false
43+
matrix:
44+
arch: [amd64, arm64, riscv64]
45+
# arm64/riscv64 build under qemu-user-static and have no validated
46+
# artifact yet — surface failures without blocking the amd64 gate.
47+
continue-on-error: ${{ matrix.arch != 'amd64' }}
3648
env:
3749
CHANNEL: ${{ inputs.channel || (github.event_name == 'release' && 'stable') || 'nightly' }}
50+
VARIANT_DIR: packages/os/linux/elizaos
3851

3952
steps:
4053
- name: Checkout
4154
uses: actions/checkout@v4
4255
with:
4356
fetch-depth: 0
4457

45-
- name: Install live-build and dependencies
46-
run: |
47-
sudo apt-get update -qq
48-
sudo apt-get install -y --no-install-recommends \
49-
live-build \
50-
just \
51-
squashfs-tools \
52-
xorriso \
53-
isolinux \
54-
syslinux-efi \
55-
grub-efi-amd64-bin \
56-
grub-pc-bin \
57-
mtools \
58-
dosfstools \
59-
python3 \
60-
curl \
61-
rsync
62-
63-
- name: Set up Bun
64-
uses: oven-sh/setup-bun@v2
65-
with:
66-
bun-version: "1.3.13"
67-
68-
- name: Install dependencies
69-
run: bun install --frozen-lockfile || bun install --no-frozen-lockfile
70-
71-
- name: Restore model cache
72-
uses: actions/cache@v5
73-
with:
74-
path: ~/.cache/usbeliza-build/models
75-
key: elizaos-model-cache-${{ hashFiles('packages/os/linux/variants/eliza-tails/Justfile') }}
76-
restore-keys: elizaos-model-cache-
77-
78-
- name: Restore CLI cache
79-
uses: actions/cache@v5
80-
with:
81-
path: ~/.cache/usbeliza-build/cli
82-
key: elizaos-cli-cache-${{ hashFiles('packages/os/linux/variants/eliza-tails/Justfile') }}
83-
restore-keys: elizaos-cli-cache-
84-
85-
- name: Restore live-build chroot/debs cache
58+
- name: Restore live-build cache
8659
uses: actions/cache@v5
8760
with:
8861
path: |
89-
packages/os/linux/variants/eliza-tails/tails/cache
90-
packages/os/linux/variants/eliza-tails/tails/.build
91-
key: elizaos-iso-livebuild-${{ runner.os }}-${{ hashFiles('packages/os/linux/variants/eliza-tails/tails/**/package-lists/**', 'packages/os/linux/variants/eliza-tails/tails/**/*.list.chroot', 'packages/os/linux/variants/eliza-tails/build-iso.sh', 'packages/os/linux/variants/eliza-tails/Dockerfile') }}
92-
restore-keys: elizaos-iso-livebuild-${{ runner.os }}-
93-
94-
- name: Install Rust toolchain
95-
uses: dtolnay/rust-toolchain@stable
96-
with:
97-
targets: x86_64-unknown-linux-gnu
98-
99-
- name: Cache Rust build
100-
uses: actions/cache@v5
101-
with:
102-
path: |
103-
~/.cargo/registry
104-
~/.cargo/git
105-
packages/os/linux/target
106-
key: elizaos-iso-rust-${{ runner.os }}-${{ hashFiles('packages/os/linux/**/Cargo.lock', 'packages/os/linux/**/Cargo.toml') }}
107-
restore-keys: elizaos-iso-rust-${{ runner.os }}-
62+
${{ env.VARIANT_DIR }}/cache
63+
key: elizaos-iso-${{ matrix.arch }}-${{ hashFiles('packages/os/linux/elizaos/auto/config', 'packages/os/linux/elizaos/config/package-lists/**', 'packages/os/linux/elizaos/Dockerfile') }}
64+
restore-keys: elizaos-iso-${{ matrix.arch }}-
10865

10966
- name: Detect KVM acceleration
11067
id: kvm
11168
run: |
112-
if command -v kvm-ok >/dev/null 2>&1 && kvm-ok >/dev/null 2>&1; then
113-
echo "have_kvm=true" >> "$GITHUB_OUTPUT"
114-
elif [ -e /dev/kvm ]; then
69+
if [ -e /dev/kvm ]; then
11570
echo "have_kvm=true" >> "$GITHUB_OUTPUT"
11671
else
11772
echo "have_kvm=false" >> "$GITHUB_OUTPUT"
11873
fi
11974
120-
- name: Stage ISO build
121-
working-directory: packages/os/linux/variants/eliza-tails
122-
env:
123-
ELIZAOS_BUILD_ELIZA_APP: "1"
124-
run: just iso-stage
125-
126-
# Model/CLI caching is not implemented for the eliza-tails variant —
127-
# the chroot resolves them inline during live-build. The targets exist
128-
# as documented no-ops so the workflow contract stays uniform.
129-
- name: Cache pre-downloaded models (variant no-op)
130-
working-directory: packages/os/linux/variants/eliza-tails
131-
run: just iso-cache-model
132-
133-
- name: Cache pre-downloaded CLIs (variant no-op)
134-
working-directory: packages/os/linux/variants/eliza-tails
135-
run: just iso-cache-cli
136-
137-
- name: Configure live-build
138-
working-directory: packages/os/linux/variants/eliza-tails
139-
run: just iso-config
140-
141-
- name: Validate ISO config
142-
working-directory: packages/os/linux/variants/eliza-tails
143-
run: just iso-check
144-
145-
- name: Build ISO
146-
working-directory: packages/os/linux/variants/eliza-tails
147-
run: sudo --preserve-env=ELIZAOS_BUILD_ELIZA_APP just iso-build
148-
timeout-minutes: 90
75+
- name: Build ISO (${{ matrix.arch }})
76+
working-directory: ${{ env.VARIANT_DIR }}
77+
run: make build ARCH=${{ matrix.arch }}
78+
timeout-minutes: 110
14979

15080
- name: Locate and rename ISO
15181
id: iso
15282
run: |
153-
ISO=$(find packages/os/linux/variants/eliza-tails -name "*.iso" | head -1)
83+
set -euo pipefail
84+
ISO=$(find "${VARIANT_DIR}/out" -name "elizaos-linux-${{ matrix.arch }}-*.iso" | sort | tail -1)
15485
if [ -z "$ISO" ]; then
15586
echo "ERROR: ISO not found after build"
15687
exit 1
15788
fi
15889
DATE=$(date +%Y.%m.%d)
159-
DEST="elizaos-linux-live-${CHANNEL}-${DATE}-amd64.iso"
90+
DEST="elizaos-linux-${CHANNEL}-${DATE}-${{ matrix.arch }}.iso"
16091
cp "$ISO" "$DEST"
161-
SHA256=$(sha256sum "$DEST" | cut -d' ' -f1)
162-
SIZE=$(stat --format="%s" "$DEST")
163-
echo "path=$DEST" >> "$GITHUB_OUTPUT"
164-
echo "sha256=$SHA256" >> "$GITHUB_OUTPUT"
165-
echo "size=$SIZE" >> "$GITHUB_OUTPUT"
166-
echo "filename=$DEST" >> "$GITHUB_OUTPUT"
167-
168-
- name: Generate SHA256SUMS
169-
run: |
170-
sha256sum "${{ steps.iso.outputs.path }}" > "${{ steps.iso.outputs.filename }}.sha256"
171-
172-
- name: Smoke test ISO (headless QEMU)
173-
if: runner.os == 'Linux' && steps.kvm.outputs.have_kvm == 'true'
92+
sha256sum "$DEST" > "$DEST.sha256"
93+
{
94+
echo "path=$DEST"
95+
echo "filename=$DEST"
96+
echo "sha256=$(sha256sum "$DEST" | cut -d' ' -f1)"
97+
echo "size=$(stat --format=%s "$DEST")"
98+
} >> "$GITHUB_OUTPUT"
99+
100+
- name: Smoke test ISO (headless QEMU, amd64 only)
101+
if: matrix.arch == 'amd64' && steps.kvm.outputs.have_kvm == 'true'
174102
run: |
175103
set -euo pipefail
104+
sudo apt-get update -qq
176105
sudo apt-get install -y --no-install-recommends qemu-system-x86 ovmf
177-
QEMU_TIMEOUT=180
178-
ISO_PATH="${{ steps.iso.outputs.path }}"
179106
SERIAL_LOG=$(mktemp)
180-
# Allow non-zero exit when timeout fires; we assert on log contents.
181-
timeout "$QEMU_TIMEOUT" qemu-system-x86_64 \
182-
-enable-kvm \
183-
-cdrom "$ISO_PATH" \
184-
-boot d \
185-
-m 2G \
186-
-smp 2 \
187-
-display none \
188-
-vga none \
189-
-serial "file:$SERIAL_LOG" \
190-
-no-reboot \
191-
-nographic 2>/dev/null || true
107+
timeout 180 qemu-system-x86_64 \
108+
-enable-kvm -cdrom "${{ steps.iso.outputs.path }}" -boot d \
109+
-m 2G -smp 2 -display none -vga none \
110+
-serial "file:$SERIAL_LOG" -no-reboot -nographic 2>/dev/null || true
192111
if grep -qi "elizaOS\|eliza\|login:" "$SERIAL_LOG" 2>/dev/null; then
193-
echo "ISO smoke test: boot strings found in serial log"
112+
echo "ISO smoke test: boot strings found"
194113
else
195-
echo "ERROR: boot strings not detected in serial log"
114+
echo "ERROR: boot strings not detected"
196115
tail -200 "$SERIAL_LOG" || true
197-
rm -f "$SERIAL_LOG"
198116
exit 1
199117
fi
200118
rm -f "$SERIAL_LOG"
201119
202-
- name: Smoke test ISO (KVM unavailable — skipped)
203-
if: runner.os == 'Linux' && steps.kvm.outputs.have_kvm != 'true'
204-
run: |
205-
echo "::notice::QEMU/KVM unavailable on this runner; skipping ISO boot smoke test (not silently passed — the gate above is the contract)."
120+
- name: Smoke test skipped (no KVM or non-amd64)
121+
if: matrix.arch != 'amd64' || steps.kvm.outputs.have_kvm != 'true'
122+
run: echo "::notice::Boot smoke test runs only on amd64 with KVM; skipped for ${{ matrix.arch }}."
206123

207124
- name: Upload ISO artifact
208125
uses: actions/upload-artifact@v7
209126
with:
210-
name: elizaos-linux-iso-${{ env.CHANNEL }}
127+
name: elizaos-linux-iso-${{ env.CHANNEL }}-${{ matrix.arch }}
211128
path: |
212129
${{ steps.iso.outputs.path }}
213130
${{ steps.iso.outputs.filename }}.sha256
@@ -227,7 +144,7 @@ jobs:
227144
- name: Write ISO metadata to summary
228145
run: |
229146
{
230-
echo "## elizaOS Linux ISO"
147+
echo "## elizaOS Linux ISO (${{ matrix.arch }})"
231148
echo "| Field | Value |"
232149
echo "| ----- | ----- |"
233150
echo "| File | \`${{ steps.iso.outputs.filename }}\` |"

.github/workflows/elizaos-os-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ jobs:
7070
7171
- name: Validate Linux live USB metadata
7272
run: |
73-
cd packages/os/linux/variants/eliza-tails
73+
cd packages/os/linux/elizaos
7474
ELIZAOS_STATIC_SOURCE_ONLY=1 ./scripts/static-smoke.sh
7575
7676
- name: Validate OS homepage

.gitleaks.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# gitleaks configuration — Milady workspace
1+
# gitleaks configuration — elizaOS workspace
22
# SOC2 CC7.1 (monitoring) — automated secret-detection at the SCM boundary.
33
#
44
# Uses the upstream default ruleset and layers on workspace-specific allowlist
55
# entries. To rebuild the embedded default rules, see:
66
# https://github.com/gitleaks/gitleaks/blob/master/config/gitleaks.toml
77

8-
title = "Milady gitleaks config"
8+
title = "elizaOS gitleaks config"
99

1010
[extend]
1111
# Pull in upstream default ruleset.

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Security Policy
22

3-
The Milady / elizaOS team takes the security of our software seriously. This
3+
The elizaOS team takes the security of our software seriously. This
44
document describes how to report vulnerabilities and our remediation
55
commitments.
66

0 commit comments

Comments
 (0)