name: Npm Publish
on: [workflow_dispatch]
jobs:
  checkVersion:
    name: Check package version
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Check package version
        id: check
        uses: PostHog/check-package-version@v2
        with:
          path: ./apps/editor/
      - name: Cancel when unchanged
        uses: andymckay/cancel-action@0.2
        if: steps.check.outputs.is-new-version == 'false'

  pre-check:
    needs: [checkVersion]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2
      - name: Use Node.js 15.x
        uses: actions/setup-node@v2.5.1
        with:
          node-version: '15.x'
      - name: Install
        run: |
          npm ci
      - name: Eslint
        run: |
          npm run lint:all
      - name: Check types
        run: |
          npm run test:types:all

  test:
    needs: [checkVersion]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2
      - name: Use Node.js 15.x
        uses: actions/setup-node@v2.5.1
        with:
          node-version: '15.x'
      - name: Install
        run: |
          npm ci
      - name: Build
        run: |
          npm run build toastmark
      - name: Toastmark unit, integration test
        run: |
          npm run test:ci toastmark
      - name: Editor unit, integration test
        run: |
          npm run test:ci editor

  plugin-test:
    needs: [checkVersion]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2
      - name: Use Node.js 15.x
        uses: actions/setup-node@v2.5.1
        with:
          node-version: '15.x'
      - name: Install
        run: |
          npm ci
      - name: Build
        run: |
          npm run build toastmark
          npm run build editor
      - name: chart plugin unit, integration test
        run: |
          npm run test:ci chart
      - name: color syntax plugin unit, integration test
        run: |
          npm run test:ci color
      - name: code syntax highlighting plugin unit, integration test
        run: |
          npm run test:ci code
      - name: table merged cell plugin unit, integration test
        run: |
          npm run test:ci table
      - name: uml plugin unit, integration test
        run: |
          npm run test:ci uml

  publish:
    runs-on: ubuntu-latest
    needs: [pre-check, test, plugin-test]
    steps:
      - uses: actions/checkout@v2
      - name: Check the package version
        id: check
        uses: PostHog/check-package-version@v2
        with:
          path: ./apps/editor/
      - name: Use Node.js 15.x
        uses: actions/setup-node@v2.5.1
        with:
          node-version: '15.x'
          registry-url: https://registry.npmjs.org/
      - name: Install
        run: |
          npm ci
      - name: Build
        run: |
          npm run build toastmark
          npm run build editor
      - name: Create Tag
        run: |
          git config --local user.email 'jw.lee@nhn.com'
          git config --local user.name 'jwlee1108'
          git tag editor@${{ steps.check.outputs.committed-version }}
      - name: Push Tag
        run: |
          git push origin editor@${{ steps.check.outputs.committed-version }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Npm Publish(editor)
        working-directory: ./apps/editor
        run: |
          npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}}
