name: Rust CI on: workflow_call: jobs: lint: name: Lint Rust Code runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 with: workspaces: tty-fwd - name: Check formatting working-directory: tty-fwd run: cargo fmt -- --check - name: Run Clippy working-directory: tty-fwd run: cargo clippy -- -D warnings build-and-test: name: Build and Test (${{ matrix.name }}) needs: lint strategy: matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-gnu name: Linux x86_64 binary-name: tty-fwd - os: macos-latest target: x86_64-apple-darwin name: macOS x86_64 binary-name: tty-fwd - os: macos-latest target: aarch64-apple-darwin name: macOS ARM64 binary-name: tty-fwd runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 with: workspaces: tty-fwd key: ${{ matrix.target }} - name: Build working-directory: tty-fwd run: cargo build --release --target ${{ matrix.target }} - name: Run tests # Only run tests on native architectures if: matrix.target == 'x86_64-unknown-linux-gnu' || matrix.target == 'x86_64-apple-darwin' || matrix.target == 'x86_64-pc-windows-msvc' working-directory: tty-fwd run: cargo test --release - name: Upload binary uses: actions/upload-artifact@v4 with: name: rust-${{ matrix.target }} path: tty-fwd/target/${{ matrix.target }}/release/${{ matrix.binary-name }} coverage: name: Code Coverage runs-on: ubuntu-latest needs: lint steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: Install tarpaulin run: cargo install cargo-tarpaulin - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 with: workspaces: tty-fwd - name: Run coverage working-directory: tty-fwd run: cargo tarpaulin --verbose --out Xml - name: Upload coverage reports uses: codecov/codecov-action@v4 with: file: ./tty-fwd/cobertura.xml flags: rust name: rust-coverage