frankenstein 0.22.0

Telegram bot API client for Rust
Documentation
name: Test and Build Rust

on:
  push:
  pull_request:
  schedule:
    # Check if it works with current dependencies
    - cron: '32 2 * * 3' # weekly on Wednesday 2:32 UTC

jobs:
  test:
    name: Test ${{ matrix.toolchain }} ${{ matrix.os }} ${{ matrix.features }}
    runs-on: ${{ matrix.os }}
    continue-on-error: ${{ matrix.toolchain == 'nightly' }}
    strategy:
      fail-fast: false
      matrix:
        toolchain:
          - stable
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
        clippyargs:
          - -D clippy::pedantic -D warnings
        features:
          - --no-default-features
          - "" # default features
          - --all-features
        include:
          # Check future versions and maybe get some glances on soon to be lints
          - toolchain: beta
            os: ubuntu-latest
            features: --all-features
            clippyargs: -W clippy::pedantic -W clippy::cargo

          - toolchain: nightly
            os: ubuntu-latest
            features: --all-features
            clippyargs: -W clippy::pedantic

          # Check the minimum supported Rust version (MSRV).
          # Sometimes old rust versions don't yet have the lints (allow unknown) or don't have fixes in lints (false positives -> don't error, just warn).
          - os: ubuntu-latest
            toolchain: 1.60.0
            clippyargs: -A unknown-lints
            features: --all-features
    steps:
      - name: Setup Rust
        uses: actions-rs/toolchain@v1
        with:
          components: clippy
          override: true
          profile: minimal
          toolchain: ${{ matrix.toolchain }}

      - uses: actions/checkout@v3

      - name: Fetch dependencies
        uses: actions-rs/cargo@v1
        with:
          command: fetch
          args: --verbose

      - name: Check clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --verbose --all-targets ${{ matrix.features }} -- ${{ matrix.clippyargs }}

      - name: Check docs
        uses: actions-rs/cargo@v1
        with:
          command: doc
          args: --verbose --no-deps ${{ matrix.features }}

      - name: Run tests
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --verbose ${{ matrix.features }}

  release:
    name: Release ${{ matrix.triple }}
    runs-on: ${{ matrix.os }}
    needs: test
    strategy:
      fail-fast: false
      matrix:
        include:
          - triple: x86_64-unknown-linux-gnu
            os: ubuntu-latest
          - triple: aarch64-unknown-linux-gnu
            os: ubuntu-latest
          - triple: armv7-unknown-linux-gnueabihf
            os: ubuntu-latest
          - triple: arm-unknown-linux-gnueabihf
            os: ubuntu-latest

          - triple: x86_64-apple-darwin
            os: macos-latest
          - triple: aarch64-apple-darwin
            os: macos-latest

          - triple: x86_64-pc-windows-msvc
            os: windows-latest
          # https://github.com/briansmith/ring/issues/1167
          # - triple: aarch64-pc-windows-msvc
          #   os: windows-latest
    steps:
      - name: Setup Rust
        uses: actions-rs/toolchain@v1
        with:
          override: true
          profile: minimal
          target: ${{ matrix.triple }}
          toolchain: stable

      - uses: actions/checkout@v3

      - name: Fetch dependencies
        uses: actions-rs/cargo@v1
        with:
          command: fetch
          args: --verbose

      - name: Build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release --verbose --all-features --target ${{ matrix.triple }}
          use-cross: ${{ runner.os == 'Linux' && matrix.triple != 'x86_64-unknown-linux-gnu' }}