From 226e0800e8a497c51f1b1c1d2e0240c9bccf1144 Mon Sep 17 00:00:00 2001 From: jbride Date: Sun, 19 Oct 2025 18:23:32 -0600 Subject: [PATCH 1/4] Adding github actions related functionality --- .cargo/config.toml | 8 ++ .github/Dockerfile | 26 ++++ .github/ci-runner.sh | 147 +++++++++++++++++++ .github/workflows/hybrid-ci.yml | 106 ++++++++++++++ .gitignore | 1 + docs/hybrid-ci-setup.md | 110 ++++++++++++++ docs/images/gh_actions_1.png | Bin 0 -> 64079 bytes mujina-miner/src/bin/minerd.rs | 29 ++++ scripts/local_ci/Makefile.ci | 96 +++++++++++++ scripts/local_ci/arm-deployment.template | 23 +++ scripts/local_ci/deploy-to-arm.sh | 175 +++++++++++++++++++++++ scripts/local_ci/hybrid-ci-local.sh | 143 ++++++++++++++++++ 12 files changed, 864 insertions(+) create mode 100644 .cargo/config.toml create mode 100644 .github/Dockerfile create mode 100755 .github/ci-runner.sh create mode 100644 .github/workflows/hybrid-ci.yml create mode 100644 docs/hybrid-ci-setup.md create mode 100644 docs/images/gh_actions_1.png create mode 100644 scripts/local_ci/Makefile.ci create mode 100644 scripts/local_ci/arm-deployment.template create mode 100755 scripts/local_ci/deploy-to-arm.sh create mode 100755 scripts/local_ci/hybrid-ci-local.sh diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..b523724 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,8 @@ +[target.aarch64-unknown-linux-gnu] +linker = "aarch64-linux-gnu-gcc" +runner = "qemu-aarch64-static" + +[env] +CC_aarch64_unknown_linux_gnu = "aarch64-linux-gnu-gcc" +CXX_aarch64_unknown_linux_gnu = "aarch64-linux-gnu-g++" +AR_aarch64_unknown_linux_gnu = "aarch64-linux-gnu-ar" diff --git a/.github/Dockerfile b/.github/Dockerfile new file mode 100644 index 0000000..68a37e2 --- /dev/null +++ b/.github/Dockerfile @@ -0,0 +1,26 @@ +# podman build -t quay.io/jbride2000/rust:1.90.0-trixie-tools -f .github/Dockerfile . + +FROM rust:1.90.0-trixie + +# Install Rust components +RUN rustup component add rustfmt clippy + +# Install ARM64 cross-compilation toolchain and system dependencies +RUN dpkg --add-architecture arm64 && \ + apt-get update && apt-get install -y \ + gcc-aarch64-linux-gnu \ + g++-aarch64-linux-gnu \ + libudev-dev \ + libudev-dev:arm64 \ + libssl-dev:arm64 \ + pkg-config \ + && rm -rf /var/lib/apt/lists/* + +# Add ARM64 target for Rust +RUN rustup target add aarch64-unknown-linux-gnu + +# Set up cross-compilation environment +ENV CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc +ENV CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ +ENV AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar +ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc diff --git a/.github/ci-runner.sh b/.github/ci-runner.sh new file mode 100755 index 0000000..e135de9 --- /dev/null +++ b/.github/ci-runner.sh @@ -0,0 +1,147 @@ +#!/bin/bash + +# CI runner script that can be used both locally and in GitHub Actions +# Supports hybrid approach: Podman containers + ARM SSH deployment +set -e + +# Default values +WORKSPACE_DIR="${WORKSPACE_DIR:-$(pwd)}" +RUST_IMAGE="${RUST_IMAGE:-quay.io/jbride2000/rust:1.90.0-trixie-tools}" +CACHE_MOUNTS="${CACHE_MOUNTS:-true}" +TARGET_ARCH="${TARGET_ARCH:-}" +HYBRID_MODE="${HYBRID_MODE:-false}" +ARM_HOST="${ARM_HOST:-}" +ARM_USER="${ARM_USER:-}" + +# Function to run a command in the container +run_in_container() { + local cmd="$1" + local description="$2" + + echo "Running: $description" + + # Add target architecture if specified + local target_cmd="$cmd" + if [ -n "$TARGET_ARCH" ]; then + # Set pkg-config for ARM64 cross-compilation + if [ "$TARGET_ARCH" = "aarch64-unknown-linux-gnu" ]; then + target_cmd="export PKG_CONFIG_ALLOW_CROSS=1 PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig && rustup target add $TARGET_ARCH && $cmd --target $TARGET_ARCH" + else + target_cmd="rustup target add $TARGET_ARCH && $cmd --target $TARGET_ARCH" + fi + fi + + if [ "$CACHE_MOUNTS" = "true" ]; then + podman run --rm \ + -v "$WORKSPACE_DIR":/workspace:Z \ + -w /workspace \ + --mount=type=volume,source=cargo-registry,target=/usr/local/cargo/registry \ + --mount=type=volume,source=cargo-git,target=/usr/local/cargo/git \ + --mount=type=volume,source=cargo-target,target=/workspace/target \ + "$RUST_IMAGE" \ + bash -c "$target_cmd" + else + podman run --rm \ + -v "$WORKSPACE_DIR":/workspace:Z \ + -w /workspace \ + "$RUST_IMAGE" \ + bash -c "$target_cmd" + fi +} + +# Function to deploy to ARM hardware +deploy_to_arm() { + local binary_path="$1" + + if [ "$HYBRID_MODE" = "false" ] || [ -z "$ARM_HOST" ] || [ -z "$ARM_USER" ]; then + echo "Skipping ARM deployment (not in hybrid mode or missing ARM config)" + return 0 + fi + + echo "🚀 Deploying to ARM hardware..." + + # Check if deployment script exists + if [ ! -f "scripts/local_ci/deploy-to-arm.sh" ]; then + echo "❌ ARM deployment script not found" + return 1 + fi + + # Run ARM deployment + chmod +x scripts/local_ci/deploy-to-arm.sh + ./scripts/local_ci/deploy-to-arm.sh \ + --host "$ARM_HOST" \ + --user "$ARM_USER" \ + --binary "$binary_path" \ + --test-mode +} + +# Parse command line arguments +case "${1:-all}" in + "fmt") + run_in_container "cargo fmt --all -- --check" "formatting check" + ;; + "clippy") + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + ;; + "build") + run_in_container "cargo build --verbose" "build" + ;; + "build-release") + run_in_container "cargo build --release --verbose" "release build" + ;; + "test") + run_in_container "cargo test --verbose" "tests" + ;; + "test-release") + run_in_container "cargo test --release --verbose" "release tests" + ;; + "all") + run_in_container "cargo fmt --all -- --check" "formatting check" + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + run_in_container "cargo build --verbose" "build" + run_in_container "cargo test --verbose" "tests" + ;; + "hybrid") + echo "🔄 Running hybrid CI (containers + ARM deployment)..." + + # Step 1: Container-based checks + run_in_container "cargo fmt --all -- --check" "formatting check" + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + + # Step 2: Cross-compile for ARM64 + TARGET_ARCH=aarch64-unknown-linux-gnu + run_in_container "cargo build --release --verbose" "ARM64 release build" + + # Step 3: Deploy to ARM hardware + if [ -n "$TARGET_ARCH" ]; then + binary_path="$WORKSPACE_DIR/target/$TARGET_ARCH/release/mujina-minerd" + else + binary_path="$WORKSPACE_DIR/target/release/mujina-minerd" + fi + + deploy_to_arm "$binary_path" + ;; + *) + echo "Usage: $0 [fmt|clippy|build|build-release|test|test-release|all|hybrid]" + echo "" + echo "Commands:" + echo " fmt Check formatting" + echo " clippy Run clippy lints" + echo " build Build debug version" + echo " build-release Build release version" + echo " test Run tests" + echo " test-release Run release tests" + echo " all Run all checks" + echo " hybrid Run hybrid CI (containers + ARM deployment)" + echo "" + echo "Environment variables:" + echo " WORKSPACE_DIR: Directory to mount (default: current directory)" + echo " RUST_IMAGE: Rust container image (default: quay.io/jbride2000/rust:1.90.0-trixie-tools)" + echo " TARGET_ARCH: Target architecture (e.g., aarch64-unknown-linux-gnu)" + echo " CACHE_MOUNTS: Enable cache mounts (default: true)" + echo " HYBRID_MODE: Enable ARM deployment (default: false)" + echo " ARM_HOST: ARM64 host IP address" + echo " ARM_USER: SSH username for ARM host" + exit 1 + ;; +esac diff --git a/.github/workflows/hybrid-ci.yml b/.github/workflows/hybrid-ci.yml new file mode 100644 index 0000000..fc09d68 --- /dev/null +++ b/.github/workflows/hybrid-ci.yml @@ -0,0 +1,106 @@ +name: Hybrid CI (Podman + Native ARM64) + +on: + push: + branches: [ main, master, preview, gh_actions] + pull_request: + branches: [ main, master, preview, gh_actions ] + workflow_dispatch: + inputs: + run_arm64: + description: "Run ARM64 native test" + type: boolean + default: true + run_container_ci: + description: "Run container CI" + type: boolean + default: true + +env: + CARGO_TERM_COLOR: always + RUST_BACKTRACE: 1 + +jobs: + # Fast checks using Podman containers on GitHub's x86_64 runners + container-ci: + name: Container CI (x86_64) + # https://github.com/actions/runner-images?tab=readme-ov-file#available-images + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Podman + run: | + sudo apt-get update + sudo apt-get -y install podman + + - name: Run CI checks in container + run: | + chmod +x .github/ci-runner.sh + ./.github/ci-runner.sh all + env: + WORKSPACE_DIR: ${{ github.workspace }} + RUST_IMAGE: quay.io/jbride2000/rust:1.90.0-trixie-tools + CACHE_MOUNTS: "false" + + - name: Cross-compile for ARM64 + run: | + chmod +x .github/ci-runner.sh + TARGET_ARCH=aarch64-unknown-linux-gnu ./.github/ci-runner.sh build-release + env: + WORKSPACE_DIR: ${{ github.workspace }} + RUST_IMAGE: quay.io/jbride2000/rust:1.90.0-trixie-tools + TARGET_ARCH: aarch64-unknown-linux-gnu + CACHE_MOUNTS: "false" + + - name: Upload ARM64 binary + uses: actions/upload-artifact@v4 + with: + name: mujina-minerd-arm64 + path: target/aarch64-unknown-linux-gnu/release/mujina-minerd + + # Native ARM64 testing using GitHub's ARM64 runners + # https://docs.github.com/en/actions/how-tos/manage-runners/self-hosted-runners/add-runners + arm64-self-hosted-runner: + name: ARM64 Self-Hosted Runner Test + if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_arm64 }} + runs-on: self-hosted + needs: container-ci + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download ARM64 binary + uses: actions/download-artifact@v4 + with: + name: mujina-minerd-arm64 + path: ./artifacts/ + + - name: Test ARM64 binary natively + run: | + # Test the ARM64 binary on native ARM64 hardware + chmod +x ./artifacts/mujina-minerd + + echo "=== ARM64 Hardware Information ===" + uname -a + cat /proc/cpuinfo | grep -E "(processor|model name|cpu MHz|cache size)" | head -10 + cat /proc/meminfo | head -5 + echo "" + + echo "=== Binary Information ===" + file ./artifacts/mujina-minerd + ldd ./artifacts/mujina-minerd || echo "Static binary or ldd not available" + echo "" + + echo "=== Version Test ===" + ./artifacts/mujina-minerd --version + echo "" + + echo "=== Basic Functionality Test ===" + timeout 30 ./artifacts/mujina-minerd --help || echo "Help command completed" + echo "" + + echo "✅ ARM64 native testing completed successfully!" diff --git a/.gitignore b/.gitignore index 80faede..67b2fef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Cargo.lock /target/ +scripts/local_ci/arm-deployment.env diff --git a/docs/hybrid-ci-setup.md b/docs/hybrid-ci-setup.md new file mode 100644 index 0000000..c0ae77d --- /dev/null +++ b/docs/hybrid-ci-setup.md @@ -0,0 +1,110 @@ +**Hybrid CI Setup Guide** + +This guide explains how to set up and use the hybrid CI system that uses + +## 1. Overview + +The hybrid CI system provides: + +1. **Container-based CI**: Fast, reproducible builds using Podman containers +2. **ARM64 cross-compilation**: Build ARM64 binaries on x86_64 runners +3. **Real hardware testing**: Deploy and test on actual ARM hardware via SSH +4. **Flexible deployment**: Works with GitHub Actions and local development + + +## 2. Github Actions + +This project includes a _workflow_ called [hybrid-ci.yml](../.github/workflows/hybrid-ci.yml) that gets automatically triggered in Github with every commit. +The workflow also allows for manual trigger via the Github UI. + +![GitHub Actions Manual Trigger](images/gh_actions_1.png) + + +Notice in the `hybrid-cli.yml`, configuration exists for specifying the branches that github actions will automatically run on: + + +``` +name: Hybrid CI (Podman + Native ARM64) + +on: + push: + branches: [ main, master, preview, gh_actions] + pull_request: + branches: [ main, master, preview, gh_actions ] +``` + +Modify the list of branches to support your development efforts as necessary. + +## 3. Local testing + +This project also includes a [Makefile](../scripts/local_ci/Makefile.ci) that can be run in your local dev environment. +These commands are for local use only and are not used by GitHub Actions. + +On a x86_64 based development environment, verify that all compilation and testing is successful on both the of the following: + +* x86_64 environment +* ARM64 environment using cross-compilation toolchain. + +All compilation and tests occur in a linux container using podman. + +### 3.1. Prerequisites + +- **Podman** + +### 3.2. Execute + +```bash +$ make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation +``` + +## 4. Local Setup (ARM64 deploy) + +### 4.1. Prerequisites + +- **Podman** installed on your system +- **SSH access** to ARM64 hardware (ie: Raspberry Pi 4) + +### 4.2. Configuration + +Create your ARM deployment configuration: + +```bash +# Copy the template +cp scripts/local_ci/arm-deployment.template scripts/local_ci/arm-deployment.env + +# Edit with your details +vi scripts/local_ci/arm-deployment.env +``` + +### 4.3. Usage + +```bash +$ make -f scripts/local_ci/Makefile.ci deploy-arm +``` + +### 4.4. Volume Management + +#### 4.4.1. Manual Volume Cleanup + +If you encounter issues with mixed architectures or need to clean up build artifacts, you can manually manage the Podman volumes: + +```bash +# List all volumes +podman volume ls + +# Remove specific CI volumes +podman volume rm cargo-registry cargo-git cargo-target + +# Remove all unused volumes +podman volume prune + +# Force remove all volumes (use with caution) +podman volume rm --all +``` + +#### 4.4.2. Volume Locations + +The CI system uses these volumes: +- `cargo-registry`: Rust package registry cache +- `cargo-git`: Git dependencies cache +- `cargo-target`: Build artifacts cache diff --git a/docs/images/gh_actions_1.png b/docs/images/gh_actions_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2fabddeb8424398a39f49e26a8d79741e76b7624 GIT binary patch literal 64079 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 Jxi|El{Rgtq<;Va4 literal 0 HcmV?d00001 diff --git a/mujina-miner/src/bin/minerd.rs b/mujina-miner/src/bin/minerd.rs index fa25f4a..f1f089b 100644 --- a/mujina-miner/src/bin/minerd.rs +++ b/mujina-miner/src/bin/minerd.rs @@ -2,8 +2,37 @@ use mujina_miner::{daemon::Daemon, tracing}; +fn print_help() { + println!("mujina-minerd - Bitcoin mining daemon for Mujina Mining Firmware"); + println!(); + println!("USAGE:"); + println!(" mujina-minerd [OPTIONS]"); + println!(); + println!("OPTIONS:"); + println!(" --help Print this help message"); + println!(); + println!("DESCRIPTION:"); + println!(" A high-performance open-source Bitcoin mining daemon"); +} + #[tokio::main] async fn main() -> anyhow::Result<()> { + // Check for command-line arguments + let args: Vec = std::env::args().collect(); + if args.len() > 1 { + match args[1].as_str() { + "--help" => { + print_help(); + return Ok(()); + } + _ => { + eprintln!("Unknown option: {}", args[1]); + eprintln!("Use --help for usage information"); + std::process::exit(1); + } + } + } + tracing::init_journald_or_stdout(); let daemon = Daemon::new(); diff --git a/scripts/local_ci/Makefile.ci b/scripts/local_ci/Makefile.ci new file mode 100644 index 0000000..bee2253 --- /dev/null +++ b/scripts/local_ci/Makefile.ci @@ -0,0 +1,96 @@ +.PHONY: help build test fmt clippy ci-local hybrid-ci hybrid-ci-arm hybrid-ci-containers clean + +help: ## Show this help message + @echo "Available commands:" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' + +build: ## Build the project + cargo build + +test: ## Run tests + cargo test + +fmt: ## Check formatting + cargo fmt --all -- --check + +fmt-fix: ## Fix formatting + cargo fmt --all + +clippy: ## Run clippy + cargo clippy --all-targets --all-features -- -D warnings + +# Individual CI steps using the shared script +ci-fmt: ## Run formatting check in container + chmod +x .github/ci-runner.sh && ./.github/ci-runner.sh fmt + +ci-clippy: ## Run clippy in container + chmod +x .github/ci-runner.sh && ./.github/ci-runner.sh clippy + +ci-build: ## Build in container + chmod +x .github/ci-runner.sh && ./.github/ci-runner.sh build + +ci-test: ## Run tests in container + chmod +x .github/ci-runner.sh && ./.github/ci-runner.sh test + +## Cross-compile for ARM64 in container +ci-build-arm64: + chmod +x .github/ci-runner.sh && TARGET_ARCH=aarch64-unknown-linux-gnu ./.github/ci-runner.sh build-release + # Copy binary from Podman volume to local filesystem + @mkdir -p target/aarch64-unknown-linux-gnu/release + @podman run --rm \ + -v cargo-target:/workspace/target:Z \ + --entrypoint="" \ + quay.io/jbride2000/rust:1.90.0-trixie-tools \ + cp /workspace/target/aarch64-unknown-linux-gnu/release/mujina-minerd /tmp/mujina-minerd + @podman run --rm \ + -v cargo-target:/workspace/target:Z \ + -v "$(PWD)":/host:Z \ + --entrypoint="" \ + quay.io/jbride2000/rust:1.90.0-trixie-tools \ + cp /workspace/target/aarch64-unknown-linux-gnu/release/mujina-minerd /host/target/aarch64-unknown-linux-gnu/release/mujina-minerd + +# ARM deployment commands +deploy-arm: ci-build-arm64 + @# Check if arm-deployment.env exists, if not check for env vars + @if [ ! -f "scripts/local_ci/arm-deployment.env" ] && ([ -z "$(ARM_HOST)" ] || [ -z "$(ARM_USER)" ]); then \ + echo "Error: Either create scripts/local_ci/arm-deployment.env or set ARM_HOST and ARM_USER environment variables"; \ + echo "Usage: make deploy-arm [ARM_HOST=] [ARM_USER=]"; \ + echo "Or create scripts/local_ci/arm-deployment.env with ARM_HOST and ARM_USER values"; \ + exit 1; \ + fi + @# Use environment variables if provided, otherwise let the script load from arm-deployment.env + @if [ -n "$(ARM_HOST)" ] && [ -n "$(ARM_USER)" ]; then \ + chmod +x scripts/local_ci/deploy-to-arm.sh && ./scripts/local_ci/deploy-to-arm.sh --host $(ARM_HOST) --user $(ARM_USER) --binary target/aarch64-unknown-linux-gnu/release/mujina-minerd --test-mode; \ + else \ + chmod +x scripts/local_ci/deploy-to-arm.sh && ./scripts/local_ci/deploy-to-arm.sh --binary target/aarch64-unknown-linux-gnu/release/mujina-minerd --test-mode; \ + fi + +######################################################### +####### Linux Container (podman) targets ############### +######################################################### + +## Run CI checks locally with Podman +ci-containers: + chmod +x .github/ci-runner.sh && ./.github/ci-runner.sh all + +## Run CI and ARM64 cross-compilation with podman (skip ARM deployment) +ci-containers-arm64-cross-compilation: + chmod +x scripts/local_ci/hybrid-ci-local.sh && ./scripts/local_ci/hybrid-ci-local.sh --skip-arm + +## Run hybrid CI (containers + ARM SSH) locally +ci-containers-arm64-deploy: + chmod +x scripts/local_ci/hybrid-ci-local.sh && ./scripts/local_ci/hybrid-ci-local.sh + +## Run hybrid CI with ARM deployment (requires ARM_HOST and ARM_USER env vars) +ci-containers-arm64-deploy-env-vars: + @if [ -z "$(ARM_HOST)" ] || [ -z "$(ARM_USER)" ]; then \ + echo "Error: ARM_HOST and ARM_USER environment variables must be set"; \ + echo "Usage: make hybrid-ci-arm ARM_HOST= ARM_USER="; \ + exit 1; \ + fi + chmod +x scripts/local_ci/hybrid-ci-local.sh && ./scripts/local_ci/hybrid-ci-local.sh --arm-host $(ARM_HOST) --arm-user $(ARM_USER) + + +clean: ## Clean build artifacts + cargo clean + podman rmi mujina-ci:latest mujina-dev:latest 2>/dev/null || true diff --git a/scripts/local_ci/arm-deployment.template b/scripts/local_ci/arm-deployment.template new file mode 100644 index 0000000..abc50a3 --- /dev/null +++ b/scripts/local_ci/arm-deployment.template @@ -0,0 +1,23 @@ +# Local ARM deployment environment template (local-only) + +# ARM host IP or hostname +ARM_HOST=192.168.1.100 + +# SSH username for the ARM host +ARM_USER=pi + +# Optional: SSH private key path +# SSH_KEY=/path/to/your/private/key + +# Optional: SSH passphrase automation (choose one method) +# Method 1: Use ssh-agent (recommended) +# ssh-add /path/to/your/private/key +# Method 2: Use SSH_ASKPASS program +# SSH_ASKPASS=/path/to/askpass/program + +# Optional: SSH port +# SSH_PORT=22 + +# Optional: Custom SSH options +# SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" + diff --git a/scripts/local_ci/deploy-to-arm.sh b/scripts/local_ci/deploy-to-arm.sh new file mode 100755 index 0000000..606c141 --- /dev/null +++ b/scripts/local_ci/deploy-to-arm.sh @@ -0,0 +1,175 @@ +#!/bin/bash + +# Deploy and test Mujina Mining Firmware on ARM64 hardware via SSH +# Usage: ./scripts/deploy-to-arm.sh --host --user --binary [--test-mode] + +set -e + +# Source environment file if it exists (command line args will override these) +if [[ -f "scripts/local_ci/arm-deployment.env" ]]; then + echo "Loading configuration from arm-deployment.env..." + source scripts/local_ci/arm-deployment.env +fi + +# Default values (can be overridden by env file or command line) +HOST="${ARM_HOST:-}" +USER="${ARM_USER:-}" +BINARY="" +TEST_MODE=false +SSH_KEY="${SSH_KEY:-}" +SSH_OPTS="${SSH_OPTS:--o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null}" +SSH_ASKPASS="${SSH_ASKPASS:-}" +TIMEOUT="${TIMEOUT:-300}" + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --host) + HOST="$2" + shift 2 + ;; + --user) + USER="$2" + shift 2 + ;; + --binary) + BINARY="$2" + shift 2 + ;; + --test-mode) + TEST_MODE=true + shift + ;; + --ssh-key) + SSH_KEY="$2" + shift 2 + ;; + --timeout) + TIMEOUT="$2" + shift 2 + ;; + --help) + echo "Usage: $0 --host --user --binary [--test-mode] [--ssh-key ] [--timeout ]" + echo "" + echo "Options:" + echo " --host ARM64 host IP address" + echo " --user SSH username" + echo " --binary Path to binary to deploy" + echo " --test-mode Run in test mode (default: false)" + echo " --ssh-key Path to SSH private key" + echo " --timeout SSH connection timeout in seconds (default: 300)" + echo " --help Show this help" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +# Validate required arguments +if [[ -z "$HOST" || -z "$USER" || -z "$BINARY" ]]; then + echo "Error: --host, --user, and --binary are required" + echo "Use --help for usage information" + exit 1 +fi + +# Check if binary exists +if [[ ! -f "$BINARY" ]]; then + echo "Error: Binary file '$BINARY' does not exist" + exit 1 +fi + +# Make binary executable +chmod +x "$BINARY" + +echo "🚀 Deploying to ARM64 hardware..." +echo " Host: $USER@$HOST" +echo " Binary: $BINARY" +echo " Test Mode: $TEST_MODE" + +# Build SSH command with key if provided +SSH_CMD="ssh $SSH_OPTS" +if [ -n "$SSH_KEY" ]; then + SSH_CMD="$SSH_CMD -i $SSH_KEY" + # Skip ssh-agent entirely and use key directly + echo "🔑 Using SSH key directly (skipping ssh-agent)..." +fi + +# Set up SSH_ASKPASS if provided +if [ -n "$SSH_ASKPASS" ]; then + export SSH_ASKPASS + export DISPLAY=dummy:0 # Required for SSH_ASKPASS + SSH_CMD="$SSH_CMD -o PasswordAuthentication=no" +fi + +# Create remote directory +echo "📁 Setting up remote directory..." +$SSH_CMD "$USER@$HOST" "mkdir -p /tmp/mujina-miner-test" + +# Remove existing binary if it exists +echo "🗑️ Removing existing binary..." +$SSH_CMD "$USER@$HOST" "rm -f /tmp/mujina-miner-test/mujina-minerd" + +# Copy binary to remote host +echo "📤 Uploading binary..." +SCP_CMD="scp $SSH_OPTS" +if [ -n "$SSH_KEY" ]; then + SCP_CMD="$SCP_CMD -i $SSH_KEY" +fi +if [ -n "$SSH_ASKPASS" ]; then + export SSH_ASKPASS + export DISPLAY=dummy:0 +fi +$SCP_CMD "$BINARY" "$USER@$HOST:/tmp/mujina-miner-test/mujina-minerd" + +# Copy any additional test files +if [[ -d "test-data" ]]; then + echo "📤 Uploading test data..." + $SCP_CMD -r test-data "$USER@$HOST:/tmp/mujina-miner-test/" +fi + +# Run tests on remote ARM64 hardware +echo "🧪 Running tests on ARM64 hardware..." + +# Create test script on remote host +$SSH_CMD "$USER@$HOST" << 'EOF' +cd /tmp/mujina-miner-test +chmod +x mujina-minerd + +echo "=== ARM64 Hardware Information ===" +uname -a +cat /proc/cpuinfo | grep -E "(processor|model name|cpu MHz|cache size)" | head -10 +cat /proc/meminfo | head -5 +echo "" + +echo "=== Binary Information ===" +file mujina-minerd +ldd mujina-minerd || echo "Static binary or ldd not available" +echo "" + +echo "=== help test ===" +timeout 30 ./mujina-minerd --help || echo "Help command failed" +echo "" + +echo "" +echo "=== Test Results ===" +echo "✅ ARM64 deployment successful" +echo "✅ Binary executes correctly" +echo "✅ Hardware integration tested" +EOF + +# Check exit status +if [[ $? -eq 0 ]]; then + echo "✅ ARM64 deployment and testing completed successfully!" +else + echo "❌ ARM64 deployment or testing failed" + exit 1 +fi + +# Cleanup remote files (optional) +echo "🧹 Cleaning up remote files..." +$SSH_CMD "$USER@$HOST" "rm -rf /tmp/mujina-miner-test" || echo "Cleanup failed (non-critical)" + +echo "🎉 Hybrid CI deployment completed!" diff --git a/scripts/local_ci/hybrid-ci-local.sh b/scripts/local_ci/hybrid-ci-local.sh new file mode 100755 index 0000000..4511104 --- /dev/null +++ b/scripts/local_ci/hybrid-ci-local.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +# Local hybrid CI script - combines Podman containers with SSH ARM deployment +# Usage: ./scripts/hybrid-ci-local.sh [--arm-host ] [--arm-user ] [--skip-arm] + +set -e + +# Default values +ARM_HOST="" +ARM_USER="" +SKIP_ARM=false +RUST_IMAGE="quay.io/jbride2000/rust:1.90.0-trixie-tools" + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --arm-host) + ARM_HOST="$2" + shift 2 + ;; + --arm-user) + ARM_USER="$2" + shift 2 + ;; + --skip-arm) + SKIP_ARM=true + shift + ;; + --rust-image) + RUST_IMAGE="$2" + shift 2 + ;; + --help) + echo "Usage: $0 [--arm-host ] [--arm-user ] [--skip-arm] [--rust-image ]" + echo "" + echo "Options:" + echo " --arm-host ARM64 host IP address for deployment" + echo " --arm-user SSH username for ARM host" + echo " --skip-arm Skip ARM deployment (containers only)" + echo " --rust-image Rust container image (default: quay.io/jbride2000/rust:1.90.0-trixie-tools)" + echo " --help Show this help" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +echo "🔄 Starting hybrid CI (Podman + ARM SSH)..." +echo " Rust Image: $RUST_IMAGE" +echo " ARM Host: ${ARM_HOST:-'Not configured'}" +echo " ARM User: ${ARM_USER:-'Not configured'}" +echo " Skip ARM: $SKIP_ARM" +echo "" + +# Check if Podman is available +if ! command -v podman &> /dev/null; then + echo "❌ Podman is not installed. Please install Podman first." + exit 1 +fi + +# Check if ARM deployment is configured +if [ "$SKIP_ARM" = "false" ] && [ -z "$ARM_HOST" ]; then + echo "⚠️ ARM host not configured. Running container-only CI." + echo " Use --arm-host and --arm-user to enable ARM deployment" + echo " Or use --skip-arm to skip ARM deployment entirely" + echo "" + SKIP_ARM=true +fi + +# Make scripts executable +chmod +x .github/ci-runner.sh + +echo "📦 Step 1: Running container-based CI checks..." +export RUST_IMAGE="$RUST_IMAGE" +export WORKSPACE_DIR="$(pwd)" +export CACHE_MOUNTS="true" + +# Run all container-based checks +./.github/ci-runner.sh all + +echo "" +echo "✅ Container-based CI completed successfully!" +echo "" + +# Cross-compile for ARM64 +echo "🔨 Step 2: Cross-compiling for ARM64..." +export TARGET_ARCH="aarch64-unknown-linux-gnu" +./.github/ci-runner.sh build-release + +echo "" +echo "✅ ARM64 cross-compilation completed!" +echo "" + +# ARM deployment (if configured) +if [ "$SKIP_ARM" = "false" ]; then + echo "🚀 Step 3: Deploying to ARM64 hardware..." + + # Set up environment for ARM deployment + export HYBRID_MODE="true" + export ARM_HOST="$ARM_HOST" + export ARM_USER="$ARM_USER" + + # Find the ARM64 binary + ARM_BINARY="target/aarch64-unknown-linux-gnu/release/mujina-minerd" + + if [ ! -f "$ARM_BINARY" ]; then + echo "❌ ARM64 binary not found at $ARM_BINARY" + exit 1 + fi + + # Ensure deploy script is executable + chmod +x scripts/local_ci/deploy-to-arm.sh + + # Deploy to ARM hardware + ./scripts/local_ci/deploy-to-arm.sh \ + --host "$ARM_HOST" \ + --user "$ARM_USER" \ + --binary "$ARM_BINARY" \ + --test-mode + + echo "" + echo "✅ ARM64 deployment and testing completed!" +else + echo "⏭️ Step 3: Skipping ARM deployment" + echo " ARM64 binary available at: target/aarch64-unknown-linux-gnu/release/mujina-minerd" +fi + +echo "" +echo "🎉 Hybrid CI completed successfully!" +echo "" +echo "📊 Summary:" +echo " ✅ Container-based CI: PASSED" +echo " ✅ ARM64 cross-compilation: PASSED" +if [ "$SKIP_ARM" = "false" ]; then + echo " ✅ ARM64 hardware deployment: PASSED" +else + echo " ⏭️ ARM64 hardware deployment: SKIPPED" +fi +echo "" +echo "🚀 Ready for deployment!" From 91f9056615a094ec35eaac02cb98ef1af7bf0bd7 Mon Sep 17 00:00:00 2001 From: jbride Date: Wed, 14 Jan 2026 13:32:11 -0700 Subject: [PATCH 2/4] gh_actions: better explanation in hybrid-ci-setup.md --- docs/hybrid-ci-setup.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/hybrid-ci-setup.md b/docs/hybrid-ci-setup.md index c0ae77d..bd61a72 100644 --- a/docs/hybrid-ci-setup.md +++ b/docs/hybrid-ci-setup.md @@ -38,12 +38,17 @@ Modify the list of branches to support your development efforts as necessary. ## 3. Local testing This project also includes a [Makefile](../scripts/local_ci/Makefile.ci) that can be run in your local dev environment. -These commands are for local use only and are not used by GitHub Actions. +These Makefile commands are for local use only and are not used by GitHub Actions. -On a x86_64 based development environment, verify that all compilation and testing is successful on both the of the following: +On a x86_64 based development environment, you can use the Makefile for the following: -* x86_64 environment -* ARM64 environment using cross-compilation toolchain. +1. Full CI checks in containers: + * Formatting check (cargo fmt --all -- --check) + * Clippy lints (cargo clippy --all-targets --all-features -- -D warnings) + * Debug build (cargo build --verbose) + * Tests (cargo test --verbose) + +2. ARM64 cross-compilation All compilation and tests occur in a linux container using podman. @@ -54,11 +59,13 @@ All compilation and tests occur in a linux container using podman. ### 3.2. Execute ```bash -$ make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation +make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation ``` ## 4. Local Setup (ARM64 deploy) +The CI functionality also allows for deploying and testing cross-compiled mujina to an ARM64 target environment. + ### 4.1. Prerequisites - **Podman** installed on your system @@ -79,7 +86,7 @@ vi scripts/local_ci/arm-deployment.env ### 4.3. Usage ```bash -$ make -f scripts/local_ci/Makefile.ci deploy-arm +make -f scripts/local_ci/Makefile.ci deploy-arm ``` ### 4.4. Volume Management From f0acff5541f2b9bff0f8d030ccf20905e180b655 Mon Sep 17 00:00:00 2001 From: jbride Date: Wed, 14 Jan 2026 13:49:43 -0700 Subject: [PATCH 3/4] gh_actions: allow for optionally skipping clippy tests. Default remains clippy enabled --- .github/ci-runner.sh | 22 ++++++++++++++++++---- .github/workflows/hybrid-ci.yml | 5 +++++ docs/hybrid-ci-setup.md | 17 ++++++++++++++--- scripts/local_ci/hybrid-ci-local.sh | 1 + 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/.github/ci-runner.sh b/.github/ci-runner.sh index e135de9..0b077e3 100755 --- a/.github/ci-runner.sh +++ b/.github/ci-runner.sh @@ -12,6 +12,7 @@ TARGET_ARCH="${TARGET_ARCH:-}" HYBRID_MODE="${HYBRID_MODE:-false}" ARM_HOST="${ARM_HOST:-}" ARM_USER="${ARM_USER:-}" +SKIP_CLIPPY="${SKIP_CLIPPY:-false}" # Function to run a command in the container run_in_container() { @@ -81,7 +82,11 @@ case "${1:-all}" in run_in_container "cargo fmt --all -- --check" "formatting check" ;; "clippy") - run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + if [ "$SKIP_CLIPPY" = "true" ]; then + echo "⏭️ Skipping clippy check (SKIP_CLIPPY=true)" + else + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + fi ;; "build") run_in_container "cargo build --verbose" "build" @@ -97,16 +102,24 @@ case "${1:-all}" in ;; "all") run_in_container "cargo fmt --all -- --check" "formatting check" - run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + if [ "$SKIP_CLIPPY" = "true" ]; then + echo "⏭️ Skipping clippy check (SKIP_CLIPPY=true)" + else + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + fi run_in_container "cargo build --verbose" "build" run_in_container "cargo test --verbose" "tests" ;; "hybrid") echo "🔄 Running hybrid CI (containers + ARM deployment)..." - + # Step 1: Container-based checks run_in_container "cargo fmt --all -- --check" "formatting check" - run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + if [ "$SKIP_CLIPPY" = "true" ]; then + echo "⏭️ Skipping clippy check (SKIP_CLIPPY=true)" + else + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + fi # Step 2: Cross-compile for ARM64 TARGET_ARCH=aarch64-unknown-linux-gnu @@ -139,6 +152,7 @@ case "${1:-all}" in echo " RUST_IMAGE: Rust container image (default: quay.io/jbride2000/rust:1.90.0-trixie-tools)" echo " TARGET_ARCH: Target architecture (e.g., aarch64-unknown-linux-gnu)" echo " CACHE_MOUNTS: Enable cache mounts (default: true)" + echo " SKIP_CLIPPY: Skip clippy lints (default: false)" echo " HYBRID_MODE: Enable ARM deployment (default: false)" echo " ARM_HOST: ARM64 host IP address" echo " ARM_USER: SSH username for ARM host" diff --git a/.github/workflows/hybrid-ci.yml b/.github/workflows/hybrid-ci.yml index fc09d68..78f02eb 100644 --- a/.github/workflows/hybrid-ci.yml +++ b/.github/workflows/hybrid-ci.yml @@ -15,6 +15,10 @@ on: description: "Run container CI" type: boolean default: true + skip_clippy: + description: "Skip clippy lints" + type: boolean + default: false env: CARGO_TERM_COLOR: always @@ -44,6 +48,7 @@ jobs: WORKSPACE_DIR: ${{ github.workspace }} RUST_IMAGE: quay.io/jbride2000/rust:1.90.0-trixie-tools CACHE_MOUNTS: "false" + SKIP_CLIPPY: ${{ github.event.inputs.skip_clippy || 'false' }} - name: Cross-compile for ARM64 run: | diff --git a/docs/hybrid-ci-setup.md b/docs/hybrid-ci-setup.md index bd61a72..f6106ed 100644 --- a/docs/hybrid-ci-setup.md +++ b/docs/hybrid-ci-setup.md @@ -35,6 +35,10 @@ on: Modify the list of branches to support your development efforts as necessary. +### 2.1. Skipping Clippy Tests + +You can skip clippy lints when manually triggering the workflow via the GitHub UI. Check the "Skip clippy lints" option when running the workflow manually. By default, clippy is enabled. + ## 3. Local testing This project also includes a [Makefile](../scripts/local_ci/Makefile.ci) that can be run in your local dev environment. @@ -58,9 +62,16 @@ All compilation and tests occur in a linux container using podman. ### 3.2. Execute -```bash -make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation -``` +1. OPTIONAL: To skip clippy lints locally, set the `SKIP_CLIPPY` environment variable: + ```bash + export SKIP_CLIPPY=true + ``` + + +2. Execute: + ```bash + make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation + ``` ## 4. Local Setup (ARM64 deploy) diff --git a/scripts/local_ci/hybrid-ci-local.sh b/scripts/local_ci/hybrid-ci-local.sh index 4511104..7d5fde2 100755 --- a/scripts/local_ci/hybrid-ci-local.sh +++ b/scripts/local_ci/hybrid-ci-local.sh @@ -77,6 +77,7 @@ echo "📦 Step 1: Running container-based CI checks..." export RUST_IMAGE="$RUST_IMAGE" export WORKSPACE_DIR="$(pwd)" export CACHE_MOUNTS="true" +export SKIP_CLIPPY="${SKIP_CLIPPY:-false}" # Run all container-based checks ./.github/ci-runner.sh all From 72045d92cb0c621dc3aa2ec06b8a44f2ff056b64 Mon Sep 17 00:00:00 2001 From: jbride Date: Wed, 14 Jan 2026 13:49:43 -0700 Subject: [PATCH 4/4] gh_actions: allow for optionally skipping clippy tests. Default remains clippy enabled --- .github/ci-runner.sh | 22 ++++++++++++++++++---- .github/workflows/hybrid-ci.yml | 13 +++++++++---- docs/hybrid-ci-setup.md | 21 ++++++++++++++++++--- docs/images/clippy_skip.png | Bin 0 -> 87463 bytes scripts/local_ci/hybrid-ci-local.sh | 1 + 5 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 docs/images/clippy_skip.png diff --git a/.github/ci-runner.sh b/.github/ci-runner.sh index e135de9..0b077e3 100755 --- a/.github/ci-runner.sh +++ b/.github/ci-runner.sh @@ -12,6 +12,7 @@ TARGET_ARCH="${TARGET_ARCH:-}" HYBRID_MODE="${HYBRID_MODE:-false}" ARM_HOST="${ARM_HOST:-}" ARM_USER="${ARM_USER:-}" +SKIP_CLIPPY="${SKIP_CLIPPY:-false}" # Function to run a command in the container run_in_container() { @@ -81,7 +82,11 @@ case "${1:-all}" in run_in_container "cargo fmt --all -- --check" "formatting check" ;; "clippy") - run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + if [ "$SKIP_CLIPPY" = "true" ]; then + echo "⏭️ Skipping clippy check (SKIP_CLIPPY=true)" + else + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + fi ;; "build") run_in_container "cargo build --verbose" "build" @@ -97,16 +102,24 @@ case "${1:-all}" in ;; "all") run_in_container "cargo fmt --all -- --check" "formatting check" - run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + if [ "$SKIP_CLIPPY" = "true" ]; then + echo "⏭️ Skipping clippy check (SKIP_CLIPPY=true)" + else + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + fi run_in_container "cargo build --verbose" "build" run_in_container "cargo test --verbose" "tests" ;; "hybrid") echo "🔄 Running hybrid CI (containers + ARM deployment)..." - + # Step 1: Container-based checks run_in_container "cargo fmt --all -- --check" "formatting check" - run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + if [ "$SKIP_CLIPPY" = "true" ]; then + echo "⏭️ Skipping clippy check (SKIP_CLIPPY=true)" + else + run_in_container "cargo clippy --all-targets --all-features -- -D warnings" "clippy check" + fi # Step 2: Cross-compile for ARM64 TARGET_ARCH=aarch64-unknown-linux-gnu @@ -139,6 +152,7 @@ case "${1:-all}" in echo " RUST_IMAGE: Rust container image (default: quay.io/jbride2000/rust:1.90.0-trixie-tools)" echo " TARGET_ARCH: Target architecture (e.g., aarch64-unknown-linux-gnu)" echo " CACHE_MOUNTS: Enable cache mounts (default: true)" + echo " SKIP_CLIPPY: Skip clippy lints (default: false)" echo " HYBRID_MODE: Enable ARM deployment (default: false)" echo " ARM_HOST: ARM64 host IP address" echo " ARM_USER: SSH username for ARM host" diff --git a/.github/workflows/hybrid-ci.yml b/.github/workflows/hybrid-ci.yml index fc09d68..46e0104 100644 --- a/.github/workflows/hybrid-ci.yml +++ b/.github/workflows/hybrid-ci.yml @@ -7,14 +7,18 @@ on: branches: [ main, master, preview, gh_actions ] workflow_dispatch: inputs: - run_arm64: - description: "Run ARM64 native test" - type: boolean - default: true run_container_ci: description: "Run container CI" type: boolean default: true + skip_clippy: + description: "Skip clippy lints" + type: boolean + default: false + run_arm64: + description: "Run ARM64 native test" + type: boolean + default: false env: CARGO_TERM_COLOR: always @@ -44,6 +48,7 @@ jobs: WORKSPACE_DIR: ${{ github.workspace }} RUST_IMAGE: quay.io/jbride2000/rust:1.90.0-trixie-tools CACHE_MOUNTS: "false" + SKIP_CLIPPY: ${{ github.event.inputs.skip_clippy || 'false' }} - name: Cross-compile for ARM64 run: | diff --git a/docs/hybrid-ci-setup.md b/docs/hybrid-ci-setup.md index bd61a72..14e100a 100644 --- a/docs/hybrid-ci-setup.md +++ b/docs/hybrid-ci-setup.md @@ -35,6 +35,14 @@ on: Modify the list of branches to support your development efforts as necessary. +### 2.1. Skipping Clippy Tests + +You can skip clippy lints when manually triggering the workflow via the GitHub UI. +(Manual triggering is available only on the `main` branch. +Check the "Skip clippy lints" option when running the workflow manually. By default, clippy is enabled. + +![Clippy Skip](images/clippy_skip.png) + ## 3. Local testing This project also includes a [Makefile](../scripts/local_ci/Makefile.ci) that can be run in your local dev environment. @@ -58,9 +66,16 @@ All compilation and tests occur in a linux container using podman. ### 3.2. Execute -```bash -make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation -``` +1. OPTIONAL: To skip clippy lints locally, set the `SKIP_CLIPPY` environment variable: + ```bash + export SKIP_CLIPPY=true + ``` + + +2. Execute: + ```bash + make -f scripts/local_ci/Makefile.ci ci-containers-arm64-cross-compilation + ``` ## 4. Local Setup (ARM64 deploy) diff --git a/docs/images/clippy_skip.png b/docs/images/clippy_skip.png new file mode 100644 index 0000000000000000000000000000000000000000..d54d39642e40e743db42fde65c9565eddff93a2b GIT binary patch literal 87463 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⪚> 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

nKo=(j}~|%ejHg-MqFbHc^?5lLfsTcNUuP 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 literal 0 HcmV?d00001 diff --git a/scripts/local_ci/hybrid-ci-local.sh b/scripts/local_ci/hybrid-ci-local.sh index 4511104..7d5fde2 100755 --- a/scripts/local_ci/hybrid-ci-local.sh +++ b/scripts/local_ci/hybrid-ci-local.sh @@ -77,6 +77,7 @@ echo "📦 Step 1: Running container-based CI checks..." export RUST_IMAGE="$RUST_IMAGE" export WORKSPACE_DIR="$(pwd)" export CACHE_MOUNTS="true" +export SKIP_CLIPPY="${SKIP_CLIPPY:-false}" # Run all container-based checks ./.github/ci-runner.sh all