name: Rust on: workflow_call: defaults: run: working-directory: ./rust permissions: contents: 'read' id-token: 'write' jobs: static-analysis: strategy: fail-fast: false matrix: runs-on: # We only need to run static analysis checks per OS family - ubuntu-22.04 - macos-13 - windows-2022 # TODO: https://github.com/rust-lang/cargo/issues/5220 include: - runs-on: ubuntu-22.04 packages: # Intentionally blank as a package catch-all linter - runs-on: macos-13 packages: -p connlib-client-apple - runs-on: windows-2022 packages: -p connlib-client-shared -p firezone-windows-client runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-rust - run: cargo fmt -- --check - run: | cargo doc --all-features --no-deps --document-private-items ${{ matrix.packages }} env: RUSTDOCFLAGS: "-D warnings" - run: | cargo clippy --all-targets --all-features ${{ matrix.packages }} -- -D warnings test: strategy: fail-fast: false matrix: # TODO: https://github.com/rust-lang/cargo/issues/5220 include: - runs-on: ubuntu-20.04 packages: -p firezone-linux-client -p firezone-gateway -p connlib-client-android - runs-on: ubuntu-22.04 packages: -p firezone-linux-client -p firezone-gateway -p connlib-client-android - runs-on: macos-12 packages: -p connlib-client-apple - runs-on: macos-13 packages: -p connlib-client-apple - runs-on: windows-2019 packages: -p firezone-windows-client -p connlib-client-shared - runs-on: windows-2022 packages: -p firezone-windows-client -p connlib-client-shared runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-rust - run: cargo test --all-features ${{ matrix.packages }} # This should be identical to `build-push-windows-release-artifacts` in `cd.yml` except for the Github permissions, needs tag, and uploading step build-tauri: runs-on: windows-2019 defaults: run: working-directory: ./rust strategy: fail-fast: false # The matrix is 1x1 to match the style of build-push-linux-release-artifacts # In the future we could try to cross-compile aarch64-windows here. matrix: name: - package: firezone-windows-client artifact: windows-client env: BINARY_DEST_PATH: ${{ matrix.name.artifact }} steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-node - uses: ./.github/actions/setup-rust with: targets: x86_64-pc-windows-msvc - name: Build release binaries run: | pnpm install -g @tauri-apps/cli # PNPM installs tauri-cli to somewhere in $PATH tauri build # Used for release artifact # In release mode the name comes from tauri.conf.json cp "target/release/Firezone Windows Client.exe" "${{ env.BINARY_DEST_PATH }}-x64.exe" cp "target/release/bundle/msi/*.msi" "${{ env.BINARY_DEST_PATH }}-x64.msi" Get-FileHash ${{ env.BINARY_DEST_PATH }}-x64.exe -Algorithm SHA256 | Select-Object Hash > ${{ env.BINARY_DEST_PATH }}-x64.exe.sha256sum.txt Get-FileHash ${{ env.BINARY_DEST_PATH }}-x64.msi -Algorithm SHA256 | Select-Object Hash > ${{ env.BINARY_DEST_PATH }}-x64.msi.sha256sum.txt - name: Save Windows client uses: actions/upload-artifact@v4 with: name: windows-client-x64 path: | ${{ github.workspace }}/rust/windows-client-x64.exe ${{ github.workspace }}/rust/windows-client-x64.exe.sha256sum.txt - name: Save Windows installer uses: actions/upload-artifact@v4 with: name: windows-client-x64-msi path: | ${{ github.workspace }}/rust/windows-client-x64.msi ${{ github.workspace }}/rust/windows-client-x64.msi.sha256sum.txt smoke-test-relay: runs-on: ubuntu-22.04 defaults: run: working-directory: ./rust/relay steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-rust - run: ./run_smoke_test.sh