--- name: Rust "on": workflow_call: defaults: run: working-directory: ./rust permissions: contents: 'read' id-token: 'write' jobs: static-analysis: name: static-analysis-${{ matrix.runs-on }} strategy: fail-fast: false matrix: # TODO: https://github.com/rust-lang/cargo/issues/5220 include: - runs-on: ubuntu-22.04 - runs-on: macos-14 - runs-on: windows-2022 runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-rust id: setup-rust - uses: ./.github/actions/setup-tauri - run: cargo fmt -- --check - run: cargo doc --all-features --no-deps --document-private-items ${{ steps.setup-rust.outputs.packages }} env: RUSTDOCFLAGS: "-D warnings" name: "cargo doc" shell: bash - run: cargo clippy --all-targets --all-features ${{ steps.setup-rust.outputs.packages }} -- -D warnings name: "cargo clippy" shell: bash - uses: taiki-e/install-action@cargo-udeps - run: | rustup install nightly-2024-03-26 --profile minimal # The exact nightly version doesn't matter, just pin a random one. cargo +nightly-2024-03-26 udeps --all-targets --all-features ${{ steps.setup-rust.outputs.packages }} name: Check for unused dependencies test: name: test-${{ matrix.runs-on }} strategy: fail-fast: false matrix: # TODO: https://github.com/rust-lang/cargo/issues/5220 include: - runs-on: ubuntu-20.04 - runs-on: ubuntu-22.04 - runs-on: macos-12 - runs-on: macos-13 - runs-on: macos-14 - runs-on: windows-2019 - runs-on: windows-2022 runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-rust id: setup-rust - uses: ./.github/actions/setup-tauri - run: cargo test --all-features ${{ steps.setup-rust.outputs.packages }} -- --include-ignored env: # # Needed to create tunnel interfaces in unit tests CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER: "sudo --preserve-env" RUST_BACKTRACE: full name: "cargo test" shell: bash # Runs the Windows client smoke test, built in debug mode. We can't run it in release # mode because of a known issue: gui-smoke-test: name: gui-smoke-test-${{ matrix.runs-on }} strategy: fail-fast: false matrix: include: - runs-on: ubuntu-20.04 # Broken on 22.04 - runs-on: ubuntu-22.04 - runs-on: windows-2019 - runs-on: windows-2022 runs-on: ${{ matrix.runs-on }} defaults: run: # Must be in this dir for `pnpm` to work working-directory: ./rust/gui-client env: CONNLIB_LOG_UPLOAD_INTERVAL_SECS: 300 # The Windows client ignores RUST_LOG because it uses a settings file instead steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-node - uses: ./.github/actions/setup-rust with: cache_backend: 'github' # Cache needs to be scoped per OS version key: ${{ matrix.runs-on }}-${{ runner.arch }} - uses: ./.github/actions/setup-tauri - name: pnpm install run: | pnpm install cp "node_modules/flowbite/dist/flowbite.min.js" "src/" - name: Compile TypeScript run: pnpm tsc - name: Compile Tailwind run: pnpm tailwindcss -i src/input.css -o src/output.css - name: Build client run: cargo build -p firezone-gui-client - name: Run smoke tests (Linux) if: ${{ runner.os == 'Linux' }} run: bash ../../scripts/tests/smoke-test-gui-linux.sh - name: Run smoke tests (Windows) if: ${{ runner.os == 'Windows' }} run: bash ../../scripts/tests/smoke-test-gui-windows.sh