hgvs 0.20.2

Port of biocommons/hgvs to Rust
Documentation
name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  Formatting:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Install stable toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Check format
        run: cargo fmt --check

  Linting:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          lfs: true

      - name: Install stable toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - name: Lint with clippy
        run: cargo clippy --no-deps  # --all-targets --all-features

  Testing:
    needs: [Formatting, Linting]
    runs-on: ubuntu-latest

    strategy:
      matrix:
        include:
          - label: fast
          - label: full

    services:
      # The tests need a postgres server;  the data will be loaded later
      # after checkout.
      postgres:
        image: postgres
        env:
          POSTGRES_DB: uta
          POSTGRES_USER: uta_admin
          POSTGRES_PASSWORD: uta_admin
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          lfs: 'true'

      - name: Install host libraries
        run: sudo apt-get install -y libsqlite3-dev libsqlite3-0

      - name: Import test database.
        run: |
          set -euo pipefail
          zcat tests/data/data/uta_20210129-subset.pgd.gz \
          | psql -v ON_ERROR_STOP=1 -U uta_admin -h 0.0.0.0 -d uta
        shell: bash
        env:
          PGPASSWORD: uta_admin

      - name: Install stable toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: llvm-tools-preview  # needed for cargo llvm-cov

      - uses: Swatinem/rust-cache@v2.9.1

      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov

      - name: Run cargo-llvm-cov with fast tests
        run: cargo llvm-cov --lcov --output-path lcov.info -- --test-threads 1
        env:
          TEST_UTA_DATABASE_URL: postgres://uta_admin:uta_admin@0.0.0.0/uta
          TEST_UTA_DATABASE_SCHEMA: uta_20210129
          TEST_SEQREPO_CACHE_MODE: read
          TEST_SEQREPO_CACHE_PATH: tests/data/seqrepo_cache.fasta
        if: ${{ matrix.label == 'fast' }}

      - name: Run cargo-test with full tests
        run: "cargo test --release -- --include-ignored"
        env:
          TEST_UTA_DATABASE_URL: postgres://uta_admin:uta_admin@0.0.0.0/uta
          TEST_UTA_DATABASE_SCHEMA: uta_20210129
          TEST_SEQREPO_CACHE_MODE: read
          TEST_SEQREPO_CACHE_PATH: tests/data/seqrepo_cache.fasta
        if: ${{ matrix.label == 'full' }}

      - name: Codecov submission of fast test results
        uses: codecov/codecov-action@v6
        with:
          verbose: true
          token: ${{ secrets.CODECOV_TOKEN }}
        if: ${{ matrix.label == 'fast' }}