degenerate 0.0.1

A degenerate programming language
name: CI

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

defaults:
  run:
    shell: bash

jobs:
  all:
    name: All

    strategy:
      matrix:
        os:
        - macos-latest
        - ubuntu-latest
        - windows-latest

    runs-on: ${{ matrix.os }}

    env:
      RUSTFLAGS: --deny warnings

    steps:
    - uses: actions/checkout@v2

    - name: Install Rust Toolchain Components
      uses: actions-rs/toolchain@v1
      with:
        components: clippy, rustfmt
        target: wasm32-unknown-unknown
        toolchain: stable

    - uses: Swatinem/rust-cache@v1

    - name: Check Lockfile
      run: |
        cargo update --locked --package degenerate

    - name: Test
      run: cargo test --all --release -- --include-ignored

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

    - name: Format
      run: cargo fmt --all -- --check

    - name: Check for Forbidden Words
      if: ${{ matrix.os == 'ubuntu-latest' }}
      run: |
        sudo apt-get update
        sudo apt-get install ripgrep
        ./bin/forbid

    - name: Install `mdbook`
      uses: peaceiris/actions-mdbook@v1
      with:
        mdbook-version: latest

    - name: Build Book
      run: mdbook build man

    - name: Install `wasm-bindgen`
      uses: jetli/wasm-bindgen-action@v0.1.0
      with:
        # keep in sync with `Cargo.toml`
        version: 0.2.80

    - name: Build WASM
      run: |
        cargo build --release --target wasm32-unknown-unknown
        wasm-bindgen \
          --target web \
          --no-typescript \
          --out-dir www \
          target/wasm32-unknown-unknown/release/degenerate.wasm

    - name: Record Git Revision
      run: git rev-parse --verify HEAD > www/commit.txt

    - name: Deploy Pages
      uses: peaceiris/actions-gh-pages@v3
      if: github.ref == 'refs/heads/master' && matrix.os == 'ubuntu-latest'
      with:
        github_token: ${{secrets.GITHUB_TOKEN}}
        publish_branch: gh-pages
        publish_dir: www