Skip to content

CI Nightly

CI Nightly #37

Workflow file for this run

name: CI Nightly
on:
schedule:
- cron: "0 6 * * *"
workflow_dispatch:
concurrency:
group: ci-nightly-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
actions: read
jobs:
prepare-spanda:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/fetch-or-build-spanda
with:
source-workflow: ci-integration.yml
fallback-source-workflow: ci-fast.yml
source-sha: ${{ github.sha }}
source-branch: ${{ github.ref_name }}
security-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Install cargo-audit
run: cargo install cargo-audit --locked
- run: cargo audit
mqtt-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- name: Install Mosquitto
run: sudo apt-get update && sudo apt-get install -y mosquitto mosquitto-clients
- run: chmod +x scripts/mqtt_golden_path.sh
- run: ./scripts/mqtt_golden_path.sh
twin-cloud-stable-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/twin_cloud_stable_promotion_gate.sh \
scripts/twin_cloud_unified_path.sh scripts/twin_cloud_golden_path.sh \
scripts/twin_cloud_saas_smoke.sh
SPANDA_BIN=${{ github.workspace }}/target/release/spanda \
SPANDA_TWIN_CLOUD_SKIP_SOAK=1 \
./scripts/twin_cloud_stable_promotion_gate.sh
llvm-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- name: Install clang
run: sudo apt-get update && sudo apt-get install -y clang
- run: |
chmod +x scripts/llvm_golden_path.sh
SPANDA_BIN=${{ github.workspace }}/target/release/spanda ./scripts/llvm_golden_path.sh
llvm-embedded-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- name: Install clang and aarch64 cross toolchain
run: sudo apt-get update && sudo apt-get install -y clang gcc-aarch64-linux-gnu
- run: |
chmod +x scripts/llvm_embedded_golden_path.sh
SPANDA_BIN=${{ github.workspace }}/target/release/spanda ./scripts/llvm_embedded_golden_path.sh
cpp-native-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- name: Install C++ toolchain
run: sudo apt-get update && sudo apt-get install -y g++
- run: chmod +x scripts/cpp_native_golden_path.sh
- run: ./scripts/cpp_native_golden_path.sh
ledger-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/ledger_golden_path.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
./scripts/ledger_golden_path.sh
self-host-lexer-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/self_host_lexer_golden_path.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
./scripts/self_host_lexer_golden_path.sh
world-model-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/world_model_golden_path.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
./scripts/world_model_golden_path.sh
live-ai-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/live_ai_golden_path.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
./scripts/live_ai_golden_path.sh
live-iot-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: chmod +x scripts/live_iot_golden_path.sh
- run: ./scripts/live_iot_golden_path.sh
python-native-golden-path:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/python_native_golden_path.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
./scripts/python_native_golden_path.sh
env:
PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
ros2-golden-path:
needs: prepare-spanda
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- name: Setup ROS 2 Humble
env:
ROS_APT_SOURCE_VERSION: "1.2.0"
run: |
sudo apt-get update
sudo apt-get install -y curl
curl --fail --location --retry 3 --retry-delay 2 \
-o /tmp/ros2-apt-source.deb \
"https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.jammy_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb
sudo apt-get update
sudo apt-get install -y ros-humble-ros-base ros-humble-rclpy
- run: |
chmod +x scripts/ros2_golden_path.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
./scripts/ros2_golden_path.sh
ros2-rclrs-native:
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- name: Setup ROS 2 Humble (pinned ros-apt-source)
env:
ROS_APT_SOURCE_VERSION: "1.2.0"
run: |
sudo apt-get update
sudo apt-get install -y curl
curl --fail --location --retry 3 --retry-delay 2 \
-o /tmp/ros2-apt-source.deb \
"https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.jammy_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb
sudo apt-get update
sudo apt-get install -y ros-humble-ros-base
- name: Install ROS message packages for rclrs
run: sudo apt-get update && sudo apt-get install -y ros-humble-test-msgs ros-humble-example-interfaces
- name: Test native rclrs crate
run: |
. /opt/ros/humble/setup.sh
cargo build --manifest-path crates/spanda-ros2-rclrs-native/Cargo.toml --release --target-dir target
export SPANDA_ROS2_RCLRS_LIB="$PWD/target/release/libspanda_ros2_rclrs_native.so"
cargo test --manifest-path crates/spanda-ros2-rclrs-native/Cargo.toml --target-dir target
cargo test -p spanda-core --lib transport_rclrs
recovery-orchestrator-stable-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/recovery_orchestrator_stable_promotion_gate.sh scripts/recovery_orchestrator_smoke.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
SPANDA_BIN=${{ github.workspace }}/target/release/spanda \
SPANDA_RECOVERY_SKIP_SOAK=1 \
./scripts/recovery_orchestrator_stable_promotion_gate.sh
smart-spaces-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/smart_spaces_promotion_gate.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_SMART_SPACES_SKIP_SOAK=1 SPANDA_SMART_SPACES_SKIP_AUDIT=1 SPANDA_SMART_SPACES_SKIP_SMOKE=1 \
./scripts/smart_spaces_promotion_gate.sh
adas-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/adas_stable_promotion_gate.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_ADAS_SKIP_SOAK=1 SPANDA_ADAS_SKIP_AUDIT=1 SPANDA_ADAS_SKIP_SMOKE=1 \
./scripts/adas_stable_promotion_gate.sh
enterprise-ops-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 35
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/enterprise_ops_stable_promotion_gate.sh
chmod +x scripts/failover_drill_smoke.sh scripts/ota_fleet_soak.sh 2>/dev/null || true
export PATH="${{ github.workspace }}/target/release:$PATH"
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_ENTERPRISE_OPS_SKIP_SOAK=1 SPANDA_ENTERPRISE_OPS_SKIP_AUDIT=1 \
./scripts/enterprise_ops_stable_promotion_gate.sh
entity-model-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: cargo build -p spanda-sdk --examples
- run: npm ci
- run: |
chmod +x scripts/entity_model_stable_promotion_gate.sh scripts/entity_model_smoke.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_ENTITY_MODEL_SKIP_SOAK=1 SPANDA_ENTITY_MODEL_SKIP_AUDIT=1 \
./scripts/entity_model_stable_promotion_gate.sh
entity-mesh-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: cargo build -p spanda-sdk --examples
- run: npm ci
- run: |
chmod +x scripts/entity_mesh_stable_promotion_gate.sh scripts/entity_mesh_smoke.sh
export PATH="${{ github.workspace }}/target/release:$PATH"
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_ENTITY_MESH_SKIP_SOAK=1 SPANDA_ENTITY_MESH_SKIP_AUDIT=1 \
./scripts/entity_mesh_stable_promotion_gate.sh
differentiation-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/differentiation_promotion_gate.sh
SPANDA_BIN=${{ github.workspace }}/target/release/spanda SPANDA_DIFFERENTIATION_SKIP_SMOKE=1 \
./scripts/differentiation_promotion_gate.sh
what-if-stable-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/what_if_stable_promotion_gate.sh scripts/what_if_smoke.sh
SPANDA_BIN=${{ github.workspace }}/target/release/spanda \
SPANDA_WHATIF_SKIP_SOAK=1 SPANDA_WHATIF_SKIP_AUDIT=1 SPANDA_WHATIF_SKIP_SMOKE=1 \
./scripts/what_if_stable_promotion_gate.sh
next-differentiation-stable-gates:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/risk_stable_promotion_gate.sh \
scripts/forecast_stable_promotion_gate.sh \
scripts/trust_graph_stable_promotion_gate.sh \
scripts/scorecard_stable_promotion_gate.sh
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_RISK_SKIP_SOAK=1 SPANDA_RISK_SKIP_SMOKE=1 ./scripts/risk_stable_promotion_gate.sh
SPANDA_FORECAST_SKIP_SOAK=1 SPANDA_FORECAST_SKIP_SMOKE=1 ./scripts/forecast_stable_promotion_gate.sh
SPANDA_TRUST_GRAPH_SKIP_SOAK=1 SPANDA_TRUST_GRAPH_SKIP_SMOKE=1 ./scripts/trust_graph_stable_promotion_gate.sh
SPANDA_SCORECARD_SKIP_SOAK=1 SPANDA_SCORECARD_SKIP_SMOKE=1 ./scripts/scorecard_stable_promotion_gate.sh
later-differentiation-stable-gates:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/later_differentiation_stable_promotion_gate.sh \
scripts/later_differentiation_smoke.sh scripts/later_analytics_smoke.sh
SPANDA_BIN=${{ github.workspace }}/target/release/spanda SPANDA_LATER_SKIP_SOAK=1 \
./scripts/later_differentiation_stable_promotion_gate.sh
trust-framework-stable-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/trust_framework_stable_promotion_gate.sh \
scripts/trust_program_smoke.sh scripts/trust_showcase_smoke.sh
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_TRUST_FRAMEWORK_SKIP_SOAK=1 SPANDA_TRUST_FRAMEWORK_SKIP_AUDIT=1 \
./scripts/trust_framework_stable_promotion_gate.sh
operational-governance-promotion-gate:
needs: prepare-spanda
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: ./.github/actions/with-spanda-bin
with:
build-if-missing: "false"
- run: |
chmod +x scripts/operational_governance_stable_promotion_gate.sh
export SPANDA_BIN="${{ github.workspace }}/target/release/spanda"
SPANDA_GOVERNANCE_SKIP_SOAK=1 ./scripts/operational_governance_stable_promotion_gate.sh
control-center-desktop:
needs: prepare-spanda
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- name: Install Tauri Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev build-essential curl wget file \
libssl-dev libayatana-appindicator3-dev librsvg2-dev
- run: npm ci
- run: chmod +x scripts/build_control_center_desktop.sh
- run: ./scripts/build_control_center_desktop.sh
env:
SKIP_TAURI_LINUX_CARGO_CHECK: "1"
control-center-desktop-bundle:
needs: prepare-spanda
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-rust
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- run: npm ci
- run: chmod +x scripts/build_control_center_desktop.sh scripts/sign_tauri_macos.sh
- run: TAURI_BUILD=1 ./scripts/build_control_center_desktop.sh
- name: Codesign macOS bundle (optional)
env:
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_NOTARIZE_PROFILE: ${{ secrets.APPLE_NOTARIZE_PROFILE }}
run: ./scripts/sign_tauri_macos.sh
- name: Upload desktop bundle artifacts
uses: actions/upload-artifact@v4
with:
name: control-center-desktop-macos
path: packages/control-center-desktop/src-tauri/target/release/bundle/
if-no-files-found: warn