diff --git a/.github/workflows/add_to_catalystneuro_dashboard.yml b/.github/workflows/add_to_catalystneuro_dashboard.yml deleted file mode 100644 index e72d98965..000000000 --- a/.github/workflows/add_to_catalystneuro_dashboard.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Add Issue or Pull Request to Dashboard - -on: - issues: - types: - - opened - pull_request: - types: - - opened - -jobs: - add-to-project: - name: Add issue or pull request to project - runs-on: ubuntu-latest - steps: - - uses: actions/add-to-project@v0.5.0 - with: - project-url: https://github.com/orgs/catalystneuro/projects/3 - github-token: ${{ secrets.PROJECT_TOKEN }} diff --git a/.github/workflows/build_and_deploy_mac.yml b/.github/workflows/build_and_deploy_mac.yml index d53b6ec34..a7cba9619 100644 --- a/.github/workflows/build_and_deploy_mac.yml +++ b/.github/workflows/build_and_deploy_mac.yml @@ -24,16 +24,14 @@ jobs: with: python-version: "3.10" - - name: Setup Mambaforge + - name: Set up conda uses: conda-incubator/setup-miniconda@v3 with: - miniforge-variant: Mambaforge miniforge-version: latest activate-environment: nwb-guide - use-mamba: true - name: Create and activate environment - run: mamba env update --name nwb-guide --file environments/environment-MAC-intel.yml + run: conda env update --name nwb-guide --file environments/environment-MAC-intel.yml - name: Use Node.js 20 uses: actions/setup-node@v4 diff --git a/.github/workflows/daily_tests.yml b/.github/workflows/daily_tests.yml index 8e22965d0..1d53aadf8 100644 --- a/.github/workflows/daily_tests.yml +++ b/.github/workflows/daily_tests.yml @@ -53,6 +53,6 @@ jobs: username: ${{ secrets.MAIL_USERNAME }} password: ${{ secrets.MAIL_PASSWORD }} subject: NWB GUIDE Daily Test Failure - to: cody.c.baker.phd@gmail.com,rly@lbl.gov + to: ${{ secrets.DAILY_FAILURE_EMAIL_LIST }} from: NWB Guide Daily Tests body: "The daily tests workflow failed, please check the status at https://github.com/NeurodataWithoutBorders/nwb-guide/actions/workflows/daily_tests.yml" diff --git a/.github/workflows/testing_dev.yml b/.github/workflows/testing_dev.yml index 561f2b38b..5a41c90d4 100644 --- a/.github/workflows/testing_dev.yml +++ b/.github/workflows/testing_dev.yml @@ -37,13 +37,11 @@ jobs: - run: git fetch --prune --unshallow --tags # see https://github.com/conda-incubator/setup-miniconda#caching-environments - - name: Setup Mambaforge + - name: Set up conda uses: conda-incubator/setup-miniconda@v3 with: - miniforge-variant: Mambaforge miniforge-version: latest activate-environment: nwb-guide - use-mamba: true - name: Set cache date id: get-date @@ -59,7 +57,7 @@ jobs: - if: steps.cache.outputs.cache-hit != 'true' name: Create and activate environment - run: mamba env update --name nwb-guide --file ${{ matrix.label }} + run: conda env update --name nwb-guide --file ${{ matrix.label }} - name: Use Node.js 20 uses: actions/setup-node@v4 diff --git a/.github/workflows/testing_dev_e2e_with_live_services.yml b/.github/workflows/testing_dev_e2e_with_live_services.yml index bd10f5f35..8367a8df7 100644 --- a/.github/workflows/testing_dev_e2e_with_live_services.yml +++ b/.github/workflows/testing_dev_e2e_with_live_services.yml @@ -39,13 +39,11 @@ jobs: - run: git fetch --prune --unshallow --tags # see https://github.com/conda-incubator/setup-miniconda#caching-environments - - name: Setup Mambaforge + - name: Set up conda uses: conda-incubator/setup-miniconda@v3 with: - miniforge-variant: Mambaforge miniforge-version: latest activate-environment: nwb-guide - use-mamba: true - name: Set cache date id: get-date @@ -61,7 +59,7 @@ jobs: - if: steps.cache.outputs.cache-hit != 'true' name: Create and activate environment - run: mamba env update -n nwb-guide -f ${{ matrix.label }} + run: conda env update -n nwb-guide -f ${{ matrix.label }} - name: Use Node.js 20 uses: actions/setup-node@v4 diff --git a/.github/workflows/testing_dev_with_live_services.yml b/.github/workflows/testing_dev_with_live_services.yml index 020db1391..48b130b4b 100644 --- a/.github/workflows/testing_dev_with_live_services.yml +++ b/.github/workflows/testing_dev_with_live_services.yml @@ -37,13 +37,11 @@ jobs: - run: git fetch --prune --unshallow --tags # see https://github.com/conda-incubator/setup-miniconda#caching-environments - - name: Setup Mambaforge + - name: Set up conda uses: conda-incubator/setup-miniconda@v3 with: - miniforge-variant: Mambaforge miniforge-version: latest activate-environment: nwb-guide - use-mamba: true - name: Set cache date id: get-date @@ -59,7 +57,7 @@ jobs: - if: steps.cache.outputs.cache-hit != 'true' name: Create and activate environment - run: mamba env update -n nwb-guide -f ${{ matrix.label }} + run: conda env update -n nwb-guide -f ${{ matrix.label }} - name: Use Node.js 20 uses: actions/setup-node@v4 diff --git a/.github/workflows/testing_flask_build_and_dist.yml b/.github/workflows/testing_flask_build_and_dist.yml index a892ff2a9..76aea45d8 100644 --- a/.github/workflows/testing_flask_build_and_dist.yml +++ b/.github/workflows/testing_flask_build_and_dist.yml @@ -36,20 +36,18 @@ jobs: run: uname -m # see https://github.com/conda-incubator/setup-miniconda#caching-environments - - name: Setup Mambaforge + - name: Set up conda uses: conda-incubator/setup-miniconda@v3 with: - miniforge-variant: Mambaforge miniforge-version: latest activate-environment: nwb-guide - use-mamba: true - name: Set cache date id: get-date run: echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT shell: bash - - name: Cache Mamba env + - name: Cache Conda env uses: actions/cache@v4 with: path: ${{ env.CONDA }}/envs @@ -61,7 +59,7 @@ jobs: - if: steps.cache.outputs.cache-hit != 'true' name: Update environment - run: mamba env update -f ${{ matrix.label }} + run: conda env update -f ${{ matrix.label }} - name: Setup Node.js 20 uses: actions/setup-node@v4 diff --git a/.github/workflows/testing_pipelines.yml b/.github/workflows/testing_pipelines.yml index 57fe37fee..8892eacd0 100644 --- a/.github/workflows/testing_pipelines.yml +++ b/.github/workflows/testing_pipelines.yml @@ -35,13 +35,11 @@ jobs: - run: git fetch --prune --unshallow --tags # see https://github.com/conda-incubator/setup-miniconda#caching-environments - - name: Setup Mambaforge + - name: Set up conda uses: conda-incubator/setup-miniconda@v3 with: - miniforge-variant: Mambaforge miniforge-version: latest activate-environment: nwb-guide - use-mamba: true # Setup conda environment from cache - name: Set environment cache date @@ -56,7 +54,7 @@ jobs: id: cache - if: steps.cache.outputs.cache-hit != 'true' name: Create and activate environment - run: mamba env update --name nwb-guide --file ${{ matrix.label }} + run: conda env update --name nwb-guide --file ${{ matrix.label }} - name: Use Node.js 20 uses: actions/setup-node@v4 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b3568371f..ac93c0c83 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,14 +1,14 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 24.8.0 + rev: 24.10.0 hooks: - id: black exclude: ^docs/ diff --git a/docs/_static/switcher.json b/docs/_static/switcher.json index 289809962..c2f89957a 100644 --- a/docs/_static/switcher.json +++ b/docs/_static/switcher.json @@ -4,11 +4,17 @@ "url": "https://nwb-guide.readthedocs.io/en/latest/", "preferred": false }, + { + "name": "1.0.4", + "version": "v1.0.4", + "url": "https://nwb-guide.readthedocs.io/en/v1.0.4/", + "preferred": true + }, { "name": "1.0.3", "version": "v1.0.3", "url": "https://nwb-guide.readthedocs.io/en/v1.0.3/", - "preferred": true + "preferred": false }, { "name": "1.0.2", diff --git a/docs/assets/tutorials/dandi/review-page.png b/docs/assets/tutorials/dandi/review-page.png index bb59b5bda..202a453c2 100644 Binary files a/docs/assets/tutorials/dandi/review-page.png and b/docs/assets/tutorials/dandi/review-page.png differ diff --git a/docs/assets/tutorials/home-page.png b/docs/assets/tutorials/home-page.png index b3208b0a8..753bda887 100644 Binary files a/docs/assets/tutorials/home-page.png and b/docs/assets/tutorials/home-page.png differ diff --git a/docs/assets/tutorials/multiple/fail-name.png b/docs/assets/tutorials/multiple/fail-name.png index 3419a2a90..27f7e3366 100644 Binary files a/docs/assets/tutorials/multiple/fail-name.png and b/docs/assets/tutorials/multiple/fail-name.png differ diff --git a/docs/assets/tutorials/multiple/home-page-complete.png b/docs/assets/tutorials/multiple/home-page-complete.png index 6204a2888..8ee52d911 100644 Binary files a/docs/assets/tutorials/multiple/home-page-complete.png and b/docs/assets/tutorials/multiple/home-page-complete.png differ diff --git a/docs/assets/tutorials/multiple/inspect-page.png b/docs/assets/tutorials/multiple/inspect-page.png index 794a1c100..b56a6c233 100644 Binary files a/docs/assets/tutorials/multiple/inspect-page.png and b/docs/assets/tutorials/multiple/inspect-page.png differ diff --git a/docs/assets/tutorials/multiple/metadata-nwbfile.png b/docs/assets/tutorials/multiple/metadata-nwbfile.png index 4210a2201..63bd6340f 100644 Binary files a/docs/assets/tutorials/multiple/metadata-nwbfile.png and b/docs/assets/tutorials/multiple/metadata-nwbfile.png differ diff --git a/docs/assets/tutorials/multiple/pathexpansion-completed.png b/docs/assets/tutorials/multiple/pathexpansion-completed.png index 289685090..31ecda398 100644 Binary files a/docs/assets/tutorials/multiple/pathexpansion-completed.png and b/docs/assets/tutorials/multiple/pathexpansion-completed.png differ diff --git a/docs/assets/tutorials/multiple/preview-page.png b/docs/assets/tutorials/multiple/preview-page.png index 8950697b0..2e931e230 100644 Binary files a/docs/assets/tutorials/multiple/preview-page.png and b/docs/assets/tutorials/multiple/preview-page.png differ diff --git a/docs/assets/tutorials/multiple/subject-error.png b/docs/assets/tutorials/multiple/subject-error.png index 9f2fa4c27..c9d7ae99d 100644 Binary files a/docs/assets/tutorials/multiple/subject-error.png and b/docs/assets/tutorials/multiple/subject-error.png differ diff --git a/docs/assets/tutorials/single/fail-name.png b/docs/assets/tutorials/single/fail-name.png index 2b23a021c..7396166e4 100644 Binary files a/docs/assets/tutorials/single/fail-name.png and b/docs/assets/tutorials/single/fail-name.png differ diff --git a/docs/assets/tutorials/single/home-page-complete.png b/docs/assets/tutorials/single/home-page-complete.png index 4b4bd58f2..87717bda9 100644 Binary files a/docs/assets/tutorials/single/home-page-complete.png and b/docs/assets/tutorials/single/home-page-complete.png differ diff --git a/docs/assets/tutorials/single/inspect-page.png b/docs/assets/tutorials/single/inspect-page.png index b9e7cdcec..bdda30878 100644 Binary files a/docs/assets/tutorials/single/inspect-page.png and b/docs/assets/tutorials/single/inspect-page.png differ diff --git a/docs/assets/tutorials/single/metadata-nwbfile.png b/docs/assets/tutorials/single/metadata-nwbfile.png index c77ffb550..bb1554a90 100644 Binary files a/docs/assets/tutorials/single/metadata-nwbfile.png and b/docs/assets/tutorials/single/metadata-nwbfile.png differ diff --git a/docs/assets/tutorials/single/preview-page.png b/docs/assets/tutorials/single/preview-page.png index a0f316a46..8deb4c554 100644 Binary files a/docs/assets/tutorials/single/preview-page.png and b/docs/assets/tutorials/single/preview-page.png differ diff --git a/docs/tutorials/multiple_sessions.rst b/docs/tutorials/multiple_sessions.rst index 511454aa7..88536e77f 100644 --- a/docs/tutorials/multiple_sessions.rst +++ b/docs/tutorials/multiple_sessions.rst @@ -52,7 +52,7 @@ To avoid specifying the format string path by hand, click the **Autocomplete** b :align: center :alt: Autocomplete modal on path expansion page -Provide a source data path for Phy by either dragging and dropping the folder ``multi_session_dataset/mouse1/mouse1_Session2/mouse1_Session2_phy`` into the **Example Folder** box or clicking the box and selecting a folder. Then enter the Subject ID (``mouse1``) and Session ID (``Session1``) for this particular path. +Provide a source data path for Phy by either dragging and dropping the folder ``multi_session_dataset/mouse1/mouse1_Session1/mouse1_Session1_phy`` into the **Example Folder** box or clicking the box and selecting a folder. Then enter the Subject ID (``mouse1``) and Session ID (``Session1``) for this particular path. .. figure:: ../assets/tutorials/multiple/pathexpansion-autocomplete-filled.png :align: center @@ -64,7 +64,7 @@ When you submit this form, you'll notice that the Format String Path input has b :align: center :alt: Path expansion page with autocompleted format string -Repeat this process for SpikeGLX, where ``multi_session_dataset/mouse1/mouse1_Session2/mouse1_Session2_g0/mouse1_Session2_g0_imec0/mouse1_Session1_g0_t0.imec0.ap.bin`` will be the example source data path. +Repeat this process for SpikeGLX, where ``multi_session_dataset/mouse1/mouse1_Session1/mouse1_Session1_g0/mouse1_Session1_g0_imec0/mouse1_Session1_g0_t0.imec0.ap.bin`` will be the example source data path. .. figure:: ../assets/tutorials/multiple/pathexpansion-completed.png :align: center diff --git a/environments/environment-Linux.yml b/environments/environment-Linux.yml index d63cd6c56..f52240a19 100644 --- a/environments/environment-Linux.yml +++ b/environments/environment-Linux.yml @@ -15,6 +15,7 @@ dependencies: - flask == 2.3.2 - flask-cors == 4.0.0 - flask_restx == 1.1.0 + - werkzeug < 3.0 # werkzeug 3.0 deprecates features used by flask 2.3.2. Remove this when updating flask. # For stability, NeuroConv is pinned at a commit just prior to Pydantic schema inference refactor - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@8fa1c8f46316a7192073713e3e4e78c25a2e0d36#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] - scikit-learn == 1.4.0 # Tutorial data generation diff --git a/environments/environment-MAC-apple-silicon.yml b/environments/environment-MAC-apple-silicon.yml index 28606870e..e7565f1d8 100644 --- a/environments/environment-MAC-apple-silicon.yml +++ b/environments/environment-MAC-apple-silicon.yml @@ -21,6 +21,7 @@ dependencies: - flask == 2.3.2 - flask-cors == 4.0.0 - flask_restx == 1.1.0 + - werkzeug < 3.0 # werkzeug 3.0 deprecates features used by flask 2.3.2. Remove this when updating flask. # NOTE: the NeuroConv wheel on PyPI includes sonpy which is not compatible with arm64, so build and install # NeuroConv from GitHub, which will remove the sonpy dependency when building from Mac arm64 # For stability, NeuroConv is pinned at a commit just prior to Pydantic schema inference refactor diff --git a/environments/environment-MAC-intel.yml b/environments/environment-MAC-intel.yml index 5c507a3d5..49c1ffed3 100644 --- a/environments/environment-MAC-intel.yml +++ b/environments/environment-MAC-intel.yml @@ -18,6 +18,7 @@ dependencies: - flask == 2.3.2 - flask-cors == 4.0.0 - flask_restx == 1.1.0 + - werkzeug < 3.0 # werkzeug 3.0 deprecates features used by flask 2.3.2. Remove this when updating flask. # For stability, NeuroConv is pinned at a commit just prior to Pydantic schema inference refactor - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@8fa1c8f46316a7192073713e3e4e78c25a2e0d36#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] - scikit-learn == 1.4.0 # Tutorial data generation diff --git a/environments/environment-Windows.yml b/environments/environment-Windows.yml index d3c229299..c834f5734 100644 --- a/environments/environment-Windows.yml +++ b/environments/environment-Windows.yml @@ -18,6 +18,7 @@ dependencies: - flask == 2.3.2 - flask-cors === 3.0.10 - flask_restx == 1.1.0 + - werkzeug < 3.0 # werkzeug 3.0 deprecates features used by flask 2.3.2. Remove this when updating flask. # For stability, NeuroConv is pinned at a commit just prior to Pydantic schema inference refactor - neuroconv @ git+https://github.com/catalystneuro/neuroconv.git@8fa1c8f46316a7192073713e3e4e78c25a2e0d36#neuroconv[dandi,compressors,ecephys,ophys,behavior,text] - scikit-learn == 1.4.0 # Tutorial data generation diff --git a/package.json b/package.json index f2c0a165e..88306f229 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nwb-guide", "productName": "NWB GUIDE", - "version": "1.0.3", + "version": "1.0.4", "description": "NWB GUIDE is a desktop app that provides a no-code user interface for converting neurophysiology data to NWB.", "main": "./build/main/index.js", "engine": { diff --git a/src/electron/frontend/core/components/pages/uploads/UploadsPage.js b/src/electron/frontend/core/components/pages/uploads/UploadsPage.js index d2762c13a..52181c059 100644 --- a/src/electron/frontend/core/components/pages/uploads/UploadsPage.js +++ b/src/electron/frontend/core/components/pages/uploads/UploadsPage.js @@ -133,7 +133,7 @@ export function createDandiset(results = {}) { const metadata = { description: form.resolved.description, - license: form.resolved.license, + license: [form.resolved.license], }; if (form.resolved.nih_award_number) { diff --git a/tests/e2e/puppeteer.ts b/tests/e2e/puppeteer.ts index 1da3b4658..2548b49e3 100644 --- a/tests/e2e/puppeteer.ts +++ b/tests/e2e/puppeteer.ts @@ -34,7 +34,7 @@ type BrowserTestOutput = { } const beforeStartTimeout = 2 * 60 * 1000 // Wait 2 minutes for Electron to open -const protocolTimeout = 10 * 60 * 1000 // Creating the test dataset can take up to 10 minutes (mostly for Windows) +const protocolTimeout = 15 * 60 * 1000 // Creating the test dataset can take up to 15 minutes (mostly for Windows) export const connect = () => { diff --git a/tests/e2e/tutorial.test.ts b/tests/e2e/tutorial.test.ts index 105de1262..ad39197d9 100644 --- a/tests/e2e/tutorial.test.ts +++ b/tests/e2e/tutorial.test.ts @@ -38,7 +38,7 @@ describe('E2E Test', () => { // Wait up to 10 minutes for dataset generation // Both the test timeout and the protocolTimeout on puppeteer.connect() must be set to 10 min - datasetTestFunction('Create tutorial dataset', { timeout: 10 * 60 * 1000 }, async () => { + datasetTestFunction('Create tutorial dataset', { timeout: 15 * 60 * 1000 }, async () => { await evaluate(async () => { diff --git a/tests/e2e/workflow.ts b/tests/e2e/workflow.ts index dad33a46b..e3d93c6af 100644 --- a/tests/e2e/workflow.ts +++ b/tests/e2e/workflow.ts @@ -237,6 +237,14 @@ export default async function runWorkflow(name, workflow, identifier) { await takeScreenshot(join(identifier, 'pathexpansion-autocomplete-submitted'), 1000) + // collapse the first interface accordion for the screenshot + await evaluate(() => { + const dashboard = document.querySelector('nwb-dashboard') + const page = dashboard.page + const first = Object.values(page.form.accordions)[0] + first.toggle(false) + }) + // Fill out the other path expansion information await evaluate(({ multi, common }) => { const dashboard = document.querySelector('nwb-dashboard') @@ -254,7 +262,6 @@ export default async function runWorkflow(name, workflow, identifier) { }, testInterfaceInfo) - await takeScreenshot(join(identifier, 'pathexpansion-completed'), 300) await toNextPage('subjects')