From c86b129f58e0b26aa9b27b6df6ba61a5d8d93847 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 25 Sep 2023 23:13:43 -0400 Subject: [PATCH] chore(build): try to publish to npm (#3675) --- .circleci/config.yml | 266 ++++++++++-------- .github/ISSUE_TEMPLATE/bug-report.yml | 2 +- .github/pull_request_template.md | 2 +- .node-version | 2 +- Dockerfile | 4 +- package.json | 4 +- .../OpenResty-Orthanc-Keycloak/dockerfile | 2 +- .../app/.recipes/OpenResty-Orthanc/dockerfile | 2 +- .../OHIFContextMenuCustomization.spec.js | 2 +- .../OHIFCornerstoneToolbar.spec.js | 8 +- .../OHIFMeasurementPanel.spec.js | 5 +- platform/app/cypress/support/commands.js | 11 +- platform/app/netlify.toml | 2 +- .../services/data/DisplaySetService.md | 8 + .../docs/docs/platform/services/data/index.md | 4 +- platform/docs/docusaurus.config.js | 13 + platform/docs/netlify.toml | 2 +- swap-node-cypress.sh | 10 + yarn.lock | 30 ++ 19 files changed, 236 insertions(+), 143 deletions(-) create mode 100644 swap-node-cypress.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 3130f457e45..e2971b7318a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,22 +13,24 @@ version: 2.1 ## orbs: codecov: codecov/codecov@1.0.5 - cypress: cypress-io/cypress@3 -# executors: -# # Custom executor to override Cypress config -# deploy-to-prod-executor: -# docker: -# - image: cimg/node:16.14 -# environment: -# CYPRESS_BASE_URL: https://ohif-staging.netlify.com/ -# chrome-and-pacs: -# docker: -# # Primary container image where all steps run. -# - image: 'cypress/browsers:node18.12.0-chrome106-ff106' + cypress: cypress-io/cypress@3.1.4 + +executors: + cypress-custom: + description: | + Single Docker container used to run Cypress Tests + docker: + - image: cimg/node:<< parameters.node-version >>-browsers + parameters: + node-version: + default: '18.16.1' + description: | + The version of Node to run your tests with. + type: string defaults: &defaults docker: - - image: cimg/node:16.14-browsers + - image: cimg/node:18.18 environment: TERM: xterm # Enable colors in term QUICK_BUILD: true @@ -43,6 +45,7 @@ jobs: steps: # Update yarn - run: yarn -v + - run: node --version # Checkout code and ALL Git Tags - checkout - restore_cache: @@ -93,39 +96,39 @@ jobs: ### # Workflow: PR_OPTIONAL_DOCKER_PUBLISH ### - DOCKER_PR_PUBLISH: - <<: *defaults - steps: - # Enable yarn workspaces - - run: yarn config set workspaces-experimental true + # DOCKER_PR_PUBLISH: + # <<: *defaults + # steps: + # # Enable yarn workspaces + # - run: yarn config set workspaces-experimental true - # Checkout code and ALL Git Tags - - checkout - - restore_cache: - name: Restore Yarn and Cypress Package Cache - keys: - # when lock file changes, use increasingly general patterns to restore cache - - yarn-packages-{{ checksum "yarn.lock" }} - - yarn-packages- + # # Checkout code and ALL Git Tags + # - checkout + # - restore_cache: + # name: Restore Yarn and Cypress Package Cache + # keys: + # # when lock file changes, use increasingly general patterns to restore cache + # - yarn-packages-{{ checksum "yarn.lock" }} + # - yarn-packages- - - run: - name: Install Dependencies - command: yarn install --frozen-lockfile + # - run: + # name: Install Dependencies + # command: yarn install --frozen-lockfile - - setup_remote_docker: - docker_layer_caching: false + # - setup_remote_docker: + # docker_layer_caching: false - - run: - name: Build and push Docker image - command: | - # Remove npm config - rm -f ./.npmrc - # Set our version number using vars - echo $CIRCLE_BUILD_NUM - # Build our image, auth, and push - docker build --tag ohif/app:PR_BUILD-$CIRCLE_BUILD_NUM . - echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin - docker push ohif/app:PR_BUILD-$CIRCLE_BUILD_NUM + # - run: + # name: Build and push Docker image + # command: | + # # Remove npm config + # rm -f ./.npmrc + # # Set our version number using vars + # echo $CIRCLE_BUILD_NUM + # # Build our image, auth, and push + # docker build --tag ohif/app:PR_BUILD-$CIRCLE_BUILD_NUM . + # echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin + # docker push ohif/app:PR_BUILD-$CIRCLE_BUILD_NUM ### # Workflow: DEPLOY @@ -177,63 +180,6 @@ jobs: - commit.txt - version.json - # DEPLOY_TO_DEV: - # docker: - # - image: circleci/node:16.14.0 - # environment: - # TERM: xterm - # NETLIFY_SITE_ID: 32708787-c9b0-4634-b50f-7ca41952da77 - # working_directory: ~/repo - # steps: - # - attach_workspace: - # at: ~/repo - # - run: cd .netlify && npm install - # - run: cp .netlify/deploy-workflow/_redirects platform/app/dist/_redirects - # - run: cd .netlify && npm run deploy - - # DEPLOY_TO_STAGING: - # docker: - # - image: circleci/node:16.14.0 - # environment: - # TERM: xterm - # NETLIFY_SITE_ID: c7502ae3-b150-493c-8422-05701e44a969 - # working_directory: ~/repo - # steps: - # - attach_workspace: - # at: ~/repo - # - run: cd .netlify && npm install - # - run: cp .netlify/deploy-workflow/_redirects platform/app/dist/_redirects - # - run: cd .netlify && npm run deploy - - # DEPLOY_TO_PRODUCTION: - # docker: - # - image: circleci/node:16.14.0 - # environment: - # TERM: xterm - # NETLIFY_SITE_ID: 79c4a5da-5c95-4dc9-84f7-45fd9dfe21b0 - # working_directory: ~/repo - # steps: - # - attach_workspace: - # at: ~/repo - # - run: cd .netlify && npm install - # - run: cp .netlify/deploy-workflow/_redirects platform/app/dist/_redirects - # - run: cd .netlify && npm run deploy - - # DEPLOY_TO_RELEASE_DEV: - # docker: - # - image: circleci/node:16.14.0 - # environment: - # TERM: xterm - # NETLIFY_SITE_ID: 3270878-22 - # working_directory: ~/repo - # steps: - # - attach_workspace: - # at: ~/repo - # - run: cd .netlify && npm install - # - run: - # cp .netlify/deploy-workflow/_redirects platform/app/dist/_redirects - # - run: cd .netlify && npm run deploy - ### # Workflow: RELEASE ### @@ -362,28 +308,116 @@ jobs: docker push ohif/app:$IMAGE_VERSION_FULL fi + # This is copied from the Cypress orb since the default for cypress/run is node 16 and + # we migrated to 18 + CYPRESS_CUSTOM_RUN: + description: | + A single, complete job to run Cypress end-to-end tests in your application. + executor: cypress-custom + parallelism: << parameters.parallelism >> + parameters: + cypress-cache-key: + default: cypress-cache-{{ arch }}-{{ checksum "package.json" }} + description: Cache key used to cache the Cypress binary. + type: string + cypress-cache-path: + default: ~/.cache/Cypress + description: | + By default, this will cache the '~/.cache/Cypress' directory so that the Cypress binary is cached. You can override this by providing your own cache path. + type: string + cypress-command: + default: npx cypress run + description: Command used to run your Cypress tests + type: string + include-branch-in-node-cache-key: + default: false + description: | + If true, this cache will only apply to runs within the same branch. (Adds -{{ .Branch }}- to the node cache key) + type: boolean + install-browsers: + default: false + description: | + Cypress runs by default in the Electron browser. Use this flag to install additional browsers to run your tests in. + This is only needed if you are passing the `--browser` flag in your `cypress-command`. + This parameter leverages the `circleci/browser-tools` orb and includes Chrome and FireFox. + If you need additional browser support you can set this to false and use an executor with a docker image + that includes the browsers of your choosing. See https://hub.docker.com/r/cypress/browsers/tags + type: boolean + install-command: + default: '' + description: Overrides the default NPM command (npm ci) + type: string + node-cache-version: + default: v1 + description: + Change the default node cache version if you need to clear the cache for any reason. + type: string + package-manager: + default: npm + description: Select the default node package manager to use. NPM v5+ Required. + enum: + - npm + - yarn + - yarn-berry + type: enum + parallelism: + default: 1 + description: | + Number of Circle machines to use for load balancing, min 1 + (requires `parallel` and `record` flags in your `cypress-command`) + type: integer + post-install: + default: '' + description: | + Additional commands to run after running install but before verifying Cypress and saving cache. + type: string + start-command: + default: '' + description: Command used to start your local dev server for Cypress to tests against + type: string + working-directory: + default: '' + description: Directory containing package.json + type: string + steps: + - cypress/install: + cypress-cache-key: << parameters.cypress-cache-key >> + cypress-cache-path: << parameters.cypress-cache-path >> + include-branch-in-node-cache-key: << parameters.include-branch-in-node-cache-key >> + install-browsers: << parameters.install-browsers >> + install-command: << parameters.install-command >> + node-cache-version: << parameters.node-cache-version >> + package-manager: << parameters.package-manager >> + post-install: << parameters.post-install >> + working-directory: << parameters.working-directory >> + - cypress/run-tests: + cypress-command: << parameters.cypress-command >> + start-command: << parameters.start-command >> + working-directory: << parameters.working-directory >> + workflows: PR_CHECKS: jobs: - UNIT_TESTS - - cypress/run: - name: 'E2E: PWA' - start-command: yarn run test:data && yarn run test:e2e:serve - install-browsers: true - cypress-command: - 'npx wait-on@latest http://localhost:3000 && cd platform/app && npx cypress run - --record --browser chrome --parallel' - package-manager: 'yarn' - cypress-cache-key: 'yarn-packages-{{ checksum "yarn.lock" }}' - cypress-cache-path: '~/.cache/Cypress' - post-steps: - - store_artifacts: - path: platform/app/cypress/screenshots - - store_artifacts: - path: platform/app/cypress/videos - - store_test_results: - path: platform/app/cypress/results + - CYPRESS_CUSTOM_RUN: + name: 'Cypress Tests' + context: cypress + matrix: + parameters: + start-command: + - yarn run test:data && yarn run test:e2e:serve + install-browsers: + - true + cypress-command: + - 'npx wait-on@latest http://localhost:3000 && cd platform/app && npx cypress run + --record --browser chrome --parallel' + package-manager: + - 'yarn' + cypress-cache-key: + - 'yarn-packages-{{ checksum "yarn.lock" }}' + cypress-cache-path: + - '~/.cache/Cypress' requires: - UNIT_TESTS diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 847fc6cdff9..83577dd7c13 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -64,7 +64,7 @@ body: attributes: label: 'Node version' description: 'Your Node.js version.' - placeholder: 'e.g., 16.14.0' + placeholder: 'e.g., 18.16.1' validations: required: true - type: input diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index cc3752267f1..6a1753d87d8 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -83,7 +83,7 @@ after the commits are squashed. #### Tested Environment - [] OS: -- [] Node version: +- [] Node version: - [] Browser: diff --git a/.node-version b/.node-version index 832d3850644..3876fd49864 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -16.14.0 +18.16.1 diff --git a/Dockerfile b/Dockerfile index 10a9f4ac589..e6310c3ba34 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ # Stage 1: Build the application # docker build -t ohif/viewer:latest . -FROM node:16.15.0-slim as json-copier +FROM node:18.16.1-slim as json-copier RUN mkdir /usr/src/app WORKDIR /usr/src/app @@ -37,7 +37,7 @@ COPY platform /usr/src/app/platform #RUN find platform \! -name "package.json" -mindepth 2 -maxdepth 2 -print | xargs rm -rf # Copy Files -FROM node:16.15.0-slim as builder +FROM node:18.16.1-slim as builder RUN apt-get update && apt-get install -y build-essential python3 RUN mkdir /usr/src/app WORKDIR /usr/src/app diff --git a/package.json b/package.json index a2825756035..910a4582111 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ ] }, "engines": { - "node": ">=14", + "node": ">=16", "npm": ">=6", "yarn": ">=1.16.0" }, @@ -104,7 +104,7 @@ "eslint-plugin-react-hooks": "^4.4.0", "eslint-plugin-tsdoc": "^0.2.11", "eslint-webpack-plugin": "^2.5.3", - "execa": "^7.1.1", + "execa": "^8.0.1", "extract-css-chunks-webpack-plugin": "^4.5.4", "html-webpack-plugin": "^5.3.2", "husky": "^3.0.0", diff --git a/platform/app/.recipes/OpenResty-Orthanc-Keycloak/dockerfile b/platform/app/.recipes/OpenResty-Orthanc-Keycloak/dockerfile index f150a82f492..fa066291e3d 100644 --- a/platform/app/.recipes/OpenResty-Orthanc-Keycloak/dockerfile +++ b/platform/app/.recipes/OpenResty-Orthanc-Keycloak/dockerfile @@ -23,7 +23,7 @@ # Stage 1: Build the application -FROM node:16.15.0-slim as builder +FROM node:18.16.1-slim as builder RUN mkdir /usr/src/app WORKDIR /usr/src/app diff --git a/platform/app/.recipes/OpenResty-Orthanc/dockerfile b/platform/app/.recipes/OpenResty-Orthanc/dockerfile index 8764705dab6..643c52a57d5 100644 --- a/platform/app/.recipes/OpenResty-Orthanc/dockerfile +++ b/platform/app/.recipes/OpenResty-Orthanc/dockerfile @@ -23,7 +23,7 @@ # Stage 1: Build the application -FROM node:16.15.0-slim as builder +FROM node:18.16.1-slim as builder RUN mkdir /usr/src/app WORKDIR /usr/src/app diff --git a/platform/app/cypress/integration/measurement-tracking/OHIFContextMenuCustomization.spec.js b/platform/app/cypress/integration/measurement-tracking/OHIFContextMenuCustomization.spec.js index 5f2ba6f5a2b..f4c044d08f2 100644 --- a/platform/app/cypress/integration/measurement-tracking/OHIFContextMenuCustomization.spec.js +++ b/platform/app/cypress/integration/measurement-tracking/OHIFContextMenuCustomization.spec.js @@ -11,7 +11,7 @@ describe('OHIF Context Menu', function () { it('checks context menu customization', function () { // Add length measurement cy.addLengthMeasurement(); - cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').click(); + cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').as('yesBtn').click(); cy.get('[data-cy="measurement-item"]').click(); const [x1, y1] = [150, 100]; diff --git a/platform/app/cypress/integration/measurement-tracking/OHIFCornerstoneToolbar.spec.js b/platform/app/cypress/integration/measurement-tracking/OHIFCornerstoneToolbar.spec.js index 15fe14babc1..117bdea3882 100644 --- a/platform/app/cypress/integration/measurement-tracking/OHIFCornerstoneToolbar.spec.js +++ b/platform/app/cypress/integration/measurement-tracking/OHIFCornerstoneToolbar.spec.js @@ -109,14 +109,14 @@ describe('OHIF Cornerstone Toolbar', () => { it('checks if Length annotation can be added to viewport and shows up in the measurements panel', () => { //Click on button and verify if icon is active on toolbar cy.addLengthMeasurement(); - cy.get('[data-cy="viewport-notification"]').should('exist'); - cy.get('[data-cy="viewport-notification"]').should('be.visible'); - cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').click(); + cy.get('[data-cy="viewport-notification"]').as('notif').should('exist'); + cy.get('[data-cy="viewport-notification"]').as('notif').should('be.visible'); + cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').as('yesBtn').click(); //Verify the measurement exists in the table cy.get('@measurementsPanel').should('be.visible'); - cy.get('[data-cy="measurement-item"]').its('length').should('be.at.least', 1); + cy.get('[data-cy="measurement-item"]').as('measure').its('length').should('be.at.least', 1); }); /*it('checks if angle annotation can be added on viewport without causing any errors', () => { diff --git a/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js b/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js index 74b172f32db..1cfb1cede4b 100644 --- a/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js +++ b/platform/app/cypress/integration/measurement-tracking/OHIFMeasurementPanel.spec.js @@ -26,7 +26,7 @@ describe('OHIF Measurement Panel', function () { cy.get('[data-cy="viewport-notification"]').as('viewportNotification').should('exist'); cy.get('[data-cy="viewport-notification"]').as('viewportNotification').should('be.visible'); - cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').as('promptBeginTrackingYesBtn').click(); + cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').as('yesBtn').click(); cy.get('[data-cy="measurement-item"]').as('measurementItem').click(); @@ -43,8 +43,7 @@ describe('OHIF Measurement Panel', function () { it('checks if image would jump when clicked on a measurement item', function () { // Add length measurement cy.addLengthMeasurement(); - cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').as('promptBeginTrackingYesBtn'); - cy.get('@promptBeginTrackingYesBtn').click(); + cy.get('[data-cy="prompt-begin-tracking-yes-btn"]').as('yesBtn').click(); cy.scrollToIndex(13); diff --git a/platform/app/cypress/support/commands.js b/platform/app/cypress/support/commands.js index 948df1a2799..33a791fa599 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).click(x, y, { force: true, multiple: true }).wait(250); + cy.get(alias).as(`axu-${alias}`).click(x, y, { force: true, multiple: true }).wait(250); }; cy.get(viewport).as('viewportAlias'); @@ -187,11 +187,10 @@ Cypress.Commands.add('addAngle', (viewport, firstClick, secondClick, thirdClick) }); Cypress.Commands.add('expectMinimumThumbnails', (seriesToWait = 1) => { - cy.get('[data-cy="study-browser-thumbnail"]', { timeout: 50000 }).as('thumbnails'); - - cy.get('@thumbnails').should($itemList => { - expect($itemList.length).to.be.gte(seriesToWait); - }); + cy.get('[data-cy="study-browser-thumbnail"]', { timeout: 50000 }).should( + 'have.length.gte', + seriesToWait + ); }); //Command to wait DICOM image to load into the viewport diff --git a/platform/app/netlify.toml b/platform/app/netlify.toml index 5942b9a58b7..bc07d914e5f 100644 --- a/platform/app/netlify.toml +++ b/platform/app/netlify.toml @@ -19,7 +19,7 @@ [build.environment] # If 'production', `yarn install` does not install devDependencies NODE_ENV = "development" - NODE_VERSION = "16.14.0" + NODE_VERSION = "18.16.1" YARN_VERSION = "1.22.5" RUBY_VERSION = "2.6.2" YARN_FLAGS = "--no-ignore-optional --pure-lockfile" diff --git a/platform/docs/docs/platform/services/data/DisplaySetService.md b/platform/docs/docs/platform/services/data/DisplaySetService.md index 898ad138837..8b8bcae671d 100644 --- a/platform/docs/docs/platform/services/data/DisplaySetService.md +++ b/platform/docs/docs/platform/services/data/DisplaySetService.md @@ -8,6 +8,14 @@ sidebar_label: DisplaySet Service ## Overview `DisplaySetService` handles converting the `instanceMetadata` into `DisplaySet` that `OHIF` uses for the visualization. `DisplaySetService` gets initialized at service startup time, but is then cleared in the `Mode.jsx`. During the initialization `SOPClassHandlerIds` of the `modes` gets registered with the `DisplaySetService`. +:::tip + +DisplaySet is a general set of entities and contains links to bunch of displayable objects (images, etc.) Some series might get split up into different displaySets e.g., MG might have mixed views in a single series, but users might want to have separate LCC, RCC, etc. for hanging protocol usage. A viewport renders a display set into a displayable object. + +imageSet is a particular implementation of image displays. +::: + + > Based on the instanceMetadata's `SOPClassHandlerId`, the correct module from the registered extensions is found by `OHIF` and its `getDisplaySetsFromSeries` runs to create a DisplaySet for the Series. Note that this is an ordered operation, and consumes the instances as it proceeds, with the first registered handlers being able to consume instances first. diff --git a/platform/docs/docs/platform/services/data/index.md b/platform/docs/docs/platform/services/data/index.md index cdeb44c7730..6b92fdde1dd 100644 --- a/platform/docs/docs/platform/services/data/index.md +++ b/platform/docs/docs/platform/services/data/index.md @@ -17,9 +17,9 @@ We maintain the following non-ui Services: - [DicomMetadata Store](./../data/DicomMetadataStore.md) - [DisplaySet Service](./../data/DisplaySetService.md) - [Hanging Protocol Service](../data/HangingProtocolService.md) -- [Toolbar Service](../data/ToolBarService.md) +- [Toolbar Service](./ToolbarService.md) - [Measurement Service](../data/MeasurementService.md) -- [Customization Service](../data/customization-service.md) +- [Customization Service](./../ui/customization-service.md) - [State Sync Service](../data/StateSyncService.md) - [Panel Service](../data/PanelService.md) diff --git a/platform/docs/docusaurus.config.js b/platform/docs/docusaurus.config.js index 4dfa38548aa..bdcaa205b19 100644 --- a/platform/docs/docusaurus.config.js +++ b/platform/docs/docusaurus.config.js @@ -74,6 +74,19 @@ module.exports = { // }, themes: ['@docusaurus/theme-live-codeblock'], plugins: [ + () => ({ + name: 'resolve-react', + configureWebpack() { + return { + resolve: { + alias: { + // assuming root node_modules is up from "./packages/ + react: path.resolve('../../node_modules/react'), + }, + }, + }; + }, + }), path.resolve(__dirname, './pluginOHIFWebpackConfig.js'), 'plugin-image-zoom', // 3rd party plugin for image click to pop [ diff --git a/platform/docs/netlify.toml b/platform/docs/netlify.toml index e83629343b0..ff82abc6677 100644 --- a/platform/docs/netlify.toml +++ b/platform/docs/netlify.toml @@ -16,7 +16,7 @@ [build.environment] # If 'production', `yarn install` does not install devDependencies NODE_ENV = "development" - NODE_VERSION = "16.14.0" + NODE_VERSION = "18.16.1" YARN_VERSION = "1.22.5" RUBY_VERSION = "2.6.2" YARN_FLAGS = "--no-ignore-optional --pure-lockfile" diff --git a/swap-node-cypress.sh b/swap-node-cypress.sh new file mode 100644 index 00000000000..2b5938f13c7 --- /dev/null +++ b/swap-node-cypress.sh @@ -0,0 +1,10 @@ +set +e +wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" +nvm install v18 +nvm alias default 18.18.0 + +echo 'export NVM_DIR="$HOME/.nvm"' >>$BASH_ENV +echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >>$BASH_ENV diff --git a/yarn.lock b/yarn.lock index 87e4da2dcb6..a4dee08357a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10036,6 +10036,21 @@ execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -10878,6 +10893,11 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -11668,6 +11688,11 @@ human-signals@^4.3.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -18694,6 +18719,11 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sigstore@^1.3.0, sigstore@^1.4.0: version "1.8.0" resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.8.0.tgz#f790120697fa7c89f4418598ce59e638ff680aa5"