name: Lint & Build on: push: branches: [ main, master ] pull_request: jobs: lint: name: Linting runs-on: ubuntu-latest steps: - name: Checkout Project uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: Install cargo sort uses: taiki-e/install-action@v2 with: tool: cargo-sort - name: Install cargo machete uses: taiki-e/install-action@v2 with: tool: cargo-machete - name: Check formatting run: cargo fmt --check - name: Check import sorting run: cargo sort --workspace --grouped --check --check-format - name: Check for unused dependencies run: cargo machete - name: Clippy for Linux x86 (GNU ONLY) run: | cargo clippy --target x86_64-unknown-linux-gnu -- -D warnings build: name: Build runs-on: ubuntu-latest needs: lint steps: - name: Checkout Project uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: targets: x86_64-unknown-linux-musl - name: Build for Linux x86 (GNU and MUSL) run: | cargo build --target x86_64-unknown-linux-gnu --release --locked cargo build --target x86_64-unknown-linux-musl --release --locked cross_build_linux: name: Cross-Build-Linux runs-on: ubuntu-latest needs: [lint, build] steps: - name: Checkout Project uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: Crosscompile for aarch64 linux, windows, macos uses: zijiren233/cargo-cross@v1 with: targets: | aarch64-unknown-linux-musl aarch64-unknown-linux-gnu cross_build_windows: name: Cross-Build-Windows runs-on: ubuntu-latest needs: [lint, build] steps: - name: Checkout Project uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: Crosscompile for targets uses: zijiren233/cargo-cross@v1 with: targets: | x86_64-pc-windows-gnu cross_Build_osx: name: Cross-Build-MacOS runs-on: ubuntu-latest needs: [lint, build] steps: - name: Checkout Project uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable # CrossCheck for MacOS first, which checks for a valid rust project on MacOS - name: Crosscheck for MacOS uses: zijiren233/cargo-cross@v1 with: command: check targets: | aarch64-apple-darwin # MacOS is known for having a problematic linker step from linux, we should not fail the job if this fails, but this Workflow ALSO has the seperate cargo check - name: Crosscompile for targets continue-on-error: true uses: zijiren233/cargo-cross@v1 with: targets: | aarch64-apple-darwin test_linux: name: Test runs-on: ubuntu-latest needs: [build, lint] steps: - name: Checkout Project uses: actions/checkout@v5 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: targets: x86_64-unknown-linux-musl - name: Test for Linux x86 (GNU and MUSL) run: | cargo test --target x86_64-unknown-linux-gnu --release --locked cargo test --target x86_64-unknown-linux-musl --release --locked