From 8feb5ee3f9c1f4d9ddc3bbf9dd8af5ffbf88abfc Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 26 Sep 2023 15:27:24 -0400 Subject: [PATCH] chore(publish): fix timeout problem without lerna (#3679) --- .../OHIFMeasurementPanel.spec.js | 1 + platform/app/cypress/support/commands.js | 11 ++- publish-package.mjs | 71 ++++++++++++++----- 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js b/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js index 514d66c7fc..9f0e8b0c8d 100644 --- a/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js +++ b/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js @@ -23,6 +23,7 @@ describe('OHIF Measurement Panel', function () { it('checks if measurement item can be Relabeled under Measurements panel', function () { // Add length measurement cy.addLengthMeasurement(); + cy.get('[data-cy="viewport-notification"]').as('viewportNotification').should('exist'); cy.get('[data-cy="viewport-notification"]').as('viewportNotification').should('be.visible'); diff --git a/platform/app/cypress/support/commands.js b/platform/app/cypress/support/commands.js index 33a791fa59..70a5cfe814 100644 --- a/platform/app/cypress/support/commands.js +++ b/platform/app/cypress/support/commands.js @@ -145,7 +145,7 @@ Cypress.Commands.add('drag', { prevSubject: 'element' }, (...args) => */ Cypress.Commands.add('addLine', (viewport, firstClick, secondClick) => { const performClick = (alias, x, y) => { - cy.get(alias).as(`axu-${alias}`).click(x, y, { force: true, multiple: true }).wait(250); + cy.get(alias).as(`axu-${alias}`).click(x, y, { force: true, multiple: true }).wait(1000); }; cy.get(viewport).as('viewportAlias'); @@ -155,11 +155,10 @@ Cypress.Commands.add('addLine', (viewport, firstClick, secondClick) => { // First click performClick('@viewportAlias', x1, y1); - // Move the mouse - cy.get('@viewportAlias').trigger('mousemove', { clientX: x2, clientY: y2 }).wait(250); - // Second click performClick('@viewportAlias', x2, y2); + + cy.wait(1000); }); /** @@ -281,7 +280,7 @@ Cypress.Commands.add( cy.get('@lengthButton').should('have.class', 'active'); - cy.addLine('.viewport-element', firstClick, secondClick); + cy.addLine('.cornerstone-canvas', firstClick, secondClick); } ); @@ -292,7 +291,7 @@ Cypress.Commands.add( cy.get('[data-cy="MeasurementTools-split-button-secondary"]').click(); cy.get('[data-cy="Angle"]').click(); - cy.addAngle('.viewport-element', initPos, midPos, finalPos); + cy.addAngle('.cornerstone-canvas', initPos, midPos, finalPos); } ); diff --git a/publish-package.mjs b/publish-package.mjs index 9a1c6c5a51..a33da872af 100644 --- a/publish-package.mjs +++ b/publish-package.mjs @@ -1,24 +1,63 @@ import { execa } from 'execa'; +import fs from 'fs/promises'; +import glob from 'glob'; +import path from 'path'; + +const MAX_RETRIES = 3; +const RETRY_DELAY = 10000; // 10 seconds async function run() { const { stdout: branchName } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD']); - // using the environment variable NPM_TOKEN, create a .npmrc file - // and set the token to the value of the environment variable - // Publishing each package, if on master/main branch publish beta versions - // otherwise publish latest - if (branchName === 'release') { - await execa('npx', ['lerna', 'publish', 'from-package', '--no-verify-access', '--yes']); - } else { - await execa('npx', [ - 'lerna', - 'publish', - 'from-package', - '--no-verify-access', - '--yes', - '--dist-tag', - 'beta', - ]); + const lernaJson = JSON.parse(await fs.readFile('lerna.json', 'utf8')); + + const packages = lernaJson.packages; + + const rootDir = process.cwd(); + + for (const packagePathPattern of packages) { + const matchingDirectories = glob.sync(packagePathPattern); + + for (const packageDirectory of matchingDirectories) { + // change back to the root directory + process.chdir(rootDir); + + const packageJsonPath = path.join(packageDirectory, 'package.json'); + + try { + const packageJsonContent = JSON.parse(await fs.readFile(packageJsonPath, 'utf8')); + + if (packageJsonContent.private) { + console.log(`Skipping private package at ${packageDirectory}`); + continue; + } + + process.chdir(packageDirectory); + + let retries = 0; + while (retries < MAX_RETRIES) { + try { + const publishArgs = ['publish']; + + if (branchName === 'master') { + publishArgs.push('--tag', 'beta'); + } + + await execa('npm', publishArgs); + console.log(`Successfully published package at ${packageDirectory}`); + break; + } catch (error) { + retries++; + console.error( + `Failed to publish package at ${packageDirectory} with error ${error}, retrying... (${retries}/${MAX_RETRIES})` + ); + await new Promise(resolve => setTimeout(resolve, RETRY_DELAY)); + } + } + } catch (error) { + console.error(`An error occurred while processing ${packageDirectory}: ${error}`); + } + } } console.log('Finished');