From 107598b4b3da823a20cd2c66bb6992ee8ecda58b Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Sat, 16 Mar 2024 20:38:00 +0100 Subject: [PATCH] Added updated workflow runners. --- bin/package.json | 2 +- bin/plugins/checkPlugin.ts | 16 ++++-- bin/plugins/getCorePlugins.sh | 24 ++++---- bin/plugins/lib/backend-tests.yml | 73 ++++++++++++++----------- bin/plugins/lib/frontend-tests.yml | 7 ++- bin/plugins/lib/npmpublish.yml | 79 +++++---------------------- bin/plugins/updateAllPluginsScript.sh | 2 +- bin/plugins/updateCorePlugins.sh | 2 +- 8 files changed, 87 insertions(+), 118 deletions(-) diff --git a/bin/package.json b/bin/package.json index 4e5fc8198..c2f3f7de6 100644 --- a/bin/package.json +++ b/bin/package.json @@ -30,7 +30,7 @@ "migrateDirtyDBtoRealDB": "node --import tsx migrateDirtyDBtoRealDB.ts", "rebuildPad": "node --import tsx rebuildPad.ts", "stalePlugins": "node --import tsx ./plugins/stalePlugins.ts", - "checkPlugins": "node --import tsx ./plugins/checkPlugins.ts", + "checkPlugin": "node --import tsx ./plugins/checkPlugin.ts", "install-plugins": "node --import tsx ./installPlugins.ts" }, "author": "", diff --git a/bin/plugins/checkPlugin.ts b/bin/plugins/checkPlugin.ts index 73afd4e19..892aad1c6 100644 --- a/bin/plugins/checkPlugin.ts +++ b/bin/plugins/checkPlugin.ts @@ -35,7 +35,7 @@ const logger = log4js.getLogger('checkPlugin'); const epRootDir = await fsp.realpath(path.join(await fsp.realpath(__dirname), '../..')); logger.info(`Etherpad root directory: ${epRootDir}`); process.chdir(epRootDir); - const pluginPath = await fsp.realpath(`node_modules/${pluginName}`); + const pluginPath = await fsp.realpath(`../${pluginName}`); logger.info(`Plugin directory: ${pluginPath}`); const epSrcDir = await fsp.realpath(path.join(epRootDir, 'src')); @@ -173,10 +173,10 @@ const logger = log4js.getLogger('checkPlugin'); const parsedPackageJSON = JSON.parse(packageJSON); await updateDeps(parsedPackageJSON, 'devDependencies', { - 'eslint': '^8.14.0', - 'eslint-config-etherpad': '^3.0.13', + 'eslint': '^8.57.0', + 'eslint-config-etherpad': '^3.0.22', // Changing the TypeScript version can break plugin code, so leave it alone if present. - 'typescript': {ver: '^4.6.4', overwrite: false}, + 'typescript': {ver: '^5.4.2', overwrite: false}, // These were moved to eslint-config-etherpad's dependencies so they can be removed: '@typescript-eslint/eslint-plugin': null, '@typescript-eslint/parser': null, @@ -216,7 +216,7 @@ const logger = log4js.getLogger('checkPlugin'); logger.error(`both ${from} and ${to} exist; delete ${from}`); } } else { - checkFile('bin/plugins/lib/eslintrc.cjs', '.eslintrc.cjs', false); + await checkFile('bin/plugins/lib/eslintrc.cjs', '.eslintrc.cjs', false); } if (checkEntries(parsedPackageJSON, { @@ -237,6 +237,12 @@ const logger = log4js.getLogger('checkPlugin'); logger.warn('package-lock.json not found'); if (!autoFix) { logger.warn('Run npm install in the plugin folder and commit the package-lock.json file.'); + } else { + logger.info('Autofixing missing package-lock.json file'); + execSync('pnpm install', { + cwd: `${pluginPath}/`, + stdio: 'inherit', + }); } } diff --git a/bin/plugins/getCorePlugins.sh b/bin/plugins/getCorePlugins.sh index db0599e14..737a1881b 100755 --- a/bin/plugins/getCorePlugins.sh +++ b/bin/plugins/getCorePlugins.sh @@ -15,25 +15,27 @@ cd "${mydir}/../.." pdir=$(cd .. && pwd -P) || exit 1 plugins=$("${mydir}/listOfficialPlugins") || exit 1 +echo $plugins for d in ${plugins}; do + echo $d log "============================================================" log "${d}" log "============================================================" fd=${pdir}/${d} - repo=git@github.com:ether/${plugin}.git + repo=https://github.com/ether/${d}.git [ -d "${fd}" ] || { log "Cloning ${repo} to ${fd}..." - (cd "${pdir}" && git clone "${repo}" "${d}") || exit 1 + (cd "${pdir}" && git clone "${repo}" "${d}") || continue } || exit 1 log "Fetching latest commits..." (cd "${fd}" && git pull --ff-only) || exit 1 - log "Getting plugin name..." - pn=$(cd "${fd}" && npx -c 'printf %s\\n "${npm_package_name}"') || exit 1 - [ -n "${pn}" ] || fatal "Unable to determine plugin name for ${d}" - md=node_modules/${pn} - [ -d "${md}" ] || { - log "Installing plugin to ${md}..." - ln -s ../../"${d}" "${md}" - } || exit 1 - [ "${md}" -ef "${fd}" ] || fatal "${md} is not a symlink to ${fd}" + #log "Getting plugin name..." + #pn=$(cd "${fd}" && npx -c 'printf %s\\n "${npm_package_name}"') || exit 1 + #[ -n "${pn}" ] || fatal "Unable to determine plugin name for ${d}" + #md=node_modules/${pn} + #[ -d "${md}" ] || { + # log "Installing plugin to ${md}..." + # ln -s ../../"${d}" "${md}" + #} || exit 1 + #[ "${md}" -ef "${fd}" ] || fatal "${md} is not a symlink to ${fd}" done diff --git a/bin/plugins/lib/backend-tests.yml b/bin/plugins/lib/backend-tests.yml index 8422e8983..8ef4d488e 100644 --- a/bin/plugins/lib/backend-tests.yml +++ b/bin/plugins/lib/backend-tests.yml @@ -1,7 +1,8 @@ -name: "Backend tests" +name: Backend Tests # any branch is useful for testing before a PR is submitted -on: [push, pull_request] +on: + workflow_call: jobs: withplugins: @@ -12,7 +13,6 @@ jobs: || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id) name: with Plugins runs-on: ubuntu-latest - steps: - name: Install libreoffice @@ -25,28 +25,12 @@ jobs: uses: actions/checkout@v3 with: repository: ether/etherpad-lite - - - name: Checkout plugin repository - uses: actions/checkout@v3 - with: - path: ./node_modules/__tmp - - - 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 - run: | - mv ./node_modules/__tmp ./node_modules/"${PLUGIN_NAME}" - env: - PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }} + path: etherpad-lite - uses: pnpm/action-setup@v3 name: Install pnpm with: - version: 8 - run_install: false + version: 8 + run_install: false - name: Get pnpm store directory shell: bash run: | @@ -58,18 +42,45 @@ jobs: key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - # 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: Checkout plugin repository + uses: actions/checkout@v3 + with: + path: plugin + - + name: Determine plugin name + id: plugin_name + working-directory: ./plugin + run: | + npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"' + - + name: Link plugin directory + working-directory: ./plugin + run: | + pnpm link --global + - name: Remove tests + working-directory: ./etherpad-lite + run: rm -rf ./src/tests/backend/specs - name: Install Etherpad core dependencies + working-directory: ./etherpad-lite run: bin/installDeps.sh + - name: Link plugin to etherpad-lite + working-directory: ./etherpad-lite + run: | + pnpm link --global $PLUGIN_NAME + pnpm run install-plugins --path ../../plugin + env: + PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }} + - name: Link ep_etherpad-lite + working-directory: ./etherpad-lite/src + run: | + pnpm link --global + - name: Link etherpad to plugin + working-directory: ./plugin + run: | + pnpm link --global ep_etherpad-lite - name: Run the backend tests + working-directory: ./etherpad-lite run: pnpm run test diff --git a/bin/plugins/lib/frontend-tests.yml b/bin/plugins/lib/frontend-tests.yml index 1f8869908..d1eaf8701 100644 --- a/bin/plugins/lib/frontend-tests.yml +++ b/bin/plugins/lib/frontend-tests.yml @@ -1,11 +1,12 @@ # Publicly credit Sauce Labs because they generously support open source # projects. -name: "Frontend Tests" +name: Frontend Tests -on: [push] +on: + workflow_call: jobs: - test: + test-frontend: runs-on: ubuntu-latest steps: diff --git a/bin/plugins/lib/npmpublish.yml b/bin/plugins/lib/npmpublish.yml index d47c36922..763d9a09b 100644 --- a/bin/plugins/lib/npmpublish.yml +++ b/bin/plugins/lib/npmpublish.yml @@ -4,72 +4,21 @@ name: Node.js Package on: - pull_request: - push: - branches: - - main - - master + workflow_call: jobs: - test: + publish-npm: + if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: - # Clone ether/etherpad-lite to ../etherpad-lite so that ep_etherpad-lite - # can be "installed" in this plugin's node_modules. The checkout v2 action - # doesn't support cloning outside of $GITHUB_WORKSPACE (see - # https://github.com/actions/checkout/issues/197), so the repo is first - # cloned to etherpad-lite then moved to ../etherpad-lite. To avoid - # conflicts with this plugin's clone, etherpad-lite must be cloned and - # moved out before this plugin's repo is cloned to $GITHUB_WORKSPACE. - - + - uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: https://registry.npmjs.org/ + - name: Check out Etherpad core uses: actions/checkout@v3 with: repository: ether/etherpad-lite - path: etherpad-lite - - - run: mv etherpad-lite .. - # etherpad-lite has been moved outside of $GITHUB_WORKSPACE, so it is now - # safe to clone this plugin's repo to $GITHUB_WORKSPACE. - - - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v3 - name: Install pnpm - with: - version: 8 - 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- - # All of ep_etherpad-lite's devDependencies are installed because the - # plugin might do `require('ep_etherpad-lite/node_modules/${devDep}')`. - # Eventually it would be nice to create an ESLint plugin that prohibits - # Etherpad plugins from piggybacking off of ep_etherpad-lite's - # devDependencies. If we had that, we could change this line to only - # install production dependencies. - - run: pnpm i && pnpm link --global - - - run: cd ../etherpad-lite/src && pnpm i && pnpm link $PLUGIN_NAME - - - - run: pnpm run test - - - run: npm run lint - - publish-npm: - if: github.event_name == 'push' - needs: test - runs-on: ubuntu-latest - steps: - - - uses: actions/checkout@v3 - uses: pnpm/action-setup@v3 name: Install pnpm with: @@ -116,11 +65,11 @@ jobs: # back-to-back merges will cause the first merge's workflow to fail but # the second's will succeed. - - run: npm publish - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} - - - name: Add package to etherpad organization - run: npm access grant read-write etherpad:developers + run: pnpm publish env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + #- + # name: Add package to etherpad organization + # run: pnpm access grant read-write etherpad:developers + # env: + # NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/bin/plugins/updateAllPluginsScript.sh b/bin/plugins/updateAllPluginsScript.sh index 3ee0118be..0605f1740 100755 --- a/bin/plugins/updateAllPluginsScript.sh +++ b/bin/plugins/updateAllPluginsScript.sh @@ -10,7 +10,7 @@ do # echo $0 if [[ $dir == *"ep_"* ]]; then if [[ $dir != "ep_etherpad-lite" ]]; then - node bin/plugins/checkPlugin.js $dir autopush + pnpm run checkPlugins $dir autopush fi fi # echo $dir diff --git a/bin/plugins/updateCorePlugins.sh b/bin/plugins/updateCorePlugins.sh index 51ef7724c..4c5805e23 100755 --- a/bin/plugins/updateCorePlugins.sh +++ b/bin/plugins/updateCorePlugins.sh @@ -5,5 +5,5 @@ set -e for dir in node_modules/ep_*; do dir=${dir#node_modules/} [ "$dir" != ep_etherpad-lite ] || continue - node bin/plugins/checkPlugin.js "$dir" autopush + pnpm run checkPlugins "$dir" autopush done