fs_at 0.2.1

Implementation of 'at' functions for various platforms
Documentation
name: Rust

permissions:
  contents: read #  to fetch code (actions/checkout)

on:
  # test renovate branches even without a PR
  push:
    branches:
      - main
      - renovate/*
  pull_request:
    branches: [main]
jobs:
  build-docker:
    runs-on: ubuntu-latest
    continue-on-error: ${{ matrix.channel == 'nightly' }}
    strategy:
      fail-fast: true
      matrix:
        channel: ["1.71", stable, nightly]
        target: [x86_64-unknown-freebsd]
        include:
          - target: x86_64-unknown-freebsd
            run_tests: NO
    env:
      RUST_BACKTRACE: 1
      CROSS_CONFIG: .github/cross.toml
    steps:
      - uses: actions/checkout@v4
      - name: Set environment variables appropriately for the build
        run: |
          echo "$HOME/.cargo/bin" >> $GITHUB_PATH
      - name: setup cache
        uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: "true"
      - name: Install Rustup
        run: |
          curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain=none --profile=minimal -y
      - name: Install cross
        run: |
          cargo install cross --git https://github.com/cross-rs/cross
      - name: Build within docker
        run: |
          cross build --all-targets --target ${{matrix.target}}
      - name: Test within docker
        if: ${{matrix.run_tests == 'YES'}}
        run: |
          cross test --target ${{matrix.target}}

  build-unix:
    runs-on: ${{ matrix.os }}-latest
    continue-on-error: ${{ matrix.channel == 'nightly' }}
    strategy:
      fail-fast: true
      matrix:
        channel: ["1.71", stable, nightly]
        os: [ubuntu, macos]
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: rustup default
        run: rustup default ${{ matrix.channel }}
      - name: rustup components
        run: rustup component add clippy
      - name: setup cache
        uses: Swatinem/rust-cache@v2
        with:
          # The prefix cache key, this can be changed to start a new cache manually.
          # default: "v0-rust"
          # prefix-key: ""

          # A cache key that is used instead of the automatic `job`-based key,
          # and is stable over multiple jobs.
          # default: empty
          # shared-key: ""

          # An additional cache key that is added alongside the automatic `job`-based
          # cache key and can be used to further differentiate jobs.
          # default: empty
          # key: ""

          # A whitespace separated list of env-var *prefixes* who's value contributes
          # to the environment cache key.
          # The env-vars are matched by *prefix*, so the default `RUST` var will
          # match all of `RUSTC`, `RUSTUP_*`, `RUSTFLAGS`, `RUSTDOC_*`, etc.
          # default: "CARGO CC CFLAGS CXX CMAKE RUST"
          # env-vars: ""

          # The cargo workspaces and target directory configuration.
          # These entries are separated by newlines and have the form
          # `$workspace -> $target`. The `$target` part is treated as a directory
          # relative to the `$workspace` and defaults to "target" if not explicitly given.
          # default: ". -> target"
          # workspaces: ""

          # Additional non workspace directories to be cached, separated by newlines.
          # cache-directories: ""

          # Determines whether workspace `target` directories are cached.
          # If `false`, only the cargo registry will be cached.
          # default: "true"
          # cache-targets: ""

          # Determines if the cache should be saved even when the workflow has failed.
          # default: "false"
          cache-on-failure: "true"

          # Determiners whether the cache should be saved.
          # If `false`, the cache is only restored.
          # Useful for jobs where the matrix is additive e.g. additional Cargo features.
          # default: "true"
          # save-if: ""

      - name: build
        run: cargo build --verbose --all-targets
      - name: test
        run: cargo test
      - name: Lint
        # unknown-lints permits fixing lints on nightly without breaking stable
        run: cargo clippy --all-targets --no-deps -- -D warnings -A unknown-lints
  build-windows:
    runs-on: windows-latest
    continue-on-error: ${{ matrix.channel == 'nightly' }}
    strategy:
      fail-fast: true
      matrix:
        arch: [i686, x86_64, aarch64]
        # "gnu" on windows isn't particularly interesting/different but very slow in
        # CI. Skip unless/until we have a bug report where it matters.
        variant: [msvc]
        channel: ["1.71", stable, nightly]
        exclude:
          - arch: aarch64
            variant: gnu
          - arch: i686
            variant: gnu
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: install msys2
        run: choco install msys2
        if: matrix.variant == 'gnu'
      - name: rustup default
        run: rustup default ${{ matrix.channel }}
      - name: add target
        run: rustup target add ${{ matrix.arch }}-pc-windows-${{ matrix.variant }}
      - name: rustup components
        run: rustup component add clippy
      - name: setup cache
        uses: Swatinem/rust-cache@v2
        with:
          # The prefix cache key, this can be changed to start a new cache manually.
          # default: "v0-rust"
          # prefix-key: ""

          # A cache key that is used instead of the automatic `job`-based key,
          # and is stable over multiple jobs.
          # default: empty
          # shared-key: ""

          # An additional cache key that is added alongside the automatic `job`-based
          # cache key and can be used to further differentiate jobs.
          # default: empty
          # key: ""

          # A whitespace separated list of env-var *prefixes* who's value contributes
          # to the environment cache key.
          # The env-vars are matched by *prefix*, so the default `RUST` var will
          # match all of `RUSTC`, `RUSTUP_*`, `RUSTFLAGS`, `RUSTDOC_*`, etc.
          # default: "CARGO CC CFLAGS CXX CMAKE RUST"
          # env-vars: ""

          # The cargo workspaces and target directory configuration.
          # These entries are separated by newlines and have the form
          # `$workspace -> $target`. The `$target` part is treated as a directory
          # relative to the `$workspace` and defaults to "target" if not explicitly given.
          # default: ". -> target"
          # workspaces: ""

          # Additional non workspace directories to be cached, separated by newlines.
          # cache-directories: ""

          # Determines whether workspace `target` directories are cached.
          # If `false`, only the cargo registry will be cached.
          # default: "true"
          # cache-targets: ""

          # Determines if the cache should be saved even when the workflow has failed.
          # default: "false"
          cache-on-failure: "true"

          # Determiners whether the cache should be saved.
          # If `false`, the cache is only restored.
          # Useful for jobs where the matrix is additive e.g. additional Cargo features.
          # default: "true"
          # save-if: ""

      - name: Build
        run: cargo build --verbose --target ${{ matrix.arch }}-pc-windows-${{ matrix.variant }}
      - name: Run tests (nightly)
        if: (matrix.arch != 'aarch64') && (matrix.channel == 'nightly')
        run: cargo test --verbose --target ${{ matrix.arch }}-pc-windows-${{ matrix.variant }}
      - name: Run tests
        if: (matrix.arch != 'aarch64') && (matrix.channel != 'nightly')
        run: cargo test --verbose --target ${{ matrix.arch }}-pc-windows-${{ matrix.variant }}
      - name: Lint
        # unknown-lints permits fixing lints on nightly without breaking stable
        run: cargo clippy --all-targets --no-deps -- -D warnings -A unknown-lints