shipyard 0.5.0

Entity Component System
Documentation
name: Check & Deploy

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

jobs:
  install-stable:
    runs-on: ubuntu-latest
    steps:
      - name: install rust stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          components: clippy, rustfmt
  fmt:
    runs-on: ubuntu-latest
    needs: install-stable
    steps:
      - uses: actions/checkout@v2

      - run: cargo +stable fmt -- --check
  miri:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: install rust nightly
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          profile: minimal
          components: miri

      - run: cargo +nightly miri test --no-default-features
  clippy:
    runs-on: ubuntu-latest
    needs: install-stable
    steps:
      - uses: actions/checkout@v2

      - run: cargo +stable clippy
        env:
          RUSTFLAGS: -D warnings
  all-features:
    runs-on: ubuntu-latest
    needs: install-stable
    steps:
      - uses: actions/checkout@v2

      - run: cargo +stable test --all-features
  guide_master:
    runs-on: ubuntu-latest
    needs: [fmt, miri, clippy, all-features]
    if: github.event_name == 'push'
    steps:
      - uses: actions/checkout@v2

      - 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: [fmt, miri, clippy, all-features]
    if: github.event_name == 'push'
    steps:
      - uses: actions/checkout@v2

      - 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
  bunny_demo:
    runs-on: ubuntu-latest
    needs: [fmt, miri, clippy, all-features]
    if: github.event_name == 'push'
    steps:
      - uses: actions/checkout@v2

      - run: rustup +stable target add wasm32-unknown-unknown

      - name: install node
        uses: actions/setup-node@v1

      - name: install npm deps
        run: npm ci
        working-directory: ./bunny_demo

      - run: npm run build
        working-directory: ./bunny_demo

      - run: mv ./bunny_demo/public ./bunny_demo/bunny_demo

      - name: save bunny_demo
        uses: actions/upload-artifact@v2
        with:
          name: bunny_demo
          path: bunny_demo/bunny_demo
  square_eater:
    runs-on: ubuntu-latest
    needs: [fmt, miri, clippy, all-features]
    if: github.event_name == 'push'
    steps:
      - uses: actions/checkout@v2
      - run: rustup +stable target add wasm32-unknown-unknown
      - run: cargo +stable build --release --package square_eater --target wasm32-unknown-unknown
      - 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
  deploy:
    runs-on: ubuntu-latest
    needs: [guide_master, guide_0_5_0, bunny_demo, square_eater]
    if: github.event_name == 'push'
    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: duplicate guide_master
        run: cp -r dist/guide/master dist/book

      - 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: duplicate demo
        run: cp -r dist/bunny_demo dist/demo

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