on:
  pull_request:
  push:
    branches: master

name: Continuous Integration

jobs:
  # Workaround for making Github Actions skip based on commit message `[skip ci]`
  # Source https://gist.github.com/ybiquitous/c80f15c18319c63cae8447a3be341267
  prepare:
    runs-on: ubuntu-latest
    if: |
      !contains(format('{0} {1} {2}', github.event.head_commit.message, github.event.pull_request.title, github.event.pull_request.body), '[skip ci]')
    steps:
      - run: |
          cat <<'MESSAGE'
          github.event_name: ${{ toJson(github.event_name) }}
          github.event:
          ${{ toJson(github.event) }}
          MESSAGE

  check:
    name: Check
    runs-on: ubuntu-latest
    needs: prepare
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          override: true
      - uses: actions-rs/cargo@v1
        with:
          command: check

  test:
    name: Test Suite
    runs-on: ubuntu-latest
    needs: prepare
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          override: true
      # These dependencies are required for `clipboard`
      - run: sudo apt-get install -y -qq libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev
      - uses: actions-rs/cargo@v1
        with:
          command: test

  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    needs: prepare
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          override: true
          components: rustfmt
      - uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    needs: prepare
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          override: true
          components: clippy
      - uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: -- -D warnings
