diff --git a/.github/build.sh b/.github/build.sh
index ba5e7a29..523abeb8 100755
--- a/.github/build.sh
+++ b/.github/build.sh
@@ -1,55 +1,3 @@
#!/bin/sh
-
-# Discern whether this is a release build.
-releasing=
-if [ -f release.properties ]; then
- releasing=1
-fi
-
-# Run the SciJava CI build script.
-curl -fsLO https://raw.githubusercontent.com/scijava/scijava-scripts/main/ci-build.sh &&
-sh ci-build.sh || { echo "Maven build failed. Skipping melting pot tests."; exit 1; }
-
-# Skip melting pot if cutting a release.
-if [ "$releasing" ]; then
- exit 0
-fi
-
-# Helper method to get the last cache modified date as seconds since epoch
-last_cache_modified() {
- find "$HOME/.cache/scijava/melting-pot" -type f | while read f
- do
- stat -c '%Y' "$f"
- done | sort -nr 2>/dev/null | head -n1
-}
-
-# Record the last time of cache modification before running melting-pot
-cache_modified_pre=0
-cache_modified_post=0
-
-if [ -d "$HOME/.cache/scijava/melting-pot" ]; then
- cache_modified_pre=$(last_cache_modified)
-fi
-
-# run melting-pot
-tests/run.sh
-meltResult=$?
-
-# Record the last time of cache modification after running melting-pot
-if [ -d "$HOME/.cache/scijava/melting-pot" ]; then
- cache_modified_post=$(last_cache_modified)
-fi
-
-# Determine if cache needs to be re-generated
-echo "cache_modified_pre=$cache_modified_pre"
-echo "cache_modified_post=$cache_modified_post"
-if [ "$cache_modified_post" -gt "$cache_modified_pre" ]; then
- echo "cacheChanged=true"
- echo "cacheChanged=true" >> $GITHUB_ENV
-else
- echo "cacheChanged=false"
- echo "cacheChanged=false" >> $GITHUB_ENV
-fi
-
-# NB: This script exits 0, but saves the exit code for a later build step.
-echo $meltResult > exit-code
+curl -fsLO https://raw.githubusercontent.com/scijava/scijava-scripts/main/ci-build.sh
+sh ci-build.sh
diff --git a/.github/delete-cache.sh b/.github/delete-cache.sh
new file mode 100755
index 00000000..6c3dbb9c
--- /dev/null
+++ b/.github/delete-cache.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+test "$1" || { echo "Usage: delete-cache.sh cache-key"; exit 1; }
+gh api --method DELETE \
+ -H "Accept: application/vnd.github+json" \
+ "/repos/scijava/pom-scijava/actions/caches?key=$1" || true
diff --git a/.github/exit.sh b/.github/exit.sh
deleted file mode 100755
index b5ab4d19..00000000
--- a/.github/exit.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-test -f exit-code || {
- echo "[ERROR] No build exit code was saved!"
- exit 255
-}
-exitCode=$(cat exit-code)
-rm -f exit-code
-exit $exitCode
diff --git a/.github/melt.sh b/.github/melt.sh
new file mode 100755
index 00000000..b15e478d
--- /dev/null
+++ b/.github/melt.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+uv tool install "git+https://github.com/scijava/pombast.git
+pombast melt . || true
+pombast smelt --json smelt.json .
diff --git a/.github/publish.sh b/.github/publish.sh
new file mode 100755
index 00000000..be5b0745
--- /dev/null
+++ b/.github/publish.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+# Commit a file to the status.scijava.org gh-pages branch.
+# Requires SSH agent to be running with write access to status.scijava.org.
+set -e
+
+test $# -gt 1 || {
+ echo "Usage: publish.sh \"Commit message\" file1 [file2 ...]"
+ exit 2
+}
+
+datestamp="$(TZ=UTC date +'%Y-%m-%d %H:%M:%S UTC')"
+message="$1 ($datestamp)"
+shift
+
+git config --global user.name github-actions
+git config --global user.email github-actions@github.com
+
+dest_dir=site-publish
+
+git clone --depth=1 --branch=gh-pages git@github.com:scijava/status.scijava.org "$dest_dir"
+
+while [ $# -gt 0 ]
+do
+ file=$1
+ shift
+ test -f "$file" || { echo "File not found: $file" >&2; exit 1; }
+ dest=$(basename "$file")
+ cp "$file" "$dest_dir/$dest"
+ (cd "$dest_dir" && git add "$dest")
+done
+
+cd "$dest_dir"
+if git diff --quiet .
+then
+ echo "== No changes =="
+else
+ echo "== Committing changes =="
+ git commit -m "$message"
+ git push
+fi
diff --git a/.github/setup-build.sh b/.github/setup-build.sh
new file mode 100755
index 00000000..bdc2ff72
--- /dev/null
+++ b/.github/setup-build.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+curl -fsLO https://raw.githubusercontent.com/scijava/scijava-scripts/main/ci-setup-github-actions.sh
+sh ci-setup-github-actions.sh
+
+# Install native libraries needed to smelt components.
+pkgs="libxcb-shape0" # org.janelia:H5J_Loader_Plugin
+pkgs="$pkgs libgtk2.0-0" # net.imagej:imagej-opencv
+pkgs="$pkgs libblosc1" # org.janelia.saalfeldlab:n5-blosc
+sudo apt-get update
+sudo apt-get -y install $pkgs
diff --git a/.github/setup-release.sh b/.github/setup-release.sh
new file mode 100755
index 00000000..a03464be
--- /dev/null
+++ b/.github/setup-release.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+curl -fsLO https://raw.githubusercontent.com/scijava/scijava-scripts/main/ci-setup-github-actions.sh
+sh ci-setup-github-actions.sh
diff --git a/.github/setup.sh b/.github/setup.sh
deleted file mode 100755
index 6f254a7e..00000000
--- a/.github/setup.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-curl -fsLO https://raw.githubusercontent.com/scijava/scijava-scripts/main/ci-setup-github-actions.sh
-sh ci-setup-github-actions.sh
-
-# Install needed packages.
-pkgs="libxml2-utils" # needed for melting pot
-pkgs="$pkgs libxcb-shape0" # org.janelia:H5J_Loader_Plugin (fiji/H5J_Loader_Plugin@d026a1bb)
-pkgs="$pkgs libgtk2.0-0" # net.imagej:imagej-opencv (imagej/imagej-opencv@21113e08)
-pkgs="$pkgs libblosc1" # org.janelia.saalfeldlab:n5-blosc
-sudo apt-get update
-sudo apt-get -y install $(echo "$pkgs")
diff --git a/.github/status.sh b/.github/status.sh
new file mode 100755
index 00000000..60f1a401
--- /dev/null
+++ b/.github/status.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+uv tool install "git+https://github.com/scijava/pombast.git
+pombast status .
+pombast badges -o badges.json .
+pombast team .
+.github/publish.sh "Update status reports" index.html badges.json team.html
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index c2298d4a..a29e656c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -8,14 +8,18 @@ on:
branches:
- master
schedule:
- - cron: "4 5 * * 0" # every Sunday at 0405, to keep cache alive
+ # Run weekly on Sunday to keep the Maven cache alive.
+ - cron: '4 5 * * 0'
jobs:
build:
runs-on: ubuntu-latest
+ permissions:
+ actions: write # needed to delete and re-save the pombast cache
steps:
- uses: actions/checkout@v4
+
- name: Set up Java
uses: actions/setup-java@v4
with:
@@ -24,19 +28,20 @@ jobs:
distribution: 'zulu'
cache: 'maven'
- - name: Set up CI environment
- run: .github/setup.sh
+ - uses: astral-sh/setup-uv@v6
- - name: Restore the melting-pot cache
- id: restore-cache
- uses: actions/cache/restore@v3
+ - uses: webfactory/ssh-agent@v0.9.0
+ if: github.ref == 'refs/heads/master' && github.event_name == 'push'
with:
- path: ~/.cache/scijava/melting-pot
- key: ${{ runner.os }}-cache
+ ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
+
+ - name: Set up build environment
+ run: .github/setup-build.sh
+ shell: bash
- - name: Execute the build
- id: execute-build
+ - name: Maven CI build
run: .github/build.sh
+ shell: bash
env:
GPG_KEY_NAME: ${{ secrets.GPG_KEY_NAME }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
@@ -46,22 +51,31 @@ jobs:
CENTRAL_PASS: ${{ secrets.CENTRAL_PASS }}
SIGNING_ASC: ${{ secrets.SIGNING_ASC }}
- - name: Delete the melting-pot cache
- if: env.cacheChanged == 'true'
- id: delete-cache
- run: |
- gh api --method DELETE -H "Accept: application/vnd.github+json" /repos/scijava/pom-scijava/actions/caches?key=${{ runner.os }}-cache || true
+ - name: Restore pombast cache
+ uses: actions/cache/restore@v4
+ with:
+ path: ~/.cache/pombast
+ key: ${{ runner.os }}-pombast-build
+
+ - name: Run pombast melt+smelt commands
+ run: .github/melt.sh
+ shell: bash
+
+ - name: Delete old pombast cache
+ if: always()
+ run: .github/delete-cache.sh "${{ runner.os }}-pombast-build"
+ shell: bash
env:
- GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Save the melting-pot cache
- if: env.cacheChanged == 'true'
- id: save-cache
- uses: actions/cache/save@v3
+ - name: Save pombast cache
+ if: always()
+ uses: actions/cache/save@v4
with:
- path: ~/.cache/scijava/melting-pot
- key: ${{ runner.os }}-cache
+ path: ~/.cache/pombast
+ key: ${{ runner.os }}-pombast-build
- - name: Return the exit code
- id: exit-build
- run: .github/exit.sh
+ - name: Publish smelt results
+ if: always() && github.ref == 'refs/heads/master' && github.event_name == 'push'
+ run: .github/publish.sh "Update smelt results" smelt.json
+ shell: bash
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1848a199..27edfcb2 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,12 +19,13 @@ jobs:
distribution: 'zulu'
cache: 'maven'
- - name: Set up CI environment
- run: .github/setup.sh
+ - name: Set up release environment
+ run: .github/setup-release.sh
+ shell: bash
- - name: Execute the build
- id: execute-build
+ - name: Execute the release
run: .github/build.sh
+ shell: bash
env:
GPG_KEY_NAME: ${{ secrets.GPG_KEY_NAME }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
diff --git a/.github/workflows/status.yml b/.github/workflows/status.yml
new file mode 100644
index 00000000..c14eaf3d
--- /dev/null
+++ b/.github/workflows/status.yml
@@ -0,0 +1,71 @@
+name: status
+
+on:
+ schedule:
+ # Run daily at 0500 UTC.
+ - cron: '0 5 * * *'
+ push:
+ branches:
+ - master
+
+jobs:
+ status:
+ runs-on: ubuntu-latest
+ permissions:
+ actions: write # needed to delete and re-save caches
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: astral-sh/setup-uv@v6
+
+ - uses: webfactory/ssh-agent@v0.9.0
+ with:
+ ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
+
+ - name: Restore pombast cache
+ uses: actions/cache/restore@v4
+ with:
+ path: ~/.cache/pombast
+ key: ${{ runner.os }}-pombast-status
+
+ # The monoqueue library is used by pombast to read GitHub issues.
+ - name: Restore monoqueue cache
+ uses: actions/cache/restore@v4
+ with:
+ path: ~/.cache/monoqueue
+ key: ${{ runner.os }}-monoqueue-status
+
+ - name: Generate and publish status and team pages
+ run: .github/status.sh
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Delete old pombast status cache
+ if: always()
+ run: .github/delete-cache.sh "${{ runner.os }}-pombast-status"
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Save pombast cache
+ if: always()
+ uses: actions/cache/save@v4
+ with:
+ path: ~/.cache/pombast
+ key: ${{ runner.os }}-pombast-status
+
+ - name: Delete old monoqueue cache
+ if: always()
+ run: .github/delete-cache.sh "${{ runner.os }}-monoqueue-status"
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Save monoqueue cache
+ if: always()
+ uses: actions/cache/save@v4
+ with:
+ path: ~/.cache/monoqueue
+ key: ${{ runner.os }}-monoqueue-status
diff --git a/bombast.toml b/bombast.toml
deleted file mode 100644
index 0b37d1db..00000000
--- a/bombast.toml
+++ /dev/null
@@ -1,160 +0,0 @@
-[filter]
-includes = [
- "ca.mcgill:*",
- "io.scif:*",
- "jitk:*",
- "mpicbg:*",
- "net.imagej:*",
- "net.imglib2:*",
- "net.preibisch:*",
- "org.bonej:*",
- "org.janelia.saalfeldlab:*",
- "org.janelia:*",
- "org.morphonets:*",
- "org.scijava:*",
- "sc.fiji:*",
-]
-excludes = [
- # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone.
- 'org.bytedeco:hdf5',
- # TEMP: Skip components within multi-module reactors.
- # Neither melting-pot.sh nor release-version.sh understand
- # multi-module repositories; release-version.sh needs to learn
- # how to tag and release individual components from multi-module
- # repos, so that when melting-pot.sh shallow clones the repo at
- # that tag and invokes a build, it will be building only the
- # released component as it does with single-component repos.
- 'org.scijava:scijava-collections',
- 'org.scijava:scijava-common3',
- 'org.scijava:scijava-concurrent',
- 'org.scijava:scijava-discovery-test',
- 'org.scijava:scijava-discovery',
- 'org.scijava:scijava-function',
- 'org.scijava:scijava-legacy',
- 'org.scijava:scijava-meta',
- 'org.scijava:scijava-ops-api',
- 'org.scijava:scijava-ops-benchmarks',
- 'org.scijava:scijava-ops-engine',
- 'org.scijava:scijava-ops-ext-parser',
- 'org.scijava:scijava-ops-flim',
- 'org.scijava:scijava-ops-image',
- 'org.scijava:scijava-ops-indexer',
- 'org.scijava:scijava-ops-opencv',
- 'org.scijava:scijava-ops-spi',
- 'org.scijava:scijava-ops-tutorial',
- 'org.scijava:scijava-priority',
- 'org.scijava:scijava-progress',
- 'org.scijava:scijava-struct',
- 'org.scijava:scijava-taglets',
- 'org.scijava:scijava-testutil',
- 'org.scijava:scijava-types',
- 'mpicbg:mpicbg', 'mpicbg:mpicbg_',
- # NB: Skip artifacts requiring minimum Java version >8.
- '*:algart-tiff',
- '*:javafx-base',
- '*:javafx-controls',
- '*:javafx-fxml',
- '*:javafx-graphics',
- '*:javafx-media',
- '*:javafx-swing',
- '*:javafx-web',
- '*:SNT',
- # NB: Skip closed-source artifacts.
- '*:bonej-plus',
- # NB: The following artifacts have messy dependency trees.
- # Too many problems to test as part of the mega-melt.
- # See WARNING block in pom-scijava's pom.xml for details.
- 'net.imagej:imagej-server',
- '*:spark-core_2.11',
- # NB: Skip scijava forks of third-party projects.
- # These are very stable, with few/no dependencies, and
- # don't need to be retested as pom-scijava evolves.
- 'org.scijava:j3dcore',
- 'org.scijava:j3dutils',
- 'org.scijava:jep',
- 'org.scijava:junit-benchmarks',
- 'org.scijava:vecmath',
- # NB: Skip alternate flavors of other managed components.
- '*:gluegen', # uberjar flavor of gluegen-rt
- '*:jogl-all-noawt', # slimmed down flavor of jogl-all
- # NB: All the SWT platform JARs have the same classes.
- # The current platform will be brought in transitively.
- '*:org.eclipse.swt.cocoa.macosx',
- '*:org.eclipse.swt.cocoa.macosx.x86_64',
- '*:org.eclipse.swt.gtk.aix.ppc',
- '*:org.eclipse.swt.gtk.aix.ppc64',
- '*:org.eclipse.swt.gtk.hpux.ia64',
- '*:org.eclipse.swt.gtk.linux.ppc',
- '*:org.eclipse.swt.gtk.linux.ppc64',
- '*:org.eclipse.swt.gtk.linux.s390',
- '*:org.eclipse.swt.gtk.linux.s390x',
- '*:org.eclipse.swt.gtk.linux.x86',
- '*:org.eclipse.swt.gtk.linux.x86_64',
- '*:org.eclipse.swt.gtk.solaris.sparc',
- '*:org.eclipse.swt.gtk.solaris.x86',
- '*:org.eclipse.swt.win32.win32.x86',
- '*:org.eclipse.swt.win32.win32.x86_64',
- # NB: All SLF4J bindings have the same classes.
- # We'll rely on logback-classic being present here.
- 'org.slf4j:slf4j-jcl',
- 'org.slf4j:slf4j-jdk14',
- 'org.slf4j:slf4j-nop',
- 'org.slf4j:slf4j-simple',
- # NB: Cannot include both commons-logging and jcl-over-slf4j;
- # see: http://www.slf4j.org/codes.html#jclDelegationLoop
- 'org.slf4j:jcl-over-slf4j',
-]
-
-[build]
-min-java-version = 8
-
-[skip-tests]
-components = [
- # java.lang.AssertionError
- # at org.scijava.minimaven.BasicTest.testClassifiers(BasicTest.java:216)
- "org.scijava:minimaven",
-
- # Error while checking the CLIJ2 installation: null
- "sc.fiji:labkit-pixel-classification",
-]
-
-[remove-tests]
-
-# CachedOpEnvironmentTest fails intermittently. Of course, it should be
-# somehow fixed in imagej-ops. But for now, let's not let it ruin the melt.
-"net.imagej:imagej-ops" = ["net.imagej.ops.cached.CachedOpEnvironmentTest"]
-
-# In org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests.testXYT:
-# java.util.NoSuchElementException: No value present
-"org.janelia.saalfeldlab:n5-ij" = ["org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests"]
-
-# Avoid notNull assertion error at
-# org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests.testEmptyBase(MetadataTests.java:346)
-"org.janelia.saalfeldlab:n5-universe" = ["org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests"]
-
-# In org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest.cacheBehaviorTest:
-# arrays first differed at element [0]; expected:<[a]> but was:<[c]>
-"org.janelia.saalfeldlab:n5-zarr" = ["org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest"]
-# Note: The above test is fixed with saalfeldlab/n5-zarr@e7edcec3,
-# but the fix is only available in n5-zarr 2.0.0-alpha-1, and we
-# do not want to update the SciJava BOM to the alpha version.
-
-# In sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test:
-# Macro Error: "probability map for blobs.tif" not found in line 4
-# selectImage ( <"probability map for blobs.tif"> ) ;
-# java.lang.RuntimeException: Macro canceled
-# at ij.macro.Interpreter.error(Interpreter.java:1403)
-# at ij.macro.Functions.selectImage(Functions.java:3225)
-# at ij.macro.Functions.doFunction(Functions.java:136)
-# at ij.macro.Interpreter.doStatement(Interpreter.java:280)
-# at ij.macro.Interpreter.doStatements(Interpreter.java:266)
-# at ij.macro.Interpreter.run(Interpreter.java:162)
-# at ij.macro.Interpreter.run(Interpreter.java:92)
-# at sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test(CalculateProbabilityMapWithLabkitIJ1PluginTest.java:65)
-"sc.fiji:labkit-ui" = ["sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest"]
-
-[components."net.imagej:ij"]
-"java-version" = 11
-
-[components."net.imglib2:imglib2-mesh"]
-"java-version" = 11
diff --git a/pom.xml b/pom.xml
index a5a49c2c..e733cc1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
pom-scijava
- 44.0.1-SNAPSHOT
+ 45.0.0-SNAPSHOT
pom
SciJava Parent POM
@@ -376,13 +376,17 @@
${scijava-cache.version}
- 2.99.2
+ 2.100.1
${scijava-common.version}
2.0.3
${scijava-config.version}
+
+ 1.0.0
+ ${scijava-desktop.version}
+
0.1.2
${scijava-grab.version}
@@ -395,10 +399,6 @@
0.1.0
${scijava-java3d.version}
-
- 1.0.0
- ${scijava-links.version}
-
1.0.0-beta-3
${scijava-listeners.version}
@@ -408,7 +408,7 @@
${scijava-log-slf4j.version}
- 1.0.1
+ 1.0.2
${scijava-optional.version}
@@ -419,10 +419,6 @@
0.2.5
${scijava-plugins-commands.version}
-
- 0.3.1
- ${scijava-plugins-platforms.version}
-
0.1.3
${scijava-plugins-text-markdown.version}
@@ -436,7 +432,7 @@
${scijava-search.version}
- 1.0.2
+ 1.0.3
${scijava-table.version}
@@ -604,7 +600,7 @@
${imagej-server.version}
- 1.1.8
+ 1.1.9
${imagej-tensorflow.version}
@@ -676,7 +672,7 @@
- 0.48.0
+ 0.49.0
${scifio.version}
@@ -810,7 +806,7 @@
3.2.0
${Fiji_Plugins.version}
- 2.0.1
+ 3.0.0
${FilamentDetector.version}
2.0.1
@@ -891,7 +887,7 @@
3.0.1
${Multi_Kymograph.version}
- 2.0.0
+ 3.0.0
${OMEVisual.version}
2.0.0
@@ -1032,7 +1028,7 @@
- 2.5.4
+ 2.5.6
${View5D.version}
${View5D_.version}
@@ -1046,7 +1042,7 @@
${bigwarp_fiji.version}
- 1.6.5
+ 1.6.6
${mpicbg.version}
${mpicbg.version}
${mpicbg_.version}
@@ -1066,7 +1062,7 @@
${bigdataviewer-core.version}
- 3.1.2
+ 4.0.0
${bigdataviewer-server.version}
@@ -1092,15 +1088,15 @@
- 7.14.0
+ 8.0.0
${TrackMate.version}
- 0.1.2
+ 1.0.1
${TrackMate-Cellpose.version}
- 3.1.4
+ 4.0.0
${TrackMate-CSVImporter.version}
@@ -1114,11 +1110,11 @@
${TrackMate-ExTrack.version}
- 1.4.0
+ 2.0.0
${TrackMate-Ilastik.version}
- 1.2.1
+ 2.0.0
${TrackMate-MorphoLibJ.version}
@@ -1134,7 +1130,7 @@
${TrackMate-StarDist.version}
- 1.3.1
+ 2.0.0
${TrackMate-Weka.version}
@@ -1236,8 +1232,8 @@
${clijx-weka_.version}
- 2.5.2
- 7.0.6
+ 2.6.1
+ 9.0.0
0.2.0
${BigStitcher.version}
${multiview-reconstruction.version}
@@ -1257,11 +1253,11 @@
${bonej-utilities.version}
- 4.2.1
+ 5.0.9
${SNT.version}
- 7.1.1
+ 8.0.1
${MaMuT.version}
@@ -2119,7 +2115,7 @@
26 | 24
27 | 25
-->
- 23.0.2
+ 19.0.2.1
${javafx.version}
${javafx.version}
${javafx.version}
@@ -2651,6 +2647,13 @@
${org.scijava.scijava-config.version}
+
+
+ org.scijava
+ scijava-desktop
+ ${org.scijava.scijava-desktop.version}
+
+
org.scijava
@@ -2672,13 +2675,6 @@
${org.scijava.scijava-java3d.version}
-
-
- org.scijava
- scijava-links
- ${org.scijava.scijava-links.version}
-
-
org.scijava
@@ -2714,13 +2710,6 @@
${org.scijava.scijava-plugins-commands.version}
-
-
- org.scijava
- scijava-plugins-platforms
- ${org.scijava.scijava-plugins-platforms.version}
-
-
org.scijava
diff --git a/pombast.toml b/pombast.toml
new file mode 100644
index 00000000..fe0c8e8d
--- /dev/null
+++ b/pombast.toml
@@ -0,0 +1,1092 @@
+[common]
+default-java-version = 8
+repositories = ["scijava.public=https://maven.scijava.org/content/groups/public"]
+
+[status]
+rules = "rules.xml"
+html = "../status.scijava.org/index.html"
+header = "pombast/header-status.html"
+footer = "pombast/footer-status.html"
+nexus-base = "https://maven.scijava.org"
+cuttable = [
+ "de.nanoimaging:*",
+ "fr.inra.ijpb:*",
+ "io.scif:*",
+ "jitk:*",
+ "mpicbg:*",
+ "net.imagej:*",
+ "net.imglib2:*",
+ "net.preibisch:*",
+ "org.bonej:*",
+ "org.janelia*:*",
+ "org.morphonets:*",
+ "org.scijava:*",
+ "sc.fiji:*",
+]
+
+[team]
+html = "../status.scijava.org/team.html"
+header = "pombast/header-team.html"
+footer = "pombast/footer-team.html"
+includes = [
+ "de.nanoimaging:*",
+ "fr.inra.ijpb:*",
+ "io.scif:*",
+ "jitk:*",
+ "mpicbg:*",
+ "net.imagej:*",
+ "net.imglib2:*",
+ "net.preibisch:*",
+ "org.bonej:*",
+ "org.janelia*:*",
+ "org.morphonets:*",
+ "org.scijava:*",
+ "sc.fiji:*",
+]
+
+[badges]
+includes = [
+ "de.nanoimaging:*",
+ "fr.inra.ijpb:*",
+ "io.scif:*",
+ "jitk:*",
+ "mpicbg:*",
+ "net.imagej:*",
+ "net.imglib2:*",
+ "net.preibisch:*",
+ "ome:*",
+ "org.bonej:*",
+ "org.janelia*:*",
+ "org.morphonets:*",
+ "org.openmicroscopy:*",
+ "org.scijava:*",
+ "sc.fiji:*",
+]
+
+[melt]
+# Some managed components require Java 21+. So it makes sense to melt with that version of Java.
+# Unfortunately, the scijava.jvm.version is currently set to 11 by default.
+# So even though OpenJDK 21 is being used to run Maven, the enforcer plugin still
+# complains when encountering any Java libraries with bytecode newer than 11.
+# Setting scijava.jvm.version to 21 by default would avoid the issue, but...
+# is that really a good idea? Setting to 11 seems like a nice baseline compromise right now.
+java-version = 21 # Maximum Java version of all included component + deps.
+template = "pombast/mega-melt-template.xml"
+excludes = [
+ # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone.
+ 'org.bytedeco:hdf5',
+ # TEMP: Skip components within multi-module reactors.
+ # Neither pombast nor release-version.sh understand multi-
+ # module repositories; release-version.sh needs to learn how
+ # to tag and release individual components from multi-module
+ # repos, so that when pombast shallow clones the repo at that
+ # tag and invokes a build, it will be building only the
+ # released component as it does with single-component repos.
+ 'org.scijava:scijava-collections',
+ 'org.scijava:scijava-common3',
+ 'org.scijava:scijava-concurrent',
+ 'org.scijava:scijava-discovery-test',
+ 'org.scijava:scijava-discovery',
+ 'org.scijava:scijava-function',
+ 'org.scijava:scijava-legacy',
+ 'org.scijava:scijava-meta',
+ 'org.scijava:scijava-ops-api',
+ 'org.scijava:scijava-ops-benchmarks',
+ 'org.scijava:scijava-ops-engine',
+ 'org.scijava:scijava-ops-ext-parser',
+ 'org.scijava:scijava-ops-flim',
+ 'org.scijava:scijava-ops-image',
+ 'org.scijava:scijava-ops-indexer',
+ 'org.scijava:scijava-ops-opencv',
+ 'org.scijava:scijava-ops-spi',
+ 'org.scijava:scijava-ops-tutorial',
+ 'org.scijava:scijava-priority',
+ 'org.scijava:scijava-progress',
+ 'org.scijava:scijava-struct',
+ 'org.scijava:scijava-taglets',
+ 'org.scijava:scijava-testutil',
+ 'org.scijava:scijava-types',
+ 'mpicbg:mpicbg', 'mpicbg:mpicbg_',
+ # NB: Skip artifacts requiring minimum Java version >11.
+ 'net.algart:algart-tiff',
+ 'org.morphonets:SNT',
+ # NB: Skip closed-source artifacts.
+ 'org.bonej:bonej-plus',
+ # NB: The following artifacts have messy dependency trees.
+ # Too many problems to test as part of the melt action.
+ # See WARNING block in pom-scijava's pom.xml for details.
+ 'net.imagej:imagej-server',
+ 'org.apache.spark:spark-core_2.11',
+ # NB: Skip scijava forks of third-party projects.
+ # These are very stable, with few/no dependencies, and
+ # don't need to be retested as pom-scijava evolves.
+ 'org.scijava:j3dcore',
+ 'org.scijava:j3dutils',
+ 'org.scijava:jep',
+ 'org.scijava:junit-benchmarks',
+ 'org.scijava:vecmath',
+ # NB: Skip alternate flavors of other managed components.
+ 'org.jogamp.gluegen:gluegen', # uberjar flavor of gluegen-rt
+ 'org.jogamp.jogl:jogl-all-noawt', # slimmed down flavor of jogl-all
+ # NB: All the SWT platform JARs have the same classes.
+ # The current platform will be brought in transitively.
+ 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx',
+ 'org.eclipse.swt:org.eclipse.swt.cocoa.macosx.x86_64',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.aix.ppc64',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.hpux.ia64',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.linux.ppc64',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.linux.s390x',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.sparc',
+ 'org.eclipse.swt:org.eclipse.swt.gtk.solaris.x86',
+ 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86',
+ 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64',
+ # NB: All SLF4J bindings have the same classes.
+ # We'll rely on logback-classic being present here.
+ 'org.slf4j:slf4j-jcl',
+ 'org.slf4j:slf4j-jdk14',
+ 'org.slf4j:slf4j-nop',
+ 'org.slf4j:slf4j-simple',
+ # NB: Cannot include both commons-logging and jcl-over-slf4j;
+ # see: http://www.slf4j.org/codes.html#jclDelegationLoop
+ 'org.slf4j:jcl-over-slf4j',
+]
+
+[smelt]
+includes = [
+ "ca.mcgill:*",
+ "de.nanoimaging:*",
+ "fr.inra.ijpb:*",
+ "io.scif:*",
+ "jitk:*",
+ "mpicbg:*",
+ "net.imagej:*",
+ "net.imglib2:*",
+ "net.preibisch:*",
+ "org.bonej:*",
+ "org.janelia.saalfeldlab:*",
+ "org.janelia:*",
+ "org.morphonets:*",
+ "org.scijava:*",
+ "sc.fiji:*",
+]
+excludes = [
+ # NB: Skip closed-source artifacts.
+ 'org.bonej:bonej-plus',
+ # NB: Skip scijava forks of third-party projects.
+ # These are very stable, with few/no dependencies, and
+ # don't need to be retested as pom-scijava evolves.
+ 'org.scijava:j3dcore',
+ 'org.scijava:j3dutils',
+ 'org.scijava:jep',
+ 'org.scijava:junit-benchmarks',
+ 'org.scijava:vecmath',
+ # TEMP: Skip components within multi-module reactors.
+ # Neither pombast nor release-version.sh understand multi-
+ # module repositories; release-version.sh needs to learn how
+ # to tag and release individual components from multi-module
+ # repos, so that when pombast shallow clones the repo at that
+ # tag and invokes a build, it will be building only the
+ # released component as it does with single-component repos.
+ 'org.scijava:scijava-collections',
+ 'org.scijava:scijava-common3',
+ 'org.scijava:scijava-concurrent',
+ 'org.scijava:scijava-discovery-test',
+ 'org.scijava:scijava-discovery',
+ 'org.scijava:scijava-function',
+ 'org.scijava:scijava-legacy',
+ 'org.scijava:scijava-meta',
+ 'org.scijava:scijava-ops-api',
+ 'org.scijava:scijava-ops-benchmarks',
+ 'org.scijava:scijava-ops-engine',
+ 'org.scijava:scijava-ops-ext-parser',
+ 'org.scijava:scijava-ops-flim',
+ 'org.scijava:scijava-ops-image',
+ 'org.scijava:scijava-ops-indexer',
+ 'org.scijava:scijava-ops-opencv',
+ 'org.scijava:scijava-ops-spi',
+ 'org.scijava:scijava-ops-tutorial',
+ 'org.scijava:scijava-priority',
+ 'org.scijava:scijava-progress',
+ 'org.scijava:scijava-struct',
+ 'org.scijava:scijava-taglets',
+ 'org.scijava:scijava-testutil',
+ 'org.scijava:scijava-types',
+]
+skip-tests = [
+ # java.lang.AssertionError
+ # at org.scijava.minimaven.BasicTest.testClassifiers(BasicTest.java:216)
+ "org.scijava:minimaven",
+
+ # Error while checking the CLIJ2 installation: null
+ "sc.fiji:labkit-pixel-classification",
+]
+
+[remove-tests]
+
+# CachedOpEnvironmentTest fails intermittently. Of course, it should be
+# somehow fixed in imagej-ops. But for now, let's not let it ruin the melt.
+"net.imagej:imagej-ops" = ["net.imagej.ops.cached.CachedOpEnvironmentTest"]
+
+# In org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests.testXYT:
+# java.util.NoSuchElementException: No value present
+"org.janelia.saalfeldlab:n5-ij" = ["org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests"]
+
+# Avoid notNull assertion error at
+# org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests.testEmptyBase(MetadataTests.java:346)
+"org.janelia.saalfeldlab:n5-universe" = ["org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests"]
+
+# In org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest.cacheBehaviorTest:
+# arrays first differed at element [0]; expected:<[a]> but was:<[c]>
+"org.janelia.saalfeldlab:n5-zarr" = ["org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest"]
+# Note: The above test is fixed with saalfeldlab/n5-zarr@e7edcec3,
+# but the fix is only available in n5-zarr 2.0.0-alpha-1, and we
+# do not want to update the SciJava BOM to the alpha version.
+
+# In sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test:
+# Macro Error: "probability map for blobs.tif" not found in line 4
+# selectImage ( <"probability map for blobs.tif"> ) ;
+# java.lang.RuntimeException: Macro canceled
+# at ij.macro.Interpreter.error(Interpreter.java:1403)
+# at ij.macro.Functions.selectImage(Functions.java:3225)
+# at ij.macro.Functions.doFunction(Functions.java:136)
+# at ij.macro.Interpreter.doStatement(Interpreter.java:280)
+# at ij.macro.Interpreter.doStatements(Interpreter.java:266)
+# at ij.macro.Interpreter.run(Interpreter.java:162)
+# at ij.macro.Interpreter.run(Interpreter.java:92)
+# at sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test(CalculateProbabilityMapWithLabkitIJ1PluginTest.java:65)
+"sc.fiji:labkit-ui" = ["sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest"]
+
+[components."fr.inra.ijpb:MorphoLibJ_"]
+ci-build = "build-main"
+
+[components."hsqldb:hsqldb"]
+last-vetted = "20190101000000"
+
+[components."io.scif:scifio-bf-compat"]
+ci-build = "build-main"
+
+[components."io.scif:scifio-cli"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."io.scif:scifio-hdf5"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."io.scif:scifio-jai-imageio"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."io.scif:scifio-labeling"]
+ci-build = "build-main"
+
+[components."io.scif:scifio-lifesci"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."io.scif:scifio-ome-xml"]
+ci-build = "build-main"
+
+[components."jitk:jitk-tps"]
+ci-build = "build-main"
+
+[components."net.imagej:ij"]
+java-version = 11
+
+[components."net.imagej:imagej-deprecated"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-mesh"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-mesh-io"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imagej:imagej-notebook"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imagej:imagej-omero"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-omero-legacy"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-opencv"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-ops"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-plugins-batch"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imagej:imagej-plugins-commands"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-plugins-tools"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imagej:imagej-plugins-uploader-ssh"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imagej:imagej-plugins-uploader-webdav"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-scripting"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-tensorflow"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-ui-awt"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imagej:imagej-ui-swing"]
+ci-build = "build-main"
+
+[components."net.imagej:imagej-updater"]
+ci-build = "build-main"
+
+[components."net.imagej:op-finder"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."net.imglib2:imglib2-algorithm"]
+ci-build = "build-main"
+
+[components."net.imglib2:imglib2-algorithm-fft"]
+last-vetted = "20230309000000"
+
+[components."net.imglib2:imglib2-mesh"]
+java-version = 11
+
+[components."net.preibisch:multiview-reconstruction"]
+java-version = 11
+
+[components."net.preibisch:multiview-simulation"]
+ci-build = "build-main"
+
+[components."ome:formats-api"]
+ci-build = "maven"
+
+[components."ome:formats-bsd"]
+ci-build = "maven"
+
+[components."ome:formats-gpl"]
+ci-build = "maven"
+
+[components."org.bonej:bonej-legacy-plugins_"]
+java-version = 11
+ci-build = "build-main"
+
+[components."org.bonej:bonej-legacy-util_"]
+java-version = 11
+ci-build = "build-main"
+
+[components."org.bonej:bonej-ops"]
+java-version = 11
+ci-build = "build-main"
+
+[components."org.bonej:bonej-plugins"]
+java-version = 11
+ci-build = "build-main"
+
+[components."org.bonej:bonej-utilities"]
+java-version = 11
+ci-build = "build-main"
+
+[components."org.codehaus.groovy:groovy"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-ant"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-astbuilder"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-bsf"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-cli-commons"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-cli-picocli"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-console"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-datetime"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-dateutil"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-docgenerator"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-groovydoc"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-groovysh"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-jaxb"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-jmx"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-json"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-jsr223"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-macro"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-nio"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-servlet"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-sql"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-swing"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-templates"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-test"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-test-junit5"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-testng"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-xml"]
+last-vetted = "20250101000000"
+
+[components."org.codehaus.groovy:groovy-yaml"]
+last-vetted = "20250101000000"
+
+[components."org.janelia:H5J_Loader_Plugin"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-aws-s3"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-google-cloud"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-hdf5"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-ij"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-imglib2"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-universe"]
+ci-build = "build-main"
+
+[components."org.janelia.saalfeldlab:n5-viewer_fiji"]
+ci-build = "build-main"
+
+[components."org.mockito:mockito-core"]
+last-vetted = "20250101000000"
+
+[components."org.morphonets:SNT"]
+java-version = 21
+
+[components."org.ojalgo:ojalgo"]
+last-vetted = "20250101000000"
+
+[components."org.openmicroscopy:metakit"]
+project-url = "https://github.com/ome/ome-metakit"
+ci-build = "maven"
+
+[components."org.openmicroscopy:ome-codecs"]
+ci-build = "maven"
+
+[components."org.openmicroscopy:ome-common"]
+ci-build = "maven"
+
+[components."org.openmicroscopy:ome-poi"]
+ci-build = "maven"
+
+[components."org.openmicroscopy:ome-xml"]
+project-url = "https://github.com/ome/ome-model"
+ci-build = "maven"
+
+[components."org.openmicroscopy:omero-blitz"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-common"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-dsl-plugin"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-gateway"]
+project-url = "https://github.com/ome/omero-gateway-java"
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-model"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-renderer"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-romio"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:omero-server"]
+ci-build = "gradle"
+
+[components."org.openmicroscopy:specification"]
+project-url = "https://github.com/ome/ome-model"
+ci-build = "maven"
+
+[components."org.scijava:batch-processor"]
+ci-build = "build-main"
+
+[components."org.scijava:j3dcore"]
+last-vetted = "20180905120000"
+
+[components."org.scijava:j3dutils"]
+last-vetted = "20180905120000"
+
+[components."org.scijava:java3d-core"]
+ci-build = false
+
+[components."org.scijava:java3d-utils"]
+ci-build = false
+
+[components."org.scijava:jep"]
+ci-build = false
+last-vetted = "20171225120000"
+
+[components."org.scijava:junit-benchmarks"]
+ci-build = false
+last-vetted = "20180905120000"
+
+[components."org.scijava:minimaven"]
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-cache"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-grab"]
+ci-build = "build-main"
+
+[components."org.scijava:scijava-io-http"]
+ci-build = "build-main"
+
+[components."org.scijava:scijava-java3d"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-listeners"]
+last-vetted = "20211021000000"
+
+[components."org.scijava:scijava-maven-plugin"]
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-plot"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-plugins-commands"]
+ci-build = "build-main"
+
+[components."org.scijava:scijava-plugins-platforms"]
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-plugins-text-markdown"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-plugins-text-plain"]
+ci-build = "build-main"
+
+[components."org.scijava:scijava-search"]
+ci-build = "build-main"
+
+[components."org.scijava:scijava-table"]
+ci-build = "build-main"
+
+[components."org.scijava:scijava-ui-awt"]
+last-vetted = "20230309000000"
+
+[components."org.scijava:scijava-ui-swing"]
+ci-build = "build-main"
+
+[components."org.scijava:script-editor"]
+ci-build = "build-main"
+
+[components."org.scijava:script-editor-jython"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-beanshell"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-clojure"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-groovy"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-javascript"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-jruby"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."org.scijava:scripting-jython"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-kotlin"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-matlab"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."org.scijava:scripting-renjin"]
+ci-build = "build-main"
+
+[components."org.scijava:scripting-scala"]
+ci-build = "build-main"
+
+[components."org.scijava:swing-checkbox-tree"]
+last-vetted = "20230309000000"
+
+[components."org.scijava:ui-behaviour"]
+ci-build = "build-main"
+
+[components."org.scijava:vecmath"]
+ci-build = false
+last-vetted = "20180905120000"
+
+[components."org.springframework:spring-aop"]
+last-vetted = "20250101000000"
+
+[components."org.springframework:spring-beans"]
+last-vetted = "20250101000000"
+
+[components."org.springframework:spring-core"]
+last-vetted = "20250101000000"
+
+[components."org.tensorflow:libtensorflow"]
+last-vetted = "20200701000000"
+
+[components."org.tensorflow:libtensorflow_jni"]
+last-vetted = "20200701000000"
+
+[components."org.tensorflow:libtensorflow_jni_gpu"]
+last-vetted = "20200701000000"
+
+[components."org.tensorflow:proto"]
+last-vetted = "20200701000000"
+
+[components."org.tensorflow:tensorflow"]
+last-vetted = "20200701000000"
+
+[components."sc.fiji:3D_Blob_Segmentation"]
+ci-build = "build-main"
+
+[components."sc.fiji:3D_Objects_Counter"]
+ci-build = "build-main"
+last-vetted = "20230313000000"
+
+[components."sc.fiji:3D_Viewer"]
+ci-build = "build-main"
+
+[components."sc.fiji:AnalyzeSkeleton_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Anisotropic_Diffusion_2D"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Archipelago_Plugins"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Arrow_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Auto_Local_Threshold"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Auto_Threshold"]
+ci-build = "build-main"
+
+[components."sc.fiji:BalloonSegmentation_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Bug_Submitter"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:CPU_Meter"]
+ci-build = "build-main"
+
+[components."sc.fiji:Calculator_Plus"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Cell_Counter"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Color_Histogram"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Color_Inspector_3D"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Colour_Deconvolution"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:CorrectBleach_"]
+ci-build = "build-main"
+
+[components."sc.fiji:Correct_3D_Drift"]
+ci-build = "build-main"
+
+[components."sc.fiji:Descriptor_based_registration"]
+ci-build = "build-main"
+
+[components."sc.fiji:Dichromacy_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Directionality_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:FS_Align_TrakEM2"]
+ci-build = "build-main"
+
+[components."sc.fiji:Feature_Detection"]
+ci-build = "build-main"
+
+[components."sc.fiji:Fiji_Archipelago"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Fiji_Developer"]
+ci-build = "build-main"
+
+[components."sc.fiji:Fiji_Package_Maker"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:FilamentDetector"]
+java-version = 11
+
+[components."sc.fiji:FlowJ_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Graph_Cut"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Gray_Morphology"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:HDF5_Vibez"]
+ci-build = "build-main"
+
+[components."sc.fiji:Helmholtz_Analysis"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:IJ_Robot"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:IO_"]
+ci-build = "build-main"
+
+[components."sc.fiji:Image_5D"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Image_Expression_Parser"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Interactive_3D_Surface_Plot"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:IsoData_Classifier"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Kappa"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Kuwahara_Filter"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:LSM_Reader"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:LSM_Toolbox"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Lasso_and_Blow_Tool"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Linear_Kuwahara"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:LocalThickness_"]
+ci-build = "build-main"
+
+[components."sc.fiji:MTrack2_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:M_I_P"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Manual_Tracking"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Multi_Kymograph"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:OMEVisual"]
+java-version = 11
+
+[components."sc.fiji:PIV_analyser"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:QuickPALM_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:RATS_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Reconstruct_Reader"]
+ci-build = "build-main"
+
+[components."sc.fiji:SPIM_Opener"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:SPIM_Registration"]
+ci-build = "build-main"
+
+[components."sc.fiji:Samples_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Series_Labeler"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Siox_Segmentation"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Skeletonize3D_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:SplineDeformationGenerator_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Stack_Manipulation"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Statistical_Region_Merging"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Stitching_"]
+ci-build = "build-main"
+
+[components."sc.fiji:Sync_Win"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:T2-NIT"]
+ci-build = "build-main"
+
+[components."sc.fiji:T2-TreelineGraph"]
+ci-build = "build-main"
+
+[components."sc.fiji:Thread_Killer"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Time_Lapse"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Time_Stamper"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:ToAST_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:TopoJ_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Trainable_Segmentation"]
+ci-build = "build-main"
+
+[components."sc.fiji:TrakEM2_"]
+ci-build = "build-main"
+
+[components."sc.fiji:TrakEM2_Archipelago"]
+ci-build = "build-main"
+
+[components."sc.fiji:VIB-lib"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:VIB_"]
+ci-build = "build-main"
+
+[components."sc.fiji:Vaa3d_Reader"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Vaa3d_Writer"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:VectorString"]
+ci-build = "build-main"
+
+[components."sc.fiji:Video_Editing"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:Volume_Calculator"]
+ci-build = "build-main"
+
+[components."sc.fiji:Volume_Viewer"]
+ci-build = "build-main"
+
+[components."sc.fiji:bUnwarpJ_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:bigdataviewer-server"]
+ci-build = "build-main"
+
+[components."sc.fiji:bigdataviewer-vistools"]
+ci-build = "build-main"
+
+[components."sc.fiji:bigdataviewer_fiji"]
+ci-build = "build-main"
+
+[components."sc.fiji:bij"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:blockmatching_"]
+ci-build = "build-main"
+
+[components."sc.fiji:fiji-lib"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:labkit-pixel-classification"]
+ci-build = "build-main"
+
+[components."sc.fiji:labkit-ui"]
+ci-build = "build-main"
+
+[components."sc.fiji:legacy-imglib1"]
+ci-build = "build-main"
+
+[components."sc.fiji:level_sets"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:pal-optimization"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:panorama_"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:register_virtual_stack_slices"]
+ci-build = "build-main"
+
+[components."sc.fiji:registration_3d"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:spim_data"]
+ci-build = "build-main"
+
+[components."sc.fiji:trakem2-transform"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:trakem2_tps"]
+ci-build = "build-main"
+
+[components."sc.fiji:weave_jy2java"]
+ci-build = "build-main"
+last-vetted = "20230309000000"
+
+[components."sc.fiji:z_spacing"]
+ci-build = "build-main"
diff --git a/pombast/footer-status.html b/pombast/footer-status.html
new file mode 100644
index 00000000..e5c038dd
--- /dev/null
+++ b/pombast/footer-status.html
@@ -0,0 +1,41 @@
+
+
+
+👍
diff --git a/pombast/footer-team.html b/pombast/footer-team.html
new file mode 100644
index 00000000..64db37f1
--- /dev/null
+++ b/pombast/footer-team.html
@@ -0,0 +1,2 @@
+
+👍
diff --git a/pombast/header-status.html b/pombast/header-status.html
new file mode 100644
index 00000000..923b0e61
--- /dev/null
+++ b/pombast/header-status.html
@@ -0,0 +1,47 @@
+
+
+
+
diff --git a/pombast/header-team.html b/pombast/header-team.html
new file mode 100644
index 00000000..41befe76
--- /dev/null
+++ b/pombast/header-team.html
@@ -0,0 +1,27 @@
+
+
diff --git a/tests/mega-melt-template.xml b/pombast/mega-melt-template.xml
similarity index 94%
rename from tests/mega-melt-template.xml
rename to pombast/mega-melt-template.xml
index c8709f34..d776adc6 100644
--- a/tests/mega-melt-template.xml
+++ b/pombast/mega-melt-template.xml
@@ -19,8 +19,8 @@
- CC0 1.0 Universal License
- https://creativecommons.org/publicdomain/zero/1.0/
+ Unlicense
+ https://unlicense.org/
repo
diff --git a/tests/filter-build-log.py b/tests/filter-build-log.py
deleted file mode 100644
index 4e8f1942..00000000
--- a/tests/filter-build-log.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# filter-build-log.py - Cuts out cruft to focus on build failure details.
-#
-
-# This script filters build logs down to only [WARNING] and [ERROR] lines,
-# and consolidates lengthy duplicate class listings down to packages only.
-
-import sys
-
-def print_filtered_log(log):
- dups = []
- parsingdups = False
- atbeginning = True
- for line in log:
- line = line.rstrip('\n')
- if line.startswith('[INFO]'):
- # Filter out non-error build messages.
- continue
- if line.startswith('Download') or line.startswith('Progress'):
- # Filter out details of remote resource queries.
- continue
- if atbeginning and not line.strip():
- # Filter out leading blank lines.
- continue
- atbeginning = False
- if parsingdups:
- if line.startswith(' '):
- if line.find('/') >= 0:
- # Strip to containing package only.
- line = line[:line.rindex('/')]
- dups.append(line)
- else:
- parsingdups = False
- for dup in sorted(set(dups)):
- print(dup)
- print('')
- dups = []
- else:
- if line == ' Duplicate classes:':
- print(' Duplicate packages:')
- parsingdups = True
- else:
- print(line)
-
-for arg in sys.argv[1:]:
- with open(arg) as f:
- print_filtered_log(f)
-
diff --git a/tests/generate-mega-melt.py b/tests/generate-mega-melt.py
deleted file mode 100644
index fef2758d..00000000
--- a/tests/generate-mega-melt.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#
-# generate-mega-melt.py - Make a POM depending on everything in pom-scijava.
-#
-
-import os, re, sys
-from xml.dom import minidom
-
-def child(node, tag):
- nodes = node.getElementsByTagName(tag)
- return None if len(nodes) == 0 else nodes[0]
-
-script_dir = os.path.dirname(os.path.realpath(__file__)) if __file__ else '.'
-out = minidom.parse(os.path.join(script_dir, 'mega-melt-template.xml'))
-out.getElementsByTagName('project')[0].appendChild(out.createElement('dependencies'))
-outDeps = out.getElementsByTagName('dependencies')[0]
-
-psj = minidom.parse(os.path.join(script_dir, '..', 'pom.xml'))
-depMgmt = psj.getElementsByTagName('dependencyManagement')[0]
-deps = depMgmt.getElementsByTagName('dependencies')[0]
-depList = deps.getElementsByTagName('dependency')
-
-# Artifacts to exclude from the mega melt.
-ignoredArtifacts = [
- # TEMP: Exclude org.bytedeco:hdf5 until cisd:jhdf5 is gone.
- 'hdf5',
- # TEMP: The original ImageJ requires Java 9+ to compile,
- # because it has a module-info.java, so skip it until the
- # component collection is updated from Java 8 to Java 11.
- 'ij',
- # TEMP: Skip components within multi-module reactors.
- # Neither melting-pot.sh nor release-version.sh understand
- # multi-module repositories; release-version.sh needs to learn
- # how to tag and release individual components from multi-module
- # repos, so that when melting-pot.sh shallow clones the repo at
- # that tag and invokes a build, it will be building only the
- # released component as it does with single-component repos.
- 'scijava-collections',
- 'scijava-common3',
- 'scijava-concurrent',
- 'scijava-discovery-test',
- 'scijava-discovery',
- 'scijava-function',
- 'scijava-legacy',
- 'scijava-meta',
- 'scijava-ops-api',
- 'scijava-ops-benchmarks',
- 'scijava-ops-engine',
- 'scijava-ops-ext-parser',
- 'scijava-ops-flim',
- 'scijava-ops-image',
- 'scijava-ops-indexer',
- 'scijava-ops-opencv',
- 'scijava-ops-spi',
- 'scijava-ops-tutorial',
- 'scijava-priority',
- 'scijava-progress',
- 'scijava-struct',
- 'scijava-taglets',
- 'scijava-testutil',
- 'scijava-types',
- 'mpicbg', 'mpicbg_',
- # NB: Skip artifacts requiring minimum Java version >8.
- 'algart-tiff',
- 'javafx-base',
- 'javafx-controls',
- 'javafx-fxml',
- 'javafx-graphics',
- 'javafx-media',
- 'javafx-swing',
- 'javafx-web',
- 'SNT',
- # NB: Skip closed-source artifacts.
- 'bonej-plus',
- # NB: The following artifacts have messy dependency trees.
- # Too many problems to test as part of the mega-melt.
- # See WARNING block in pom-scijava's pom.xml for details.
- 'imagej-server',
- 'spark-core_2.11',
- # NB: Skip scijava forks of third-party projects.
- # These are very stable, with few/no dependencies, and
- # don't need to be retested as pom-scijava evolves.
- 'j3dcore',
- 'j3dutils',
- 'jep',
- 'junit-benchmarks',
- 'vecmath',
- # NB: Skip alternate flavors of other managed components.
- 'gluegen', # uberjar flavor of gluegen-rt
- 'jogl-all-noawt', # slimmed down flavor of jogl-all
- # NB: All the SWT platform JARs have the same classes.
- # The current platform will be brought in transitively.
- 'org.eclipse.swt.cocoa.macosx',
- 'org.eclipse.swt.cocoa.macosx.x86_64',
- 'org.eclipse.swt.gtk.aix.ppc',
- 'org.eclipse.swt.gtk.aix.ppc64',
- 'org.eclipse.swt.gtk.hpux.ia64',
- 'org.eclipse.swt.gtk.linux.ppc',
- 'org.eclipse.swt.gtk.linux.ppc64',
- 'org.eclipse.swt.gtk.linux.s390',
- 'org.eclipse.swt.gtk.linux.s390x',
- 'org.eclipse.swt.gtk.linux.x86',
- 'org.eclipse.swt.gtk.linux.x86_64',
- 'org.eclipse.swt.gtk.solaris.sparc',
- 'org.eclipse.swt.gtk.solaris.x86',
- 'org.eclipse.swt.win32.win32.x86',
- 'org.eclipse.swt.win32.win32.x86_64',
- # NB: All SLF4J bindings have the same classes.
- # We'll rely on logback-classic being present here.
- 'slf4j-jcl',
- 'slf4j-jdk14',
- 'slf4j-nop',
- 'slf4j-simple',
- # NB: Cannot include both commons-logging and jcl-over-slf4j;
- # see: http://www.slf4j.org/codes.html#jclDelegationLoop
- 'jcl-over-slf4j'
-]
-
-for dep in depList:
- # Harvest relevant information (ignore exclusions and version).
- groupId = child(dep, 'groupId')
- artifactId = child(dep, 'artifactId')
- classifier = child(dep, 'classifier')
- scope = child(dep, 'scope')
-
- if artifactId.firstChild.data in ignoredArtifacts:
- continue
-
- outDep = out.createElement('dependency')
- outDep.appendChild(groupId)
- outDep.appendChild(artifactId)
- if classifier:
- outDep.appendChild(classifier)
- if scope:
- outDep.appendChild(scope)
- outDeps.appendChild(outDep)
-
-# Filter XML through a hacky substitution to avoid unwanted whitespace.
-xml = re.sub('\n[\n\r\t]*\n', '\n', out.toprettyxml())
-
-outDir = sys.argv[1] if len(sys.argv) > 1 else 'mega-melt'
-try:
- os.mkdir(outDir)
-except:
- pass
-
-with open(os.path.join(outDir, 'pom.xml'), 'w') as outPOM:
- outPOM.write(xml)
diff --git a/tests/run.sh b/tests/run.sh
deleted file mode 100755
index 6ddc8716..00000000
--- a/tests/run.sh
+++ /dev/null
@@ -1,484 +0,0 @@
-#!/bin/sh
-
-#
-# run.sh - Tests correctness of the pom-scijava BOM.
-#
-
-die () { echo "$*" >&2; exit 1; }
-
-changed () { ! diff $@ >/dev/null; }
-
-sectionStart() {
- startTime=$(date +%s)
- echo
- printf "$1... "
-}
-
-sectionEnd() {
- endTime=$(date +%s)
- echo "Done! [$((endTime-startTime))s]"
-}
-
-# Check prerequisites.
-
-# HACK: Work around macOS Python naming inconsistency.
-if command -v python3 >/dev/null 2>&1; then
- PYTHON=python3
-elif command -v python >/dev/null 2>&1; then
- PYTHON=python
-else
- die "This script requires Python."
-fi
-
-sectionStart 'Generating mega-melt project'
-
-dir=$(cd "$(dirname "$0")" && pwd)
-pom="$dir/../pom.xml"
-test -f "$pom" || die 'Where is pom.xml?!'
-
-generateMegaMeltScript="$dir/generate-mega-melt.py"
-filterBuildLogScript="$dir/filter-build-log.py"
-
-megaMeltDir="$dir/../target/mega-melt"
-megaMeltDir=$(mkdir -p "$megaMeltDir" && cd "$megaMeltDir" && pwd)
-pomParent="$megaMeltDir/../pom.xml"
-versionSwapLog="$megaMeltDir/version-swap.log"
-dependencyTreeLog="$megaMeltDir/dependency-tree.log"
-validationLog="$megaMeltDir/validation.log"
-validationErrorsLog="$megaMeltDir/validation-errors.log"
-megaMeltPOM="$megaMeltDir/pom.xml"
-meltingPotLocal="$dir/../../scijava-scripts/melting-pot.sh"
-meltingPotURL=https://raw.githubusercontent.com/scijava/scijava-scripts/main/melting-pot.sh
-meltingPotScript="$megaMeltDir/melting-pot.sh"
-meltingPotLog="$megaMeltDir/melting-pot.log"
-meltingPotDir="$megaMeltDir/melting-pot"
-skipTestsFile="$meltingPotDir/skipTests.txt"
-meltScript="$meltingPotDir/melt.sh"
-
-# HACK: List of artifacts with known-duplicate short version properties.
-shortVersionClashes=\
-'net.sourceforge.findbugs.annotations'\
-'|antlr.antlr'\
-'|org.jogamp.jocl.jocl'\
-'|net.sf.opencsv.opencsv'\
-'|org.jetbrains.intellij.deps.trove4j'
-
-rm -rf "$megaMeltDir" && mkdir -p "$megaMeltDir" || die "Creation of $megaMeltDir failed!"
-cp "$pom" "$pomParent" &&
-mvn -B -f "$pomParent" versions:set -DnewVersion=999-mega-melt > "$versionSwapLog" &&
- mvn -B -f "$pomParent" install:install >> "$versionSwapLog" ||
- die "pom-scijava version update failed:\n$(cat "$versionSwapLog")"
-$PYTHON "$generateMegaMeltScript" "$megaMeltDir" || die 'Generation failed!'
-sectionEnd # Generating mega-melt project
-
-# Ensure the mega-melt dependency structure validates.
-# In particular, this runs our enforcer rules: the build
-# will fail if there are any snapshot dependencies, or
-# any duplicate classes across artifacts on the classpath.
-sectionStart 'Validating mega-melt project'
-mvn -B -f "$megaMeltPOM" dependency:tree > "$dependencyTreeLog" ||
- die "Invalid dependency tree:\n$(cat "$dependencyTreeLog")"
-mvn -B -f "$megaMeltPOM" -U clean package > "$validationLog" || {
- $PYTHON "$filterBuildLogScript" "$validationLog" > "$validationErrorsLog"
- die "Validation build failed!\n\nDependency tree:\n$(cat "$dependencyTreeLog")\n\nBuild log:\n$(cat "$validationErrorsLog")"
-}
-sectionEnd # Validating mega-melt project
-
-# Run mega-melt through the melting pot, with all SciJava-affiliated groupIds,
-# minus excluded artifacts (see ignoredArtifacts in generate-mega-melt.py).
-echo &&
-echo 'Generating melting pot...' &&
-if [ -e "$meltingPotLocal" ]
-then
- cp "$meltingPotLocal" "$meltingPotScript"
-else
- curl -fsL "$meltingPotURL" > "$meltingPotScript"
-fi ||
- die "Failed to obtain melting pot script!"
-
-# Build the melting pot structure.
-chmod +x "$meltingPotScript" &&
-"$meltingPotScript" "$megaMeltDir" \
- -r scijava.public::::https://maven.scijava.org/content/groups/public \
- -o "$meltingPotDir" \
- -i 'ca.mcgill:*' \
- -i 'io.scif:*' \
- -i 'jitk:*' \
- -i 'mpicbg:*' \
- -i 'net.imagej:*' \
- -i 'net.imglib2:*' \
- -i 'net.preibisch:*' \
- -i 'org.bonej:*' \
- -i 'org.janelia.saalfeldlab:*' \
- -i 'org.janelia:*' \
- -i 'org.morphonets:*' \
- -i 'org.scijava:*' \
- -i 'sc.fiji:*' \
- -e 'net.imagej:ij' \
- -e 'net.imglib2:imglib2-mesh' \
- -e 'org.bonej:bonej-plus' \
- -e 'org.openjfx:*' \
- -e 'org.scijava:j3dcore' \
- -e 'org.scijava:j3dutils' \
- -e 'org.scijava:jep' \
- -e 'org.scijava:junit-benchmarks' \
- -e 'org.scijava:vecmath' \
- -f -v -s $@ 2>&1 | tee "$meltingPotLog"
-
-# NB: The pipe to tee eats the melting-pot error code.
-# Even with the POSIX-unfriendly pipefail flag set.
-# So we resort to this hacky error check of the log.
-test "$(grep -F "[ERROR]" "$meltingPotLog" | grep -v "using default branch")" &&
- die 'Melting pot generation failed!'
-
-buildScript="$meltingPotDir/build.sh"
-versionPins="$meltingPotDir/version-pins.xml"
-
-echo
-echo 'Hacking in any changed components...'
-
-# Mix in changed components. Syntax is:
-#
-# groupId|artifactId|path-to-remote|remote-ref
-#
-# Example:
-#
-# components='
-# org.janelia.saalfeldlab|n5-imglib2|git@github.com:saalfeldlab/n5-imglib2|pull/54/head
-# sc.fiji|SPIM_Registration|git@github.com:fiji/SPIM_Registration|pull/142/head
-# sc.fiji|labkit-ui|git@github.com:juglab/labkit-ui|pull/115/head
-# sc.fiji|labkit-pixel-classification|git@github.com:juglab/labkit-pixel-classification|pull/12/head
-# sc.fiji|z_spacing|git@github.com:saalfeldlab/z-spacing|pull/28/head
-# net.imagej|imagej-common|git@github.com:imagej/imagej-common|pull/112/head
-# sc.fiji|TrackMate|git@github.com:trackmate-sc/TrackMate|pull/289/head
-# sc.fiji|TrackMate-Skeleton|git@github.com:trackmate-sc/TrackMate-Skeleton|pull/2/head
-# sc.fiji|bigwarp_fiji|git@github.com:saalfeldlab/bigwarp|pull/170/head
-# net.imagej|imagej-ops|git@github.com:imagej/imagej-ops|pull/654/head
-# '
-#
-# One entry per line inside the components variable declaration.
-# No leading or trailing whitespace anywhere.
-#
-# Each component will:
-# 1. Be updated to that ref (cloning as needed);
-# 2. Have its version adjusted to 999 in its pom.xml and gav marker;
-# 3. Be `mvn install`ed to the local repo cache at that version;
-# 4. Have its version adjusted to 999 in melting pot's build.sh;
-# 5. Be added to the list of components to build in melt.sh (if not already present).
-components='
-'
-failFile="$meltingPotDir/fail"
-rm -f "$failFile"
-echo "$components" | while read component
-do
- test "$component" || continue
-
- g=${component%%|*}; r=${component#*|}
- a=${r%%|*}; r=${r#*|}
- remote=${r%%|*}; ref=${r#*|}
- test "$g" -a "$a" -a "$remote" -a "$ref" || {
- touch "$failFile"
- die "Invalid component line: $component"
- }
- d="$meltingPotDir/$g/$a"
- printf "[$g:$a] "
-
- # Update component working copy to desired ref (cloning as needed).
- mkdir -p "$d" &&
- echo "Log of actions for custom version of $g:$a" > "$d/surgery.log" &&
- echo >> "$d/surgery.log" &&
- test -f "$d/.git" || git init "$d" >> "$d/surgery.log" || {
- touch "$failFile"
- die "Failed to access or initialize repository in directory $d"
- }
- printf .
- cd "$d" &&
- git remote add mega-melt "$remote" >> surgery.log &&
- printf . &&
- git fetch mega-melt --depth 1 "$ref":mega-melt >> surgery.log 2>&1 &&
- printf . &&
- git switch mega-melt >> surgery.log 2>&1 || {
- touch "$failFile"
- die "$g:$a: failed to fetch ref '$ref' from remote $remote"
- }
- printf .
-
- # Adjust component version to 999.
- mvn versions:set -DnewVersion=999 >> surgery.log || {
- touch "$failFile"
- die "$g:$a: failed to adjust pom.xml version"
- }
- printf .
- if [ -f gav ]
- then
- mv gav gav.prehacks
- sed -E "s;:[^:]*$;:999;" gav.prehacks > gav && changed gav.prehacks gav || {
- touch "$failFile"
- die "$g:$a: failed to adjust gav version"
- }
- fi
- printf .
-
- # Install changed component into the local repo cache.
- mvn -Denforcer.skip -Dmaven.test.skip install >> surgery.log || {
- touch "$failFile"
- die "$g:$a: failed to build and install component"
- }
- printf .
-
- # Adjust component version to 999 in melting pot's version-pins.xml.
- cd "$meltingPotDir"
- test -f "$versionPins.prehacks" || cp "$versionPins" "$versionPins.prehacks" || {
- touch "$failFile"
- die "$g:$a: failed to back up $versionPins"
- }
- printf .
- echo "$a" | grep -q '^[0-9]' && aa="_$a" || aa="$a"
- mv -f "$versionPins" "$versionPins.tmp" &&
- sed -E "s;<\($g\\.$a\|$aa\)\\.version>[^<]*;<\1.version>999;g" "$versionPins.tmp" > "$versionPins" &&
- changed "$versionPins.tmp" "$versionPins" ||
- {
- touch "$failFile"
- die "$g:$a: failed to adjust component version in $versionPins"
- }
- printf .
-
- # Add component to the build list in melt.sh (if not already present).
- grep -q "\b$g/$a\b" "$meltScript" || {
- test -f "$meltScript.prehacks" || cp "$meltScript" "$meltScript.prehacks"
- mv -f "$meltScript" "$meltScript.tmp" &&
- perl -0777 -pe 's;\n+do\n;\n '"$g/$a"' \\$&;igs' "$meltScript.tmp" > "$meltScript"
- } || {
- touch "$failFile"
- die "$g:$a: failed to add component to the build list in $meltScript"
- }
- printf ".\n"
-done
-rm -f "$versionPins.tmp" "$meltScript.tmp"
-test ! -f "$failFile" ||
- die "Failed to hack in changed components!"
-
-sectionStart 'Adjusting the melting pot: version-pins.xml configuration'
-
-cp "$versionPins" "$versionPins.original" &&
-
-# HACK: Remove known-duplicate short version properties, keeping
-# the short version declaration only for the more common groupId.
-# E.g.: org.antlr:antlr is preferred over antlr:antlr, so we set
-# antlr.version to match org.antlr:antlr, not antlr:antlr.
-mv -f "$versionPins" "$versionPins.tmp" &&
-sed -E 's;(<('"$shortVersionClashes"')\.version>[^ ]*) <[^ ]*;\1;' "$versionPins.tmp" > "$versionPins" &&
- changed "$versionPins.tmp" "$versionPins" ||
- die 'Error adjusting melting pot version pins! [1]'
-
-# HACK: Add non-standard version properties used prior to
-# pom-scijava 32.0.0-beta-1; see d0bf752070d96a2613c42e4e1ab86ebdd07c29ee.
-mv -f "$versionPins" "$versionPins.tmp" &&
-sed -E 's; ([^<]*);& \1;' "$versionPins.tmp" > "$versionPins" &&
- changed "$versionPins.tmp" "$versionPins" &&
-mv -f "$versionPins" "$versionPins.tmp" &&
-sed -E 's; ([^<]*);& \2;' "$versionPins.tmp" > "$versionPins" &&
- changed "$versionPins.tmp" "$versionPins" ||
- die 'Error adjusting melting pot version pins! [2]'
-
-# HACK: Add non-standard net.imagej:ij version property used prior to
-# pom-scijava 28.0.0; see 7d2cc442b107b3ac2dcb799d282f2c0b5822649d.
-mv -f "$versionPins" "$versionPins.tmp" &&
-sed -E 's; ([^<]*);& \1;' "$versionPins.tmp" > "$versionPins" &&
- changed "$versionPins.tmp" "$versionPins" ||
- die 'Error adjusting melting pot version pins! [3]'
-
-rm "$versionPins.tmp" ||
- die 'Error adjusting melting pot version pins! [4]'
-
-sectionEnd # Adjusting the melting pot: version-pins.xml configuration
-
-sectionStart 'Adjusting the melting pot: build.sh script'
-
-cp "$buildScript" "$buildScript.original" &&
-
-# HACK: Add explicit kotlin.version to match our pom-scijava-base.
-# Otherwise, components built on older pom-scijava-base will have
-# mismatched kotlin component versions. The sed expression avoids
-# a bug in mvn's batch mode that results in [0m[0m still
-# appearing as a leading ANSI sequence when echoing the property.
-kotlinVersion=$(
- mvn -B -U -q -Denforcer.skip=true -Dexec.executable=echo \
- -Dexec.args='${kotlin.version}' --non-recursive validate exec:exec 2>&1 |
- head -n1 | sed 's;\(.\[[0-9]m\)*;;') &&
-# TEMP: Also fix the version of maven-enforcer-plugin, to prevent n5 from
-# overriding it with a too-old version. Even though we pass enforcer.skip,
-# so that the enforcer plugin does not actually do any checking, this version
-# mismatch still triggers a problem:
-#
-# [ERROR] Failed to execute goal
-# org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce
-# (enforce-rules) on project n5-blosc: Unable to parse configuration of
-# mojo org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce
-# for parameter banDuplicateClasses: Cannot create instance of interface
-# org.apache.maven.enforcer.rule.api.EnforcerRule:
-# org.apache.maven.enforcer.rule.api.EnforcerRule.() -> [Help 1]
-#
-# Once n5 components stop doing that version pin, we can remove this here.
-enforcerVersion=$(
- mvn -B -U -q -Denforcer.skip=true -Dexec.executable=echo \
- -Dexec.args='${maven-enforcer-plugin.version}' --non-recursive validate exec:exec 2>&1 |
- head -n1 | sed 's;\(.\[[0-9]m\)*;;') &&
-mv -f "$buildScript" "$buildScript.tmp" &&
-sed -E "s;mvn .*-Denforcer.skip;& -Dmaven-enforcer-plugin.version=$enforcerVersion -Dkotlin.version=$kotlinVersion;" "$buildScript.tmp" > "$buildScript" &&
- changed "$buildScript.tmp" "$buildScript" &&
-
-chmod +x "$buildScript" &&
-rm "$buildScript.tmp" ||
- die 'Error adjusting melting pot build script!'
-
-sectionEnd # Adjusting the melting pot: build.sh script
-
-sectionStart 'Adjusting the melting pot: component POMs'
-
-# HACK: Adjust component POMs to satisfy Maven HTTPS strictness.
-find "$meltingPotDir" -name pom.xml |
- while read pom
-do
- mv "$pom" "$pom.original" &&
- sed -E -e 's_(https?://maven.imagej.net|http://maven.scijava.org)_https://maven.scijava.org_g' \
- -e 's_http://maven.apache.org/xsd_https://maven.apache.org/xsd_g' "$pom.original" > "$pom" ||
- die "Failed to adjust $pom"
-done
-
-# HACK: Make component POMs extend the same version of pom-scijava
-# being tested. This reduces dependency skew for transitively inherited
-# components that were not managed at the time of that component release.
-find "$meltingPotDir" -name pom.xml | while read pom
-do
- perl -0777 -i -pe 's/(\s*org.scijava<\/groupId>\s*pom-scijava<\/artifactId>\s*)[^\n]*/${1}999-mega-melt<\/version>/igs' "$pom"
-done
-
-sectionEnd # Adjusting the melting pot: component POMs
-
-sectionStart 'Adjusting the melting pot: melt.sh script'
-
-# HACK: Skip tests for projects with known problems.
-
-mv "$meltScript" "$meltScript.original" &&
-sed 's_\s*"$dir/build.sh"_\
-# HACK: If project is on the skipTests list, then skip the tests.\
-buildFlags=-Djava.awt.headless=true\
-grep -qxF "$f" $dir/skipTests.txt \&\& buildFlags=-DskipTests\
-\
-& $buildFlags_' "$meltScript.original" > "$meltScript" &&
-chmod +x "$meltScript" ||
- die "Failed to adjust $meltScript"
-
-sectionEnd # Adjusting the melting pot: melt.sh script
-
-sectionStart 'Adjusting the melting pot: unit test hacks'
-
-# Remove flaky tests.
-
-# CachedOpEnvironmentTest fails intermittently. Of course, it should be
-# somehow fixed in imagej-ops. But for now, let's not let it ruin the melt.
-rm -f "$meltingPotDir/net.imagej/imagej-ops/src/test/java/net/imagej/ops/cached/CachedOpEnvironmentTest.java"
-
-# In org.janelia.saalfeldlab.n5.metadata.ome.ngff.v04.WriteAxesTests.testXYT:
-# java.util.NoSuchElementException: No value present
-rm -f "$meltingPotDir/org.janelia.saalfeldlab/n5-ij/src/test/java/org/janelia/saalfeldlab/n5/metadata/ome/ngff/v04/WriteAxesTests.java"
-
-# Avoid notNull assertion error at
-# org.janelia.saalfeldlab.n5.universe.metadata.MetadataTests.testEmptyBase(MetadataTests.java:346)
-rm -f "$meltingPotDir/org.janelia.saalfeldlab/n5-universe/src/test/java/org/janelia/saalfeldlab/n5/universe/metadata/MetadataTests.java"
-
-# In org.janelia.saalfeldlab.n5.zarr.ZarrCachedFSTest.cacheBehaviorTest:
-# arrays first differed at element [0]; expected:<[a]> but was:<[c]>
-rm -f "$meltingPotDir/org.janelia.saalfeldlab/n5-zarr/src/test/java/org/janelia/saalfeldlab/n5/zarr/ZarrCachedFSTest.java"
-# Note: The above test is fixed with saalfeldlab/n5-zarr@e7edcec3,
-# but the fix is only available in n5-zarr 2.0.0-alpha-1, and we
-# do not want to update the SciJava BOM to the alpha version.
-
-# In sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test:
-# Macro Error: "probability map for blobs.tif" not found in line 4
-# selectImage ( <"probability map for blobs.tif"> ) ;
-# java.lang.RuntimeException: Macro canceled
-# at ij.macro.Interpreter.error(Interpreter.java:1403)
-# at ij.macro.Functions.selectImage(Functions.java:3225)
-# at ij.macro.Functions.doFunction(Functions.java:136)
-# at ij.macro.Interpreter.doStatement(Interpreter.java:280)
-# at ij.macro.Interpreter.doStatements(Interpreter.java:266)
-# at ij.macro.Interpreter.run(Interpreter.java:162)
-# at ij.macro.Interpreter.run(Interpreter.java:92)
-# at sc.fiji.labkit.ui.plugin.CalculateProbabilityMapWithLabkitIJ1PluginTest.test(CalculateProbabilityMapWithLabkitIJ1PluginTest.java:65)
-rm -f "$meltingPotDir/sc.fiji/labkit-ui/src/test/java/sc/fiji/labkit/ui/plugin/CalculateProbabilityMapWithLabkitIJ1PluginTest.java"
-
-# Skip testing of components with non-working tests.
-
-# java.lang.AssertionError
-# at org.scijava.minimaven.BasicTest.testClassifiers(BasicTest.java:216)
-echo "org.scijava/minimaven" >> "$skipTestsFile" ||
- die "Failed to generate $skipTestsFile"
-
-# Error while checking the CLIJ2 installation: null
-echo "sc.fiji/labkit-pixel-classification" >> "$skipTestsFile" ||
- die "Failed to generate $skipTestsFile"
-
-sectionEnd # Adjusting the melting pot: unit test hacks
-
-# Run the melting pot now, unless -s flag was given.
-doMelt=t
-for arg in "$@"
-do
- if [ "$arg" = '-s' ] || [ "$arg" = '--skipBuild' ]
- then
- doMelt=
- fi
-done
-if [ "$doMelt" ]
-then
- echo
- cd "$meltingPotDir"
- sh melt.sh
- meltResult=$?
-
- # Dump logs for failing builds and/or tests.
- for d in */*
- do
- test -d "$d" || continue
-
- # Check for failing build log.
- buildLog="$d/build.log"
- if [ -f "$buildLog" ]
- then
- if grep -qF 'BUILD FAILURE' "$buildLog"
- then
- echo
- echo "[$buildLog]"
- cat "$buildLog"
- fi
- fi
-
- # Check for failing test logs.
- testLogsDir="$dir/target/surefire-reports"
- if [ -d "$testLogsDir" ]
- then
- find "$testLogsDir" -name '*.txt' |
- while read report
- do
- if grep -qF 'FAILURE!' "$report"
- then
- echo
- echo "[$report]"
- cat "$report"
- fi
- done
- fi
- done
-
- # Terminate the script with same exit code if the melt failed.
- test "$meltResult" -eq 0 || exit "$meltResult"
-else
- echo &&
- echo 'Melting the pot... SKIPPED'
-fi
-
-# Complete!
-echo
-echo 'All checks succeeded! :-D'