Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
8ba1e00
docker configuration for girder 5
BryonLewis Jun 8, 2026
0a63a28
dive spa updates for websocket girder 5 communication
BryonLewis Jun 8, 2026
f20ac84
entrypoint update for dev mode and starting girder
BryonLewis Jun 8, 2026
f8b3416
server rest updates for girder 5 support, including notifications
BryonLewis Jun 8, 2026
7ba4be7
local worker and events support for girder 5
BryonLewis Jun 8, 2026
07bf5e8
girder interface webclient updates
BryonLewis Jun 8, 2026
0850741
docs for girder 5
BryonLewis Jun 8, 2026
7d8c2dc
notification support
BryonLewis Jun 8, 2026
25279a9
assetStore Import matching
BryonLewis Jun 9, 2026
f05e94a
fix metadata slicer jobs running
BryonLewis Jun 9, 2026
845b3c5
upgrade axios in DIVE-DSA and the Slicer UI
BryonLewis Jun 10, 2026
062feb3
add release process for pypi package
BryonLewis Jun 10, 2026
e7f3e33
test docker build for built pypi package
BryonLewis Jun 10, 2026
5d74172
Merge branch 'main' into girder-5-upgrade-2026
BryonLewis Jun 23, 2026
da6fb58
update girder 5 version
BryonLewis Jul 14, 2026
323789c
minor slicer task improvements
BryonLewis Jul 14, 2026
7d30f8b
metadata scale testing scripts
BryonLewis Jul 19, 2026
1be4ca7
move metadata creation and modification into local queues, crud_metad…
BryonLewis Jul 19, 2026
ee1f049
update metadata client for jobs instead of requests
BryonLewis Jul 19, 2026
91df706
update docs for metadata import
BryonLewis Jul 19, 2026
3fcc15e
testing tools and tests for new metadata format
BryonLewis Jul 19, 2026
76da5b1
add progress to metadata creation jobs
BryonLewis Jul 19, 2026
8186b6c
dialog and job link info for metadata imports
BryonLewis Jul 19, 2026
bae44f5
Bump websocket-driver from 0.7.4 to 0.7.5 in /client (#458)
dependabot[bot] Jul 19, 2026
9f91b14
Bump torch from 2.12.0 to 2.13.0 in /server (#459)
dependabot[bot] Jul 19, 2026
8826cb4
Bump ws in /client (#460)
dependabot[bot] Jul 19, 2026
e1a8ea6
test wheel deployment of DIVE
BryonLewis Jul 19, 2026
1a3034f
update job notifications
BryonLewis Jul 19, 2026
e778d3e
publish dive-dsa to pypi
BryonLewis Jul 19, 2026
07910dc
docker compose for verification of pypi package installation
BryonLewis Jul 19, 2026
2d63ae6
Merge origin/main into girder-5-upgrade-2026
BryonLewis Jul 21, 2026
c65ef4c
Merge origin/main into girder-5-upgrade-2026
BryonLewis Aug 3, 2026
c739ae3
Merge origin/main into girder-5-upgrade-2026
BryonLewis Aug 11, 2026
9f658bd
linting
BryonLewis Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
.gitattributes
dive-dsa-slicer/
scripts/
!server/scripts/build_release_assets.sh
testutils/
# Documentation
docs/
*.md
README*
!server/README.md
!test_deployment/README.md

# Development files
.vscode/
Expand All @@ -25,6 +28,7 @@ __pycache__/
build/
develop-eggs/
dist/
!server/dist/
downloads/
eggs/
.eggs/
Expand Down Expand Up @@ -87,10 +91,13 @@ Thumbs.db
/tmp/
/var/tmp/

# Docker
# Docker (compose/Dockerfiles are read from the host; keep entrypoints in context)
Dockerfile*
!test_deployment/Dockerfile
docker-compose*.yml
!test_deployment/docker-compose.yml
.dockerignore
!test_deployment/entrypoint_*.sh

# CI/CD
.github/
Expand Down
54 changes: 52 additions & 2 deletions .env.Default
Original file line number Diff line number Diff line change
@@ -1,2 +1,52 @@
# Add in your userId:groupId for docker slicer cli plugin access
DSA_USER="userId:groupId"
# DIVE-DSA Configuration Template
# Create a copy of this file called .env

# Docker Compose Stack configuration
#
#COMPOSE_PROJECT_NAME=dive-dsa
#COMPOSE_PROFILES=gpu

# DSA user for slicer CLI docker socket access (required)
DSA_USER="userId:groupId"

# MongoDB Configuration
#
#MONGO_DB_PATH=/opt/dive/mongo/data/db

# Web server configuration
#
#GIRDER_ADMIN_USER=admin
#GIRDER_ADMIN_PASS=letmein

# Girder Worker / Celery (Girder 5 — replaces CELERY_BROKER_URL and WORKER_API_URL)
#
#RABBITMQ_DEFAULT_USER=guest
#RABBITMQ_DEFAULT_PASS=guest
#RABBITMQ_DEFAULT_VHOST=default
#GIRDER_WORKER_BROKER=amqp://guest:guest@rabbit/default
#GIRDER_WORKER_BACKEND=rpc://guest:guest@localhost/
#GIRDER_SETTING_WORKER_API_URL=http://girder:8080/api/v1
#GIRDER_NOTIFICATION_REDIS_URL=redis://redis:6379

# Docker image tag
#TAG=latest

# RabbitMQ User Queue configs
#
#RABBITMQ_MANAGEMENT_USERNAME=guest
#RABBITMQ_MANAGEMENT_PASSWORD=guest
#RABBITMQ_MANAGEMENT_VHOST=default
#RABBITMQ_MANAGEMENT_URL="http://rabbit:15672/"
#RABBITMQ_MANAGEMENT_BROKER_URL_TEMPLATE="amqp://{}:{}@rabbit/default"

# Production data bind paths
#
#PUBLIC_DATA_PATH=./docker/girder_data

# Worker Concurrency
#
#DEFAULT_WORKER_CONCURRENCY=3

# Split or standalone worker: remote Girder API (replaces legacy WORKER_API_URL)
#GIRDER_SETTING_WORKER_API_URL=https://your-server.example.com/api/v1
#SOCK_PATH=/var/run/docker.sock
31 changes: 31 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,34 @@ jobs:
- name: Run tests
run: tox -e testunit
working-directory: server

build-wheel:
name: Build dive_server wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-node@v4
with:
node-version: '24'
cache: npm
cache-dependency-path: |
client/package-lock.json
server/dive_server/web_client/package-lock.json

- uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: server/uv.lock

- name: Build and verify wheel
run: bash server/scripts/build_wheel.sh

- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: dive-dsa-wheel
path: server/dist/dive_dsa-*.whl
if-no-files-found: error
41 changes: 41 additions & 0 deletions .github/workflows/release-dive-server.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: PyPI Publish dive-dsa
on:
workflow_dispatch:
release:
types: [published]

permissions:
id-token: write # Required for PyPI trusted publishing (OIDC)
contents: read
actions: write # Upload wheel artifact

jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
# Prefer the release tag so uv-dynamic-versioning yields a clean PEP 440 version.
ref: ${{ github.event.release.tag_name || github.ref }}

- uses: actions/setup-node@v6
with:
node-version: '24'
package-manager-cache: false

- uses: astral-sh/setup-uv@v6
with:
enable-cache: false

- name: Build, verify, and publish wheel
# build_wheel.sh refuses versions with +local (PyPI), cleans dist/, then uv publish.
# OIDC trusted publishing provides credentials in GITHUB_ACTIONS; no token needed.
run: bash server/scripts/build_wheel.sh --publish

- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: dive-dsa-wheel
path: server/dist/dive_dsa-*.whl
if-no-files-found: error
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
.env
# Synced at runtime in development containers
server/dive_server/dive_client/
2 changes: 1 addition & 1 deletion client/.env.production
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VUE_APP_STATIC_PATH=./static/dive/
VUE_APP_STATIC_PATH=/dive/static
6 changes: 6 additions & 0 deletions client/dive-common/components/Viewer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -842,6 +842,12 @@ export default defineComponent({
description: 'Slicer Tasks',
component: SlicerTaskRunnerVue,
});
} else {
context.register({
description: 'Slicer Tasks',
component: SlicerTaskRunnerVue,
width: 500,
});
}

if (!configurationManager.getUISetting('UIGroupManager')) {
Expand Down
2 changes: 1 addition & 1 deletion client/dive-common/use/useRequest.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { reactive, shallowRef, toRefs } from 'vue';
import { AxiosResponse } from '@girder/components/node_modules/axios';
import { AxiosResponse } from 'axios';
import { getResponseError } from 'vue-media-annotator/utils';

export default function useRequest() {
Expand Down
31 changes: 29 additions & 2 deletions client/dive-common/vue-utilities/prompt-service/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,41 @@ class PromptService {
positiveButton = 'Confirm',
negativeButton = 'Cancel',
confirm = false,
maxWidth = '400px',
}: PromptParams): Promise<boolean> {
return new Promise<boolean>((resolve) => {
if (!this.component.show) {
this.set(title, text, positiveButton, negativeButton, confirm, resolve);
this.set(
title,
text,
positiveButton,
negativeButton,
confirm,
resolve,
undefined,
undefined,
undefined,
undefined,
undefined,
maxWidth,
);
} else {
const unwatch = watch(this.component.show, () => {
unwatch();
this.set(title, text, positiveButton, negativeButton, confirm, resolve);
this.set(
title,
text,
positiveButton,
negativeButton,
confirm,
resolve,
undefined,
undefined,
undefined,
undefined,
undefined,
maxWidth,
);
});
}
});
Expand Down
Loading
Loading