Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1261fb1
config: introduce top-level `permissions:` block for rootfs/initramfs
mobileoverlord May 26, 2026
b887f22
stamps: split input hashes per build step to fix over-invalidation
mobileoverlord May 27, 2026
3332402
runtime build: fall back to default rootfs/initramfs for permissions …
mobileoverlord May 27, 2026
f93b9ca
docs: plan for avocado deploy port forwarding on macOS
nicksinas May 31, 2026
7a6f1c0
deploy: make `avocado deploy` work on macOS via VM port forwarding
nicksinas Jun 1, 2026
c49931d
repo TLS: support custom CA + insecure mode across all dnf phases
mobileoverlord May 31, 2026
bf82c96
feat(snapshots): reproducible channel snapshot pinning in the lock file
mobileoverlord May 31, 2026
191c47e
fix(snapshots): auto-pin against the default feed; single-source the …
mobileoverlord May 31, 2026
178017b
feat(ext): nested extension layout for a shared includes installroot
mobileoverlord Jun 2, 2026
9d4a7b2
feat(connect): add `connect ext` publish/status/list (super-admin)
mobileoverlord Jun 2, 2026
feced96
build(ext): package avocado-cli as an extension via `ext package`
mobileoverlord Jun 2, 2026
57c82e9
fix(tui): route unset-env-var warning through the output module
mobileoverlord Jun 2, 2026
7f15259
fix(deploy): gate avocado-vm QMP port forwarding behind cfg(unix)
mobileoverlord Jun 2, 2026
5a53362
perf(vm): splice PSCI idle-states into virt-machine DTB
mobileoverlord Jun 3, 2026
ea850e0
perf(vm): hibernation supervisor with wake-on-connect
mobileoverlord Jun 3, 2026
5041200
perf(vm): default hibernation idle timeout from 10s to 60s
mobileoverlord Jun 3, 2026
fcaab59
chore: satisfy fmt + clippy for the supervisor/DTB work
mobileoverlord Jun 3, 2026
abda0c5
chore: cfg(unix) gate the supervisor for Windows build
mobileoverlord Jun 3, 2026
0d1e209
feat(vm): `vm status` reports hibernated state
mobileoverlord Jun 3, 2026
270af2e
perf(vm): infrastructure lane for idle-exempt telemetry + timestamps
mobileoverlord Jun 3, 2026
5c4e211
chore: rustfmt lifecycle.rs (unblock CI)
mobileoverlord Jun 4, 2026
cd52b0d
feat(vm): notify desktop on hibernation wake for USB re-attach
mobileoverlord Jun 4, 2026
a9994a7
feat(init): generate permissions/rootfs/initramfs in new projects
mobileoverlord Jun 9, 2026
3093eca
chore(init): drop channel suffix from generated SDK image tag
mobileoverlord Jun 9, 2026
fa036b3
Add Connect runtime listing and connect-signed deploy support
nicksinas Jun 10, 2026
dd5a351
Tested and working support for connect integration in desktop. Added …
nicksinas Jun 10, 2026
3b4dc8c
style: apply rustfmt to connect upload/deploy and main
mobileoverlord Jun 12, 2026
b0526f5
ext: derive supported targets from avocado.yaml, stamp as RPM provides
mobileoverlord Jun 12, 2026
dc1f197
connect ext publish: derive target feed from distro config; drop --ta…
mobileoverlord Jun 14, 2026
1bd0589
release: bump to 0.41.0
mobileoverlord Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
/target/
**/*.rs.bk

# Transient cross-compile config written by avocado-cli-compile.sh during `ext package`
/.cargo/

# Cargo lock file (uncomment if this is a library)
# Cargo.lock

Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "avocado-cli"
version = "0.40.2"
version = "0.41.0"
edition = "2021"
description = "Command line interface for Avocado."
authors = ["Avocado"]
Expand Down
14 changes: 14 additions & 0 deletions avocado-cli-clean.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash
set -e

echo "Cleaning avocado-cli build artifacts"

cd "$(dirname "$0")"

# Remove Cargo build artifacts
cargo clean

# Remove any generated config
rm -rf .cargo

echo "Clean complete"
45 changes: 45 additions & 0 deletions avocado-cli-compile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/bash
set -e

# Find the Rust target from RUST_TARGET_PATH
for json_file in "$RUST_TARGET_PATH"/*.json; do
if [ -f "$json_file" ]; then
json_name=$(basename "$json_file" .json)
if [[ "$json_name" == "${OECORE_TARGET_ARCH}-"* ]]; then
RUST_TARGET="$json_name"
break
fi
fi
done

if [ -z "$RUST_TARGET" ]; then
echo "Error: Could not find Rust target for $OECORE_TARGET_ARCH"
exit 1
fi

echo "Building avocado-cli for target: $RUST_TARGET"

cd "$(dirname "$0")"

# Clear any rustflags that might cause conflicts with our .cargo/config.toml.
# The SDK env exports CARGO_TARGET_<triple>_RUSTFLAGS carrying its own --sysroot;
# left set, cargo merges it with the config below and rustc gets --sysroot twice
# ("Option 'sysroot' given more than once"). Unset every target's flavor, not just
# one hardcoded triple, so this works for x86_64 and aarch64 targets alike.
unset RUSTFLAGS
unset CARGO_BUILD_RUSTFLAGS
for var in $(env | grep -o 'CARGO_TARGET_[A-Z0-9_]*_RUSTFLAGS'); do
unset "$var"
done

# Remove any existing config that might conflict
rm -rf .cargo

# Create config.toml with cross-compilation settings
mkdir -p .cargo
cat > .cargo/config.toml << EOF
[target.$RUST_TARGET]
rustflags = ["--sysroot=$SDKTARGETSYSROOT/usr", "-C", "link-arg=--sysroot=$SDKTARGETSYSROOT"]
EOF

cargo build --release --target "$RUST_TARGET"
23 changes: 23 additions & 0 deletions avocado-cli-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/bash
set -e

# Find the Rust target from RUST_TARGET_PATH
for json_file in "$RUST_TARGET_PATH"/*.json; do
if [ -f "$json_file" ]; then
json_name=$(basename "$json_file" .json)
if [[ "$json_name" == "${OECORE_TARGET_ARCH}-"* ]]; then
RUST_TARGET="$json_name"
break
fi
fi
done

BINARY_PATH="$(dirname "$0")/target/$RUST_TARGET/release/avocado"

if [ ! -f "$BINARY_PATH" ]; then
echo "Error: Binary not found at $BINARY_PATH"
exit 1
fi

install -D -m 755 "$BINARY_PATH" "$AVOCADO_BUILD_EXT_SYSROOT/usr/bin/avocado"
echo "Installed: $(file "$AVOCADO_BUILD_EXT_SYSROOT/usr/bin/avocado")"
52 changes: 52 additions & 0 deletions avocado.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
supported_targets: '*'

extensions:
avocado-ext-cli:
# Version is injected at build time: `AVOCADO_EXT_VERSION=<x> avocado ext package …`
# (CI sets it from the release/tag; unset => empty + a warning).
version: '{{ env.AVOCADO_EXT_VERSION }}'
release: r0
summary: Avocado build system command line interface
description: Avocado build system command line interface for managing the system
license: Apache-2.0
url: https://github.com/avocadolinux/avocado-cli
vendor: Avocado Linux <info@avocadolinux.org>
# Stage the Rust source (the repo root IS the project) plus the packaging
# artifacts, so `ext package` can compile it. configs/ is required:
# src references include_str!("../../configs/default.yaml").
package_files:
- avocado.yaml
- avocado-cli-*.sh
- Cargo.toml
- Cargo.lock
- build.rs
- src
- configs

packages:
bash: '*'
avocado-cli-bin:
compile: avocado-cli-compile
install: avocado-cli-install.sh

sdk:
packages:
nativesdk-binutils: '*'
nativesdk-cargo: '*'
nativesdk-gcc: '*'
nativesdk-glibc-dev: '*'
nativesdk-libgcc-dev: '*'
nativesdk-rust: '*'
nativesdk-git: '*'
packagegroup-rust-cross-canadian-avocado-{{ avocado.target }}: '*'

sdk:
image: docker.io/avocadolinux/sdk:{{ env.AVOCADO_DISTRO_RELEASE }}-{{ env.AVOCADO_DISTRO_CHANNEL }}

compile:
avocado-cli-compile:
compile: avocado-cli-compile.sh
clean: avocado-cli-clean.sh
packages:
libstd-rs: '*'
libstd-rs-dev: '*'
32 changes: 21 additions & 11 deletions configs/default.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cli_requirement: ">=0.26.0"
cli_requirement: ">=0.41.0"

default_target: "{target}"

Expand All @@ -24,7 +24,6 @@ runtimes:
- avocado-ext-dev
- avocado-ext-sshd-dev
- avocado-bsp-{{ avocado.target.board }}
- config
- app
packages:
avocado-runtime: "*"
Expand Down Expand Up @@ -62,15 +61,26 @@ extensions:
#curl: "*"
#iperf3: "*"

# Generated default config extension
# Use or modify this to configure "real" user accounts (passwd, shadow, group)
# or configure other system services
config:
types:
- confext
version: "0.1.0"
##
## Images
##

rootfs:
permissions: dev

# NOT FOR PRODUCTION: Set root password to empty string
initramfs:
permissions: dev

##
## Permissions
##

# NOT FOR PRODUCTION: the `dev` profile sets an empty root password and is
# referenced by rootfs/initramfs above. Define additional profiles with real
# users, groups, and hashed passwords, then point rootfs/initramfs at them via
# `permissions: <name>`.
permissions:
dev:
users:
root:
password: ""
Expand All @@ -80,7 +90,7 @@ extensions:
##

sdk:
image: "docker.io/avocadolinux/sdk:{{ config.distro.release }}-{{ config.distro.channel }}"
image: "docker.io/avocadolinux/sdk:{{ config.distro.release }}"

container_args:
- --privileged
Expand Down
Loading
Loading