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: Fetch tickerforge-spec (patch target for bundled spec)
run: |
BRANCH="${{ github.head_ref || github.ref_name }}"
git clone --depth 1 --branch "$BRANCH" https://github.com/mesias/tickerforge-spec.git spec || \
git clone --depth 1 --branch develop https://github.com/mesias/tickerforge-spec.git spec || \
git clone --depth 1 --branch main https://github.com/mesias/tickerforge-spec.git 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: Fetch tickerforge-spec
run: |
BRANCH="${{ github.head_ref || github.ref_name }}"
git clone --depth 1 --branch "$BRANCH" https://github.com/mesias/tickerforge-spec.git spec || \
git clone --depth 1 --branch develop https://github.com/mesias/tickerforge-spec.git spec || \
git clone --depth 1 --branch main https://github.com/mesias/tickerforge-spec.git 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: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Tests and coverage (lcov, min 80% lines)
run: cargo llvm-cov --all-features -p tickerforge --lcov --output-path lcov.info --fail-under-lines 80
- name: Cobertura XML coverage report
run: cargo llvm-cov report -p tickerforge --cobertura --output-path cobertura.xml
- name: Upload Cobertura XML (coverage)
uses: actions/upload-artifact@v4
with:
name: coverage-cobertura-xml
path: cobertura.xml
if-no-files-found: error
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: lcov.info,cobertura.xml
fail_ci_if_error: false