diff --git a/.circleci/config.yml b/.circleci/config.yml index f8fced437..ef8cf92ec 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -208,7 +208,7 @@ jobs: - setup_remote_docker: docker_layer_caching: false - run: - name: Build and push Docker image from the release branch + name: Build Docker image for amd64 command: | # This file will exist if a new version was published by # our command in the previous job. @@ -222,12 +222,16 @@ jobs: export IMAGE_VERSION_FULL=v$IMAGE_VERSION echo $IMAGE_VERSION echo $IMAGE_VERSION_FULL - # Build our image, auth, and push - docker build --tag ohif/app:$IMAGE_VERSION_FULL --tag ohif/app:latest . + # Build our amd64 image, auth, and push + docker build --platform linux/amd64 --tag ohif/app:$IMAGE_VERSION_FULL-amd64 --tag ohif/app:latest-amd64 . echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin - docker push ohif/app:$IMAGE_VERSION_FULL - docker push ohif/app:latest + docker push ohif/app:$IMAGE_VERSION_FULL-amd64 + docker push ohif/app:latest-amd64 fi + - persist_to_workspace: + root: ~/repo + paths: + - . DOCKER_RELEASE_PUBLISH_ARM: <<: *defaults @@ -238,7 +242,7 @@ jobs: - setup_remote_docker: docker_layer_caching: false - run: - name: Build and push ARM64 Docker image from the release branch + name: Build Docker image for arm64 command: | # This file will exist if a new version was published by # our command in the previous job. @@ -252,12 +256,16 @@ jobs: export IMAGE_VERSION_FULL=v$IMAGE_VERSION echo $IMAGE_VERSION echo $IMAGE_VERSION_FULL - # Build our ARM64 image, auth, and push - docker build --tag ohif/app:$IMAGE_VERSION_FULL-arm64 --tag ohif/app:latest-arm64 . + # Build our arm64 image, auth, and push + docker build --platform linux/arm64 --tag ohif/app:$IMAGE_VERSION_FULL-arm64 --tag ohif/app:latest-arm64 . echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin docker push ohif/app:$IMAGE_VERSION_FULL-arm64 docker push ohif/app:latest-arm64 fi + - persist_to_workspace: + root: ~/repo + paths: + - . DOCKER_BETA_PUBLISH: <<: *defaults @@ -268,7 +276,7 @@ jobs: - setup_remote_docker: docker_layer_caching: false - run: - name: Build and push Docker image from the master branch (beta releases) + name: Build Docker image for amd64 (Beta) command: | echo $(ls -l) @@ -280,19 +288,17 @@ jobs: else echo "Building and pushing Docker image from the master branch (beta releases)" rm -f ./.npmrc + # Set our version number using vars export IMAGE_VERSION=$(cat version.txt) export IMAGE_VERSION_FULL=v$IMAGE_VERSION echo $IMAGE_VERSION echo $IMAGE_VERSION_FULL - # Build our image, auth, and push - - echo "starting docker build" - docker build --tag ohif/app:$IMAGE_VERSION_FULL . + # Build our amd64 image, auth, and push + docker build --platform linux/amd64 --tag ohif/app:$IMAGE_VERSION_FULL-amd64 --tag ohif/app:latest-beta-amd64 . echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin - - echo "starting docker push" - docker push ohif/app:$IMAGE_VERSION_FULL + docker push ohif/app:$IMAGE_VERSION_FULL-amd64 + docker push ohif/app:latest-beta-amd64 fi DOCKER_BETA_PUBLISH_ARM: @@ -304,7 +310,7 @@ jobs: - setup_remote_docker: docker_layer_caching: false - run: - name: Build and push ARM64 Docker image from the master branch (beta releases) + name: Build Docker image for arm64 (Beta) command: | echo $(ls -l) @@ -321,13 +327,11 @@ jobs: export IMAGE_VERSION_FULL=v$IMAGE_VERSION echo $IMAGE_VERSION echo $IMAGE_VERSION_FULL - # Build our ARM64 image, auth, and push - echo "starting docker build" - docker build --tag ohif/app:$IMAGE_VERSION_FULL-arm64 . + # Build our arm64 image, auth, and push + docker build --platform linux/arm64 --tag ohif/app:$IMAGE_VERSION_FULL-arm64 --tag ohif/app:latest-beta-arm64 . echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin - - echo "starting docker push" docker push ohif/app:$IMAGE_VERSION_FULL-arm64 + docker push ohif/app:latest-beta-arm64 fi CYPRESS: @@ -356,6 +360,84 @@ jobs: --browser chrome --parallel start-command: bun run test:data && bun run test:e2e:serve + DOCKER_MULTIARCH_MANIFEST: + <<: *defaults + resource_class: large + steps: + - attach_workspace: + at: ~/repo + - setup_remote_docker: + docker_layer_caching: false + - run: + name: Create and push multi-architecture manifest + command: | + # This file will exist if a new version was published by + # our command in the previous job. + if [[ ! -e version.txt ]]; then + exit 0 + else + echo "Building and pushing multi-architecture manifest from the master branch (release releases)" + rm -f ./.npmrc + # Set our version number using vars + export IMAGE_VERSION=$(cat version.txt) + export IMAGE_VERSION_FULL=v$IMAGE_VERSION + echo $IMAGE_VERSION + echo $IMAGE_VERSION_FULL + echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin + + # Create and push manifest for specific version + docker manifest create ohif/app:$IMAGE_VERSION_FULL \ + --amend ohif/app:$IMAGE_VERSION_FULL-amd64 \ + --amend ohif/app:$IMAGE_VERSION_FULL-arm64 + docker manifest push ohif/app:$IMAGE_VERSION_FULL + + # Create and push manifest for "latest" tag + docker manifest create ohif/app:latest \ + --amend ohif/app:latest-amd64 \ + --amend ohif/app:latest-arm64 + docker manifest push ohif/app:latest + fi + + DOCKER_BETA_MULTIARCH_MANIFEST: + <<: *defaults + resource_class: large + steps: + - attach_workspace: + at: ~/repo + - setup_remote_docker: + docker_layer_caching: false + - run: + name: Create and push multi-architecture manifest (Beta) + command: | + echo $(ls -l) + + # This file will exist if a new version was published by + # our command in the previous job. + if [[ ! -e version.txt ]]; then + exit 0 + else + echo "Building and pushing multi-architecture manifest from the master branch (beta releases)" + rm -f ./.npmrc + # Set our version number using vars + export IMAGE_VERSION=$(cat version.txt) + export IMAGE_VERSION_FULL=v$IMAGE_VERSION + echo $IMAGE_VERSION + echo $IMAGE_VERSION_FULL + echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin + + # Create and push manifest for specific beta version + docker manifest create ohif/app:$IMAGE_VERSION_FULL \ + --amend ohif/app:$IMAGE_VERSION_FULL-amd64 \ + --amend ohif/app:$IMAGE_VERSION_FULL-arm64 + docker manifest push ohif/app:$IMAGE_VERSION_FULL + + # Create and push manifest for "latest-beta" tag + docker manifest create ohif/app:latest-beta \ + --amend ohif/app:latest-beta-amd64 \ + --amend ohif/app:latest-beta-arm64 + docker manifest push ohif/app:latest-beta + fi + workflows: PR_CHECKS: jobs: @@ -384,6 +466,10 @@ workflows: - DOCKER_BETA_PUBLISH_ARM: requires: - NPM_PUBLISH + - DOCKER_BETA_MULTIARCH_MANIFEST: + requires: + - DOCKER_BETA_PUBLISH + - DOCKER_BETA_PUBLISH_ARM # viewer.ohif.org DEPLOY_RELEASE: @@ -405,3 +491,7 @@ workflows: - DOCKER_RELEASE_PUBLISH_ARM: requires: - NPM_PUBLISH + - DOCKER_MULTIARCH_MANIFEST: + requires: + - DOCKER_RELEASE_PUBLISH + - DOCKER_RELEASE_PUBLISH_ARM diff --git a/bun.lockb b/bun.lockb index 609e29776..5d927c60c 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index ac6acba83..ad6913bc9 100644 --- a/extensions/cornerstone-dicom-pmap/package.json +++ b/extensions/cornerstone-dicom-pmap/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.14.2", - "@cornerstonejs/core": "^2.14.2", + "@cornerstonejs/adapters": "^2.14.7", + "@cornerstonejs/core": "^2.14.7", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index 2b8148872..2b85b5c47 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.14.2", - "@cornerstonejs/core": "^2.14.2", + "@cornerstonejs/adapters": "^2.14.7", + "@cornerstonejs/core": "^2.14.7", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index f2b022e7f..fe445ffa9 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.14.2", - "@cornerstonejs/core": "^2.14.2", - "@cornerstonejs/tools": "^2.14.2", + "@cornerstonejs/adapters": "^2.14.7", + "@cornerstonejs/core": "^2.14.7", + "@cornerstonejs/tools": "^2.14.7", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 574af3288..0017a8cfc 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^2.14.2", - "@cornerstonejs/tools": "^2.14.2", + "@cornerstonejs/core": "^2.14.7", + "@cornerstonejs/tools": "^2.14.7", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 5b159731b..5d612c9b2 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -38,7 +38,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.14.2", + "@cornerstonejs/dicom-image-loader": "^2.14.7", "@icr/polyseg-wasm": "^0.4.0", "@ohif/core": "3.10.0-beta.38", "@ohif/ui": "3.10.0-beta.38", @@ -55,9 +55,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.14.2", - "@cornerstonejs/core": "^2.14.2", - "@cornerstonejs/tools": "^2.14.2", + "@cornerstonejs/adapters": "^2.14.7", + "@cornerstonejs/core": "^2.14.7", + "@cornerstonejs/tools": "^2.14.7", "@icr/polyseg-wasm": "^0.4.0", "@kitware/vtk.js": "32.1.1", "html2canvas": "^1.4.1", diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 8ccbed4aa..0accbb614 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^2.14.2", - "@cornerstonejs/tools": "^2.14.2", + "@cornerstonejs/core": "^2.14.7", + "@cornerstonejs/tools": "^2.14.7", "@ohif/core": "3.10.0-beta.38", "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.38", "@ohif/extension-default": "3.10.0-beta.38", diff --git a/platform/app/package.json b/platform/app/package.json index b955ea5e9..5b43d54d4 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -53,7 +53,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.14.2", + "@cornerstonejs/dicom-image-loader": "^2.14.7", "@emotion/serialize": "^1.1.3", "@ohif/core": "3.10.0-beta.38", "@ohif/extension-cornerstone": "3.10.0-beta.38", diff --git a/platform/core/package.json b/platform/core/package.json index 4a4b31bbf..4af4ceaa1 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,7 +37,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.14.2", + "@cornerstonejs/dicom-image-loader": "^2.14.7", "@ohif/ui": "3.10.0-beta.38", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21" diff --git a/yarn.lock b/yarn.lock index 5aae85974..5070887cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2580,10 +2580,10 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cornerstonejs/adapters@^2.14.2": - version "2.14.2" - resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-2.14.2.tgz#cd1f750c34a7b723e09092ba3b2486d287a9ccb2" - integrity sha512-/zKVRwyHa0qjYWYKLQXx5776MJGcyEKYt7sXmtsKDj6AJlfx0W8UMP2/DFDlaadfX5jKckHCSDrPOtzzjYbIbQ== +"@cornerstonejs/adapters@^2.14.7": + version "2.14.7" + resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-2.14.7.tgz#ecdcbc9701b26ce5c0336a6252ed44b876b51d87" + integrity sha512-3vbWSfo6k68UzwLQ9ZVgL8DmTJA4mOEXBkETAk2M3+5Jky1EBT5X84UFKVIRzByk/76pG08D/NmPk2/QaO+FUA== dependencies: "@babel/runtime-corejs2" "^7.17.8" buffer "^6.0.3" @@ -2616,19 +2616,19 @@ resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.5.tgz#8690b61a86fa53ef38a70eee9d665a79229517c0" integrity sha512-MZCUy8VG0VG5Nl1l58+g+kH3LujAzLYTfJqkwpWI2gjSrGXnP6lgwyy4GmPRZWVoS40/B1LDNALK905cNWm+sg== -"@cornerstonejs/core@^2.14.2": - version "2.14.2" - resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-2.14.2.tgz#35817e0c5cc9e3641df757e43e071ee3c91fde54" - integrity sha512-1a8+b4RtnyPRI6bevfEu4KXhVNiEd1CNeaByKegWbd+FyE5yek6DIwW0fJPIxdhA+z6nacFVdKtgbdAwuTDqoA== +"@cornerstonejs/core@^2.14.7": + version "2.14.7" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-2.14.7.tgz#7092f5038ecd2b88ce1417a86885cd5711d04709" + integrity sha512-92gTKuY+Ea0xsEJB1niC7FiNsaWDK7R274ZEEcu+4vb0u6P3eIQOKCut8aKVV5JpVk3C7kJ5QjCMWdG/RNp/eg== dependencies: "@kitware/vtk.js" "32.1.1" comlink "^4.4.1" gl-matrix "^3.4.3" -"@cornerstonejs/dicom-image-loader@^2.14.2": - version "2.14.2" - resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-2.14.2.tgz#643c3d7d1f8ba6632665bce94e9a54c52dedc2b7" - integrity sha512-qNKN+7FoiT6flhhWrNoBYs/v6meiuWtiteo08IKIf+uVpjABnk7lEHXozsQ4GQIieCJ7jhqHHXPMbSHQh6Jktw== +"@cornerstonejs/dicom-image-loader@^2.14.7": + version "2.14.7" + resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-2.14.7.tgz#9de7a5b6fd7dee030f7da5d705de4341af318bb5" + integrity sha512-l/Vbz+5Vd076N+3xFr55aqkHxItqWe4HXjuvLBqm4orb3jWULIoM/34RJg0vGqgXj/UrB4OXxZfwDcuYBDAgEg== dependencies: "@cornerstonejs/codec-charls" "^1.2.3" "@cornerstonejs/codec-libjpeg-turbo-8bit" "^1.2.2" @@ -2639,10 +2639,10 @@ pako "^2.0.4" uuid "^9.0.0" -"@cornerstonejs/tools@^2.14.2": - version "2.14.2" - resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-2.14.2.tgz#2647a564bfda88fa11c7edb6ad691fb4b1ec080c" - integrity sha512-kiWD/hmXxX7N60KLghuN7aItJ2z1jaO3TnCR2gkQ865Rl/aV5yGZEonUqlH4iHrCDS2d7f0NcXQX0sKAc7PJXw== +"@cornerstonejs/tools@^2.14.7": + version "2.14.7" + resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-2.14.7.tgz#da0b4485aff8aa72cd88a74ad30d0a12d762f107" + integrity sha512-8IorarVROvevrWfkKRFGjfDONa14i9V3auWsZTAyi8J0YQ2PKrLx2MLoXWsFYQS4AHhaWRAuVl3GsKR+V/QbzQ== dependencies: "@types/offscreencanvas" "2019.7.3" comlink "^4.4.1"