name: Rust

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@v3
      - name: Cache Ruby
        id: cache-ruby
        uses: actions/cache@v4
        with:
          path: rubies
          key: ${{ runner.os }}-ruby
      - name: Install Ruby
        if: steps.cache-ruby.outputs.cache-hit != 'true'
        env:
          CC: clang
        run: |
          url="https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.4.tar.gz"
          prefix=`pwd`/rubies/ruby-3.4
          mkdir rubies
          mkdir ruby_src
          curl -sSL $url | tar -xz
          cd ruby-3.4.4
          mkdir build
          cd build
          ../configure --without-shared --prefix=$prefix
          make install
      - name: Add Ruby to PATH
        run: |
          prefix=`pwd`/rubies/ruby-3.4
          echo $prefix/bin >> $GITHUB_PATH
      - name: Clippy
        run: cargo clippy --all-features --verbose -- -D warnings
      - name: Build
        run: cargo build --all-features --verbose
      - name: Run tests
        run: cargo test --all-features --verbose
