tickerforge 0.1.5

Generate and parse derivatives tickers from tickerforge-spec (Rust).
Documentation
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