feat: Add Fibonacci module and update main function to compute Fibona… #10
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: Integration test for Rust | |
on: | |
push: | |
branches: main | |
paths: ['deny.toml', 'src/**', 'benches/**', 'Cargo.toml', 'Cargo.lock', '.github/workflows/integration-test.yml'] | |
pull_request: | |
branches: main | |
paths: ['deny.toml', 'src/**', 'benches/**', 'Cargo.toml', 'Cargo.lock', '.github/workflows/integration-test.yml'] | |
env: | |
MOLD_VERSION: 2.4.0 | |
CARGO_TERM_COLOR: always | |
jobs: | |
cargo_check: | |
name: Cargo Check | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
id: rust-toolchain | |
with: | |
toolchain: nightly | |
- name: Install cargo-make | |
uses: taiki-e/install-action@cargo-make | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- name: Run cargo make check | |
run: cargo make check | |
env: | |
RUST_BACKTRACE: full | |
cargo_fmt: | |
name: Cargo Format | |
needs: [cargo_check] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
id: rust-toolchain | |
with: | |
toolchain: nightly | |
components: rustfmt | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- name: Check formatting | |
run: cargo fmt -- --check | |
- name: Check documentation | |
run: cargo doc --no-deps --all-features | |
- name: Check typos | |
uses: crate-ci/typos@master | |
cargo_clippy: | |
name: Cargo Clippy | |
needs: [cargo_check] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
id: rust-toolchain | |
with: | |
toolchain: nightly | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- uses: rui314/setup-mold@v1 | |
with: | |
mold-version: ${{ env.MOLD_VERSION }} | |
- name: Add clippy | |
run: rustup component add clippy | |
- name: Run clippy | |
run: cargo clippy | |
cargo_test: | |
name: Cargo Test | |
needs: [cargo_fmt , cargo_clippy] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
id: rust-toolchain | |
with: | |
toolchain: nightly | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- uses: rui314/setup-mold@v1 | |
with: | |
mold-version: ${{ env.MOLD_VERSION }} | |
- name: cargo test | |
run: cargo test | |
cargo_mutants: # https://mutants.rs | |
name: Cargo Mutants | |
needs: [cargo_test] | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: write | |
continue-on-error: true | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
id: rust-toolchain | |
with: | |
toolchain: nightly | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- uses: taiki-e/install-action@v2 | |
name: Install cargo-mutants using install-action | |
with: | |
tool: cargo-mutants | |
- name: Run mutant tests | |
run: cargo mutants -vV --in-place | |
continue-on-error: true | |
- uses: mshick/add-pr-comment@v2 | |
if: always() | |
with: | |
message-path: mutants.out/missed.txt | |
cargo_coverage: | |
name: Cargo Coverage | |
needs: [cargo_test] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
id: rust-toolchain | |
with: | |
toolchain: nightly | |
components: llvm-tools | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- name: cargo install cargo-llvm-cov | |
uses: taiki-e/install-action@cargo-llvm-cov | |
- name: cargo llvm-cov | |
run: cargo llvm-cov --all-features --lcov --output-path lcov.info | |
env: | |
CARGO_HUSKY_DONT_INSTALL_HOOKS: true | |
- name: Upload to codecov.io | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: true | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
cargo_bench: | |
name: Cargo Bench | |
needs: [cargo_test] | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: write | |
env: | |
BENCHER_PROJECT: codingame-rust-template | |
BENCHER_TESTBED: ubuntu-latest | |
BENCHER_ADAPTER: rust | |
BENCHER_API_TOKEN: ${{ secrets.BENCHER_API_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: bencherdev/bencher@main | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- name: Dogfooding Benchmarks with Bencher | |
run: | | |
bencher run \ | |
--if-branch "$GITHUB_REF_NAME" \ | |
--else-if-branch "$GITHUB_BASE_REF" \ | |
--err \ | |
--github-actions ${{ secrets.GITHUB_TOKEN }} \ | |
"cargo bench" |