name: unit-tests
on:
  pull_request:
    branches:
      - 'dev*'
      - 'releases/v*'
  push:
    branches:
      - 'dev*'
    tags-ignore:
      - '*.*'
jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - uses: actions/setup-node@v1.4.4
        with:
          node-version: 'v12.18.4'
          registry-url: 'https://registry.npmjs.org'

      - name: Install Yarn
        run: npm install -g yarn

      - name: Install and Test
        run: |
          yarn install
          yarn lint
          yarn test

      - name: Uploade CodeCov Report
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - uses: actions/setup-node@v1.4.4
        with:
          node-version: 'v12.18.4'
          registry-url: 'https://registry.npmjs.org'

      - name: Install Yarn
        run: npm install -g yarn

      - name: Build lib
        run: |
          yarn install
          yarn build

      - name: Rebuild production node_modules
        run: |
          yarn install --production
          ls node_modules

      - name: artifact
        uses: actions/upload-artifact@v2
        with:
          name: dist
          path: |
            lib
            node_modules

  integration:
    runs-on: ubuntu-latest
    needs: build
    strategy:
      matrix:
        branch: ["gh-pages", "no-pages"]
        commit: ["singleCommit", "add commits"]
      max-parallel: 1
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      - uses: actions/setup-node@v1.4.4
        with:
          node-version: 'v12.18.4'
          registry-url: 'https://registry.npmjs.org'

      - name: Download artifact
        uses: actions/download-artifact@v2
        with:
          name: dist

      - name: Deploy
        id: unmodified
        uses: ./
        with:
          folder: integration
          branch: ${{ matrix.branch }}
          single-commit: ${{ matrix.commit == 'singleCommit' }}
          dry-run: true

      # Usually, this should be skipped, but if the upstream gh-pages
      # branch doesn't match ours, it should still be a success.
      - name: Check step output
        run: |
          [[ \
          ${{steps.unmodified.outputs.deployment-status}} = skipped || \
          ${{steps.unmodified.outputs.deployment-status}} = success \
          ]]

      - name: Tweak content to publish to existing branch
        if: ${{ matrix.branch == 'gh-pages' }}
        run: |
          echo "<!-- just sayin -->" >> integration/index.html

      - name: Deploy with modifications to existing branch
        id: modified
        uses: ./
        if: ${{ matrix.branch == 'gh-pages' }}
        with:
          folder: integration
          branch: ${{ matrix.branch }} 
          single-commit: ${{ matrix.commit == 'singleCommit' }}
          dry-run: true

      # The modified deployment should be a success, and not skipped.
      - name: Check step output
        if: ${{ matrix.branch == 'gh-pages' }}
        run: |
          [[ \
          ${{steps.modified.outputs.deployment-status}} = success \
          ]]
