diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 20a6baed..4a4b7a55 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,6 +3,12 @@ on: push: branches: - master +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always name: CI @@ -11,14 +17,14 @@ jobs: name: check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install Protoc uses: arduino/setup-protoc@v1 with: version: '3.x' repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Rust Cache - uses: Swatinem/rust-cache@v1.4.0 + uses: Swatinem/rust-cache@v2 - name: make check run: make check - name: Catch unexpected changes in the generated code @@ -31,14 +37,16 @@ jobs: CARGO_INCREMENTAL: 0 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install Protoc uses: arduino/setup-protoc@v1 with: version: '3.x' repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Rust Cache - uses: Swatinem/rust-cache@v1.4.0 + uses: Swatinem/rust-cache@v2 + - name: Install latest nextest release + uses: taiki-e/install-action@nextest - name: unit test run: make unit-test @@ -48,14 +56,14 @@ jobs: CARGO_INCREMENTAL: 0 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install Protoc uses: arduino/setup-protoc@v1 with: version: '3.x' repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Rust Cache - uses: Swatinem/rust-cache@v1.4.0 + uses: Swatinem/rust-cache@v2 - name: install tiup run: curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh - name: start tiup playground @@ -68,5 +76,7 @@ jobs: [[ "$(curl -I http://127.0.0.1:2379/pd/api/v1/regions 2>/dev/null | head -n 1 | cut -d$' ' -f2)" -ne "405" ]] || break sleep 1 done + - name: Install latest nextest release + uses: taiki-e/install-action@nextest - name: integration test run: MULTI_REGION=1 make integration-test diff --git a/Makefile b/Makefile index b57685a5..8014352d 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ check: generate cargo clippy --all-targets --features "${ALL_FEATURES}" -- -D clippy::all unit-test: generate - cargo test --all --no-default-features + cargo nextest run --all --no-default-features integration-test: generate cargo test txn_ --all ${INTEGRATION_TEST_ARGS} -- --nocapture diff --git a/README.md b/README.md index 0bb8917d..6f41a99b 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,11 @@ We welcome your contributions! Contributing code is great, we also appreciate fi ## Building and testing -We use the standard Cargo workflows, e.g., `cargo build` to build and `cargo test` to run unit tests. You will need to use a nightly Rust toolchain to build and run tests. +We use the standard Cargo workflows, e.g., `cargo build` to build and `cargo test/nextest` to run unit tests. You will need to use a nightly Rust toolchain to build and run tests. Could use [nextest](https://nexte.st/index.html) to speed up ut, install nextest first. + +``` +cargo install cargo-nextest --locked +``` Running integration tests or manually testing the client with a TiKV cluster is a little bit more involved. The easiest way is to use [TiUp](https://github.com/pingcap/tiup) (>= 1.5) to initialise a cluster on your local machine: @@ -131,7 +135,7 @@ PD_ADDRS="127.0.0.1:2379" cargo test --package tikv-client --test integration_te We use a standard GitHub PR workflow. We run CI on every PR and require all PRs to build without warnings (including clippy and Rustfmt warnings), pass tests, have a DCO sign-off (use `-s` when you commit, the DCO bot will guide you through completing the DCO agreement for your first PR), and have at least one review. If any of this is difficult for you, don't worry about it and ask on the PR. -To run CI-like tests locally, we recommend you run `cargo clippy`, `cargo test`, and `cargo fmt` before submitting your PR. See above for running integration tests, but you probably won't need to worry about this for your first few PRs. +To run CI-like tests locally, we recommend you run `cargo clippy`, `cargo test/nextest run`, and `cargo fmt` before submitting your PR. See above for running integration tests, but you probably won't need to worry about this for your first few PRs. Please follow PingCAP's [Rust style guide](https://pingcap.github.io/style-guide/rust/). All code PRs should include new tests or test cases.