Avoid retrying on IO errors when it’s unclear if the server received the request. #840
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Rust | |
on: | |
push: | |
branches: [ main, 0.*.x ] | |
pull_request: | |
branches: [] | |
env: | |
CARGO_TERM_COLOR: always | |
REDIS_RS_REDIS_JSON_PATH: "/tmp/librejson.so" | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
timeout-minutes: 75 | |
strategy: | |
fail-fast: false | |
matrix: | |
redis: | |
- 6.2.13 | |
- 7.2.0 | |
rust: | |
- stable | |
- beta | |
- nightly | |
- 1.65.0 | |
steps: | |
- name: Cache redis | |
id: cache-redis | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/redis-cli | |
~/redis-server | |
key: ${{ runner.os }}-${{ matrix.redis }}-redis | |
- name: Cache RedisJSON | |
id: cache-redisjson | |
uses: actions/cache@v4 | |
with: | |
path: | | |
/tmp/librejson.so | |
key: ${{ runner.os }}-redisjson | |
- name: Install redis | |
if: steps.cache-redis.outputs.cache-hit != 'true' | |
run: | | |
sudo apt-get update | |
wget https://github.com/redis/redis/archive/${{ matrix.redis }}.tar.gz; | |
tar -xzvf ${{ matrix.redis }}.tar.gz; | |
pushd redis-${{ matrix.redis }} && BUILD_TLS=yes make && sudo mv src/redis-server src/redis-cli $HOME && popd; | |
echo $PATH | |
- name: set PATH | |
run: | | |
echo "$HOME" >> $GITHUB_PATH | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain/@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
components: rustfmt | |
- uses: Swatinem/rust-cache@v2 | |
- uses: actions/checkout@v4 | |
- name: Run tests | |
run: make test | |
- name: Checkout RedisJSON | |
if: steps.cache-redisjson.outputs.cache-hit != 'true' && matrix.redis != '6.2.13' | |
uses: actions/checkout@v4 | |
with: | |
repository: "RedisJSON/RedisJSON" | |
path: "./__ci/redis-json" | |
set-safe-directory: false | |
# When cargo is invoked, it'll go up many directories to see if it can find a workspace | |
# This will avoid this issue in what is admittedly a bit of a janky but still fully functional way | |
# | |
# 1. Copy the untouched file (into Cargo.toml.actual) | |
# 2. Exclude ./__ci/redis-json from the workspace | |
# (preventing it from being compiled as a workspace module) | |
# 3. Build RedisJSON | |
# 4. Move the built RedisJSON Module (librejson.so) to /tmp | |
# 5. Restore Cargo.toml to its untouched state | |
# 6. Remove the RedisJSON Source code so it doesn't interfere with tests | |
# | |
# This shouldn't cause issues in the future so long as no profiles or patches | |
# are applied to the workspace Cargo.toml file | |
- name: Compile RedisJSON | |
if: steps.cache-redisjson.outputs.cache-hit != 'true' && matrix.redis != '6.2.13' | |
run: | | |
cp ./Cargo.toml ./Cargo.toml.actual | |
echo $'\nexclude = [\"./__ci/redis-json\"]' >> Cargo.toml | |
cargo +stable build --release --manifest-path ./__ci/redis-json/Cargo.toml | |
mv ./__ci/redis-json/target/release/librejson.so /tmp/librejson.so | |
rm ./Cargo.toml; mv ./Cargo.toml.actual ./Cargo.toml | |
rm -rf ./__ci/redis-json | |
- name: Run module-specific tests | |
if: matrix.redis != '6.2.13' | |
run: make test-module | |
env: | |
REDIS_VERSION: ${{ matrix.redis }} | |
- name: Check features | |
run: | | |
cargo check --benches --all-features | |
cargo check --no-default-features --features tokio-comp | |
# Remove dev-dependencies so they do not enable features accidentally | |
# https://github.com/rust-lang/cargo/issues/4664 | |
sed -i '/dev-dependencies/,/dev-dependencies/d' Cargo.toml | |
cargo check --all-features | |
cargo check --no-default-features --features async-std-comp | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain/@master | |
with: | |
toolchain: stable | |
components: rustfmt, clippy | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo fmt --all -- --check | |
name: fmt | |
- run: cargo clippy --all-features --all-targets -- -D warnings | |
name: clippy | |
- name: doc | |
run: cargo doc --no-deps --document-private-items | |
env: | |
RUSTDOCFLAGS: -Dwarnings | |
benchmark: | |
if: ${{ github.event_name == 'pull_request' }} | |
runs-on: ubuntu-latest | |
env: | |
redis_ver: 7.0.0 | |
rust_ver: stable | |
steps: | |
- name: Cache redis | |
id: cache-redis | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/redis-cli | |
~/redis-server | |
key: ${{ runner.os }}-${{ env.redis_ver }}-redis | |
- name: Install redis | |
if: steps.cache-redis.outputs.cache-hit != 'true' | |
run: | | |
sudo apt-get update | |
wget https://github.com/redis/redis/archive/${{ env.redis_ver }}.tar.gz; | |
tar -xzvf ${{ env.redis_ver }}.tar.gz; | |
pushd redis-${{ env.redis_ver }} && BUILD_TLS=yes make && sudo mv src/redis-server src/redis-cli /usr/bin/ && popd; | |
echo $PATH | |
- name: set PATH | |
run: | | |
echo "$HOME" >> $GITHUB_PATH | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain/@master | |
with: | |
toolchain: ${{ env.rust_ver }} | |
- uses: Swatinem/rust-cache@v2 | |
- uses: actions/checkout@v4 | |
- name: Benchmark | |
run: | | |
cargo install critcmp | |
cargo bench --all-features -- --measurement-time 15 --save-baseline changes | |
git fetch | |
git checkout ${{ github.base_ref }} | |
cargo bench --all-features -- --measurement-time 15 --save-baseline base | |
critcmp base changes |