name: 'Test'

on:
  push:
    branches:
      - main
    paths-ignore:
      - '*.md'
  pull_request:
    paths-ignore:
      - '*.md'

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - 'ubuntu-20.04'
          - 'ubuntu-18.04'
          - 'ubuntu-16.04'
          - 'macos-latest'
          - 'windows-latest'
    steps:
      - uses: actions/checkout@v2

      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "${GITHUB_CONTEXT}"

      - name: Read .nvmrc
        run: echo "::set-output name=NVMRC::$(cat .nvmrc)"
        id: nvm

      - name: Setup Node
        uses: actions/setup-node@v2.1.5
        with:
          node-version: '${{ steps.nvm.outputs.NVMRC }}'

      - run: npm i -g npm

      - name: Dump version
        run: |
          node -v
          npm --version
          git --version

      - run: npm ci --ignore-scripts

      - name: npm audit
        if: startsWith(matrix.os, 'ubuntu-18.04')
        run: |
          npm audit > ./audit.log || true
          if ! [ "$(cat ./audit.log | wc -l)" = 1 ]; then
            echo "::warning::$(cat ./audit.log)"
          fi
          rm ./audit.log

      - name: Run prettier
        if: startsWith(matrix.os, 'ubuntu-18.04')
        run: npm run format:check

      - name: Run eslint
        if: startsWith(matrix.os, 'ubuntu-18.04')
        run: npm run lint

      - run: npm test

      - name: Upload test coverage as artifact
        uses: actions/upload-artifact@v2
        with:
          name: coverage-${{ matrix.os }}
          path: coverage

      - uses: codecov/codecov-action@v1.3.1

      - name: Run ncc
        run: npm run build

      - name: Remove lint-staged husky
        if: github.ref == 'refs/heads/main'
        run: |
          npm uninstall lint-staged husky
          git checkout package-lock.json package.json

      - name: Setup mdBook
        if: github.ref == 'refs/heads/main'
        uses: peaceiris/actions-mdbook@v1.1.14
        with:
          mdbook-version: '0.4.5'

      - name: Build site
        if: github.ref == 'refs/heads/main'
        working-directory: ./test_projects/mdbook
        run: mdbook build

      - name: Deploy
        if: |
          startsWith(matrix.os, 'ubuntu-18.04') &&
          github.ref == 'refs/heads/main' && github.event.repository.fork == false
        uses: ./
        with:
          # deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # publish_branch: gh-pages
          publish_dir: ./test_projects/mdbook/book
          # external_repository: ''
          allow_empty_commit: true
          # keep_files: true
          # force_orphan: true
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
          # commit_message: ${{ github.event.head_commit.message }}
          cname: 'actions-gh-pages.peaceiris.com'

      - name: Deploy
        if: |
          startsWith(matrix.os, 'ubuntu-16.04') &&
          github.ref == 'refs/heads/main' && github.event.repository.fork == false
        uses: ./
        with:
          deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          # github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_branch: gh-pages-ubuntu-16.04
          publish_dir: ./test_projects/mdbook/book
          # external_repository: ''
          allow_empty_commit: true
          keep_files: true
          force_orphan: true
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
          full_commit_message: ${{ github.event.head_commit.message }}

      - name: Deploy
        if: |
          startsWith(matrix.os, 'macos') &&
          github.ref == 'refs/heads/main' && github.event.repository.fork == false
        uses: ./
        with:
          deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          # github_token: ${{ secrets.GITHUB_TOKEN }}
          # personal_token: ${{ secrets.PERSONAL_TOKEN }}
          publish_branch: gh-pages-macos
          publish_dir: ./test_projects/mdbook/book
          # external_repository: ''
          allow_empty_commit: true
          # keep_files: true
          # force_orphan: true
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
          # commit_message: ${{ github.event.head_commit.message }}

      - name: Deploy
        if: |
          startsWith(matrix.os, 'windows') &&
          github.ref == 'refs/heads/main' && github.event.repository.fork == false
        uses: ./
        with:
          # deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # personal_token: ${{ secrets.PERSONAL_TOKEN }}
          publish_branch: gh-pages-windows
          publish_dir: ./test_projects/mdbook/book
          # external_repository: ''
          allow_empty_commit: true
          # keep_files: true
          # force_orphan: true
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
          # commit_message: ${{ github.event.head_commit.message }}

      - name: Deploy
        if: |
          startsWith(matrix.os, 'ubuntu-20.04') &&
          github.ref == 'refs/heads/main' && github.event.repository.fork == false
        uses: ./
        with:
          # deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_branch: gh-pages-ubuntu-20.04
          publish_dir: ./test_projects/mdbook/book
          # external_repository: ''
          allow_empty_commit: true
          # keep_files: true
          # force_orphan: true
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
          # commit_message: ${{ github.event.head_commit.message }}
