name: Build

on:
  push:
    branches: main
  pull_request:
    branches: '*'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Base Setup
      uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

    - name: Install dependencies
      run: python -m pip install -U jupyterlab~=3.1 check-manifest

    - name: Lint the extension
      run: |
        set -eux
        jlpm
        jlpm run lint:check
    
    - name: Test the extension
      run: |
        set -eux
        jlpm run test

    - name: Build the extension
      run: |
        set -eux
        python -m pip install .[test]

        jupyter labextension list
        jupyter labextension list 2>&1 | grep -ie "jupyterlab-minio-browser .*OK"
        python -m jupyterlab.browser_check

    - name: Package the extension
      run: |
        set -eux
        check-manifest -v

        pip install build
        python -m build
        pip uninstall -y "jupyterlab_minio_browser " jupyterlab

    - name: Upload extension packages
      uses: actions/upload-artifact@v2
      with:
        name: extension-artifacts
        path: dist/jupyterlab_minio_browser *
        if-no-files-found: error

  test_isolated:
    needs: build
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2
    - name: Install Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.9'
        architecture: 'x64'
    - uses: actions/download-artifact@v2
      with:
        name: extension-artifacts
    - name: Install and Test
      run: |
        set -eux
        # Remove NodeJS, twice to take care of system and locally installed node versions.
        sudo rm -rf $(which node)
        sudo rm -rf $(which node)

        pip install "jupyterlab~=3.1" jupyterlab_minio_browser *.whl


        jupyter labextension list
        jupyter labextension list 2>&1 | grep -ie "jupyterlab-minio-browser .*OK"
        python -m jupyterlab.browser_check --no-chrome-test

  integration-tests:
    name: Integration tests
    needs: build
    runs-on: ubuntu-latest

    env:
      PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Base Setup
      uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

    - name: Download extension package
      uses: actions/download-artifact@v2
      with:
        name: extension-artifacts
        
    - name: Install the extension
      run: |
        set -eux
        python -m pip install "jupyterlab~=3.1" jupyterlab_minio_browser *.whl

    - name: Install dependencies
      working-directory: ui-tests
      env:
        PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
      run: jlpm install

    - name: Set up browser cache
      uses: actions/cache@v2
      with:
        path: |
          ${{ github.workspace }}/pw-browsers
        key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }}

    - name: Install browser
      run: jlpm playwright install chromium
      working-directory: ui-tests

    - name: Execute integration tests
      working-directory: ui-tests
      run: |
        jlpm playwright test

    - name: Upload Playwright Test report
      if: always()
      uses: actions/upload-artifact@v2
      with:
        name: jupyterlab_minio_browser -playwright-tests
        path: |
          ui-tests/test-results
          ui-tests/playwright-report
