name: CI on: push: branches: [ main, dev ] pull_request: branches: [ main, dev ] env: CARGO_TERM_COLOR: always jobs: test: runs-on: ubuntu-latest services: redis: image: redis ports: - 6379:6379 steps: - uses: actions/checkout@v2 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true components: rustfmt, clippy - name: Cache dependencies uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo- - name: Build run: cargo build --verbose - name: Install cargo-llvm-cov run: | mkdir -p $HOME/.cargo/bin curl -LO https://github.com/taiki-e/cargo-llvm-cov/releases/latest/download/cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz tar xf cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz chmod +x cargo-llvm-cov mv cargo-llvm-cov $HOME/.cargo/bin/ echo "$HOME/.cargo/bin" >> $GITHUB_PATH rm cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz - name: Run tests run: cargo test --verbose --tests - name: Generate code coverage run: | cargo llvm-cov --lcov --output-path lcov.info cargo llvm-cov --html - name: Extract Coverage Percentage id: coverage run: | COVERAGE=$(cargo llvm-cov --summary | grep -oP 'coverage: \K[0-9.]+%' || echo "0%") echo "total_coverage=$COVERAGE" >> $GITHUB_OUTPUT echo "Coverage: $COVERAGE" - name: Create Coverage Badge run: | COVERAGE=$(cargo llvm-cov --summary | grep -oP 'coverage: \K[0-9.]+' || echo "0") echo "![Coverage](https://img.shields.io/badge/coverage-${COVERAGE}%25-brightgreen)" > coverage-badge.md echo "Coverage badge created: ${COVERAGE}%" continue-on-error: true - name: Upload coverage HTML uses: actions/upload-artifact@v3 with: name: code-coverage path: target/llvm-cov/html - name: Upload LCOV report uses: actions/upload-artifact@v3 with: name: lcov-report path: lcov.info - name: Upload Coverage Badge uses: actions/upload-artifact@v3 with: name: coverage-badge path: coverage-badge.md lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true components: rustfmt, clippy - name: Cache dependencies uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo- - name: Check formatting run: cargo fmt --all -- --check - name: Clippy run: cargo clippy -- -D warnings