shipyard 0.6.2

Entity Component System
Documentation
name: Check & Deploy

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

jobs:
  changes:
    runs-on: ubuntu-latest
    outputs:
      code: ${{ steps.filter.outputs.code }}
      deploy: ${{ steps.filter.outputs.deploy }}
    steps:
    - uses: actions/checkout@v2
    - uses: dorny/paths-filter@v2
      id: filter
      with:
        filters: |

          code:
            - 'src/**'
            - 'tests/**'
            - 'Cargo.toml'
          deploy:
            - 'bunny_demo/**'
            - 'guide/**'
            - 'square_eater/**'
            - 'visualizer/**'
  fmt:
    runs-on: ubuntu-latest
    needs: changes
    if: needs.changes.outputs.code == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - run: cargo fmt -- --check
  miri:
    runs-on: ubuntu-latest
    needs: changes
    if: needs.changes.outputs.code == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: miri

      - run: cargo miri test --tests --lib --no-default-features
  clippy:
    runs-on: ubuntu-latest
    needs: changes
    if: needs.changes.outputs.code == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - run: cargo clippy
        env:
          RUSTFLAGS: -D warnings
  all-features:
    runs-on: ubuntu-latest
    needs: changes
    if: needs.changes.outputs.code == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable

      - run: cargo test --all-features
  guide_master:
    runs-on: ubuntu-latest
    needs: changes
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable

      - name: download mdbook
        uses: peaceiris/actions-mdbook@v1
        with:
          mdbook-version: "latest"

      - run: cargo install mdbook-linkcheck

      - run: mdbook build -d guide_master
        working-directory: ./guide/master

      - name: save guide master
        uses: actions/upload-artifact@v2
        with:
          name: guide_master
          path: guide/master/guide_master/html
  guide_0_5_0:
    runs-on: ubuntu-latest
    needs: changes
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable

      - name: download mdbook
        uses: peaceiris/actions-mdbook@v1
        with:
          mdbook-version: "latest"

      - run: cargo install mdbook-linkcheck

      - run: mdbook build -d guide_0_5_0
        working-directory: ./guide/0.5.0

      - name: save guide 0.5.0
        uses: actions/upload-artifact@v2
        with:
          name: guide_0_5_0
          path: guide/0.5.0/guide_0_5_0/html
  guide_0_6:
    runs-on: ubuntu-latest
    needs: changes
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable

      - name: download mdbook
        uses: peaceiris/actions-mdbook@v1
        with:
          mdbook-version: "latest"

      - run: cargo install mdbook-linkcheck

      - run: mdbook build -d guide_0_6
        working-directory: ./guide/0.6

      - name: save guide 0.6
        uses: actions/upload-artifact@v2
        with:
          name: guide_0_6
          path: guide/0.6/guide_0_6/html
  bunny_demo:
    runs-on: ubuntu-latest
    needs: changes
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable
        with:
          target: wasm32-unknown-unknown

      - name: install wasm-pack
        run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

      - run: wasm-pack build bunny_demo --target web --release --out-dir public/wasm

      - run: rm bunny_demo/public/wasm/.gitignore

      - name: save bunny_demo
        uses: actions/upload-artifact@v2
        with:
          name: bunny_demo
          path: bunny_demo/public
  square_eater:
    runs-on: ubuntu-latest
    needs: changes
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable
        with:
          target: wasm32-unknown-unknown
      - run: cargo build --release --package square_eater --target wasm32-unknown-unknown --manifest-path=square_eater/Cargo.toml
      - run: mv ./target/wasm32-unknown-unknown/release/square_eater.wasm ./square_eater/public
      - name: save square_eater
        uses: actions/upload-artifact@v2
        with:
          name: square_eater
          path: square_eater/public
  visualizer:
    runs-on: ubuntu-latest
    needs: changes
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@stable
        with:
          target: wasm32-unknown-unknown
      - run: cargo build --lib --release --package visualizer --target wasm32-unknown-unknown --manifest-path=visualizer/Cargo.toml
      - uses: jetli/wasm-bindgen-action@v0.1.0
        with:
          version: 'latest'
      - run: wasm-bindgen target/wasm32-unknown-unknown/release/visualizer.wasm --out-dir visualizer/out --no-modules --no-typescript
      - name: save visualizer
        uses: actions/upload-artifact@v2
        with:
          name: visualizer
          path: visualizer/out
  deploy:
    runs-on: ubuntu-latest
    needs: [changes, guide_master, guide_0_5_0, bunny_demo, square_eater, visualizer]
    if: github.event_name == 'push' && needs.changes.outputs.deploy == 'true'
    steps:
      - name: load guide master
        uses: actions/download-artifact@v2
        with:
          name: guide_master
          path: dist/guide/master

      - name: load guide 0.5.0
        uses: actions/download-artifact@v2
        with:
          name: guide_0_5_0
          path: dist/guide/0.5.0

      - name: load guide 0.6
        uses: actions/download-artifact@v2
        with:
          name: guide_0_6
          path: dist/guide/0.6

      - name: load bunny_demo
        uses: actions/download-artifact@v2
        with:
          name: bunny_demo
          path: dist/bunny_demo

      - name: load square_eater
        uses: actions/download-artifact@v2
        with:
          name: square_eater
          path: dist/square_eater

      - name: load visualizer
        uses: actions/download-artifact@v2
        with:
          name: visualizer
          path: dist/visualizer

      - name: deploy to gh pages
        uses: maxheld83/ghpages@master
        env:
          BUILD_DIR: "dist/"
          GH_PAT: ${{ secrets.GH_PAT }}