index : static-web-server.git

ascending towards madness

name: devel
on:
  pull_request:
  push:
    branches:
    - master
    - staging
    - trying
  schedule:
  - cron: '30 01 * * *' # Every day at 01:30 UTC

jobs:
  test:
    name: test
    runs-on: ${{ matrix.os }}
    env:
      CARGO_BIN: cargo
      # When CARGO_BIN is set to CROSS, this is set to `--target matrix.target`
      TARGET_FLAGS: ""
      # When CARGO_BIN is set to CROSS, TARGET_DIR includes matrix.target
      TARGET_DIR: ./target
      # Emit backtraces on panics
      RUST_BACKTRACE: 1
      # Skip tests
      SKIP_TESTS: ""
    strategy:
      matrix:
        build:
          - pinned
          - stable
          - beta
          - linux-musl
          - linux-musl-arm64
          - linux-musl-i686
          - linux-gnu
          - linux-gnu-arm64
          - linux-gnu-i686
          - linux-arm-gnueabihf
          - linux-musl-armv6
          - linux-musl-armv7
          - macos
          - macos-arm64
          - windows-msvc
          - windows-msvc-i686
          - windows-pc-gnu
          # - windows-msvc-arm64
        include:
          # Specific Rust channels
          - build: pinned
            os: ubuntu-20.04
            rust: 1.66.0
          - build: stable
            os: ubuntu-20.04
            rust: stable
          - build: beta
            os: ubuntu-20.04
            rust: beta
          # Some of our release builds are generated by a nightly compiler to take
          # advantage of the latest optimizations/compile time improvements.
          - build: linux-musl
            os: ubuntu-20.04
            rust: stable
            target: x86_64-unknown-linux-musl
          - build: linux-musl-i686
            os: ubuntu-20.04
            rust: stable
            target: i686-unknown-linux-musl
          - build: linux-musl-arm64
            os: ubuntu-20.04
            rust: stable
            target: aarch64-unknown-linux-musl
          - build: linux-gnu
            os: ubuntu-20.04
            rust: stable
            target: x86_64-unknown-linux-gnu
          - build: linux-gnu-i686
            os: ubuntu-20.04
            rust: stable
            target: i686-unknown-linux-gnu
          - build: linux-gnu-arm64
            os: ubuntu-20.04
            rust: stable
            target: aarch64-unknown-linux-gnu
          - build: linux-arm-gnueabihf
            os: ubuntu-20.04
            rust: stable
            target: arm-unknown-linux-gnueabihf
          - build: linux-musl-armv6
            os: ubuntu-20.04
            rust: stable
            target: arm-unknown-linux-musleabihf
          - build: linux-musl-armv7
            os: ubuntu-20.04
            rust: stable
            target: armv7-unknown-linux-musleabihf
          - build: macos
            os: macos-11
            rust: stable
            target: x86_64-apple-darwin
          - build: macos-arm64
            os: macos-11
            rust: stable
            target: aarch64-apple-darwin
          - build: windows-msvc
            os: windows-2019
            rust: stable
            target: x86_64-pc-windows-msvc
          - build: windows-msvc-i686
            os: windows-2019
            rust: stable
            target: i686-pc-windows-msvc
          - build: windows-pc-gnu
            os: windows-2019
            rust: stable-x86_64-gnu
          # - build: windows-msvc-arm64
          #   os: windows-2019
          #   rust: stable
          #   target: aarch64-pc-windows-msvc

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

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

    - name: Use Cross
      if: matrix.target != ''
      run: |
        cargo install cross@^0.2
        echo "CARGO_BIN=cross" >> $GITHUB_ENV
        echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV
        echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV

    - name: Show command used for Cargo
      run: |
        echo "cargo command is: ${{ env.CARGO_BIN }}"
        echo "target flag is: ${{ env.TARGET_FLAGS }}"
        echo "target dir is: ${{ env.TARGET_DIR }}"

    - name: aarch64 specific items
      if: matrix.build == 'macos-arm64'
      run: |
        # Can't run tests: cross-compiling
        echo "SKIP_TESTS=yes" >> $GITHUB_ENV

    - name: Run tests
      if: env.SKIP_TESTS == ''
      run: ${{ env.CARGO_BIN }} test --verbose ${{ env.TARGET_FLAGS }}

    - name: Run build
      run: ${{ env.CARGO_BIN }} build --verbose ${{ env.TARGET_FLAGS }}

  checks:
    name: checks
    runs-on: ubuntu-20.04

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Check typos
      uses: crate-ci/typos@master
      with:
        config: ./.github/workflows/config/typos.toml

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

    - name: Check formatting
      run: |
        cargo fmt --all -- --check

    - name: Check via Clippy
      run: |
        cargo clippy --all-features -- -D warnings