ohif-viewer/Dockerfile

90 lines
3.3 KiB
Docker
Raw Normal View History

# syntax=docker/dockerfile:1.7-labs
# This dockerfile is used to publish the `ohif/app` image on dockerhub.
feat: Add DICOM SEG support and MPR, referenceLines and StackSync and more (#3015) * feat: add initial sop class handler for SEG * feat: move segmentation service * update segmentation service methods * fix: viewport data structure * feat: Add initial render for the DICOM SEG for each displaySet * fix: various wrong architectural dependencies between services * feat: initial separate SEG display in each viewport * feat: refactore viewport action bar * initial work for SEG hydration * fix: various bugs regarding drag and dropping different viewports * fix: rendering issues for multiple seg displaysets * fix: bugs for thumbnail and hydration * feat: fix the initial segment color * update after rebase * feat: initial design for the segmentation group table * feat: initial new design for the segmentation panel * feat: segmentation panel * feat: make segmentation appear on all related viewports * fix: segmentation load bug based on functional groups * initial work for segmentation crosshairs * fix: various stylings and functionality * fix: various stylings for the seg panel * fix: overflow styles * feat: add more ui components * feat: added segmentation config * feat: add jump to segment * feat: add jump to segment for DICOM SEG viewport * fix: bugs after rebase * feat: jump in segmentation viewport * fix: mpr support for seg * feat: add more icons * feat: new icons * feat: add new side panel * feat: add segmentation config * feat: add loading indicator to ohif * feat: make hanging protocols follow matching rules for viewports * feat: enhance drag and drop to be hanging protocol aware * fix: mpr restore previous layout * fix: crosshairs toggle * fix: add auth headers to the dicom loader via dicomwebclient * fix: bug for crosshairs toggle in mpr * fix: seg viewport reusing old toolGroup * feat: add loading animation with lottie * fix: various bugs for Segmentation hydration in mpr * feat: change outline alpha to outline opacity * feat: loading indicator for seg viewport * fix: various segmentation group styles * fix: local mode for seg * feat: add animation for the highlight * fix: loading indicatro to show segment indices * feat: enhance modality drop down ui * fix: panels * fix: download form * fix: layout shift in loading indicator * fix: loading indicator to have correct values * fix: update software number * fix: image jump between MPR and default * fix: segmentation cleanup and cine service cleanup * fix: segmentation toolgroup clena up * fix: highlight interval should not trigger again * fix: issue with multiframe sorting * rename: change onSeriesChange to onArrowsClick * fix: buttons for tmtv and layout shift * fix: various bugs wrt crosshairs * fix: crosshairs re init on reset camera * fix: middle slice calculation different from cs middle reset camera * fix: reset camera should reset viewport camera * fix: loading segments in MPR mode * fix: tmtv hp back to before * fix: layout shift * feat: orientation markers for volume viewport * fix: capture for volume viewports * fix: memory leak for back to worklist * fix: loading bar bg color * fix: side panel for only one panel * fix: react select style in production * fix: various styling for segmentation groups * fix: various ui styles * feat: add new segmentation config styles * fix: hover state for segmentation item * fix: side panel layout shift * temp add panels * try to fix scrollbar for thimbnail * fix: scroll not appearing for side panels * feat: changed styles for scrollbar * feat: add cpu fallback warning * fix: webworker destroy * fix: select styles * fix: orientation marker color and position * fix: capture screenshot for volume viewports * fix: hide segment visibility on mpr * fix: reloading an already loaded seg displayset * feat: add is equal * fix: mpr jump to measurements * apply review comments * fix: optimization for the segmentation load * fix: remove unnecessary context menu and hp service reset * fix: segmentation service wrt brush settings * feat: initial work for the stack synchronization * fix: add validateDisplaySetSelectorsForNewDisplaySets to make sure drag and drop can follow requirements * fix: various react proptypes * fix: thumbnails for the tmtv and change default props to default params * feat: make showing loading indicator configurable and add docs * bump versions and add more docs * fix demo * update cornerstone versions * apply review comments * feat: add reference lines * fix build * fix unit tests * add reference lines icon * fix: e2e tests * fix static wado config * docs: add segmentation service docs * fix: docker build * fix: keep camera and bump versions * Try re-enabling minification to fix deploy previews Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
2022-11-16 20:19:52 +01:00
#
# It's a good example of how to build our static application and package it
# with a web server capable of hosting it as static content.
#
# docker build
# --------------
# If you would like to use this dockerfile to build and tag an image, make sure
# you set the context to the project's root directory:
# https://docs.docker.com/engine/reference/commandline/build/
#
#
# SUMMARY
# --------------
# This dockerfile has two stages:
#
# 1. Building the React application for production
# 2. Setting up our Nginx (Alpine Linux) image w/ step one's output
#
# Stage 1: Build the application
# docker build -t ohif/viewer:latest .
# Copy Files
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
FROM node:24-slim as builder
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
RUN apt-get update && apt-get install -y --no-install-recommends build-essential python3 \
&& rm -rf /var/lib/apt/lists/*
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
RUN npm install -g pnpm@11
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH=/usr/src/app/node_modules/.bin:$PATH
fix: pnpm deploy bugs for docs and viewer-dev (#6077) Merging for testing since this can't be tested without a merge to master fix(ci): use --no-frozen-lockfile for docs deploy (pnpm migration) The Build and Deploy Docs workflow ran `pnpm install --frozen-lockfile` and failed on every master push after the pnpm migration: [ERR_PNPM_OUTDATED_LOCKFILE] pnpm-lock.yaml is not up to date with platform/core/package.json - @ohif/ui (lockfile: workspace:*, manifest: 3.13.0-beta.90) publish-version.mjs rewrites @ohif/* workspace deps from "workspace:*" to the concrete release version and commits that bump to master, so the committed manifests intentionally drift from pnpm-lock.yaml. Every CircleCI job already passes --no-frozen-lockfile for exactly this reason (pnpm-workspace.yaml sets frozenLockfile:true as the default); the docs workflow was the lone job still using frozen and so broke the docs deploy. Switch the docs install to --no-frozen-lockfile to match the rest of CI. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @ * fix(ci): write npm auth token to ~/.npmrc so publishes authenticate NPM_PUBLISH wrote the registry auth token to ~/repo/.npmrc (the repo root), but publish-package.mjs does process.chdir(packageDirectory) and runs `npm publish` from inside each package (platform/ui, extensions/*, ...). npm reads the project .npmrc from that package dir and the user .npmrc from $HOME -- it never walks up to ~/repo/.npmrc -- so every publish failed with ENEEDAUTH ("need auth ... requires you to be logged in"). publish-package.mjs catches and swallows per-package publish errors, so NPM_PUBLISH still exited 0 and reported green; the breakage was silent. As a result no @ohif/* package newer than 3.13.0-beta.89 (the last publish before the pnpm migration) reached npm -- beta.90 and beta.91 are missing and the beta dist-tag is stuck at beta.89. Write the token to ~/.npmrc (npm per-user config, read regardless of cwd) instead. This also stops clobbering the committed workspace-config .npmrc (node-linker=hoisted) at the repo root, which the in-job pnpm install/build relies on. Applied to all three auth steps for consistency. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(docker): copy preinstall.js before pnpm install in builder stage The builder stage copies only the package.json manifests, runs `pnpm install --no-frozen-lockfile`, and copies the rest of the source afterward (for layer caching). But the root package.json defines a "preinstall" lifecycle script (node preinstall.js) that pnpm runs at the start of install -- before the source copy -- so the script file was absent and install aborted: . preinstall$ node preinstall.js Error: Cannot find module '/usr/src/app/preinstall.js' (MODULE_NOT_FOUND) ERROR: process "pnpm install --no-frozen-lockfile" did not complete This surfaced once the .npmrc COPY fix (#6076) let the build advance past the earlier COPY failure. preinstall.js is self-contained (it no-ops without GITHUB_TOKEN and guards the AGENTS.md/CLAUDE.md symlink with existsSync), so copying just the script into the early manifest layer is sufficient. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(build): declare postcss plugins in platform/app for Docker build The shared root postcss.config.js (which platform/app re-exports) loads postcss-import, postcss-preset-env, and cssnano, but none were declared in platform/app or the root. They only reached node_modules by being hoisted from platform/docs (postcss-import, postcss-preset-env) and transitively (cssnano). The Docker image excludes platform/docs via .dockerignore and libs/@cornerstonejs is not a workspace member, so under pnpm's stricter node-linker=hoisted the app build failed to resolve the plugins: Loading PostCSS "postcss-preset-env" plugin failed: Cannot find module 'postcss-preset-env' (The accompanying "Can't resolve assets/woff2/latin.woff2" error was a cascade from the broken PostCSS chain and clears with this fix.) Declare the three plugins the config explicitly loads as devDependencies of platform/app, pinned to the versions already resolved by working builds (postcss-import@14.1.0, postcss-preset-env@7.8.3, cssnano@5.1.15), so the build no longer depends on incidental hoisting from docs. The lockfile was regenerated against a workspace:* baseline so the only @ohif change is none -- the diff adds just the postcss plugin trees, keeping specifiers at workspace:* per the repo's convention. Verified by building the full Docker image locally: rspack compiles with 0 errors and the image exports successfully. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 02:57:11 +02:00
# Copy package manifests for install caching. preinstall.js is included because
# the root package.json's "preinstall" lifecycle script (node preinstall.js)
# runs during `pnpm install` below -- before the full source is copied -- so the
# script file must already be present or install fails with MODULE_NOT_FOUND.
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc preinstall.js ./
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
COPY --parents ./extensions/*/package.json ./modes/*/package.json ./platform/*/package.json ./
fix(docs): remove stray tool-call tags breaking the MDX build (#6081) This is a fix to pnpm deployment which needs testing as the final part of origin/master release No functional changes * fix(docs): remove stray tool-call tags breaking the MDX build platform/docs/docs/migration-guide/3p12-to-3p13/build-tooling.md ended with two orphan closing tags (leftover tool-call serialization artifacts): </content> </invoke> Docusaurus compiles Markdown as MDX (JSX-aware), so the orphan closing tag failed the docs build: MDX compilation failed ... Unexpected closing slash in tag, expected an open tag first (build-tooling.md line 402) This was the remaining blocker for build-and-deploy-docs once the --no-frozen-lockfile change let the install step succeed. A scan of the docs tree found no other such artifacts. Verified locally: docusaurus build now generates static files with no MDX errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update lockfile and avoid freshness check on every command * fix(release): keep workspace:* in the repo, concretize only at publish The release flow rewrote internal @ohif/* dependency specifiers to the concrete version and committed them, so pnpm-lock.yaml (which records workspace links) drifted from the manifests on every version bump. The resulting ERR_PNPM_OUTDATED_LOCKFILE broke every frozen install: Netlify (viewer-dev), the docs deploy, pnpm's pre-run deps check, and post-merge installs. Keep workspace:* everywhere in the committed repo and move the concrete-version substitution to publish time only: - publish-version.mjs: bump each package's own `version` field only; stop rewriting @ohif/* dependency/peerDependency specifiers. - publish-package.mjs: publish with `pnpm publish --no-git-checks` instead of `npm publish`. pnpm rewrites workspace:* to the exact version in the published tarball; npm would publish the literal "workspace:*", which npm/yarn consumers cannot resolve. - One-time: revert the 25 workspace manifests' @ohif/* specifiers to workspace:* (version fields untouched) and regenerate pnpm-lock.yaml to match. Because internal deps are workspace:* (links, not versions in the lockfile), version bumps no longer change pnpm-lock.yaml, so it stays in sync and frozen installs keep working. Verified: `pnpm install --frozen-lockfile` passes, and `pnpm pack` of @ohif/core emits a tarball whose @ohif/ui dependency is the exact version (3.13.0-beta.92), not workspace:*. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(ci): correct build-docs install comment for workspace:* release flow publish-version.mjs no longer rewrites @ohif/* deps to concrete versions, so the old comment was stale. Internal deps stay workspace:* and the lockfile stays consistent; pnpm publish concretizes only the published tarball. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(docs): use --frozen-lockfile now that the lockfile no longer drifts With internal deps as workspace:* the lockfile stays in sync across version bumps, so the docs deploy can install frozen -- failing fast on genuine lockfile drift instead of silently reconciling. The --no-frozen-lockfile workaround is no longer needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: use --frozen-lockfile in CI install steps now that the lockfile is stable Internal @ohif/* deps are workspace:* so pnpm-lock.yaml no longer drifts; the UNIT_TESTS/BUILD/NPM_PUBLISH installs can run frozen and fail fast on genuine drift. Kept --no-frozen-lockfile only where it is still required: the Dockerfile (platform/docs is excluded from the build context) and the playwright CS3D-version step (mutates @cornerstonejs versions before installing). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: stability of seg load mpr test * Better drag fix for crosshairs --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:59:04 +02:00
# Run the install before copying the rest of the files.
# Keep --no-frozen-lockfile here (unlike CI): .dockerignore excludes
# platform/docs, so the lockfile's docs importer has no manifest in the build
# context and a frozen install would fail. pnpm reconciles (drops docs) instead.
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
RUN pnpm install --no-frozen-lockfile
# Copy the local directory
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
COPY --link --exclude=pnpm-lock.yaml --exclude=package.json --exclude=Dockerfile . .
# Build here
# After install it should hopefully be stable until the local directory changes
ENV QUICK_BUILD true
feat: Add DICOM SEG support and MPR, referenceLines and StackSync and more (#3015) * feat: add initial sop class handler for SEG * feat: move segmentation service * update segmentation service methods * fix: viewport data structure * feat: Add initial render for the DICOM SEG for each displaySet * fix: various wrong architectural dependencies between services * feat: initial separate SEG display in each viewport * feat: refactore viewport action bar * initial work for SEG hydration * fix: various bugs regarding drag and dropping different viewports * fix: rendering issues for multiple seg displaysets * fix: bugs for thumbnail and hydration * feat: fix the initial segment color * update after rebase * feat: initial design for the segmentation group table * feat: initial new design for the segmentation panel * feat: segmentation panel * feat: make segmentation appear on all related viewports * fix: segmentation load bug based on functional groups * initial work for segmentation crosshairs * fix: various stylings and functionality * fix: various stylings for the seg panel * fix: overflow styles * feat: add more ui components * feat: added segmentation config * feat: add jump to segment * feat: add jump to segment for DICOM SEG viewport * fix: bugs after rebase * feat: jump in segmentation viewport * fix: mpr support for seg * feat: add more icons * feat: new icons * feat: add new side panel * feat: add segmentation config * feat: add loading indicator to ohif * feat: make hanging protocols follow matching rules for viewports * feat: enhance drag and drop to be hanging protocol aware * fix: mpr restore previous layout * fix: crosshairs toggle * fix: add auth headers to the dicom loader via dicomwebclient * fix: bug for crosshairs toggle in mpr * fix: seg viewport reusing old toolGroup * feat: add loading animation with lottie * fix: various bugs for Segmentation hydration in mpr * feat: change outline alpha to outline opacity * feat: loading indicator for seg viewport * fix: various segmentation group styles * fix: local mode for seg * feat: add animation for the highlight * fix: loading indicatro to show segment indices * feat: enhance modality drop down ui * fix: panels * fix: download form * fix: layout shift in loading indicator * fix: loading indicator to have correct values * fix: update software number * fix: image jump between MPR and default * fix: segmentation cleanup and cine service cleanup * fix: segmentation toolgroup clena up * fix: highlight interval should not trigger again * fix: issue with multiframe sorting * rename: change onSeriesChange to onArrowsClick * fix: buttons for tmtv and layout shift * fix: various bugs wrt crosshairs * fix: crosshairs re init on reset camera * fix: middle slice calculation different from cs middle reset camera * fix: reset camera should reset viewport camera * fix: loading segments in MPR mode * fix: tmtv hp back to before * fix: layout shift * feat: orientation markers for volume viewport * fix: capture for volume viewports * fix: memory leak for back to worklist * fix: loading bar bg color * fix: side panel for only one panel * fix: react select style in production * fix: various styling for segmentation groups * fix: various ui styles * feat: add new segmentation config styles * fix: hover state for segmentation item * fix: side panel layout shift * temp add panels * try to fix scrollbar for thimbnail * fix: scroll not appearing for side panels * feat: changed styles for scrollbar * feat: add cpu fallback warning * fix: webworker destroy * fix: select styles * fix: orientation marker color and position * fix: capture screenshot for volume viewports * fix: hide segment visibility on mpr * fix: reloading an already loaded seg displayset * feat: add is equal * fix: mpr jump to measurements * apply review comments * fix: optimization for the segmentation load * fix: remove unnecessary context menu and hp service reset * fix: segmentation service wrt brush settings * feat: initial work for the stack synchronization * fix: add validateDisplaySetSelectorsForNewDisplaySets to make sure drag and drop can follow requirements * fix: various react proptypes * fix: thumbnails for the tmtv and change default props to default params * feat: make showing loading indicator configurable and add docs * bump versions and add more docs * fix demo * update cornerstone versions * apply review comments * feat: add reference lines * fix build * fix unit tests * add reference lines icon * fix: e2e tests * fix static wado config * docs: add segmentation service docs * fix: docker build * fix: keep camera and bump versions * Try re-enabling minification to fix deploy previews Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
2022-11-16 20:19:52 +01:00
# ENV GENERATE_SOURCEMAP=false
ARG APP_CONFIG=config/default.js
ARG PUBLIC_URL=/
2025-03-27 21:47:16 +01:00
ENV PUBLIC_URL=${PUBLIC_URL}
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
RUN pnpm run show:config
RUN pnpm run build
feat: Add DICOM SEG support and MPR, referenceLines and StackSync and more (#3015) * feat: add initial sop class handler for SEG * feat: move segmentation service * update segmentation service methods * fix: viewport data structure * feat: Add initial render for the DICOM SEG for each displaySet * fix: various wrong architectural dependencies between services * feat: initial separate SEG display in each viewport * feat: refactore viewport action bar * initial work for SEG hydration * fix: various bugs regarding drag and dropping different viewports * fix: rendering issues for multiple seg displaysets * fix: bugs for thumbnail and hydration * feat: fix the initial segment color * update after rebase * feat: initial design for the segmentation group table * feat: initial new design for the segmentation panel * feat: segmentation panel * feat: make segmentation appear on all related viewports * fix: segmentation load bug based on functional groups * initial work for segmentation crosshairs * fix: various stylings and functionality * fix: various stylings for the seg panel * fix: overflow styles * feat: add more ui components * feat: added segmentation config * feat: add jump to segment * feat: add jump to segment for DICOM SEG viewport * fix: bugs after rebase * feat: jump in segmentation viewport * fix: mpr support for seg * feat: add more icons * feat: new icons * feat: add new side panel * feat: add segmentation config * feat: add loading indicator to ohif * feat: make hanging protocols follow matching rules for viewports * feat: enhance drag and drop to be hanging protocol aware * fix: mpr restore previous layout * fix: crosshairs toggle * fix: add auth headers to the dicom loader via dicomwebclient * fix: bug for crosshairs toggle in mpr * fix: seg viewport reusing old toolGroup * feat: add loading animation with lottie * fix: various bugs for Segmentation hydration in mpr * feat: change outline alpha to outline opacity * feat: loading indicator for seg viewport * fix: various segmentation group styles * fix: local mode for seg * feat: add animation for the highlight * fix: loading indicatro to show segment indices * feat: enhance modality drop down ui * fix: panels * fix: download form * fix: layout shift in loading indicator * fix: loading indicator to have correct values * fix: update software number * fix: image jump between MPR and default * fix: segmentation cleanup and cine service cleanup * fix: segmentation toolgroup clena up * fix: highlight interval should not trigger again * fix: issue with multiframe sorting * rename: change onSeriesChange to onArrowsClick * fix: buttons for tmtv and layout shift * fix: various bugs wrt crosshairs * fix: crosshairs re init on reset camera * fix: middle slice calculation different from cs middle reset camera * fix: reset camera should reset viewport camera * fix: loading segments in MPR mode * fix: tmtv hp back to before * fix: layout shift * feat: orientation markers for volume viewport * fix: capture for volume viewports * fix: memory leak for back to worklist * fix: loading bar bg color * fix: side panel for only one panel * fix: react select style in production * fix: various styling for segmentation groups * fix: various ui styles * feat: add new segmentation config styles * fix: hover state for segmentation item * fix: side panel layout shift * temp add panels * try to fix scrollbar for thimbnail * fix: scroll not appearing for side panels * feat: changed styles for scrollbar * feat: add cpu fallback warning * fix: webworker destroy * fix: select styles * fix: orientation marker color and position * fix: capture screenshot for volume viewports * fix: hide segment visibility on mpr * fix: reloading an already loaded seg displayset * feat: add is equal * fix: mpr jump to measurements * apply review comments * fix: optimization for the segmentation load * fix: remove unnecessary context menu and hp service reset * fix: segmentation service wrt brush settings * feat: initial work for the stack synchronization * fix: add validateDisplaySetSelectorsForNewDisplaySets to make sure drag and drop can follow requirements * fix: various react proptypes * fix: thumbnails for the tmtv and change default props to default params * feat: make showing loading indicator configurable and add docs * bump versions and add more docs * fix demo * update cornerstone versions * apply review comments * feat: add reference lines * fix build * fix unit tests * add reference lines icon * fix: e2e tests * fix static wado config * docs: add segmentation service docs * fix: docker build * fix: keep camera and bump versions * Try re-enabling minification to fix deploy previews Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
2022-11-16 20:19:52 +01:00
# Precompress files
RUN chmod u+x .docker/compressDist.sh
RUN ./.docker/compressDist.sh
feat: Update to use pnpm (#6031) * Initial pnpm change * Install/update in pnpm sort of works * Attempt to fix install * fix pnpm * Refactor build process to use RSPack instead of Webpack across multiple extensions and modes. Update package.json scripts for development and production builds, and adjust webpack configuration files to accommodate new plugin imports and settings. * Update RSPack dependencies to version 2.0.0 across the project, enhancing compatibility and performance. Refactor webpack configuration in multiple extensions and modes to utilize the new library structure for UMD output. Adjust package.json scripts and settings for improved build processes. * Implement migration guide for OHIF 3.13, detailing the transition from Webpack to Rspack v2, the shift to pnpm workspaces, and the increase in minimum Node.js version to 24. Include new build commands, plugin replacements, and updates to package configurations across the monorepo. * Fix some dev:fast bugs * Move netlify to top level and remove webpack builds * Update version script to deal with lerna missing * chore(tests): Update multiple screenshot test images for various specs * feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts * fix(DICOMSRDisplayTool): Improve actor presence check in viewport * chore(tests): Update multiple screenshot assets for various specs * chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability * chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs * test: update progressive loading screenshots * jest 30 test fixes for compatibility with pnpm cs3d * Use correct setDisplaySets instead of setDataId * fix: Naming change for LegacyVolumeViewport3D * Update to allow tolerance for contour tests * update * fix * refactor: Replace instanceof checks with utility functions for viewport type validation * fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully * bun lock * chore(pnpm): align workspace setup to cornerstone3D and address PR review - .npmrc / pnpm-workspace.yaml: mirror cs3d (node-linker hoisted, strict-peer-dependencies=false, link/prefer workspace packages, minimumReleaseAge, frozenLockfile); sync axios 1.17.0 + tmp override - root: packageManager pnpm@11.4.0, engines pnpm >=11, wire preinstall.js - restore preinstall.js (token/private-repo + CLAUDE->AGENTS symlink) - playwright.yml: keep base CS3D-integration workflow, switch only the package manager (bun/yarn -> pnpm) and node 20 -> 24 - webpack.base.js: revert prod devtool to source-map (drop hidden-source-map) - remove @percy/cypress; .netlify + cli templates engines pnpm >=11 - Dockerfile pin pnpm@11; document tests/globalSetup.ts warmup - drop dicom-sr -> measurement-tracking edge (breaks pnpm cyclic dep) * chore(pnpm): regenerate lockfile and restore cs3d:* dev scripts - Regenerate pnpm-lock.yaml against the resolved workspace (cycle removed, cs3d 4.22.10, workspace:* internal deps). - Restore cs3d:checkout/check/build/watch/install/link/unlink helper scripts (dropped when taking the PR's root scripts), converted yarn -> pnpm since the local cornerstone3D checkout is now pnpm too. * Merge base branch issues * Link ohif app * ci: pin pnpm to 11.4.0 in action-setup (was version: latest) version: latest floats across runs and breaks reproducibility. Pin to the repo's packageManager version (pnpm@11.4.0) in both playwright and build-docs workflows. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: Accidental commit of .npmrc config * Fix build issues * build fix * Dependency fixes * fix: Dependency bug in app on extensions/modes * Fix output configuration * Replace percy screenshots with native cypress * Remove percy screenshot entirely * fix: Build issues * force click to prevent canvas cover issues * Enable swiftshader * Update launch of electron * fix: Broken size calculation * Empty change to force a re-build * fix(cypress): generate ui-next tailwind classes; drop unsupported electron arg Tailwind only scanned @ohif/ui-next via ../../node_modules/@ohif/ui-next, which no longer resolves under the pnpm layout, so ui-next-unique classes (e.g. toolbar split-button sizing) were never generated. Those buttons' hit-boxes collapsed, producing Cypress 'covered by element' failures on toolbar interactions. Scan ui-next by direct filesystem path like ui/extensions/modes. Also stop pushing --enable-unsafe-swiftshader into Electron's launchOptions.args (Electron ignores it and warns); it is supplied via ELECTRON_EXTRA_LAUNCH_ARGS in CI. The arg is still pushed for non-electron chromium (local chrome). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(e2e): disable dev-server overlay during coverage runs The rspack dev-server client overlay injects an iframe (id=rspack-dev-server-client-overlay) that intercepts pointer events, causing Playwright/Cypress clicks on toolbar buttons to time out (e.g. MicroscopyPanel). Disable the overlay when COVERAGE=true (e2e/Playwright webServer) while keeping it for normal local dev. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(microscopy): provide dicom-microscopy-viewer runtime assets The microscopy viewer is loaded at runtime via peerImport('dicom-microscopy-viewer'), which fetches the copied asset served at /dicom-microscopy-viewer/. Two issues prevented those assets from reaching dist, so the viewer never initialized and drawing produced no measurement row: 1) dicom-microscopy-viewer was declared in no workspace package.json (only under libs/@cornerstonejs), so it was not installed at root node_modules and the pluginConfig copy source did not exist. Declare it (0.48.6, matching libs) in the microscopy extension. 2) createCopyPluginToDist appended the public/dist folder name to entries that specify an explicit directory, breaking the dicom-microscopy-viewer public entry (looked for .../dynamic-import/public). Use an explicit directory as-is; only append the folder name for package-derived entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Update to pnpm 11.5.2 and cs3d 5.0.2 * Lock file * fix: Update to newer versions of actions to try to fix hang * Remove unnecessary version * fix: Tests that are flaky * PR comments * Incorrect run name * docs: Explain pluginConfig tooling * Updated notes on pluginConfig and PR comments * fix: resolve plugins in rsbuild build and fix directory-based asset copy rsbuild.config.ts: merge getPluginResolveAliases() and an @ohif/app$ alias into resolve.alias, and add resolve.modules (root, platform/app, platform/ui node_modules) so extensions resolve their shared @ohif/* imports. Brings the rsbuild (dev:fast) path to parity with webpack.pwa.js / webpack.base.js. writePluginImportsFile.js: treat a 'directory' on an extension/mode entry as the package root and copy its public/ and dist/ subdirs instead of the whole directory; public-section entries keep copying their directory verbatim via a new literalDirectory flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor: share resolve alias/modules between webpack and rsbuild configs Extract the resolve.alias (@ohif/app, @, @components, ...) and the node_modules search paths into .webpack/resolveConfig.js, the single source of truth consumed by both webpack.base.js (and every per-package webpack.prod/.dev.js that merges it) and rsbuild.config.ts. getModules(srcDir) appends the building package's own source root, preserving the previous per-package behavior. Ends the drift where the rsbuild path kept missing aliases/module paths that webpack.base.js already had. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a timeout on git fetch and avoid all the unnecessary mirrros * PR comments and tests * Remove cache to prevent corrupting the cache key/setup. * Fix stale/corrupted pnpm installer --------- Co-authored-by: Alireza <ar.sedghi@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 22:04:56 +02:00
# Stage 2: Bundle the built application into a Docker container
# which runs Nginx using Alpine Linux
FROM nginxinc/nginx-unprivileged:1.27-alpine as final
feat: Add DICOM SEG support and MPR, referenceLines and StackSync and more (#3015) * feat: add initial sop class handler for SEG * feat: move segmentation service * update segmentation service methods * fix: viewport data structure * feat: Add initial render for the DICOM SEG for each displaySet * fix: various wrong architectural dependencies between services * feat: initial separate SEG display in each viewport * feat: refactore viewport action bar * initial work for SEG hydration * fix: various bugs regarding drag and dropping different viewports * fix: rendering issues for multiple seg displaysets * fix: bugs for thumbnail and hydration * feat: fix the initial segment color * update after rebase * feat: initial design for the segmentation group table * feat: initial new design for the segmentation panel * feat: segmentation panel * feat: make segmentation appear on all related viewports * fix: segmentation load bug based on functional groups * initial work for segmentation crosshairs * fix: various stylings and functionality * fix: various stylings for the seg panel * fix: overflow styles * feat: add more ui components * feat: added segmentation config * feat: add jump to segment * feat: add jump to segment for DICOM SEG viewport * fix: bugs after rebase * feat: jump in segmentation viewport * fix: mpr support for seg * feat: add more icons * feat: new icons * feat: add new side panel * feat: add segmentation config * feat: add loading indicator to ohif * feat: make hanging protocols follow matching rules for viewports * feat: enhance drag and drop to be hanging protocol aware * fix: mpr restore previous layout * fix: crosshairs toggle * fix: add auth headers to the dicom loader via dicomwebclient * fix: bug for crosshairs toggle in mpr * fix: seg viewport reusing old toolGroup * feat: add loading animation with lottie * fix: various bugs for Segmentation hydration in mpr * feat: change outline alpha to outline opacity * feat: loading indicator for seg viewport * fix: various segmentation group styles * fix: local mode for seg * feat: add animation for the highlight * fix: loading indicatro to show segment indices * feat: enhance modality drop down ui * fix: panels * fix: download form * fix: layout shift in loading indicator * fix: loading indicator to have correct values * fix: update software number * fix: image jump between MPR and default * fix: segmentation cleanup and cine service cleanup * fix: segmentation toolgroup clena up * fix: highlight interval should not trigger again * fix: issue with multiframe sorting * rename: change onSeriesChange to onArrowsClick * fix: buttons for tmtv and layout shift * fix: various bugs wrt crosshairs * fix: crosshairs re init on reset camera * fix: middle slice calculation different from cs middle reset camera * fix: reset camera should reset viewport camera * fix: loading segments in MPR mode * fix: tmtv hp back to before * fix: layout shift * feat: orientation markers for volume viewport * fix: capture for volume viewports * fix: memory leak for back to worklist * fix: loading bar bg color * fix: side panel for only one panel * fix: react select style in production * fix: various styling for segmentation groups * fix: various ui styles * feat: add new segmentation config styles * fix: hover state for segmentation item * fix: side panel layout shift * temp add panels * try to fix scrollbar for thimbnail * fix: scroll not appearing for side panels * feat: changed styles for scrollbar * feat: add cpu fallback warning * fix: webworker destroy * fix: select styles * fix: orientation marker color and position * fix: capture screenshot for volume viewports * fix: hide segment visibility on mpr * fix: reloading an already loaded seg displayset * feat: add is equal * fix: mpr jump to measurements * apply review comments * fix: optimization for the segmentation load * fix: remove unnecessary context menu and hp service reset * fix: segmentation service wrt brush settings * feat: initial work for the stack synchronization * fix: add validateDisplaySetSelectorsForNewDisplaySets to make sure drag and drop can follow requirements * fix: various react proptypes * fix: thumbnails for the tmtv and change default props to default params * feat: make showing loading indicator configurable and add docs * bump versions and add more docs * fix demo * update cornerstone versions * apply review comments * feat: add reference lines * fix build * fix unit tests * add reference lines icon * fix: e2e tests * fix static wado config * docs: add segmentation service docs * fix: docker build * fix: keep camera and bump versions * Try re-enabling minification to fix deploy previews Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
2022-11-16 20:19:52 +01:00
#RUN apk add --no-cache bash
ARG PUBLIC_URL=/
ENV PUBLIC_URL=${PUBLIC_URL}
2025-03-27 21:47:16 +01:00
ARG PORT=80
ENV PORT=${PORT}
feat: Add DICOM SEG support and MPR, referenceLines and StackSync and more (#3015) * feat: add initial sop class handler for SEG * feat: move segmentation service * update segmentation service methods * fix: viewport data structure * feat: Add initial render for the DICOM SEG for each displaySet * fix: various wrong architectural dependencies between services * feat: initial separate SEG display in each viewport * feat: refactore viewport action bar * initial work for SEG hydration * fix: various bugs regarding drag and dropping different viewports * fix: rendering issues for multiple seg displaysets * fix: bugs for thumbnail and hydration * feat: fix the initial segment color * update after rebase * feat: initial design for the segmentation group table * feat: initial new design for the segmentation panel * feat: segmentation panel * feat: make segmentation appear on all related viewports * fix: segmentation load bug based on functional groups * initial work for segmentation crosshairs * fix: various stylings and functionality * fix: various stylings for the seg panel * fix: overflow styles * feat: add more ui components * feat: added segmentation config * feat: add jump to segment * feat: add jump to segment for DICOM SEG viewport * fix: bugs after rebase * feat: jump in segmentation viewport * fix: mpr support for seg * feat: add more icons * feat: new icons * feat: add new side panel * feat: add segmentation config * feat: add loading indicator to ohif * feat: make hanging protocols follow matching rules for viewports * feat: enhance drag and drop to be hanging protocol aware * fix: mpr restore previous layout * fix: crosshairs toggle * fix: add auth headers to the dicom loader via dicomwebclient * fix: bug for crosshairs toggle in mpr * fix: seg viewport reusing old toolGroup * feat: add loading animation with lottie * fix: various bugs for Segmentation hydration in mpr * feat: change outline alpha to outline opacity * feat: loading indicator for seg viewport * fix: various segmentation group styles * fix: local mode for seg * feat: add animation for the highlight * fix: loading indicatro to show segment indices * feat: enhance modality drop down ui * fix: panels * fix: download form * fix: layout shift in loading indicator * fix: loading indicator to have correct values * fix: update software number * fix: image jump between MPR and default * fix: segmentation cleanup and cine service cleanup * fix: segmentation toolgroup clena up * fix: highlight interval should not trigger again * fix: issue with multiframe sorting * rename: change onSeriesChange to onArrowsClick * fix: buttons for tmtv and layout shift * fix: various bugs wrt crosshairs * fix: crosshairs re init on reset camera * fix: middle slice calculation different from cs middle reset camera * fix: reset camera should reset viewport camera * fix: loading segments in MPR mode * fix: tmtv hp back to before * fix: layout shift * feat: orientation markers for volume viewport * fix: capture for volume viewports * fix: memory leak for back to worklist * fix: loading bar bg color * fix: side panel for only one panel * fix: react select style in production * fix: various styling for segmentation groups * fix: various ui styles * feat: add new segmentation config styles * fix: hover state for segmentation item * fix: side panel layout shift * temp add panels * try to fix scrollbar for thimbnail * fix: scroll not appearing for side panels * feat: changed styles for scrollbar * feat: add cpu fallback warning * fix: webworker destroy * fix: select styles * fix: orientation marker color and position * fix: capture screenshot for volume viewports * fix: hide segment visibility on mpr * fix: reloading an already loaded seg displayset * feat: add is equal * fix: mpr jump to measurements * apply review comments * fix: optimization for the segmentation load * fix: remove unnecessary context menu and hp service reset * fix: segmentation service wrt brush settings * feat: initial work for the stack synchronization * fix: add validateDisplaySetSelectorsForNewDisplaySets to make sure drag and drop can follow requirements * fix: various react proptypes * fix: thumbnails for the tmtv and change default props to default params * feat: make showing loading indicator configurable and add docs * bump versions and add more docs * fix demo * update cornerstone versions * apply review comments * feat: add reference lines * fix build * fix unit tests * add reference lines icon * fix: e2e tests * fix static wado config * docs: add segmentation service docs * fix: docker build * fix: keep camera and bump versions * Try re-enabling minification to fix deploy previews Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
2022-11-16 20:19:52 +01:00
RUN rm /etc/nginx/conf.d/default.conf
USER nginx
COPY --chown=nginx:nginx .docker/Viewer-v3.x /usr/src
RUN chmod 777 /usr/src/entrypoint.sh
COPY --from=builder /usr/src/app/platform/app/dist /usr/share/nginx/html${PUBLIC_URL}
2025-03-27 21:47:16 +01:00
# Copy paths that are renamed/redirected generally
# Microscopy libraries depend on root level include, so must be copied
COPY --from=builder /usr/src/app/platform/app/dist/dicom-microscopy-viewer /usr/share/nginx/html/dicom-microscopy-viewer
# In entrypoint.sh, app-config.js might be overwritten, so chmod it to be writeable.
# The nginx user cannot chmod it, so change to root.
USER root
2025-10-14 19:06:01 +02:00
RUN chown -R nginx:nginx /usr/share/nginx/html && chmod -R 777 /usr/share/nginx/html
USER nginx
feat: Add DICOM SEG support and MPR, referenceLines and StackSync and more (#3015) * feat: add initial sop class handler for SEG * feat: move segmentation service * update segmentation service methods * fix: viewport data structure * feat: Add initial render for the DICOM SEG for each displaySet * fix: various wrong architectural dependencies between services * feat: initial separate SEG display in each viewport * feat: refactore viewport action bar * initial work for SEG hydration * fix: various bugs regarding drag and dropping different viewports * fix: rendering issues for multiple seg displaysets * fix: bugs for thumbnail and hydration * feat: fix the initial segment color * update after rebase * feat: initial design for the segmentation group table * feat: initial new design for the segmentation panel * feat: segmentation panel * feat: make segmentation appear on all related viewports * fix: segmentation load bug based on functional groups * initial work for segmentation crosshairs * fix: various stylings and functionality * fix: various stylings for the seg panel * fix: overflow styles * feat: add more ui components * feat: added segmentation config * feat: add jump to segment * feat: add jump to segment for DICOM SEG viewport * fix: bugs after rebase * feat: jump in segmentation viewport * fix: mpr support for seg * feat: add more icons * feat: new icons * feat: add new side panel * feat: add segmentation config * feat: add loading indicator to ohif * feat: make hanging protocols follow matching rules for viewports * feat: enhance drag and drop to be hanging protocol aware * fix: mpr restore previous layout * fix: crosshairs toggle * fix: add auth headers to the dicom loader via dicomwebclient * fix: bug for crosshairs toggle in mpr * fix: seg viewport reusing old toolGroup * feat: add loading animation with lottie * fix: various bugs for Segmentation hydration in mpr * feat: change outline alpha to outline opacity * feat: loading indicator for seg viewport * fix: various segmentation group styles * fix: local mode for seg * feat: add animation for the highlight * fix: loading indicatro to show segment indices * feat: enhance modality drop down ui * fix: panels * fix: download form * fix: layout shift in loading indicator * fix: loading indicator to have correct values * fix: update software number * fix: image jump between MPR and default * fix: segmentation cleanup and cine service cleanup * fix: segmentation toolgroup clena up * fix: highlight interval should not trigger again * fix: issue with multiframe sorting * rename: change onSeriesChange to onArrowsClick * fix: buttons for tmtv and layout shift * fix: various bugs wrt crosshairs * fix: crosshairs re init on reset camera * fix: middle slice calculation different from cs middle reset camera * fix: reset camera should reset viewport camera * fix: loading segments in MPR mode * fix: tmtv hp back to before * fix: layout shift * feat: orientation markers for volume viewport * fix: capture for volume viewports * fix: memory leak for back to worklist * fix: loading bar bg color * fix: side panel for only one panel * fix: react select style in production * fix: various styling for segmentation groups * fix: various ui styles * feat: add new segmentation config styles * fix: hover state for segmentation item * fix: side panel layout shift * temp add panels * try to fix scrollbar for thimbnail * fix: scroll not appearing for side panels * feat: changed styles for scrollbar * feat: add cpu fallback warning * fix: webworker destroy * fix: select styles * fix: orientation marker color and position * fix: capture screenshot for volume viewports * fix: hide segment visibility on mpr * fix: reloading an already loaded seg displayset * feat: add is equal * fix: mpr jump to measurements * apply review comments * fix: optimization for the segmentation load * fix: remove unnecessary context menu and hp service reset * fix: segmentation service wrt brush settings * feat: initial work for the stack synchronization * fix: add validateDisplaySetSelectorsForNewDisplaySets to make sure drag and drop can follow requirements * fix: various react proptypes * fix: thumbnails for the tmtv and change default props to default params * feat: make showing loading indicator configurable and add docs * bump versions and add more docs * fix demo * update cornerstone versions * apply review comments * feat: add reference lines * fix build * fix unit tests * add reference lines icon * fix: e2e tests * fix static wado config * docs: add segmentation service docs * fix: docker build * fix: keep camera and bump versions * Try re-enabling minification to fix deploy previews Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
2022-11-16 20:19:52 +01:00
ENTRYPOINT ["/usr/src/entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]