name: "Loadtest"

# any branch is useful for testing before a PR is submitted
on: [push, pull_request]

jobs:
  withoutplugins:
    # run on pushes to any branch
    # run on PRs from external forks
    if: |
         (github.event_name != 'pull_request')
         || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
    name: without plugins
    runs-on: ubuntu-latest

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

    - uses: actions/setup-node@v2
      with:
        node-version: 12

    - name: Install all dependencies and symlink for ep_etherpad-lite
      run: src/bin/installDeps.sh

    - name: Install etherpad-load-test
      run: sudo npm install -g etherpad-load-test

    - name: Run load test
      run: src/tests/frontend/travis/runnerLoadTest.sh 25 50

  withplugins:
    # run on pushes to any branch
    # run on PRs from external forks
    if: |
         (github.event_name != 'pull_request')
         || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
    name: with Plugins
    runs-on: ubuntu-latest

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

    - uses: actions/setup-node@v2
      with:
        node-version: 12

    - name: Install etherpad-load-test
      run: sudo npm install -g etherpad-load-test

    - name: Install etherpad plugins
      # The --legacy-peer-deps flag is required to work around a bug in npm v7:
      # https://github.com/npm/cli/issues/2199
      run: >
        npm install --no-save --legacy-peer-deps
        ep_align
        ep_author_hover
        ep_cursortrace
        ep_font_size
        ep_hash_auth
        ep_headings2
        ep_markdown
        ep_readonly_guest
        ep_set_title_on_pad
        ep_spellcheck
        ep_subscript_and_superscript
        ep_table_of_contents

    # This must be run after installing the plugins, otherwise npm will try to
    # hoist common dependencies by removing them from src/node_modules and
    # installing them in the top-level node_modules. As of v6.14.10, npm's hoist
    # logic appears to be buggy, because it sometimes removes dependencies from
    # src/node_modules but fails to add them to the top-level node_modules. Even
    # if npm correctly hoists the dependencies, the hoisting seems to confuse
    # tools such as `npm outdated`, `npm update`, and some ESLint rules.
    - name: Install all dependencies and symlink for ep_etherpad-lite
      run: src/bin/installDeps.sh

    # configures some settings and runs npm run test
    - name: Run load test
      run: src/tests/frontend/travis/runnerLoadTest.sh 25 50

  long:
    # run on pushes to any branch
    # run on PRs from external forks
    if: |
         (github.event_name != 'pull_request')
         || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
    name: long running
    runs-on: ubuntu-latest

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

    - uses: actions/setup-node@v2
      with:
        node-version: 12

    - name: Install all dependencies and symlink for ep_etherpad-lite
      run: src/bin/installDeps.sh

    - name: Install etherpad-load-test
      run: sudo npm install -g etherpad-load-test


    # configures some settings and runs npm run test
    - name: Run load test
      run: src/tests/frontend/travis/runnerLoadTest.sh 5000 5
