name: CI/CD
on: push
jobs:
  setup:
    name: setup
    runs-on: ubuntu-latest
    steps:
      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "$GITHUB_CONTEXT"
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup
        uses: actions/setup-node@v1
        with:
          node-version: '16.x'
      - uses: actions/cache@v1
        id: yarn-cache
        with:
          path: node_modules
          key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-node_modules-
      - name: Install
        if: steps.yarn-cache.outputs.cache-hit != 'true'
        run: yarn install

  test:
    name: Test
    runs-on: ubuntu-latest
    needs: setup
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup
        uses: actions/setup-node@v1
        with:
          node-version: '16.x'
      - uses: actions/cache@v1
        id: yarn-cache
        with:
          path: node_modules
          key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-node_modules-
      - name: Install
        if: steps.yarn-cache.outputs.cache-hit != 'true'
        run: yarn install
      - name: test
        run: yarn test

  notify:
    name: Notify
    runs-on: ubuntu-latest
    if: failure()
    needs:
      - test
      - setup
      - publish
    steps:
      - uses: technote-space/workflow-conclusion-action@v1
      - uses: 8398a7/action-slack@v3
        with:
          status: ${{ env.WORKFLOW_CONCLUSION }}
          fields: repo,message,commit,author,action,eventName,ref,workflow # selectable (default: repo,message)
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
        if: always()

  publish:
    name: Publish
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup
        uses: actions/setup-node@v1
        with:
          node-version: '16.x'
      - uses: actions/cache@v1
        id: yarn-cache
        with:
          path: node_modules
          key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-node_modules-
      - name: Install
        if: steps.yarn-cache.outputs.cache-hit != 'true'
        run: yarn install
      - name: Release
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: yarn release

