obsidian-export 25.3.0

Rust library and associated CLI program to export an Obsidian vault to regular Markdown.
Documentation
name: CI tests
on: [push]

jobs:
  populate-rust-cache:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - uses: ./.github/actions/setup-ci
        with:
          rust-cache-shared-key: "base"
      - run: cargo check --all-targets --all-features
        continue-on-error: true

  rust-jobs:
    name: ${{ matrix.job }}
    runs-on: ubuntu-latest
    needs: populate-rust-cache
    strategy:
      matrix:
        job:
          - rustup toolchain install nightly --profile minimal --component rustfmt && cargo +nightly fmt --all -- --check
          - cargo test --all-targets --all-features
          - cargo clippy --all-targets --all-features -- -D warning
      fail-fast: false
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - uses: ./.github/actions/setup-ci
        with:
          rust-cache-shared-key: "base"
      - run: ${{ matrix.job }}

  deny:
    name: ${{ matrix.job }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        job:
          - cargo deny --all-features check advisories
          - cargo deny --all-features check bans licenses sources
      fail-fast: false
    # Prevent sudden announcement of a new advisory from failing CI:
    continue-on-error: ${{ endsWith(matrix.job, 'check advisories') }}
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - uses: ./.github/actions/cargo-binstall
        with:
          binstall: "cargo-deny"
      - run: ${{ matrix.job }}

  pre-commit:
    name: Run pre-commit
    runs-on: ubuntu-latest
    needs: populate-rust-cache
    env:
      # These hooks are expensive and already run as dedicated jobs above
      SKIP: "rustfmt,tests,clippy"
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

      - uses: ./.github/actions/setup-ci
        with:
          rust-cache-shared-key: "base"

      - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
      - name: set PYVERSION
        run: echo "PYVERSION=$(python --version | tr ' ' '-')" >> $GITHUB_ENV

      - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
        with:
          path: ~/.cache/pre-commit
          # Changes to pre-commit-config.yaml may require the installation of
          # new binaries/scripts. When a cache hit occurs, changes to the cache
          # aren't persisted at the end of the run, so making the key dependent
          # on the configuration file ensures we always persist a complete cache.
          key: pre-commit-${{ env.PYVERSION }}-${{ hashFiles('.pre-commit-config.yaml') }}

      - run: pip install pre-commit
      - run: pre-commit run --all --color=always --show-diff-on-failure

  test-windows:
    name: Test on Windows
    runs-on: windows-latest
    steps:
      - run: git config --system core.autocrlf false && git config --system core.eol lf
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - uses: ./.github/actions/setup-ci
      - run: cargo test

  coverage:
    name: Code coverage
    runs-on: ubuntu-latest
    needs: populate-rust-cache
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - uses: ./.github/actions/setup-ci
      - uses: ./.github/actions/cargo-binstall
        with:
          binstall: "cargo-tarpaulin"
      - run: cargo tarpaulin --out Html
      - uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
        with:
          name: tarpaulin-report
          path: tarpaulin-report.html