name: Rust Tests
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUSTFLAGS: "-C link-arg=-fuse-ld=mold"
CARGO_INCREMENTAL: "0"
jobs:
quality:
name: Formatting and Clippy
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v7
- name: Install quality-gate dependencies
run: sudo apt-get update && sudo apt-get install -y mold ripgrep
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.1
components: rustfmt, clippy
- name: Cache cargo build
uses: Swatinem/rust-cache@v2
with:
key: ubuntu-latest-quality
- name: Run quality gates
run: make lint
gui-quality:
name: GPUI Compile and Clippy
runs-on: macos-latest
env:
RUSTFLAGS: ""
steps:
- name: Check out repository
uses: actions/checkout@v7
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.1
components: clippy
- name: Install cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: nextest@0.9.114
- name: Cache cargo build
uses: Swatinem/rust-cache@v2
with:
key: macos-latest-gui
- name: Check GPUI package
run: cargo check -p stax-gui --locked
- name: Test GPUI package
run: cargo nextest run -p stax-gui --locked
- name: Lint GPUI package
run: |
cargo clippy -p stax-gui --all-targets --locked --no-deps -- \
-D warnings \
-A clippy::assertions_on_constants \
-A clippy::bool_assert_comparison \
-A clippy::clone_on_copy \
-A clippy::collapsible_if \
-A clippy::collapsible_match \
-A clippy::double_comparisons \
-A clippy::if_same_then_else \
-A clippy::items_after_test_module \
-A clippy::len_zero \
-A clippy::let_and_return \
-A clippy::manual_checked_ops \
-A clippy::needless_borrow \
-A clippy::needless_lifetimes \
-A clippy::too_many_arguments \
-A clippy::to_string_in_format_args \
-A clippy::type_complexity \
-A clippy::unnecessary_map_or \
-A clippy::unnecessary_sort_by \
-A clippy::useless_format \
-A clippy::useless_vec
- name: Test developer app bundle
run: make gui-app-test
- name: Build developer app bundle
run: make gui-app
- name: Test GUI release packaging
run: make gui-release-test
unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v7
- name: Install mold linker
run: sudo apt-get update && sudo apt-get install -y mold
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.1
- name: Install cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: nextest@0.9.114
- name: Cache cargo build
uses: Swatinem/rust-cache@v2
with:
key: ubuntu-latest-test-container
- name: Run unit tests
env:
RUST_MIN_STACK: 4194304
run: cargo nextest run --lib --bins --cargo-profile test-container
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v7
- name: Install mold linker
run: sudo apt-get update && sudo apt-get install -y mold
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.1
- name: Install cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: nextest@0.9.114
- name: Cache cargo build
uses: Swatinem/rust-cache@v2
with:
key: ubuntu-latest-test-container
- name: Run integration tests
env:
RUST_MIN_STACK: 4194304
run: cargo nextest run --tests --cargo-profile test-container