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

name: CI

env:
  CI_CARGO_MAKE_VERSION: 0.35.16

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        rust: ["1.65.0", "stable"]
        include:
          - os: ubuntu-latest
            triple: x86_64-unknown-linux-musl
          - os: windows-latest
            triple: x86_64-pc-windows-msvc
          - os: macos-latest
            triple: x86_64-apple-darwin
    runs-on: ${{ matrix.os }}
    steps:
      - uses: hecrj/setup-rust-action@50a120e4d34903c2c1383dec0e9b1d349a9cc2b1
        with:
          rust-version: ${{ matrix.rust }}
          components: rustfmt,clippy
      - uses: actions/checkout@v3
      - name: Install cargo-make on Linux or macOS
        if: ${{ runner.os != 'windows' }}
        shell: bash
        run: |
          curl -LO 'https://github.com/sagiegurari/cargo-make/releases/download/${{ env.CI_CARGO_MAKE_VERSION }}/cargo-make-v${{ env.CI_CARGO_MAKE_VERSION }}-${{ matrix.triple }}.zip'
          unzip 'cargo-make-v${{ env.CI_CARGO_MAKE_VERSION }}-${{ matrix.triple }}.zip'
          cp 'cargo-make-v${{ env.CI_CARGO_MAKE_VERSION }}-${{ matrix.triple }}/cargo-make' ~/.cargo/bin/
          cargo make --version
      - name: Install cargo-make on Windows
        if: ${{ runner.os == 'windows' }}
        shell: bash
        run: |
          # `cargo-make-v0.35.16-{target}/` directory is created on Linux and macOS, but it is not creatd on Windows.
          mkdir cargo-make-temporary
          cd cargo-make-temporary
          curl -LO 'https://github.com/sagiegurari/cargo-make/releases/download/${{ env.CI_CARGO_MAKE_VERSION }}/cargo-make-v${{ env.CI_CARGO_MAKE_VERSION }}-${{ matrix.triple }}.zip'
          unzip 'cargo-make-v${{ env.CI_CARGO_MAKE_VERSION }}-${{ matrix.triple }}.zip'
          cp cargo-make.exe ~/.cargo/bin/
          cd ..
          cargo make --version
      - name: "Format / Build / Test"
        run: cargo make ci
        env:
          RUST_BACKTRACE: full

  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        if: github.event_name != 'pull_request'
        uses: actions/checkout@v3
      - name: Checkout
        if: github.event_name == 'pull_request'
        uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: "Check conventional commits"
        uses: crate-ci/committed@master
        with:
          args: "-vv"
          commits: "HEAD"
      - name: "Check typos"
        uses: crate-ci/typos@master
