CI Nightly #37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |