name: Test and Build OpenSearch Dashboards Reports

on: [pull_request, push]

env:
  PLUGIN_NAME: reportsDashboards
  ARTIFACT_NAME: reports-dashboards
  OPENSEARCH_VERSION: 'main'
  OPENSEARCH_PLUGIN_VERSION: 3.0.0.0


jobs:
  linux-build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout OpenSearch Dashboards
        uses: actions/checkout@v1
        with:
          repository: opensearch-project/Opensearch-Dashboards
          ref: ${{ env.OPENSEARCH_VERSION }}
          path: OpenSearch-Dashboards

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version-file: '../OpenSearch-Dashboards/.nvmrc'
          registry-url: 'https://registry.npmjs.org'

      - name: Install Yarn
        # Need to use bash to avoid having a windows/linux specific step
        shell: bash
        run: |
          YARN_VERSION=$(node -p "require('../OpenSearch-Dashboards/package.json').engines.yarn")
          echo "Installing yarn@$YARN_VERSION"
          npm i -g yarn@$YARN_VERSION

      - run: node -v
      - run: yarn -v

      - name: Checkout Plugin	
        uses: actions/checkout@v1
        with:	
          path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}

      - name: OpenSearch Dashboards Plugin Bootstrap
        uses: nick-fields/retry@v1
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: yarn osd bootstrap

      - name: Test
        uses: nick-fields/retry@v1
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: yarn test --coverage

      - name: Upload coverage
        uses: codecov/codecov-action@v1
        with:
          flags: dashboards-report
          directory: ./OpenSearch-Dashboards/plugins/
          token: ${{ secrets.CODECOV_TOKEN }}

      - name: Build Artifact
        run: |
          yarn build
          mv ./build/*.zip ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip

      - name: Upload Artifact For Linux
        uses: actions/upload-artifact@v1
        with:
          name: dashboards-reports-linux
          path: ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip

  windows-build:
    runs-on: windows-latest
    steps:

      # Enable longer filenames for windows
      - name: Enable longer filenames
        run: git config --system core.longpaths true

      - name: Checkout OpenSearch Dashboards
        uses: actions/checkout@v1
        with:
          repository: opensearch-project/Opensearch-Dashboards
          ref: ${{ env.OPENSEARCH_VERSION }}
          path: OpenSearch-Dashboards

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version-file: '../OpenSearch-Dashboards/.nvmrc'
          registry-url: 'https://registry.npmjs.org'

      - name: Install Yarn
        # Need to use bash to avoid having a windows/linux specific step
        shell: bash
        run: |
          YARN_VERSION=$(node -p "require('../OpenSearch-Dashboards/package.json').engines.yarn")
          echo "Installing yarn@$YARN_VERSION"
          npm i -g yarn@$YARN_VERSION

      - run: node -v
      - run: yarn -v

      - name: Checkout Plugin	
        uses: actions/checkout@v1
        with:	
          path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}

      - name: OpenSearch Dashboards Plugin Bootstrap
        uses: nick-fields/retry@v1
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: yarn osd bootstrap

      - name: Test
        uses: nick-fields/retry@v1
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: yarn test

      - name: Build Artifact
        run: |
          yarn build
          mv ./build/*.zip ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip

      
      - name: Upload Artifact For Windows
        uses: actions/upload-artifact@v1
        with:
          name: dashboards-reports-windows
          path: ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip

  macos-build:
    runs-on: macos-latest
    steps:
      - name: Checkout OpenSearch Dashboards
        uses: actions/checkout@v1
        with:
          repository: opensearch-project/Opensearch-Dashboards
          ref: ${{ env.OPENSEARCH_VERSION }}
          path: OpenSearch-Dashboards

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version-file: '../OpenSearch-Dashboards/.nvmrc'
          registry-url: 'https://registry.npmjs.org'

      - name: Install Yarn
        # Need to use bash to avoid having a windows/linux specific step
        shell: bash
        run: |
          YARN_VERSION=$(node -p "require('../OpenSearch-Dashboards/package.json').engines.yarn")
          echo "Installing yarn@$YARN_VERSION"
          npm i -g yarn@$YARN_VERSION

      - run: node -v
      - run: yarn -v

      - name: Checkout Plugin	
        uses: actions/checkout@v1
        with:	
          path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}

      - name: OpenSearch Dashboards Plugin Bootstrap
        uses: nick-fields/retry@v1
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: yarn osd bootstrap

      - name: Test
        uses: nick-fields/retry@v1
        with:
          timeout_minutes: 30
          max_attempts: 3
          command: yarn test

      - name: Build Artifact
        run: |
          yarn build
          mv ./build/*.zip ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip

      - name: Upload Artifact For MacOS
        uses: actions/upload-artifact@v1
        with:
          name: dashboards-reports-macosx
          path: ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip