--- 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 timeout-minutes: 5 - uses: taiki-e/install-action@cargo-udeps - run: | rustup install --no-self-update 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 - 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 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" PROPTEST_VERBOSE: 0 # Otherwise the output is very long. CARGO_PROFILE_TEST_OPT_LEVEL: 1 # Otherwise proptests take forever. name: "cargo test" shell: bash # Runs the Tauri 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 # 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 - uses: ./.github/actions/setup-tauri timeout-minutes: 5 with: runtime: true - 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 - uses: taiki-e/install-action@v2 with: tool: dump_syms,minidump-stackwalk - name: Run smoke test working-directory: ./rust run: cargo run -p gui-smoke-test headless-client: name: headless-client-${{ matrix.test }}-${{ matrix.runs-on }} strategy: fail-fast: false matrix: # TODO: Add Windows as part of issue #3782 runs-on: [ubuntu-20.04, ubuntu-22.04] test: [linux-group, token-path] runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-rust - uses: ./.github/actions/setup-tauri timeout-minutes: 5 - run: scripts/tests/${{ matrix.test }}.sh name: "test script" shell: bash working-directory: ./