# Leave the powered by Sauce Labs bit in as this means we get additional concurrency name: "Frontend admin tests powered by Sauce Labs" on: push: paths-ignore: - 'doc/**' permissions: contents: read # to fetch code (actions/checkout) jobs: withplugins: name: with plugins runs-on: ubuntu-latest strategy: fail-fast: false matrix: node: [20, 22] steps: - name: Generate Sauce Labs strings id: sauce_strings run: | printf %s\\n '::set-output name=name::${{ github.workflow }} - ${{ github.job }} - Node ${{ matrix.node }}' printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}-node${{ matrix.node }}' - name: Checkout repository uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - uses: pnpm/action-setup@v4 name: Install pnpm with: version: 9.0.4 run_install: false - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - uses: actions/cache@v4 name: Setup pnpm cache with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Cache playwright binaries uses: actions/cache@v4 id: playwright-cache with: path: | ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} - name: Only install direct dependencies run: pnpm config set auto-install-peers false #- # name: Install etherpad plugins # # We intentionally install an old ep_align version to test upgrades to # # the minor version number. The --legacy-peer-deps flag is required to # # work around a bug in npm v7: https://github.com/npm/cli/issues/2199 # run: pnpm install --workspace-root ep_align@0.2.27 # Etherpad core dependencies must be installed after installing the # plugin's dependencies, 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: pnpm i #- # name: Install etherpad plugins # run: rm -Rf node_modules/ep_align/static/tests/* - name: export GIT_HASH to env id: environment run: echo "::set-output name=sha_short::$(git rev-parse --short ${{ github.sha }})" - name: Create settings.json run: cp settings.json.template settings.json - name: Write custom settings.json that enables the Admin UI tests run: "sed -i 's/\"enableAdminUITests\": false/\"enableAdminUITests\": true,\\n\"users\":{\"admin\":{\"password\":\"changeme1\",\"is_admin\":true}}/' settings.json" - name: increase maxHttpBufferSize run: "sed -i 's/\"maxHttpBufferSize\": 50000/\"maxHttpBufferSize\": 10000000/' settings.json" - name: Disable import/export rate limiting run: | sed -e '/^ *"importExportRateLimiting":/,/^ *\}/ s/"max":.*/"max": 100000000/' -i settings.json - name: Build admin frontend working-directory: admin run: | pnpm run build # name: Run the frontend admin tests # shell: bash # env: # SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} # SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} # SAUCE_NAME: ${{ steps.sauce_strings.outputs.name }} # TRAVIS_JOB_NUMBER: ${{ steps.sauce_strings.outputs.tunnel_id }} # GIT_HASH: ${{ steps.environment.outputs.sha_short }} # run: | # src/tests/frontend/travis/adminrunner.sh #- # uses: saucelabs/sauce-connect-action@v2.3.6 # with: # username: ${{ secrets.SAUCE_USERNAME }} # accessKey: ${{ secrets.SAUCE_ACCESS_KEY }} # tunnelIdentifier: ${{ steps.sauce_strings.outputs.tunnel_id }} #- # name: Run the frontend admin tests # shell: bash # env: # SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} # SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} # SAUCE_NAME: ${{ steps.sauce_strings.outputs.name }} # TRAVIS_JOB_NUMBER: ${{ steps.sauce_strings.outputs.tunnel_id }} # GIT_HASH: ${{ steps.environment.outputs.sha_short }} # run: | # src/tests/frontend/travis/adminrunner.sh - name: Run the frontend admin tests shell: bash run: | pnpm run prod & connected=false can_connect() { curl -sSfo /dev/null http://localhost:9001/ || return 1 connected=true } now() { date +%s; } start=$(now) while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do sleep 1 done cd src pnpm exec playwright install pnpm exec playwright install-deps pnpm run test-admin - uses: actions/upload-artifact@v4 if: always() with: name: playwright-report-${{ matrix.node }} path: src/playwright-report/ retention-days: 30