name: CI
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
check-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Verify VERSION matches Cargo.toml
run: python3 scripts/check_versions.py
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout tickerforge-rs
uses: actions/checkout@v4
with:
path: rs
- name: Checkout tickerforge-spec (patch target for bundled spec)
uses: actions/checkout@v4
with:
repository: mesias/tickerforge-spec
path: spec
- name: Workspace (patch git dep with sibling spec crate)
run: |
cat > Cargo.toml <<'EOF'
[workspace]
members = ["rs", "spec"]
resolver = "2"
[patch.crates-io]
tickerforge-spec-data = { path = "spec" }
EOF
- name: Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: cargo fmt
run: cargo fmt --all -- --check
- name: cargo clippy
run: cargo clippy --workspace --all-targets -- -D warnings
test:
runs-on: ubuntu-latest
steps:
- name: Checkout tickerforge-rs
uses: actions/checkout@v4
with:
path: rs
- name: Checkout tickerforge-spec
uses: actions/checkout@v4
with:
repository: mesias/tickerforge-spec
path: spec
- name: Workspace (patch git dep with sibling spec crate)
run: |
cat > Cargo.toml <<'EOF'
[workspace]
members = ["rs", "spec"]
resolver = "2"
[patch.crates-io]
tickerforge-spec-data = { path = "spec" }
EOF
- name: Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: cargo test
run: cargo test -p tickerforge
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Generate coverage
run: cargo llvm-cov --all-features -p tickerforge --lcov --output-path lcov.info
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: lcov.info
fail_ci_if_error: false