hltas 0.9.0

Reading and writing Half-Life TAS scripts (`.hltas`).
Documentation
name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '0 0 1 * *' # Monthly

jobs:
  build:
    strategy:
      fail-fast: false

      matrix:
        label:
          - Linux
          - Windows
          - macOS
        rust:
          - stable
          - beta

        include:
          - label: Linux
            os: ubuntu-20.04
            target: i686-unknown-linux-gnu

          - label: Windows
            os: windows-2019
            target: i686-pc-windows-msvc

          - label: macOS
            os: macOS-12

    name: ${{ matrix.rust }} - ${{ matrix.label }}
    runs-on: ${{ matrix.os }}

    steps:
    - uses: actions/checkout@v4
      with:
        show-progress: false

    - name: Install g++-multilib
      if: matrix.os == 'ubuntu-20.04'
      run: |
        sudo apt-get update
        sudo apt-get install g++-multilib

    - name: Install Rust
      uses: dtolnay/rust-toolchain@master
      with:
        toolchain: ${{ matrix.rust }}
        targets: ${{ matrix.target }}

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

    - name: Test the Rust crate
      run: cargo hack --feature-powerset test

    - name: Test the Rust-C++ bridge
      run: cargo test --package hltas-cpp-bridge

    - name: Test the Rust-C++ bridge on ${{ matrix.target }}
      if: matrix.target != ''
      run: cargo test --package hltas-cpp-bridge --target=${{ matrix.target }}

    - name: Generate the C++ build system
      run: |
        mkdir build
        cd build
        cmake ..

    - name: Build the C++ library
      run: cmake --build build

    - name: Test the C++ library
      run: |
        cd build
        ctest --output-on-failure

  clippy:
    name: Clippy
    runs-on: ubuntu-20.04

    steps:
    - uses: actions/checkout@v4
      with:
        show-progress: false

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

    - name: Run clippy
      run: cargo clippy --all --all-targets

  rustfmt:
    name: Rustfmt
    runs-on: ubuntu-20.04

    steps:
    - uses: actions/checkout@v4
      with:
        show-progress: false

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

    - name: Run rustfmt
      run: cargo fmt --all -- --check