# Automate, customize, and execute your software development workflows right in your repository with GitHub Actions.
# Documentation: https://docs.github.com/en/actions

name: build

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  lint:
    runs-on: ubuntu-latest

    env:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

    strategy:
      matrix:
        node-version: [14]

    steps:

    - uses: actions/checkout@v2.3.3

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2.1.2
      with:
        node-version: ${{ matrix.node-version }}

    - name: Load cached dependencies
      uses: actions/cache@v2
      id: cache
      with:
        path: |
          **/node_modules
          /home/runner/.cache/Cypress
        key: ${{ runner.os }}-node-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}

    - name: Install dependencies
      id: install-dependencies
      if: steps.cache.outputs.cache-hit != 'true'
      run: yarn install

    - name: Lint code
      id: lint
      run: yarn lint

    - name: Send Slack notifications
      uses: act10ns/slack@v1
      with:
        status: ${{ job.status }}
        steps: ${{ toJson(steps) }}
        channel: '#tiptap-next'
      if: failure()

  test:
    runs-on: ubuntu-latest

    env:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

    strategy:
      matrix:
        node-version: [14]

    steps:

    - uses: actions/checkout@v2.3.3

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2.1.2
      with:
        node-version: ${{ matrix.node-version }}

    - name: Run tests with Cypress
      id: cypress
      uses: cypress-io/github-action@v2
      with:
        cache-key: ${{ runner.os }}-node-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}
        start: yarn start
        wait-on: 'http://localhost:3000'
        project: ./tests
        browser: chrome

    - name: Export screenshots (on failure only)
      uses: actions/upload-artifact@v2.2.0
      if: failure()
      with:
        name: cypress-screenshots
        path: tests/cypress/screenshots
        retention-days: 7

    - name: Export screen recordings (on failure only)
      uses: actions/upload-artifact@v2.2.0
      if: failure()
      with:
        name: cypress-videos
        path: tests/cypress/videos
        retention-days: 7

    - name: Send Slack notifications
      uses: act10ns/slack@v1
      with:
        status: ${{ job.status }}
        steps: ${{ toJson(steps) }}
        channel: '#tiptap-next'
      if: failure()

  build:
    runs-on: ubuntu-latest

    needs: lint

    env:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

    strategy:
      matrix:
        node-version: [14]

    steps:

    - uses: actions/checkout@v2.3.3

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2.1.2
      with:
        node-version: ${{ matrix.node-version }}

    - name: Load cached dependencies
      uses: actions/cache@v2
      id: cache
      with:
        path: |
          **/node_modules
          /home/runner/.cache/Cypress
        key: ${{ runner.os }}-node-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}

    - name: Install dependencies
      id: install-dependencies
      if: steps.cache.outputs.cache-hit != 'true'
      run: yarn install

    - name: Build packages dependencies
      id: build-packages
      run: yarn build:packages

    - name: Send Slack notifications
      uses: act10ns/slack@v1
      with:
        status: ${{ job.status }}
        steps: ${{ toJson(steps) }}
        channel: '#tiptap-next'
      if: failure()
