checkPlugin: Add `frontend-tests.yml` GitHub workflow

pull/5323/head
Richard Hansen 2021-06-14 19:55:18 -04:00
parent 51c530a3a0
commit 48222449b5
2 changed files with 93 additions and 1 deletions

View File

@ -149,7 +149,7 @@ fs.readdir(pluginPath, (err, rootFiles) => {
if (files.indexOf('.git') === -1) throw new Error('No .git folder, aborting');
prepareRepo();
for (const fn of ['backend-tests.yml', 'npmpublish.yml']) {
for (const fn of ['backend-tests.yml', 'frontend-tests.yml', 'npmpublish.yml']) {
checkFile(`src/bin/plugins/lib/${fn}`, `.github/workflows/${fn}`);
}

View File

@ -0,0 +1,92 @@
# Publicly credit Sauce Labs because they generously support open source
# projects.
name: "frontend tests powered by Sauce Labs"
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Generate Sauce Labs strings
id: sauce_strings
run: |
printf %s\\n '::set-output name=name::${{github.event.repository.name}} ${{ github.workflow }} - ${{ github.job }}'
printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}'
- uses: actions/setup-node@v2
with:
node-version: 12
- name: Check out Etherpad core
uses: actions/checkout@v2
with:
repository: ether/etherpad-lite
- name: Check out the plugin
uses: actions/checkout@v2
with:
path: ./node_modules/__tmp
- name: export GIT_HASH to env
id: environment
run: |
cd ./node_modules/__tmp
echo "::set-output name=sha_short::$(git rev-parse --short ${{ github.sha }})"
- name: Determine plugin name
id: plugin_name
run: |
cd ./node_modules/__tmp
npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"'
- name: Rename plugin directory
env:
PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
run: |
mv ./node_modules/__tmp ./node_modules/"${PLUGIN_NAME}"
- name: Install plugin dependencies
env:
PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
run: |
cd ./node_modules/"${PLUGIN_NAME}"
npm ci
# This must be run after setting up the plugin, 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 Etherpad core dependencies
run: src/bin/installDeps.sh
- name: Create settings.json
run: cp settings.json.template settings.json
- name: Disable import/export rate limiting
run: |
sed -e '/^ *"importExportRateLimiting":/,/^ *\}/ s/"max":.*/"max": 0/' -i settings.json
- name: Remove standard frontend test files
run: rm -rf src/tests/frontend/specs
- uses: saucelabs/sauce-connect-action@v1
with:
username: ${{ secrets.SAUCE_USERNAME }}
accessKey: ${{ secrets.SAUCE_ACCESS_KEY }}
tunnelIdentifier: ${{ steps.sauce_strings.outputs.tunnel_id }}
- name: Run the frontend 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/runner.sh