From 3ba0d45b0593c83ff445db3ea0035392f305d3ae Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Sun, 17 Mar 2024 19:37:41 +0100 Subject: [PATCH] Fix uncaught error. Symlink not working with scoped packages (#6233) --- .../workflows/upgrade-from-latest-release.yml | 111 +++++++++--------- src/static/js/pluginfw/LinkInstaller.ts | 17 ++- src/static/js/pluginfw/installer.ts | 2 - 3 files changed, 71 insertions(+), 59 deletions(-) diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/workflows/upgrade-from-latest-release.yml index f2c713c47..8d83bfc93 100644 --- a/.github/workflows/upgrade-from-latest-release.yml +++ b/.github/workflows/upgrade-from-latest-release.yml @@ -29,47 +29,6 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - - - name: Install Etherpad plugins - # Important: Installer for old master which does not have pnpm right now - # 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_image_upload - ep_markdown - ep_readonly_guest - ep_set_title_on_pad - ep_spellcheck - ep_subscript_and_superscript - ep_table_of_contents - - - name: Install all dependencies and symlink for ep_etherpad-lite - run: src/bin/installDeps.sh - - - name: Run the backend tests - run: cd src && npm test - # Because actions/checkout@v4 is called with "ref: master" and without - # "fetch-depth: 0", the local clone does not have the ${GITHUB_SHA} - # commit. Fetch ${GITHUB_REF} to get the ${GITHUB_SHA} commit. Note that a - # plain "git fetch" only fetches "normal" references (refs/heads/* and - # refs/tags/*), and for pull requests none of the normal references - # include ${GITHUB_SHA}, so we have to explicitly tell Git to fetch - # ${GITHUB_REF}. - - - name: Fetch the new Git commits - run: git fetch --depth=1 origin "${GITHUB_REF}" - - - name: Upgrade to the new Git revision - # For pull requests, ${GITHUB_SHA} is the automatically generated merge - # commit that merges the PR's source branch to its destination branch. - run: git checkout "${GITHUB_SHA}" - uses: pnpm/action-setup@v3 name: Install pnpm with: @@ -77,8 +36,7 @@ jobs: run_install: false - name: Only install direct dependencies run: pnpm config set auto-install-peers false - - - name: Install libreoffice + - name: Install libreoffice uses: awalsh128/cache-apt-pkgs-action@v1.4.2 with: packages: libreoffice libreoffice-pdfimport @@ -94,20 +52,67 @@ jobs: key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- + - name: Only install direct dependencies + run: pnpm config set auto-install-peers false + - + name: Install libreoffice + uses: awalsh128/cache-apt-pkgs-action@v1.4.2 + with: + packages: libreoffice libreoffice-pdfimport + version: 1.0 + - + name: Install all dependencies and symlink for ep_etherpad-lite + run: bin/installDeps.sh + - name: Install admin ui + working-directory: admin + run: pnpm install + - name: Build admin ui + working-directory: admin + run: pnpm build + - + name: Install Etherpad plugins + run: > + pnpm run install-plugins + ep_align + ep_author_hover + ep_cursortrace + ep_font_size + ep_hash_auth + ep_headings2 + ep_image_upload + ep_markdown + ep_readonly_guest + ep_set_title_on_pad + ep_spellcheck + ep_subscript_and_superscript + ep_table_of_contents + - + name: Run the backend tests + run: pnpm run test + - + name: Install all dependencies and symlink for ep_etherpad-lite + run: ./bin/installDeps.sh + # Because actions/checkout@v4 is called with "ref: master" and without + # "fetch-depth: 0", the local clone does not have the ${GITHUB_SHA} + # commit. Fetch ${GITHUB_REF} to get the ${GITHUB_SHA} commit. Note that a + # plain "git fetch" only fetches "normal" references (refs/heads/* and + # refs/tags/*), and for pull requests none of the normal references + # include ${GITHUB_SHA}, so we have to explicitly tell Git to fetch + # ${GITHUB_REF}. + - + name: Fetch the new Git commits + run: git fetch --depth=1 origin "${GITHUB_REF}" + - + name: Upgrade to the new Git revision + # For pull requests, ${GITHUB_SHA} is the automatically generated merge + # commit that merges the PR's source branch to its destination branch. + run: git checkout "${GITHUB_SHA}" + - name: Install all dependencies and symlink for ep_etherpad-lite run: bin/installDeps.sh - - - name: Run the backend tests - run: pnpm test - - - name: Install Cypress - working-directory: ./src - run: pnpm install cypress - name: Run Etherpad & Test Frontend working-directory: ./src run: | - pnpm run dev & - curl --connect-timeout 10 --max-time 20 --retry 5 --retry-delay 10 --retry-max-time 60 --retry-connrefused http://127.0.0.1:9001/p/test - ./node_modules/cypress/bin/cypress run --config-file tests/frontend/cypress/cypress.config.js + pnpm run test-ui --project=chromium diff --git a/src/static/js/pluginfw/LinkInstaller.ts b/src/static/js/pluginfw/LinkInstaller.ts index a3034e281..f3906f369 100644 --- a/src/static/js/pluginfw/LinkInstaller.ts +++ b/src/static/js/pluginfw/LinkInstaller.ts @@ -35,7 +35,6 @@ export class LinkInstaller { this.dependenciesMap.set(dependency, new Set([name])) } } - } public async installFromPath(path: string) { @@ -177,9 +176,10 @@ export class LinkInstaller { // We already added the sub dependency this.dependenciesMap.get(dependency)?.add(plugin) } else { - this.linkDependency(dependency) - // Read sub dependencies + try { + this.linkDependency(dependency) + // Read sub dependencies const json:IPluginInfo = JSON.parse( readFileSync(pathToFileURL(path.join(pluginInstallPath, dependency, 'package.json'))) as unknown as string); if(json.dependencies){ @@ -199,7 +199,16 @@ export class LinkInstaller { // Check if the dependency is already installed accessSync(path.join(node_modules, dependency), constants.F_OK) } catch (err) { - symlinkSync(path.join(pluginInstallPath, dependency), path.join(node_modules, dependency), 'dir') + try { + if(dependency.startsWith("@")){ + const newDependency = dependency.split("@")[0] + symlinkSync(path.join(pluginInstallPath, dependency), path.join(node_modules, newDependency), 'dir') + } else { + symlinkSync(path.join(pluginInstallPath, dependency), path.join(node_modules, dependency), 'dir') + } + } catch (e) { + // Nothing to do. We're all set + } } } diff --git a/src/static/js/pluginfw/installer.ts b/src/static/js/pluginfw/installer.ts index 1912ed7f5..973bdd56f 100644 --- a/src/static/js/pluginfw/installer.ts +++ b/src/static/js/pluginfw/installer.ts @@ -79,8 +79,6 @@ export const checkForMigration = async () => { // Initialize linkInstaller await linkInstaller.init() - - try { await fs.access(installedPluginsPath, fs.constants.F_OK); } catch (err) {