diff options
Diffstat (limited to '.github/workflows/rust.yml')
| -rw-r--r-- | .github/workflows/rust.yml | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 00000000..b996c582 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,230 @@ +name: Rust + +on: + push: + branches: [main] + paths-ignore: + - "ui/**" + pull_request: + branches: [main] + paths-ignore: + - "ui/**" + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo build common + run: cargo build -p atuin-common --locked --release + + - name: Run cargo build client + run: cargo build -p atuin-client --locked --release + + - name: Run cargo build server + run: cargo build -p atuin-server --locked --release + + - name: Run cargo build main + run: cargo build --all --locked --release + + cross-compile: + strategy: + matrix: + # There was an attempt to make cross-compiles also work on FreeBSD, but that failed with: + # + # warning: libelf.so.2, needed by <...>/libkvm.so, not found (try using -rpath or -rpath-link) + target: [x86_64-unknown-illumos] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Install cross + uses: taiki-e/install-action@v2 + with: + tool: cross + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ matrix.target }}-cross-compile-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cross build common + run: cross build -p atuin-common --locked --target ${{ matrix.target }} + + - name: Run cross build client + run: cross build -p atuin-client --locked --target ${{ matrix.target }} + + - name: Run cross build server + run: cross build -p atuin-server --locked --target ${{ matrix.target }} + + - name: Run cross build main + run: | + cross build --all --locked --target ${{ matrix.target }} + + unit-test: + strategy: + matrix: + os: [ubuntu-latest, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + + - uses: taiki-e/install-action@v2 + name: Install nextest + with: + tool: cargo-nextest + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo test + run: cargo nextest run --lib --bins + + check: + strategy: + matrix: + os: [ubuntu-latest, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo check (all features) + run: cargo check --all-features --workspace + + - name: Run cargo check (no features) + run: cargo check --no-default-features --workspace + + - name: Run cargo check (sync) + run: cargo check --no-default-features --features sync --workspace + + - name: Run cargo check (server) + run: cargo check -p atuin-server + + - name: Run cargo check (client only) + run: cargo check --no-default-features --features client --workspace + + integration-test: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_USER: atuin + POSTGRES_PASSWORD: pass + POSTGRES_DB: atuin + ports: + - 5432:5432 + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + + - uses: taiki-e/install-action@v2 + name: Install nextest + with: + tool: cargo-nextest + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo test + run: cargo nextest run --test '*' + env: + ATUIN_DB_URI: postgres://atuin:pass@localhost:5432/atuin + + clippy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + + - name: Install latest rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + components: clippy + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run clippy + run: cargo clippy -- -D warnings -D clippy::redundant_clone + + format: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + + - name: Install latest rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + components: rustfmt + + - name: Format + run: cargo fmt -- --check |
