name: CI on: push: branches: - main pull_request: branches: - main merge_group: branches: - main workflow_dispatch: jobs: changes: runs-on: ubuntu-latest outputs: docs-only: ${{ steps.filter.outputs.docs-only }} code: ${{ steps.filter.outputs.code }} steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Check for file changes uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # pin@v3 id: filter with: filters: | docs-only: - 'documentation/**' code: - '!documentation/**' rust-format: name: Check Rust Code Format runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - name: Run cargo fmt run: cargo fmt --check rust-build-and-test: name: Build and Test Rust Project runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - name: Install Dependencies run: | sudo apt update -y sudo apt install -y libdbus-1-dev gnome-keyring libxcb1-dev - name: Cache Cargo artifacts uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 - name: Build and Test run: | gnome-keyring-daemon --components=secrets --daemonize --unlock <<< 'foobar' export CARGO_INCREMENTAL=0 cargo test -- --skip scenario_tests::scenarios::tests cargo test --jobs 1 scenario_tests::scenarios::tests working-directory: crates env: RUST_MIN_STACK: 8388608 rust-build-windows: name: Build Rust Project on Windows runs-on: windows-latest if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Cache Cargo artifacts uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 with: key: windows-ci - name: Setup Rust shell: bash run: | rustup show rustup target add x86_64-pc-windows-msvc - name: Build run: cargo build --target x86_64-pc-windows-msvc env: CARGO_INCREMENTAL: "0" rust-msrv: name: Check MSRV runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Read MSRV from Cargo.toml id: msrv run: | msrv=$(sed -n 's/^rust-version = "\(.*\)"$/\1/p' Cargo.toml) if [ -z "$msrv" ]; then echo "Could not find rust-version in workspace Cargo.toml" >&2 exit 1 fi echo "msrv=$msrv" >> "$GITHUB_OUTPUT" echo "MSRV: $msrv" - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1 with: toolchain: ${{ steps.msrv.outputs.msrv }} - name: Install Dependencies run: | sudo apt update -y sudo apt install -y libdbus-1-dev libxcb1-dev - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 with: key: msrv - name: Check with MSRV toolchain run: cargo check --workspace --locked --all-targets env: CARGO_INCREMENTAL: "0" rust-lint: name: Lint Rust Code runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 - name: Lint run: | source ./bin/activate-hermit # use the non-hermit rust toolchain because the rust-cache action does not # play nicely with hermit-managed rust hermit uninstall rustup export CARGO_INCREMENTAL=0 cargo clippy --workspace --all-targets --exclude v8 -- -D warnings schema-check: name: Check Generated Schemas are Up-to-Date runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1.16.1 - name: Install Dependencies run: | sudo apt update -y sudo apt install -y libdbus-1-dev libxcb1-dev - name: Cache Cargo artifacts uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 - name: Install Node.js Dependencies run: | source ./bin/activate-hermit cd ui/desktop && pnpm install --frozen-lockfile cd ../sdk && pnpm install --frozen-lockfile - name: Check OpenAPI Schema is Up-to-Date run: | source ./bin/activate-hermit hermit uninstall rustup just check-openapi-schema - name: Check H5 OpenAPI Schema is Up-to-Date run: | source ./bin/activate-hermit just check-h5-openapi-schema - name: Check ACP Schema is Up-to-Date run: | source ./bin/activate-hermit just check-acp-schema - name: Test ACP Client SDK run: | source ./bin/activate-hermit cd ui/sdk pnpm test pnpm run typecheck:test desktop-lint: name: Test and Lint Electron Desktop App runs-on: macos-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # Temporarily disabled due to GitHub Actions bug on macOS runners # https://github.com/actions/runner-images/issues/13341 # https://github.com/actions/runner/issues/4134 # - name: Cache pnpm dependencies # uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2 # with: # path: | # ui/desktop/node_modules # .hermit/node/cache # key: ci-pnpm-cache-v1-${{ runner.os }}-${{ hashFiles('ui/pnpm-lock.yaml') }} # restore-keys: | # ci-pnpm-cache-v1-${{ runner.os }}- - name: Install Dependencies run: source ../../bin/activate-hermit && pnpm install --frozen-lockfile working-directory: ui/desktop - name: Run Lint run: source ../../bin/activate-hermit && pnpm run lint:check working-directory: ui/desktop - name: Run Tests run: source ../../bin/activate-hermit && pnpm run test:run working-directory: ui/desktop h5-plaza: name: H5 Plaza Tests and Build runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request' services: mysql: image: mysql:8.0 env: MYSQL_ROOT_PASSWORD: plaza_test MYSQL_DATABASE: plaza_test ports: - 3306:3306 options: >- --health-cmd="mysqladmin ping -h localhost -uroot -pplaza_test" --health-interval=10s --health-timeout=5s --health-retries=10 steps: - name: Checkout Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install Dependencies run: | source ./bin/activate-hermit cd ui/plaza && pnpm install --frozen-lockfile cd ../ops && pnpm install --frozen-lockfile - name: Plaza unit tests run: | source ./bin/activate-hermit cd ui/h5 node --test plaza-*.test.mjs env: MYSQL_HOST: 127.0.0.1 MYSQL_PORT: 3306 MYSQL_USER: root MYSQL_PASSWORD: plaza_test MYSQL_DATABASE: plaza_test - name: Build Plaza and Ops frontends run: | source ./bin/activate-hermit cd ui/plaza && pnpm build cd ../ops && pnpm build - name: Check H5 OpenAPI includes Plaza routes run: | source ./bin/activate-hermit just check-h5-openapi-schema