From a39f1fe4dd22e5cee7200187a46dea32fc811708 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 3 Dec 2025 12:48:13 +0100 Subject: [PATCH 01/23] Subproject ngff-spec under specfications directory - update build tools to handle ngff-spec contents - Make sure schemas are provided as html artefacts - deprecate bikeshed --- .github/workflows/pages.yml | 69 +++++++++++++++++++++++++++ .github/workflows/review.yml | 48 +++++++++---------- .github/workflows/validation.yml | 52 ++++++++++---------- .gitignore | 2 +- .gitmodules | 30 +++--------- .readthedocs.yaml | 17 ------- 0.1 | 1 - 0.2 | 1 - 0.3 | 1 - 0.4 | 1 - 0.5 | 1 - conf.py | 82 ++++++++++++++++++-------------- latest | 1 - specifications/0.5 | 1 + specifications/0.6.dev2 | 1 + specifications/index.md | 19 ++++---- 16 files changed, 184 insertions(+), 143 deletions(-) create mode 100644 .github/workflows/pages.yml delete mode 100644 .readthedocs.yaml delete mode 160000 0.1 delete mode 160000 0.2 delete mode 160000 0.3 delete mode 160000 0.4 delete mode 160000 0.5 delete mode 160000 latest create mode 160000 specifications/0.5 create mode 160000 specifications/0.6.dev2 diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 00000000..7f60ab71 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,69 @@ +name: Build and Deploy to GitHub Pages + +on: + push: + branches: [ main, subproject-ngff-spec ] + +env: + # `BASE_URL` determines the website is served from, including CSS & JS assets + BASE_URL: /${{ github.event.repository.name }} + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: 'pages' + cancel-in-progress: false + +env: + # `BASE_URL` determines the website is served from, including CSS & JS assets + # You may need to change this to `BASE_URL: ''` + BASE_URL: /${{ github.event.repository.name }} + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: | + pip install -r requirements.txt + pip install specifications/0.6.dev2 + + - name: Build documentation + run: | + make html + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: '_build/html' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml index 0679ea76..0c7042cf 100644 --- a/.github/workflows/review.yml +++ b/.github/workflows/review.yml @@ -1,27 +1,27 @@ ---- -name: Add review url +# --- +# name: Add review url -on: - pull_request_target: +# on: +# pull_request_target: -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: peter-evans/find-comment@v2 - id: fc - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: Automated Review URLs +# jobs: +# build: +# runs-on: ubuntu-latest +# steps: +# - uses: peter-evans/find-comment@v2 +# id: fc +# with: +# issue-number: ${{ github.event.pull_request.number }} +# comment-author: 'github-actions[bot]' +# body-includes: Automated Review URLs - - uses: peter-evans/create-or-update-comment@v2 - with: - comment-id: ${{ steps.fc.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - body: | - #### Automated Review URLs - * [Readthedocs](https://ngff--${{ github.event.pull_request.number }}.org.readthedocs.build/) - * [render latest/index.bs](http://api.csswg.org/bikeshed/?url=https://raw.githubusercontent.com/ome/ngff/${{ github.event.pull_request.head.sha }}/latest/index.bs) - * [diff latest modified](https://services.w3.org/htmldiff?doc1=https%3A%2F%2Fngff.openmicroscopy.org%2Flatest%2F&doc2=http%3A%2F%2Fapi.csswg.org%2Fbikeshed%2F%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fome%2Fngff%2F${{ github.event.pull_request.head.sha }}%2Flatest%2Findex.bs) - edit-mode: replace +# - uses: peter-evans/create-or-update-comment@v2 +# with: +# comment-id: ${{ steps.fc.outputs.comment-id }} +# issue-number: ${{ github.event.pull_request.number }} +# body: | +# #### Automated Review URLs +# * [Readthedocs](https://ngff--${{ github.event.pull_request.number }}.org.readthedocs.build/) +# * [render latest/index.bs](http://api.csswg.org/bikeshed/?url=https://raw.githubusercontent.com/ome/ngff/${{ github.event.pull_request.head.sha }}/latest/index.bs) +# * [diff latest modified](https://services.w3.org/htmldiff?doc1=https%3A%2F%2Fngff.openmicroscopy.org%2Flatest%2F&doc2=http%3A%2F%2Fapi.csswg.org%2Fbikeshed%2F%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fome%2Fngff%2F${{ github.event.pull_request.head.sha }}%2Flatest%2Findex.bs) +# edit-mode: replace diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 180bf42c..007642e7 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -1,28 +1,28 @@ -name: Validation -on: - push: - pull_request: +# name: Validation +# on: +# push: +# pull_request: -jobs: +# jobs: - validate: - name: Validation - strategy: - matrix: - ngff: - - '0.1' - - '0.2' - - '0.3' - - '0.4' - - '0.5' - - 'latest' - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - with: - submodules: 'true' - - uses: actions/setup-python@v5 - with: - python-version: '3.9' - - run: python -mpip install --upgrade wheel tox - - run: cd ${{matrix.ngff}} && tox +# validate: +# name: Validation +# strategy: +# matrix: +# ngff: +# - '0.1' +# - '0.2' +# - '0.3' +# - '0.4' +# - '0.5' +# - 'latest' +# runs-on: ubuntu-24.04 +# steps: +# - uses: actions/checkout@v4 +# with: +# submodules: 'true' +# - uses: actions/setup-python@v5 +# with: +# python-version: '3.9' +# - run: python -mpip install --upgrade wheel tox +# - run: cd ${{matrix.ngff}} && tox diff --git a/.gitignore b/.gitignore index d9cfbca7..8fa1e54c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ **/__pycache__/* */index.html _build -_bikeshed +_html_extra .tox .vscode .*plist diff --git a/.gitmodules b/.gitmodules index 88a43580..43153a6f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,24 +1,8 @@ -[submodule "0.1"] - path = 0.1 - url = https://github.com/ome/ngff - branch = v0.1 -[submodule "0.2"] - path = 0.2 - url = https://github.com/ome/ngff - branch = v0.2 -[submodule "0.3"] - path = 0.3 - url = https://github.com/ome/ngff - branch = v0.3 -[submodule "0.4"] - path = 0.4 - url = https://github.com/ome/ngff - branch = v0.4 +[submodule "0.6.dev2"] + path = specifications/0.6.dev2 + url = https://github.com/jo-mueller/ngff-spec + branch = main [submodule "0.5"] - path = 0.5 - url = https://github.com/ome/ngff - branch = v0.5 -[submodule "latest"] - path = latest - url = https://github.com/ome/ngff - branch = v0.5 + path = specifications/0.5 + url = https://github.com/jo-mueller/ngff-spec + branch = 0.5 diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index b23558fa..00000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,17 +0,0 @@ -version: 2 - -build: - os: ubuntu-24.04 - tools: - python: "3.10" - -submodules: - include: all - recursive: true - -sphinx: - configuration: conf.py - -python: - install: - - requirements: requirements.txt diff --git a/0.1 b/0.1 deleted file mode 160000 index d669ceb9..00000000 --- a/0.1 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d669ceb90b424638eff0885f29ff588670333caa diff --git a/0.2 b/0.2 deleted file mode 160000 index d2dbd2d1..00000000 --- a/0.2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d2dbd2d13d9899e0b012ddaddd629fe39ec134f7 diff --git a/0.3 b/0.3 deleted file mode 160000 index e53257b1..00000000 --- a/0.3 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e53257b18bac6ba5e86f3e74dc5fc9c3773a5a4e diff --git a/0.4 b/0.4 deleted file mode 160000 index 7ac3430c..00000000 --- a/0.4 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7ac3430c74a66e5bcf53e41c429143172d68c0a4 diff --git a/0.5 b/0.5 deleted file mode 160000 index 8cbba216..00000000 --- a/0.5 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8cbba216e37407bd2d4bd5c7128ab13bd0a6404e diff --git a/conf.py b/conf.py index a5351675..e5872cac 100644 --- a/conf.py +++ b/conf.py @@ -30,6 +30,9 @@ "README.md", "LICENSE.md", "CONTRIBUTING.md", + "**/README.md", + "**/LICENSE.md", + "**/CONTRIBUTING.md", ] redirects = { @@ -56,7 +59,7 @@ ] html_extra_path = [ - "_bikeshed", + "_html_extra", ] # #################################### @@ -164,42 +167,49 @@ def post_process(): import os import shutil import subprocess + import sys - versions = ["latest"] + glob.glob("[0-9]*") - for version in versions: - - # Run bikeshed - index_file = f"{version}/index.bs" - output_file = index_file.replace("bs", "html") - output_dir = os.path.dirname(output_file) - target_dir = os.path.join("_bikeshed", output_dir) - - run_bikeshed = True - - # Give the loop a chance to skip files if no build is needed/requested - if "BIKESHED" not in os.environ and os.path.exists(output_file): - src_time = os.path.getmtime(index_file) - out_time = os.path.getmtime(output_file) - if src_time < out_time: - print(f"{index_file} unchanged") - run_bikeshed = False - - if run_bikeshed: - subprocess.check_call( - f"bikeshed spec {index_file} {output_file}", shell=True, - ) - - if os.path.exists(target_dir): - shutil.rmtree(target_dir) - shutil.copytree(output_dir, target_dir) - - # Run json-schema-for-humans - try: - d = os.getcwd() - os.chdir("_bikeshed") - gen_version(version) - finally: - os.chdir(d) + # build ngff-spec docs + ngff_spec_versions = [ + {"submodule": "specifications/0.5", "target": "0.5"}, + {"submodule": "specifications/0.6.dev2", "target": "0.6.dev2"}, + ] + + serve_directory = "_html_extra" + shutil.rmtree(serve_directory, ignore_errors=True) + os.makedirs(serve_directory, exist_ok=True) + + for spec_version in ngff_spec_versions: + submodule_dir = spec_version["submodule"] + target_dir = spec_version["target"] + + if os.path.exists(submodule_dir): + print(f"Building ngff-spec docs for version {target_dir}...") + + os.chdir(submodule_dir) + + # prebuild ngff-spec examples and schemas + subprocess.check_call([sys.executable, "ngff_spec/pre_build.py"]) + os.chdir("ngff_spec") + + # Set BASE_URL from environment (for GitHub Pages) or fallback + os.environ["§BASE_URL"] = f"/{target_dir}/" + subprocess.check_call(["jupyter", "book", "build", "--ci", "--html"]) + os.chdir("../../..") + + # copy built ngff-spec to _html_extra for serving + source = Path(submodule_dir) / "ngff_spec" / "_build" / "html" + target = Path(serve_directory) / target_dir + shutil.copytree(source, target) + + # copy examples and schemas to bikeshed output + schema_files = glob.glob(os.path.join( + submodule_dir, "ngff_spec/schemas", '*.schema'), recursive=True) + target = Path(serve_directory) / target_dir / "schemas" + os.makedirs(target, exist_ok=True) + + for schema_file in schema_files: + shutil.copy2(schema_file, target) post_process() diff --git a/latest b/latest deleted file mode 160000 index 8cbba216..00000000 --- a/latest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8cbba216e37407bd2d4bd5c7128ab13bd0a6404e diff --git a/specifications/0.5 b/specifications/0.5 new file mode 160000 index 00000000..54566ffc --- /dev/null +++ b/specifications/0.5 @@ -0,0 +1 @@ +Subproject commit 54566ffc3f313c6c7c6873319b2501679f62b6a4 diff --git a/specifications/0.6.dev2 b/specifications/0.6.dev2 new file mode 160000 index 00000000..0cc2793b --- /dev/null +++ b/specifications/0.6.dev2 @@ -0,0 +1 @@ +Subproject commit 0cc2793b551b20f46823b03b9d6e8115d9536a9b diff --git a/specifications/index.md b/specifications/index.md index abfe2e8d..9c9b0fa8 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -3,13 +3,12 @@ Specifications OME-Zarr files have standardized metadata (that is the OME portion of "OME-Zarr") - each new version of OME-Zarr files has its own specification. Those specifications are listed below. -The current released version of the OME-Zarr specification is 0.5. - - +The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spec/specification.md). + +```{toctree} +:maxdepth: 1 +:caption: available specifications + +0.5/ngff_spec/index.md +0.6.dev2/ngff_spec/index.md +``` \ No newline at end of file From a3e8d5016ca37db88d8cd1b710b609cdd49d4502 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 7 Jan 2026 16:39:25 +0100 Subject: [PATCH 02/23] Update submodule configuration to use ome/ngff-spec --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 43153a6f..e577730a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "0.6.dev2"] path = specifications/0.6.dev2 - url = https://github.com/jo-mueller/ngff-spec - branch = main + url = https://github.com/ome/ngff-spec + branch = 5650481b4d259ca4b43253f7c87491290d92626f [submodule "0.5"] path = specifications/0.5 url = https://github.com/jo-mueller/ngff-spec From 7926b1bcd677ba5a06f899a7aee8c63d62c8f0d5 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:07:50 +0100 Subject: [PATCH 03/23] rename development submodule to "Dev" --- .gitmodules | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index e577730a..5121db9e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,16 @@ +[submodule "Dev"] + path = specifications/0.6.dev3 + url = https://github.com/ome/ngff-spec + branch = main [submodule "0.6.dev2"] path = specifications/0.6.dev2 url = https://github.com/ome/ngff-spec - branch = 5650481b4d259ca4b43253f7c87491290d92626f + branch = 0.6.dev2 [submodule "0.5"] path = specifications/0.5 url = https://github.com/jo-mueller/ngff-spec branch = 0.5 +[submodule "specifications/0.6.dev3"] + path = specifications/0.6.dev3 + url = https://github.com/ome/ngff-spec + branch = main From 57a9fdb2f6cb494f82282f81fb37e9ae2dce085e Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:13:00 +0100 Subject: [PATCH 04/23] fix Dev submodule config --- .gitmodules | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5121db9e..c5fa8941 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,5 @@ [submodule "Dev"] - path = specifications/0.6.dev3 + path = specifications/Dev url = https://github.com/ome/ngff-spec branch = main [submodule "0.6.dev2"] @@ -10,7 +10,3 @@ path = specifications/0.5 url = https://github.com/jo-mueller/ngff-spec branch = 0.5 -[submodule "specifications/0.6.dev3"] - path = specifications/0.6.dev3 - url = https://github.com/ome/ngff-spec - branch = main From 6d84125c2ee28e890880d63974760ec1bc521966 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:16:28 +0100 Subject: [PATCH 05/23] fix links --- specifications/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/specifications/index.md b/specifications/index.md index 9c9b0fa8..c29fe8d4 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -3,7 +3,7 @@ Specifications OME-Zarr files have standardized metadata (that is the OME portion of "OME-Zarr") - each new version of OME-Zarr files has its own specification. Those specifications are listed below. -The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spec/specification.md). +The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spec/index.md). ```{toctree} :maxdepth: 1 @@ -11,4 +11,5 @@ The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spe 0.5/ngff_spec/index.md 0.6.dev2/ngff_spec/index.md +Dev/index.md ``` \ No newline at end of file From 808c37ac35b048bd098e466b40e8539b42aa53a1 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:20:09 +0100 Subject: [PATCH 06/23] Create Dev --- specifications/Dev | 1 + 1 file changed, 1 insertion(+) create mode 160000 specifications/Dev diff --git a/specifications/Dev b/specifications/Dev new file mode 160000 index 00000000..5650481b --- /dev/null +++ b/specifications/Dev @@ -0,0 +1 @@ +Subproject commit 5650481b4d259ca4b43253f7c87491290d92626f From 944496ad475010e5bd7469bc9d85794e2167d4ef Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 9 Jan 2026 18:13:18 +0100 Subject: [PATCH 07/23] bring back RTD --- .github/workflows/pages.yml | 69 ------------------------------------- readthedocs.yml | 19 ++++++++++ 2 files changed, 19 insertions(+), 69 deletions(-) delete mode 100644 .github/workflows/pages.yml create mode 100644 readthedocs.yml diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml deleted file mode 100644 index 7f60ab71..00000000 --- a/.github/workflows/pages.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: Build and Deploy to GitHub Pages - -on: - push: - branches: [ main, subproject-ngff-spec ] - -env: - # `BASE_URL` determines the website is served from, including CSS & JS assets - BASE_URL: /${{ github.event.repository.name }} - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: 'pages' - cancel-in-progress: false - -env: - # `BASE_URL` determines the website is served from, including CSS & JS assets - # You may need to change this to `BASE_URL: ''` - BASE_URL: /${{ github.event.repository.name }} - -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Setup Pages - uses: actions/configure-pages@v3 - - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install specifications/0.6.dev2 - - - name: Build documentation - run: | - make html - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: '_build/html' - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/readthedocs.yml b/readthedocs.yml new file mode 100644 index 00000000..c91318af --- /dev/null +++ b/readthedocs.yml @@ -0,0 +1,19 @@ +version: 2 + +build: + os: ubuntu-24.04 + tools: + python: "3.10" + +submodules: + include: all + recursive: true + +sphinx: + configuration: conf.py + +python: + install: + - requirements: requirements.txt + - method: pip + path: specifications/0.6.dev2 \ No newline at end of file From d826d12840620543dcea1844e4fe6c62fc92e50f Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 9 Jan 2026 18:22:12 +0100 Subject: [PATCH 08/23] add node to RTD tools --- readthedocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/readthedocs.yml b/readthedocs.yml index c91318af..fee71963 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -4,6 +4,7 @@ build: os: ubuntu-24.04 tools: python: "3.10" + nodejs: "22" submodules: include: all From 87fb6b02cf3d6b199d6e46b70921801978670d06 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 9 Jan 2026 21:40:10 +0100 Subject: [PATCH 09/23] Update submodules to latest commits - specifications/0.5: Updated to f3729f5 (untrack built bs files) - specifications/0.6.dev2: Updated to da4606b (0.6.dev2 tag) - specifications/Dev: Updated to 05b8089 (main branch) --- specifications/0.5 | 2 +- specifications/0.6.dev2 | 2 +- specifications/Dev | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/specifications/0.5 b/specifications/0.5 index 54566ffc..f3729f59 160000 --- a/specifications/0.5 +++ b/specifications/0.5 @@ -1 +1 @@ -Subproject commit 54566ffc3f313c6c7c6873319b2501679f62b6a4 +Subproject commit f3729f59550a0c3574b99129d94213f25885a1e7 diff --git a/specifications/0.6.dev2 b/specifications/0.6.dev2 index 0cc2793b..da4606bf 160000 --- a/specifications/0.6.dev2 +++ b/specifications/0.6.dev2 @@ -1 +1 @@ -Subproject commit 0cc2793b551b20f46823b03b9d6e8115d9536a9b +Subproject commit da4606bf96d2829ad74b4dbaf6de5afb6b7a595a diff --git a/specifications/Dev b/specifications/Dev index 5650481b..05b8089c 160000 --- a/specifications/Dev +++ b/specifications/Dev @@ -1 +1 @@ -Subproject commit 5650481b4d259ca4b43253f7c87491290d92626f +Subproject commit 05b8089c73d67cd3daadfd6737f0ce17776504ae From 76fa1830749a8e38e2f67e64f6a0d5efd7d74836 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 9 Jan 2026 22:58:56 +0100 Subject: [PATCH 10/23] invoke build scripts in submodules --- conf.py | 189 +++++++++------------------------------- specifications/0.5 | 2 +- specifications/index.md | 2 +- 3 files changed, 43 insertions(+), 150 deletions(-) diff --git a/conf.py b/conf.py index e5872cac..397da44c 100644 --- a/conf.py +++ b/conf.py @@ -62,155 +62,48 @@ "_html_extra", ] -# #################################### -# Post-process all versions -# #################################### - - - -from pathlib import Path - -from json_schema_for_humans.generate import ( - generate_from_filename, - GenerationConfiguration, -) - - -def get_version_index_html(*, version: str, schmea_fnames: list[Path]) -> str: - schemas_list = "\n".join( - [f"
  • {p.stem}
  • " for p in schmea_fnames] - ) - return f""" - - - - - - - - - - - - - - OME-zarr version {version} - - - -

    Version {version}


    - - - -""" - - -def get_index_html(*, versions: list[str]) -> str: - versions_list = "\n".join( - [f"
  • {v}
  • " for v in versions] - ) - return f""" - - - - - - - - - - - - - - OME-zarr JSON schema specifications - - - -

    OME-zarr JSON schema specifications


    -

    Nicely rendered JSON schemas generated directly from the OME-zarr specifications.

    -

    Generated using json-schema-for-humans.

    - - - -""" - - -def gen_version(version): - version_path = Path(version) - schema_path = version_path / "schemas" - for schema_file in sorted(schema_path.glob("*.schema")): - print(schema_file) - generate_from_filename( - schema_file, - result_file_name=schema_path / schema_file.with_suffix(".html").name, - config=GenerationConfiguration(template_name="js", with_footer=False), - ) - - schema_fnames = [ - p - for p in sorted(schema_path.glob("*.html")) - if p.name != "index.html" - ] - with open(schema_path / "index.html", "w") as f: - f.write( - get_version_index_html(version=version, schmea_fnames=schema_fnames) - ) - - -def post_process(): +def build_served_html(): import glob - import os - import shutil import subprocess import sys + import os + import shutil - # build ngff-spec docs - ngff_spec_versions = [ - {"submodule": "specifications/0.5", "target": "0.5"}, - {"submodule": "specifications/0.6.dev2", "target": "0.6.dev2"}, - ] - - serve_directory = "_html_extra" - shutil.rmtree(serve_directory, ignore_errors=True) - os.makedirs(serve_directory, exist_ok=True) - - for spec_version in ngff_spec_versions: - submodule_dir = spec_version["submodule"] - target_dir = spec_version["target"] - - if os.path.exists(submodule_dir): - print(f"Building ngff-spec docs for version {target_dir}...") - - os.chdir(submodule_dir) - - # prebuild ngff-spec examples and schemas - subprocess.check_call([sys.executable, "ngff_spec/pre_build.py"]) - os.chdir("ngff_spec") - - # Set BASE_URL from environment (for GitHub Pages) or fallback - os.environ["§BASE_URL"] = f"/{target_dir}/" - subprocess.check_call(["jupyter", "book", "build", "--ci", "--html"]) - os.chdir("../../..") - - # copy built ngff-spec to _html_extra for serving - source = Path(submodule_dir) / "ngff_spec" / "_build" / "html" - target = Path(serve_directory) / target_dir - shutil.copytree(source, target) - - # copy examples and schemas to bikeshed output - schema_files = glob.glob(os.path.join( - submodule_dir, "ngff_spec/schemas", '*.schema'), recursive=True) - target = Path(serve_directory) / target_dir / "schemas" - os.makedirs(target, exist_ok=True) - - for schema_file in schema_files: - shutil.copy2(schema_file, target) - - -post_process() -del post_process + versions = [d for d in os.listdir("specifications") if os.path.isdir(os.path.join("specifications", d))] + + for version in versions: + + # copy schemas to _html_extra + os.makedirs(f'_html_extra/{version}/schemas', exist_ok=True) + schemas = glob.glob(f'specifications/{version}/**/*.schema', recursive=True) + for schema in schemas: + shutil.copy2(schema, f'_html_extra/{version}/schemas/') + print(f'✅ Copied schemas for version {version}') + + # find 'pre_build.py' in 'specifications' subdirectories + script = glob.glob(f'specifications/{version}/**/pre_build.py', recursive=True)[0] + + subprocess.check_call([sys.executable, script]) + print('✅ Built rendered examples/schemas for version', version) + + # build jupyter-book docs in specification submodules + myst_file = glob.glob(f'specifications/{version}/**/myst.yml', recursive=True)[0] + if os.path.exists(myst_file): + cdir = os.getcwd() + os.chdir(os.path.dirname(myst_file)) + subprocess.check_call(['jupyter-book', 'build', '--ci', '--html']) + os.chdir(cdir) + print('✅ Built jupyter-book documentation for version', version) + + # copy built html files to _html_extra + bikeshed_output = f'specifications/{version}/index.html' + if os.path.exists(bikeshed_output): + shutil.copy2(bikeshed_output, f'_html_extra/{version}/index.html') + print(f'✅ Found legacy bikeshed, serving as extra html for {version}') + else: + build_dir = glob.glob(f'specifications/{version}/**/_build/html', recursive=True)[0] + shutil.copytree(build_dir, f'_html_extra/{version}', dirs_exist_ok=True) + print(f'✅ Copying jupyter-book documentation as extra html for {version}') + +build_served_html() + \ No newline at end of file diff --git a/specifications/0.5 b/specifications/0.5 index f3729f59..4a9322cc 160000 --- a/specifications/0.5 +++ b/specifications/0.5 @@ -1 +1 @@ -Subproject commit f3729f59550a0c3574b99129d94213f25885a1e7 +Subproject commit 4a9322cc23bb4c68d03ca3955625f03d1b46049a diff --git a/specifications/index.md b/specifications/index.md index c29fe8d4..befffcb4 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -10,6 +10,6 @@ The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spe :caption: available specifications 0.5/ngff_spec/index.md -0.6.dev2/ngff_spec/index.md +0.6.dev2/ngff_spec/specification.md Dev/index.md ``` \ No newline at end of file From 27d77c63d40116ad5bdf9c163d8c90981bda6f4f Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 9 Jan 2026 23:22:12 +0100 Subject: [PATCH 11/23] fix index location --- specifications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifications/index.md b/specifications/index.md index befffcb4..cdb949de 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -9,7 +9,7 @@ The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spe :maxdepth: 1 :caption: available specifications -0.5/ngff_spec/index.md +0.5/index.md 0.6.dev2/ngff_spec/specification.md Dev/index.md ``` \ No newline at end of file From d26cbbf5b9323ec7fb6f859e18dd8a1623227e7a Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 9 Jan 2026 23:33:38 +0100 Subject: [PATCH 12/23] update commit --- specifications/0.5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifications/0.5 b/specifications/0.5 index 4a9322cc..77fdd6c8 160000 --- a/specifications/0.5 +++ b/specifications/0.5 @@ -1 +1 @@ -Subproject commit 4a9322cc23bb4c68d03ca3955625f03d1b46049a +Subproject commit 77fdd6c82081d23f99c6344c7cf52f41ce7192b4 From 365094e2c17d8fa3c0fcf99d58dcf9574aa630f4 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 00:33:03 +0100 Subject: [PATCH 13/23] do not build jupyter book here --- conf.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/conf.py b/conf.py index 397da44c..19a4d8ee 100644 --- a/conf.py +++ b/conf.py @@ -86,15 +86,6 @@ def build_served_html(): subprocess.check_call([sys.executable, script]) print('✅ Built rendered examples/schemas for version', version) - # build jupyter-book docs in specification submodules - myst_file = glob.glob(f'specifications/{version}/**/myst.yml', recursive=True)[0] - if os.path.exists(myst_file): - cdir = os.getcwd() - os.chdir(os.path.dirname(myst_file)) - subprocess.check_call(['jupyter-book', 'build', '--ci', '--html']) - os.chdir(cdir) - print('✅ Built jupyter-book documentation for version', version) - # copy built html files to _html_extra bikeshed_output = f'specifications/{version}/index.html' if os.path.exists(bikeshed_output): From 9eee8082d26c87b53b6c0080611ef5e512e03565 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 00:33:10 +0100 Subject: [PATCH 14/23] add 0.4 --- .gitmodules | 9 +++++++++ specifications/index.md | 7 +++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index c5fa8941..0fedd7dc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,12 @@ path = specifications/0.5 url = https://github.com/jo-mueller/ngff-spec branch = 0.5 +[submodule "0.4"] + path = specifications/0.4 + url = https://github.com/jo-mueller/ngff-spec + branch = 0.4 + +[submodule "specifications/0.4"] + path = specifications/0.4 + url = https://github.com/jo-mueller/ngff-spec + branch = 0.4 diff --git a/specifications/index.md b/specifications/index.md index cdb949de..8fc267a1 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -9,7 +9,10 @@ The current released version of the OME-Zarr specification is [0.5](0.5/ngff_spe :maxdepth: 1 :caption: available specifications -0.5/index.md -0.6.dev2/ngff_spec/specification.md Dev/index.md +0.6.dev2/ngff_spec/specification.md +0.5/index.md +0.4/index.md + + ``` \ No newline at end of file From 8228f2bcc754779974f584ea3aeefae4fd47ca3b Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:27:42 +0100 Subject: [PATCH 15/23] build books --- conf.py | 10 ++++++++++ specifications/0.5 | 2 +- specifications/index.md | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/conf.py b/conf.py index 19a4d8ee..db27d78f 100644 --- a/conf.py +++ b/conf.py @@ -86,6 +86,16 @@ def build_served_html(): subprocess.check_call([sys.executable, script]) print('✅ Built rendered examples/schemas for version', version) + # build jupyter-book docs in specification submodules + myst_file = glob.glob(f'specifications/{version}/**/myst.yml', recursive=True)[0] + if os.path.exists(myst_file): + cdir = os.getcwd() + os.chdir(os.path.dirname(myst_file)) + subprocess.check_call(['jupyter-book', 'build', '--ci', '--html']) + os.chdir(cdir) + print('✅ Built jupyter-book documentation for version', version) + + # copy built html files to _html_extra bikeshed_output = f'specifications/{version}/index.html' if os.path.exists(bikeshed_output): diff --git a/specifications/0.5 b/specifications/0.5 index 77fdd6c8..41dbe15c 160000 --- a/specifications/0.5 +++ b/specifications/0.5 @@ -1 +1 @@ -Subproject commit 77fdd6c82081d23f99c6344c7cf52f41ce7192b4 +Subproject commit 41dbe15cf7acd531eee4b745cb5ebdccc0a22518 diff --git a/specifications/index.md b/specifications/index.md index 8fc267a1..0ab69156 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -13,6 +13,7 @@ Dev/index.md 0.6.dev2/ngff_spec/specification.md 0.5/index.md 0.4/index.md +0.3/index.md ``` \ No newline at end of file From 8e2462f4b98b38e00303fe5f662988ce52541469 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:28:01 +0100 Subject: [PATCH 16/23] update modules --- .gitmodules | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 0fedd7dc..7923c3b8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,8 +14,7 @@ path = specifications/0.4 url = https://github.com/jo-mueller/ngff-spec branch = 0.4 - -[submodule "specifications/0.4"] - path = specifications/0.4 +[submodule "0.3"] + path = specifications/0.3 url = https://github.com/jo-mueller/ngff-spec - branch = 0.4 + branch = 0.3 \ No newline at end of file From 87871c30ee82f7e9f5e93f5833634d5760748a4d Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:49:19 +0100 Subject: [PATCH 17/23] add 0.1 and 0.2 --- .gitmodules | 10 +++++++++- specifications/0.1 | 1 + specifications/0.2 | 1 + specifications/index.md | 3 ++- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 160000 specifications/0.1 create mode 160000 specifications/0.2 diff --git a/.gitmodules b/.gitmodules index 7923c3b8..fa7520b1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,4 +17,12 @@ [submodule "0.3"] path = specifications/0.3 url = https://github.com/jo-mueller/ngff-spec - branch = 0.3 \ No newline at end of file + branch = 0.3 +[submodule "specifications/0.2"] + path = specifications/0.2 + url = https://github.com/jo-mueller/ngff-spec + branch = 0.2 +[submodule "specifications/0.1"] + path = specifications/0.1 + url = https://github.com/jo-mueller/ngff-spec + branch = 0.1 diff --git a/specifications/0.1 b/specifications/0.1 new file mode 160000 index 00000000..f565f8c8 --- /dev/null +++ b/specifications/0.1 @@ -0,0 +1 @@ +Subproject commit f565f8c8b2c21e648a96bfd0b3972c78bc7e2bd3 diff --git a/specifications/0.2 b/specifications/0.2 new file mode 160000 index 00000000..4732bb28 --- /dev/null +++ b/specifications/0.2 @@ -0,0 +1 @@ +Subproject commit 4732bb28e13d09522327f38372159bf92d05ae66 diff --git a/specifications/index.md b/specifications/index.md index 0ab69156..c322bbfb 100644 --- a/specifications/index.md +++ b/specifications/index.md @@ -14,6 +14,7 @@ Dev/index.md 0.5/index.md 0.4/index.md 0.3/index.md - +0.2/index.md +0.1/index.md ``` \ No newline at end of file From b8f036fe6c03aacef568cf5da8f1ee1691cad2ae Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:09:07 +0100 Subject: [PATCH 18/23] use bibtex references and parsing on page --- conf.py | 6 ++- references.bib | 121 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 references.bib diff --git a/conf.py b/conf.py index db27d78f..f1b46094 100644 --- a/conf.py +++ b/conf.py @@ -13,7 +13,11 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ["myst_parser","sphinx_reredirects"] +extensions = [ + "myst_parser", + "sphinx_reredirects", + "sphinxcontrib.bibtex"] +bibtex_bibfiles = ["references.bib"] source_suffix = [".rst", ".md"] myst_heading_anchors = 5 myst_enable_extensions = ["deflist", "strikethrough"] diff --git a/references.bib b/references.bib new file mode 100644 index 00000000..25e054af --- /dev/null +++ b/references.bib @@ -0,0 +1,121 @@ +@article{moore2021ome, + title={OME-NGFF: a next-generation file format for expanding bioimaging data-access strategies}, + author={Moore, Josh and Allan, Chris and Besson, S{\'e}bastien and Burel, Jean-Marie and Diel, Erin and Gault, David and Kozlowski, Kevin and Lindner, Dominik and Linkert, Melissa and Manz, Trevor and others}, + journal={Nature methods}, + volume={18}, + number={12}, + pages={1496--1498}, + year={2021}, + publisher={Nature Publishing Group US New York} +} + +@software{ngff_spec_latest, + author = {Josh Moore}, + title = {ome/ngff: Next-generation file format (NGFF) + specifications for storing bioimaging data in the + cloud. + }, + month = nov, + year = 2020, + publisher = {Zenodo}, + version = {0.0.1}, + doi = {10.5281/zenodo.4282107}, + url = {https://ngff.openmicroscopy.org/latest/}, +} + +@software{zarr, + author = {Alistair Miles and + jakirkham and + Martin Durant and + Matthias Bussonnier and + James Bourbeau and + Tarik Onalan and + Joe Hamman and + Zain Patel and + Matthew Rocklin and + shikharsg and + Ryan Abernathey and + Josh Moore and + Vincent Schut and + raphael dussin and + Elliott Sales de Andrade and + Charles Noyes and + Aleksandar Jelenak and + Anderson Banihirwe and + Chris Barnes and + George Sakkis and + Jan Funke and + Jerome Kelleher and + Joe Jevnik and + Justin Swaney and + Poruri Sai Rahul and + Stephan Saalfeld and + john and + Tommy Tran and + pyup.io bot and + sbalmer}, + title = {zarr-developers/zarr-python: v2.5.0}, + month = oct, + year = 2020, + publisher = {Zenodo}, + version = {v2.5.0}, + doi = {10.5281/zenodo.4069231}, + url = {https://doi.org/10.5281/zenodo.4069231}, +} + +@software{n5, + author = {Stephan Saalfeld and + Igor Pisarev and + Philipp Hanslovsky and + Andrew Champion and + Curtis Rueden and + John Bogovic and + Mark Kittisopikul and + jakirkham}, + title = {saalfeldlab/n5: n5-2.5.1}, + month = may, + year = 2022, + publisher = {Zenodo}, + version = {n5-2.5.1}, + doi = {10.5281/zenodo.6578232}, + url = {https://doi.org/10.5281/zenodo.6578232}, +} + +@software{ome-zarr-py, + author = {Josh Moore and + Will Moore and + Sébastien Besson and + jean-marie burel and + Constantin Pape and + Dimitri Papadopoulos Orfanos and + David Stansby and + toloudis and + Giovanni Palla and + Guillaume Gay and + Evan Lyall and + Satrajit Ghosh and + Simon Li and + Benjamin Rombaut and + Minh Nhat Nguyen and + Juan Nunez-Iglesias and + aeisenbarth and + Albert Dominguez Mantes and + Yaroslav Halchenko and + Joshua Gould and + Camilo Laiton and + Tommaso Comparin and + LucaMarconato and + Heath Patterson and + Wouter-Michiel Vierdag and + Talley Lambert and + Sean Martin and + Peter Sobolewski and + M Bussonnier}, + title = {ome/ome-zarr-py: v0.12.2}, + month = aug, + year = 2025, + publisher = {Zenodo}, + version = {v0.12.2}, + doi = {10.5281/zenodo.16925672}, + url = {https://doi.org/10.5281/zenodo.16925672}, +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index d38c3f69..4f2a50a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ sphinx-book-theme json-schema-for-humans testresources sphinx-reredirects +sphinxcontrib-bibtex From 8767c3a0f119787f4c2a860ee77a45745701c21b Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:14:04 +0100 Subject: [PATCH 19/23] update submodules --- specifications/0.1 | 2 +- specifications/0.2 | 2 +- specifications/0.5 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/specifications/0.1 b/specifications/0.1 index f565f8c8..8baea875 160000 --- a/specifications/0.1 +++ b/specifications/0.1 @@ -1 +1 @@ -Subproject commit f565f8c8b2c21e648a96bfd0b3972c78bc7e2bd3 +Subproject commit 8baea875a20741fd13e1d2cb63f3f1de0ff03a97 diff --git a/specifications/0.2 b/specifications/0.2 index 4732bb28..6299f0b2 160000 --- a/specifications/0.2 +++ b/specifications/0.2 @@ -1 +1 @@ -Subproject commit 4732bb28e13d09522327f38372159bf92d05ae66 +Subproject commit 6299f0b25afe5d78b72d73e312b052ef4634ef5f diff --git a/specifications/0.5 b/specifications/0.5 index 41dbe15c..4b8eef69 160000 --- a/specifications/0.5 +++ b/specifications/0.5 @@ -1 +1 @@ -Subproject commit 41dbe15cf7acd531eee4b745cb5ebdccc0a22518 +Subproject commit 4b8eef690c1ceae5c1f5fd232a34d89a4ce0c8a3 From f088baf58c8c1e8b1598f857509d9fd80a736fa0 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 12 Jan 2026 22:36:59 +0100 Subject: [PATCH 20/23] update submodules --- specifications/0.1 | 2 +- specifications/0.2 | 2 +- specifications/0.5 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/specifications/0.1 b/specifications/0.1 index 8baea875..52db97ce 160000 --- a/specifications/0.1 +++ b/specifications/0.1 @@ -1 +1 @@ -Subproject commit 8baea875a20741fd13e1d2cb63f3f1de0ff03a97 +Subproject commit 52db97ceb723321e629825204e3f4da5e8fa80ae diff --git a/specifications/0.2 b/specifications/0.2 index 6299f0b2..22152cb2 160000 --- a/specifications/0.2 +++ b/specifications/0.2 @@ -1 +1 @@ -Subproject commit 6299f0b25afe5d78b72d73e312b052ef4634ef5f +Subproject commit 22152cb2e0891d7f1d5b5f8778252e263abdf4ab diff --git a/specifications/0.5 b/specifications/0.5 index 4b8eef69..41246310 160000 --- a/specifications/0.5 +++ b/specifications/0.5 @@ -1 +1 @@ -Subproject commit 4b8eef690c1ceae5c1f5fd232a34d89a4ce0c8a3 +Subproject commit 412463103412f0a5d31d325579793185eb9030c6 From 9efec3120a608bc465b1909d593a1fb59c3ead82 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 13 Jan 2026 14:28:22 +0100 Subject: [PATCH 21/23] skip references.bib in codespell --- .codespellrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codespellrc b/.codespellrc index ba63319e..98a102d6 100644 --- a/.codespellrc +++ b/.codespellrc @@ -1,6 +1,6 @@ [codespell] # Ref: https://github.com/codespell-project/codespell#using-a-config-file -skip = .git,.codespellrc +skip = .git,.codespellrc,references.bib check-hidden = true # ignore-regex = ignore-words-list = commend,Fuchsia From 05b5e377f7dcb7306bd62b2c70e5d7f97a0685e4 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 13 Jan 2026 14:30:08 +0100 Subject: [PATCH 22/23] use ngff-spec as origin for submodules --- .gitmodules | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index fa7520b1..4b85fb6d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,21 +8,21 @@ branch = 0.6.dev2 [submodule "0.5"] path = specifications/0.5 - url = https://github.com/jo-mueller/ngff-spec + url = https://github.com/ome/ngff-spec branch = 0.5 [submodule "0.4"] path = specifications/0.4 - url = https://github.com/jo-mueller/ngff-spec + url = https://github.com/ome/ngff-spec branch = 0.4 [submodule "0.3"] path = specifications/0.3 - url = https://github.com/jo-mueller/ngff-spec + url = https://github.com/ome/ngff-spec branch = 0.3 [submodule "specifications/0.2"] path = specifications/0.2 - url = https://github.com/jo-mueller/ngff-spec + url = https://github.com/ome/ngff-spec branch = 0.2 [submodule "specifications/0.1"] path = specifications/0.1 - url = https://github.com/jo-mueller/ngff-spec + url = https://github.com/ome/ngff-spec branch = 0.1 From cf367ee33cc2146afaf8308021ba696d95ab8c48 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 19 Jan 2026 18:53:18 +0100 Subject: [PATCH 23/23] add escape clause to build workflow --- conf.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/conf.py b/conf.py index 4d6a89ec..7fcac1f7 100644 --- a/conf.py +++ b/conf.py @@ -99,21 +99,26 @@ def build_served_html(): myst_file = glob.glob(f'specifications/{version}/**/myst.yml', recursive=True)[0] if os.path.exists(myst_file): cdir = os.getcwd() - os.chdir(os.path.dirname(myst_file)) - subprocess.check_call(['jupyter-book', 'build', '--ci', '--html']) - os.chdir(cdir) + try: + os.chdir(os.path.dirname(myst_file)) + subprocess.check_call(['jupyter-book', 'build', '--ci', '--html']) + finally: + os.chdir(cdir) print('✅ Built jupyter-book documentation for version', version) # copy built html files to _html_extra bikeshed_output = f'specifications/{version}/index.html' - if os.path.exists(bikeshed_output): - shutil.copy2(bikeshed_output, f'_html_extra/{version}/index.html') - print(f'✅ Found legacy bikeshed, serving as extra html for {version}') - else: - build_dir = glob.glob(f'specifications/{version}/**/_build/html', recursive=True)[0] - shutil.copytree(build_dir, f'_html_extra/{version}', dirs_exist_ok=True) - print(f'✅ Copying jupyter-book documentation as extra html for {version}') + try: + if os.path.exists(bikeshed_output): + shutil.copy2(bikeshed_output, f'_html_extra/{version}/index.html') + print(f'✅ Found legacy bikeshed, serving as extra html for {version}') + else: + build_dir = glob.glob(f'specifications/{version}/**/_build/html', recursive=True)[0] + shutil.copytree(build_dir, f'_html_extra/{version}', dirs_exist_ok=True) + print(f'✅ Copying jupyter-book documentation as extra html for {version}') + except Exception as e: + print(f'⚠️ Could not copy served html for version {version}: {e}') build_served_html() \ No newline at end of file