Skip to content

Added an automated Selenium UI test for a small Zimit2 archive #3787

Added an automated Selenium UI test for a small Zimit2 archive

Added an automated Selenium UI test for a small Zimit2 archive #3787

Workflow file for this run

name: CI
on:
- push
- pull_request
# Allow running manually
- workflow_dispatch
jobs:
# Tests the list of offline files in the Service Worker and compares it to the contents of the www directory
# Also runs end-to-end tests on Windows (taking advantage of the build)
tests-files-windows:
# We want to run on external PRs, but not on our own internal PRs as they'll be run by the push to the branch
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: Test the list of offline files in Service Worker
run: ./scripts/Check-OfflineFilesList.ps1
# This job runs always, including for remote pull requests, and
# has external dependencies or special permission needs, besides a
# local install of Node.js, Firefox, and Chromium or Chrome.
#
# You can run these same tests locally in your own developer
# environment via `npm ci && npm test`.
tests-linux:
# We want to run on external PRs, but not on our own internal PRs as they'll be run by the push to the branch
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-20.04
timeout-minutes: 30
steps:
# Clone the repo and checkout the commit for which the workflow was triggered
- uses: actions/checkout@v4
- name: Test integrity of app parameters
run: |
# Check that values of assetsCache and appVersion are correctly duplicated
chmod +x ./scripts/test_duplicate_values.sh
./scripts/test_duplicate_values.sh
# Check that PWAServer is correctly set in init.js
chmod +x ./scripts/test_pwa_server.sh
./scripts/test_pwa_server.sh
- name: Install dependencies
run: npm ci
- name: Unit tests (Linux)
run: npm run test-unit-browsers
- name: Test a full build of the app
run: npm run build
- name: Test integrity of patch_gitignore.sh
run: |
# Check that the /scripts/patch_gitignore script valid (it will be needed for the gh-pages implementation used for unbundled testing)
echo "DEV: If this patch_gitignore script fails, follow instructions in ADDING_DEPENDENCIES_NODE_MODULES.md to correct it."
chmod +x ./scripts/patch_gitignore.sh
./scripts/patch_gitignore.sh
# Check that .gitignore does NOT contain /dist/
failed=0
if grep -q "^/dist/" .gitignore; then
echo "/dist/ found in .gitignore, so patch failed."
failed=1
fi
# Check that .gitignore DOES contain !/node_modules/
if ! grep -q "^\!/node_modules/" .gitignore; then
echo "!/node_modules/ not found in .gitignore, so patch failed."
failed=1
fi
exit $failed
- name: End-to-end tests on Chrome (Linux)
env:
GITHUB_ACTION: ${{ github.event_name }}
run: npm run test-e2e-chrome
# Disabling Edge tests for now, as they are very flaky on Linux, but pass fine on Windows
# - name: End-to-end tests on Edge (Linux)
# env:
# GITHUB_ACTION: ${{ github.event_name }}
# run: npm run test-e2e-edge
- name: End-to-end tests on Firefox (Linux)
env:
GITHUB_ACTION: ${{ github.event_name }}
run: npm run test-e2e-firefox
- name: BrowserStack environment setup
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
uses: browserstack/github-actions/setup-env@master
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
- name: BrowserStack local tunnel setup
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
uses: browserstack/github-actions/setup-local@master
with:
local-testing: start
local-identifier: random
- name: Start server locally in background
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx http-server --silent -p 8099 &
- name: Run BrowserStack tests on Firefox Legacy 56 / Win10
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx mocha tests/e2e/runners/firefox/firefox56.bs.runner.js
- name: Run BrowserStack tests on Firefox 70 / Win10
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx mocha tests/e2e/runners/firefox/firefox70.bs.runner.js
- name: Run BrowserStack tests on Chrome 58 / Mojave
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx mocha tests/e2e/runners/chrome/chrome58.bs.runner.js
- name: Run BrowserStack tests on Chrome 60 / Mojave
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx mocha tests/e2e/runners/chrome/chrome60.bs.runner.js
- name: Run BrowserStack tests on Safari 14 / Big Sur
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx mocha tests/e2e/runners/safari/safari14.bs.runner.js
# [DEV] Test on Edge18 are bit flaky, so we are retrying 2 times
- name: Run BrowserStack tests on Edge Legacy 18 / Win10
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
env:
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: npx mocha tests/e2e/runners/edge/edge18.bs.runner.js --retries 2
- name: Stop BrowserStackLocal
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
uses: browserstack/github-actions/setup-local@master
with:
local-testing: stop
tests-windows:
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: windows-latest
timeout-minutes: 30
steps:
# Clone the repo and checkout the commit for which the workflow was triggered
- uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: Build App
run: npm run build-min
- name: Unit tests (Windows)
run: |
$AggregateExitCode = 0
npm run test-unit-edge
$AggregateExitCode += $LastExitCode
npm run test-unit-firefox
$AggregateExitCode += $LastExitCode
if ($AggregateExitCode -ne 0) {
echo " "
Write-Error "Number of failed tests: $AggregateExitCode"
}
exit $AggregateExitCode
- name: End-to-end tests on Edge Chromium (Windows)
env:
GITHUB_ACTION: ${{ github.event_name }}
run: npx start-server-and-test 'http-server --silent' 8080 'npx mocha ./tests/e2e/runners/edge/microsoftEdge.e2e.runner.js --retries 2'
- name: End-to-end tests on Firefox (Windows)
env:
GITHUB_ACTION: ${{ github.event_name }}
run: npx start-server-and-test 'http-server --silent' 8080 'npx mocha ./tests/e2e/runners/firefox/firefox.e2e.runner.js --retries 2'
- name: End-to-end tests in IE11 Mode (Windows)
env:
GITHUB_ACTION: ${{ github.event_name }}
run: npx start-server-and-test 'http-server --silent' 8080 'npx mocha ./tests/e2e/runners/edge/ieMode.e2e.runner.js --retries 2'
# tests-unit-mac:
# if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
# runs-on: macos-latest
# steps:
# # Clone the repo and checkout the commit for which the workflow was triggered
# - uses: actions/checkout@v4
# - name: Install dependencies
# run: npm ci
# - name: Unit tests (Mackintosh)
# run: |
# npx testcafe remote ./tests/initTestCafe.js --hostname localhost --ports 1337,1338 &
# pid=$!
# open -a Safari http://localhost:1337
# wait $pid