name: Lint

on:
  push:
  merge_group:
  pull_request:
    types:
      - opened
      - synchronize
      - ready_for_review
  workflow_dispatch:

permissions:
  contents: write

jobs:
  lint:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x]
    steps:
      - uses: actions/checkout@v3

      - uses: pnpm/action-setup@v2
        # uses version from "packageManager" field in package.json

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          cache: pnpm
          node-version: ${{ matrix.node-version }}

      - name: Install Packages
        run: |
          pnpm install --frozen-lockfile
        env:
          CYPRESS_CACHE_FOLDER: .cache/Cypress

      - name: Run Linting
        shell: bash
        run: |
          if ! pnpm run lint; then
              # print a nice error message on lint failure
              ERROR_MESSAGE='Running `pnpm run lint` failed.'
              ERROR_MESSAGE+=' Running `pnpm -w run lint:fix` may fix this issue. '
              ERROR_MESSAGE+=" If this error doesn't occur on your local machine,"
              ERROR_MESSAGE+=' make sure your packages are up-to-date by running `pnpm install`.'
              ERROR_MESSAGE+=' You may also need to delete your prettier cache by running'
              ERROR_MESSAGE+=' `rm ./node_modules/.cache/prettier/.prettier-cache`.'
              echo "::error title=Lint failure::${ERROR_MESSAGE}"
              # make sure to return an error exitcode so that GitHub actions shows a red-cross
              exit 1
          fi

      - name: Verify `./src/config.type.ts` is in sync with `./src/schemas/config.schema.yaml`
        shell: bash
        run: |
          if ! pnpm run --filter mermaid types:verify-config; then
            ERROR_MESSAGE='Running `pnpm run --filter mermaid types:verify-config` failed.'
            ERROR_MESSAGE+=' This should be fixed by running'
            ERROR_MESSAGE+=' `pnpm run --filter mermaid types:build-config`'
            ERROR_MESSAGE+=' on your local machine.'
            echo "::error title=Lint failure::${ERROR_MESSAGE}"
              # make sure to return an error exitcode so that GitHub actions shows a red-cross
              exit 1
          fi

      - name: Verify Docs
        id: verifyDocs
        working-directory: ./packages/mermaid
        continue-on-error: ${{ github.event_name == 'push' }}
        run: pnpm run docs:verify

      - name: Rebuild Docs
        if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
        working-directory: ./packages/mermaid
        run: pnpm run docs:build

      - name: Commit changes
        uses: EndBug/add-and-commit@v9
        if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
        with:
          message: 'Update docs'
          add: 'docs/*'
