From 4a01d8d3bf1ca7e61a0f654bbead86cb2789a324 Mon Sep 17 00:00:00 2001 From: Sanket Sudake Date: Sat, 6 Jun 2026 19:06:06 +0530 Subject: [PATCH 1/2] fix(jvm): restore Java env build by installing fission-java-core from source io.fission:fission-java-core:0.0.2-SNAPSHOT was only ever published to the oss.sonatype.org OSSRH snapshots repository, which has been decommissioned, so the jvm env, its builder and the example function could no longer resolve the dependency and CI failed. - Add install-fission-java-core.sh which builds the artifact from a pinned commit of fission/fission-java-libs and installs it into the local Maven repository under 0.0.1, 0.0.2 and 0.0.2-SNAPSHOT (the SNAPSHOT version keeps pre-existing user functions building against the jvm-builder image working). The script normalizes the library pom's missing XML namespace declarations which strict plugin parsers reject. Duplicated into jvm/builder/ because the builder image is built with that directory as its Docker context. - Reference fission-java-core 0.0.2 (non-SNAPSHOT) from jvm/pom.xml and the example pom, and drop the dead oss.sonatype.org blocks. - jvm/tests/test_java_env.sh installs the artifact inside the clean maven build container before packaging the example function. - Upgrade Spring Boot 3.3.2 -> 3.5.14, Java 22 -> 25 LTS (maven 3.9.16-eclipse-temurin-25-alpine / eclipse-temurin:25-jdk-alpine), example spring-boot-starter-web 2.0.1.RELEASE -> 3.5.14 and surefire 2.22.1 -> 3.5.4. - Bump envconfig version to 1.32.0 (runtimeVersion 25) and regenerate environments.json via make update-env-json (it was stale). Verified locally: env + builder images build, the example jar builds exactly as the CI test does, and a container smoke test passes (/v2/specialize 200, invoke returns "Hello World!" on Java 25.0.3 / Spring Boot 3.5.14). Co-Authored-By: Claude Opus 4.8 (1M context) --- environments.json | 360 ++++++++++++----------- jvm/Dockerfile | 11 +- jvm/builder/Dockerfile | 17 +- jvm/builder/install-fission-java-core.sh | 35 +++ jvm/envconfig.json | 4 +- jvm/examples/java/pom.xml | 19 +- jvm/install-fission-java-core.sh | 32 ++ jvm/pom.xml | 15 +- jvm/tests/test_java_env.sh | 9 +- 9 files changed, 300 insertions(+), 202 deletions(-) create mode 100755 jvm/builder/install-fission-java-core.sh create mode 100755 jvm/install-fission-java-core.sh diff --git a/environments.json b/environments.json index ad67ffaa..44367a39 100644 --- a/environments.json +++ b/environments.json @@ -1,72 +1,133 @@ [ [ { - "builder": "jvm-jersey-builder-11", - "examples": "https://github.com/fission/environments/tree/master/jvm-jersey/examples", - "icon": "./logo/Java-Logo.png", - "image": "jvm-jersey-env-11", + "examples": "https://github.com/fission/environments/tree/master/nodejs/examples", + "icon": "./logo/nodejs-new-pantone-black.svg", + "image": "node-env-debian", "keywords": [], "kind": "environment", "maintainers": [ { - "link": "https://github.com/life1347", - "name": "life1347" + "link": "https://github.com/sanketsudake", + "name": "sanketsudake" }, { - "link": "https://github.com/soamvasani", - "name": "soamvasani" + "link": "https://github.com/vishal-biyani", + "name": "vishal-biyani" + } + ], + "name": "Nodejs Environment", + "readme": "https://github.com/fission/environments/tree/master/nodejs", + "runtimeVersion": "20.16.0-debian", + "shortDescription": "Fission NodeJS environment based on Express with some basic dependencies added", + "status": "Stable", + "version": "1.33" + }, + { + "builder": "node-builder-22", + "examples": "https://github.com/fission/environments/tree/master/nodejs/examples", + "icon": "./logo/nodejs-new-pantone-black.svg", + "image": "node-env-22", + "keywords": [], + "kind": "environment", + "maintainers": [ + { + "link": "https://github.com/sanketsudake", + "name": "sanketsudake" }, { "link": "https://github.com/vishal-biyani", "name": "vishal-biyani" } ], - "name": "JVM Environment", - "readme": "https://github.com/fission/environments/tree/master/jvm-jersey", - "runtimeVersion": "11", - "shortDescription": "JVM environment based on Jersey RESTful Web Services framework", + "name": "Nodejs Environment", + "readme": "https://github.com/fission/environments/tree/master/nodejs", + "runtimeVersion": "22.6.0", + "shortDescription": "Fission NodeJS environment based on Express with some basic dependencies added", "status": "Stable", - "version": "1.31.1" + "version": "1.33" + }, + { + "builder": "node-builder", + "examples": "https://github.com/fission/environments/tree/master/nodejs/examples", + "icon": "./logo/nodejs-new-pantone-black.svg", + "image": "node-env", + "keywords": [], + "kind": "environment", + "maintainers": [ + { + "link": "https://github.com/sanketsudake", + "name": "sanketsudake" + }, + { + "link": "https://github.com/vishal-biyani", + "name": "vishal-biyani" + } + ], + "name": "Nodejs Environment", + "readme": "https://github.com/fission/environments/tree/master/nodejs", + "runtimeVersion": "20.16.0", + "shortDescription": "Fission NodeJS environment based on Express with some basic dependencies added", + "status": "Stable", + "version": "1.33" } ] , [ { - "builder": "ruby-builder", - "examples": "https://github.com/fission/environments/tree/master/ruby/examples", - "icon": "./logo/Ruby_logo.svg", - "image": "ruby-env", - "keywords": [], + "builder": "go-builder", + "examples": "https://github.com/fission/environments/tree/master/go/examples", + "icon": "./logo/go-logo-blue.svg", + "image": "go-env", "kind": "environment", "maintainers": [ { - "link": "https://github.com/life1347", - "name": "life1347" + "link": "https://github.com/sanketsudake", + "name": "sanketsudake" }, { - "link": "https://github.com/soamvasani", - "name": "soamvasani" + "link": "https://github.com/vishal-biyani", + "name": "vishal-biyani" + } + ], + "name": "Go Environment", + "readme": "https://github.com/fission/environments/tree/master/go", + "runtimeVersion": "1.25", + "shortDescription": "Fission Go 1.25 environment, which uses dynamic loader based on Go plugins.", + "status": "Stable", + "version": "1.33.0" + }, + { + "builder": "go-builder-1.25", + "examples": "https://github.com/fission/environments/tree/master/go/examples", + "icon": "./logo/go-logo-blue.svg", + "image": "go-env-1.25", + "kind": "environment", + "maintainers": [ + { + "link": "https://github.com/sanketsudake", + "name": "sanketsudake" }, { "link": "https://github.com/vishal-biyani", "name": "vishal-biyani" } ], - "name": "Ruby Environment", - "readme": "https://github.com/fission/environments/tree/master/ruby", - "runtimeVersion": "2.6.1", - "shortDescription": "Ruby environment with WEBrick library", + "name": "Go Environment", + "readme": "https://github.com/fission/environments/tree/master/go", + "runtimeVersion": "1.25", + "shortDescription": "Fission Go 1.25 environment, which uses dynamic loader based on Go plugins.", "status": "Stable", - "version": "1.31.1" + "version": "1.33.0" } ] , [ { - "builder": "python-builder", + "builder": "python-fastapi-builder", "examples": "https://github.com/fission/environments/tree/master/python/examples", "icon": "./logo/Python-logo-notext.png", - "image": "python-env", + "image": "python-fastapi-env", "keywords": [], "kind": "environment", "maintainers": [ @@ -79,21 +140,21 @@ "name": "vishal-biyani" } ], - "name": "Python Environment", + "name": "Python FastAPI Environment", "readme": "https://github.com/fission/environments/tree/master/python", "runtimeVersion": "3.11", - "shortDescription": "Fission Python environment based on Flask framework.", + "shortDescription": "Fission Python environment based on FastAPI framework.", "status": "stable", - "version": "1.34.1" + "version": "1.34.2" } ] , [ { - "builder": "binary-builder", - "examples": "https://github.com/fission/environments/tree/master/binary/examples", - "icon": "./logo/full_colored_dark.svg", - "image": "binary-env", + "builder": "python-builder", + "examples": "https://github.com/fission/environments/tree/master/python/examples", + "icon": "./logo/Python-logo-notext.png", + "image": "python-env", "keywords": [], "kind": "environment", "maintainers": [ @@ -106,21 +167,20 @@ "name": "vishal-biyani" } ], - "name": "Fission Binary Environment", - "readme": "https://github.com/fission/environments/tree/master/binary", - "runtimeVersion": "3.20-alpine", - "shortDescription": "Fission environment to run any binary", - "status": "Stable", - "version": "1.32.2" + "name": "Python Environment", + "readme": "https://github.com/fission/environments/tree/master/python", + "runtimeVersion": "3.11", + "shortDescription": "Fission Python environment based on Flask framework.", + "status": "stable", + "version": "1.34.3" } ] , [ { - "builder": "php-builder", "examples": "https://github.com/fission/environments/tree/master/perl/examples", - "icon": "./logo/new-php-logo.svg", - "image": "php-env", + "icon": "./logo/perl-programming-language.svg", + "image": "perl-env", "keywords": [], "kind": "environment", "maintainers": [ @@ -137,21 +197,21 @@ "name": "vishal-biyani" } ], - "name": "PHP Environment", + "name": "Perl Environment", "readme": "https://github.com/fission/environments/tree/master/perl", - "runtimeVersion": "7", - "shortDescription": "PHP environment with built-in server", + "runtimeVersion": "5", + "shortDescription": "Perl environment based on the Dancer2 framework", "status": "Stable", - "version": "1.31.2" + "version": "1.31.1" } ] , [ { - "builder": "dotnet20-builder", - "examples": "https://github.com/fission/environments/tree/master/dotnet20/examples", - "icon": "./logo/logo_NETcore.svg", - "image": "dotnet20-env", + "builder": "jvm-builder", + "examples": "https://github.com/fission/environments/tree/master/jvm/examples", + "icon": "./logo/Java-Logo.png", + "image": "jvm-env", "keywords": [], "kind": "environment", "maintainers": [ @@ -168,63 +228,46 @@ "name": "vishal-biyani" } ], - "name": "Dotnet 2 Environment", - "readme": "https://github.com/fission/environments/tree/master/dotnet20", - "runtimeVersion": "2.0.0", - "shortDescription": "Fission Dotnet 2.0.0 runtime uses Kestrel with Nancy to host the internal web server and uses Roslyn to compile the uploaded code.", + "name": "JVM Environment", + "readme": "https://github.com/fission/environments/tree/master/jvm", + "runtimeVersion": "25", + "shortDescription": "JVM environment based on Spring Boot server", "status": "Stable", - "version": "1.31.1" + "version": "1.32.0" } ] , [ { - "builder": "go-builder", - "examples": "https://github.com/fission/environments/tree/master/go/examples", - "icon": "./logo/go-logo-blue.svg", - "image": "go-env", + "builder": "php-builder", + "examples": "https://github.com/fission/environments/tree/master/perl/examples", + "icon": "./logo/new-php-logo.svg", + "image": "php-env", + "keywords": [], "kind": "environment", "maintainers": [ { - "link": "https://github.com/sanketsudake", - "name": "sanketsudake" + "link": "https://github.com/life1347", + "name": "life1347" }, { - "link": "https://github.com/vishal-biyani", - "name": "vishal-biyani" - } - ], - "name": "Go Environment", - "readme": "https://github.com/fission/environments/tree/master/go", - "runtimeVersion": "1.22", - "shortDescription": "Fission Go 1.22 environment, which uses dynamic loader based on Go plugins.", - "status": "Stable", - "version": "1.32.3" - }, - { - "builder": "go-builder-1.23", - "examples": "https://github.com/fission/environments/tree/master/go/examples", - "icon": "./logo/go-logo-blue.svg", - "image": "go-env-1.23", - "kind": "environment", - "maintainers": [ - { - "link": "https://github.com/sanketsudake", - "name": "sanketsudake" + "link": "https://github.com/soamvasani", + "name": "soamvasani" }, { "link": "https://github.com/vishal-biyani", "name": "vishal-biyani" } ], - "name": "Go Environment", - "readme": "https://github.com/fission/environments/tree/master/go", - "runtimeVersion": "1.23", - "shortDescription": "Fission Go 1.23 environment, which uses dynamic loader based on Go plugins.", + "name": "PHP Environment", + "readme": "https://github.com/fission/environments/tree/master/perl", + "runtimeVersion": "7", + "shortDescription": "PHP environment with built-in server", "status": "Stable", - "version": "1.32.3" + "version": "1.31.2" } -], +] +, [ { "examples": "https://github.com/fission/environments/tree/master/dotnet/examples", @@ -253,12 +296,14 @@ "status": "Stable", "version": "1.31.1" } -],[ +] +, +[ { - "builder": "dotnet8-builder", - "examples": "https://github.com/fission/environments/tree/master/dotnet8/examples", - "icon": "./logo/logo_NETcore.svg", - "image": "dotnet8-env", + "builder": "jvm-jersey-builder-22", + "examples": "https://github.com/fission/environments/tree/master/jvm-jersey/examples", + "icon": "./logo/Java-Logo.png", + "image": "jvm-jersey-env-22", "keywords": [], "kind": "environment", "maintainers": [ @@ -275,42 +320,39 @@ "name": "vishal-biyani" } ], - "name": "Dotnet 8 Environment", - "readme": "https://github.com/fission/environments/tree/master/dotnet8", - "runtimeVersion": "8.0.18", - "shortDescription": "Fission Dotnet 8.0.18 runtime w/ .NET SDK 8.0.412 and ASP.NET Core 8.0.18", + "name": "JVM Environment", + "readme": "https://github.com/fission/environments/tree/master/jvm-jersey", + "runtimeVersion": "22", + "shortDescription": "JVM environment based on Jersey RESTful Web Services framework", "status": "Stable", - "version": "1.0.0" + "version": "1.31.2" } ] , [ { - "examples": "https://github.com/fission/environments/tree/master/perl/examples", - "icon": "./logo/perl-programming-language.svg", - "image": "perl-env", + "builder": "binary-builder", + "examples": "https://github.com/fission/environments/tree/master/binary/examples", + "icon": "./logo/full_colored_dark.svg", + "image": "binary-env", "keywords": [], "kind": "environment", "maintainers": [ { - "link": "https://github.com/life1347", - "name": "life1347" - }, - { - "link": "https://github.com/soamvasani", - "name": "soamvasani" + "link": "https://github.com/sanketsudake", + "name": "sanketsudake" }, { "link": "https://github.com/vishal-biyani", "name": "vishal-biyani" } ], - "name": "Perl Environment", - "readme": "https://github.com/fission/environments/tree/master/perl", - "runtimeVersion": "5", - "shortDescription": "Perl environment based on the Dancer2 framework", + "name": "Fission Binary Environment", + "readme": "https://github.com/fission/environments/tree/master/binary", + "runtimeVersion": "3.20-alpine", + "shortDescription": "Fission environment to run any binary", "status": "Stable", - "version": "1.31.1" + "version": "1.32.3" } ] , @@ -346,10 +388,10 @@ , [ { - "builder": "jvm-builder", - "examples": "https://github.com/fission/environments/tree/master/jvm/examples", - "icon": "./logo/Java-Logo.png", - "image": "jvm-env", + "builder": "dotnet20-builder", + "examples": "https://github.com/fission/environments/tree/master/dotnet20/examples", + "icon": "./logo/logo_NETcore.svg", + "image": "dotnet20-env", "keywords": [], "kind": "environment", "maintainers": [ @@ -366,10 +408,10 @@ "name": "vishal-biyani" } ], - "name": "JVM Environment", - "readme": "https://github.com/fission/environments/tree/master/jvm", - "runtimeVersion": "8", - "shortDescription": "JVM environment based on Spring Boot server", + "name": "Dotnet 2 Environment", + "readme": "https://github.com/fission/environments/tree/master/dotnet20", + "runtimeVersion": "2.0.0", + "shortDescription": "Fission Dotnet 2.0.0 runtime uses Kestrel with Nancy to host the internal web server and uses Roslyn to compile the uploaded code.", "status": "Stable", "version": "1.31.1" } @@ -377,75 +419,55 @@ , [ { - "examples": "https://github.com/fission/environments/tree/master/nodejs/examples", - "icon": "./logo/nodejs-new-pantone-black.svg", - "image": "node-env-debian", + "builder": "dotnet8-builder", + "examples": "https://github.com/fission/environments/tree/master/dotnet8/examples", + "icon": "./logo/logo_NETcore.svg", + "image": "dotnet8-env", "keywords": [], "kind": "environment", "maintainers": [ { "link": "https://github.com/sanketsudake", "name": "sanketsudake" - }, - { - "link": "https://github.com/vishal-biyani", - "name": "vishal-biyani" } ], - "name": "Nodejs Environment", - "readme": "https://github.com/fission/environments/tree/master/nodejs", - "runtimeVersion": "20.16.0-debian", - "shortDescription": "Fission NodeJS environment based on Express with some basic dependencies added", + "name": "Dotnet 8 Environment", + "readme": "https://github.com/fission/environments/tree/master/dotnet8", + "runtimeVersion": "8.0.0", + "shortDescription": "Fission Dotnet 8.0.0 runtime uses Kestrel to host the internal web server. Supports both single file compilation (--code) and project-based compilation (--src).", "status": "Stable", - "version": "1.32.4" - }, + "version": "1.4.0" + } +] +, +[ { - "builder": "node-builder-22", - "examples": "https://github.com/fission/environments/tree/master/nodejs/examples", - "icon": "./logo/nodejs-new-pantone-black.svg", - "image": "node-env-22", + "builder": "ruby-builder", + "examples": "https://github.com/fission/environments/tree/master/ruby/examples", + "icon": "./logo/Ruby_logo.svg", + "image": "ruby-env", "keywords": [], "kind": "environment", "maintainers": [ { - "link": "https://github.com/sanketsudake", - "name": "sanketsudake" + "link": "https://github.com/life1347", + "name": "life1347" }, { - "link": "https://github.com/vishal-biyani", - "name": "vishal-biyani" - } - ], - "name": "Nodejs Environment", - "readme": "https://github.com/fission/environments/tree/master/nodejs", - "runtimeVersion": "22.6.0", - "shortDescription": "Fission NodeJS environment based on Express with some basic dependencies added", - "status": "Stable", - "version": "1.32.4" - }, - { - "builder": "node-builder", - "examples": "https://github.com/fission/environments/tree/master/nodejs/examples", - "icon": "./logo/nodejs-new-pantone-black.svg", - "image": "node-env", - "keywords": [], - "kind": "environment", - "maintainers": [ - { - "link": "https://github.com/sanketsudake", - "name": "sanketsudake" + "link": "https://github.com/soamvasani", + "name": "soamvasani" }, { "link": "https://github.com/vishal-biyani", "name": "vishal-biyani" } ], - "name": "Nodejs Environment", - "readme": "https://github.com/fission/environments/tree/master/nodejs", - "runtimeVersion": "20.16.0", - "shortDescription": "Fission NodeJS environment based on Express with some basic dependencies added", + "name": "Ruby Environment", + "readme": "https://github.com/fission/environments/tree/master/ruby", + "runtimeVersion": "2.6.1", + "shortDescription": "Ruby environment with WEBrick library", "status": "Stable", - "version": "1.32.4" + "version": "1.31.1" } ] diff --git a/jvm/Dockerfile b/jvm/Dockerfile index 55e38efd..ed6f0ad3 100644 --- a/jvm/Dockerfile +++ b/jvm/Dockerfile @@ -1,6 +1,11 @@ -FROM maven:3.9.9-eclipse-temurin-22-alpine AS build +FROM maven:3.9.16-eclipse-temurin-25-alpine AS build WORKDIR /usr/src/myapp/ +# fission-java-core is no longer resolvable from any remote repository, +# so build and install it from source first. +COPY install-fission-java-core.sh /usr/local/bin/install-fission-java-core +RUN install-fission-java-core + # To reuse the build cache, here we split maven dependency # download and package into two RUN commands to avoid cache invalidation. COPY pom.xml . @@ -9,8 +14,8 @@ RUN mvn dependency:go-offline COPY src /usr/src/myapp/src/ RUN mvn package -FROM eclipse-temurin:22-jdk-alpine +FROM eclipse-temurin:25-jdk-alpine VOLUME /tmp COPY --from=build /usr/src/myapp/target/env-java-0.0.1-SNAPSHOT.jar /app.jar ENTRYPOINT java ${JVM_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar --server.port=8888 -EXPOSE 8888 \ No newline at end of file +EXPOSE 8888 diff --git a/jvm/builder/Dockerfile b/jvm/builder/Dockerfile index 36b6dd9a..e3b40cee 100644 --- a/jvm/builder/Dockerfile +++ b/jvm/builder/Dockerfile @@ -2,9 +2,9 @@ ARG BUILDER_IMAGE=fission/builder:latest FROM ${BUILDER_IMAGE} AS builder -## Use eclipse-temurin:22-jdk-alpine - (https://github.com/adoptium/containers/blob/07677395574f5d3462c3b6fdf5f6c4a0a350b683/22/jdk/alpine/Dockerfile) +## Use eclipse-temurin:25-jdk-alpine - (https://github.com/adoptium/containers) -FROM eclipse-temurin:22-jdk-alpine +FROM eclipse-temurin:25-jdk-alpine ## Section copied from the Maven Dockerfile @@ -17,16 +17,21 @@ LABEL org.opencontainers.image.description="Apache Maven is a software project m ENV MAVEN_HOME=/usr/share/maven -COPY --from=maven:3.9.9-eclipse-temurin-11 ${MAVEN_HOME} ${MAVEN_HOME} -COPY --from=maven:3.9.9-eclipse-temurin-11 /usr/local/bin/mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh -COPY --from=maven:3.9.9-eclipse-temurin-11 /usr/share/maven/ref/settings-docker.xml /usr/share/maven/ref/settings-docker.xml +COPY --from=maven:3.9.16-eclipse-temurin-25 ${MAVEN_HOME} ${MAVEN_HOME} +COPY --from=maven:3.9.16-eclipse-temurin-25 /usr/local/bin/mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh +COPY --from=maven:3.9.16-eclipse-temurin-25 /usr/share/maven/ref/settings-docker.xml /usr/share/maven/ref/settings-docker.xml RUN ln -s ${MAVEN_HOME}/bin/mvn /usr/bin/mvn -ARG MAVEN_VERSION=3.9.9 +ARG MAVEN_VERSION=3.9.16 ARG USER_HOME_DIR="/root" ENV MAVEN_CONFIG="$USER_HOME_DIR/.m2" +## Pre-install fission-java-core into the local Maven repository so user +## function builds can resolve it (it is no longer available remotely). +COPY install-fission-java-core.sh /usr/local/bin/install-fission-java-core +RUN install-fission-java-core + ## Fission builder specific section COPY --from=builder /builder /builder ADD build.sh /usr/local/bin/build diff --git a/jvm/builder/install-fission-java-core.sh b/jvm/builder/install-fission-java-core.sh new file mode 100755 index 00000000..d06823d7 --- /dev/null +++ b/jvm/builder/install-fission-java-core.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# NOTE: keep in sync with ../install-fission-java-core.sh (duplicated because +# the builder image is built with jvm/builder/ as its Docker build context). +# +# Installs io.fission:fission-java-core into the local Maven repository by +# building it from source (a pinned commit of fission/fission-java-libs). +# +# Background: fission-java-core was only ever published as a SNAPSHOT to +# oss.sonatype.org (OSSRH), which was decommissioned in 2025, so the artifact +# can no longer be resolved from any remote repository. +# +# The artifact is installed under several versions so that both the poms in +# this repository (0.0.2) and pre-existing user functions that still +# reference 0.0.2-SNAPSHOT resolve from the local repository. +set -eu + +COMMIT=e97baa8b6a306a552dc53d576075e7c410bcfaa4 +VERSIONS="0.0.1 0.0.2 0.0.2-SNAPSHOT" + +workdir=$(mktemp -d) +trap 'rm -rf "$workdir"' EXIT + +wget -qO "$workdir/src.tar.gz" "https://github.com/fission/fission-java-libs/archive/${COMMIT}.tar.gz" +tar -xzf "$workdir/src.tar.gz" -C "$workdir" +cd "$workdir/fission-java-libs-${COMMIT}/fission-java-core" + +# The pom is missing its XML namespace declarations, which strict plugin +# parsers (e.g. versions-maven-plugin) reject; normalize the root element. +sed -i '1s|^]*>||' pom.xml + +for version in $VERSIONS; do + mvn -B -q versions:set -DnewVersion="$version" + mvn -B -q -DskipTests -Dmaven.compiler.release=17 install +done diff --git a/jvm/envconfig.json b/jvm/envconfig.json index 61316cac..a2546091 100644 --- a/jvm/envconfig.json +++ b/jvm/envconfig.json @@ -22,9 +22,9 @@ ], "name": "JVM Environment", "readme": "https://github.com/fission/environments/tree/master/jvm", - "runtimeVersion": "22", + "runtimeVersion": "25", "shortDescription": "JVM environment based on Spring Boot server", "status": "Stable", - "version": "1.31.3" + "version": "1.32.0" } ] diff --git a/jvm/examples/java/pom.xml b/jvm/examples/java/pom.xml index 3026ee47..b23850d1 100644 --- a/jvm/examples/java/pom.xml +++ b/jvm/examples/java/pom.xml @@ -13,19 +13,20 @@ UTF-8 + 17 org.springframework.boot spring-boot-starter-web - 2.0.1.RELEASE + 3.5.14 provided io.fission fission-java-core - 0.0.2-SNAPSHOT + 0.0.2 provided @@ -52,7 +53,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.1 + 3.5.4 false @@ -60,13 +61,9 @@ - - - - fission-java-core - fission-java-core-snapshot - https://oss.sonatype.org/content/repositories/snapshots/ - - + diff --git a/jvm/install-fission-java-core.sh b/jvm/install-fission-java-core.sh new file mode 100755 index 00000000..d470a561 --- /dev/null +++ b/jvm/install-fission-java-core.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Installs io.fission:fission-java-core into the local Maven repository by +# building it from source (a pinned commit of fission/fission-java-libs). +# +# Background: fission-java-core was only ever published as a SNAPSHOT to +# oss.sonatype.org (OSSRH), which was decommissioned in 2025, so the artifact +# can no longer be resolved from any remote repository. +# +# The artifact is installed under several versions so that both the poms in +# this repository (0.0.2) and pre-existing user functions that still +# reference 0.0.2-SNAPSHOT resolve from the local repository. +set -eu + +COMMIT=e97baa8b6a306a552dc53d576075e7c410bcfaa4 +VERSIONS="0.0.1 0.0.2 0.0.2-SNAPSHOT" + +workdir=$(mktemp -d) +trap 'rm -rf "$workdir"' EXIT + +wget -qO "$workdir/src.tar.gz" "https://github.com/fission/fission-java-libs/archive/${COMMIT}.tar.gz" +tar -xzf "$workdir/src.tar.gz" -C "$workdir" +cd "$workdir/fission-java-libs-${COMMIT}/fission-java-core" + +# The pom is missing its XML namespace declarations, which strict plugin +# parsers (e.g. versions-maven-plugin) reject; normalize the root element. +sed -i '1s|^]*>||' pom.xml + +for version in $VERSIONS; do + mvn -B -q versions:set -DnewVersion="$version" + mvn -B -q -DskipTests -Dmaven.compiler.release=17 install +done diff --git a/jvm/pom.xml b/jvm/pom.xml index 52cef347..4b8857ba 100644 --- a/jvm/pom.xml +++ b/jvm/pom.xml @@ -11,7 +11,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.5.14 @@ -22,7 +22,7 @@ io.fission fission-java-core - 0.0.2-SNAPSHOT + 0.0.2 com.fasterxml.jackson.dataformat @@ -39,12 +39,7 @@ - - - - fission-java-core - fission-java-core-snapshot - https://oss.sonatype.org/content/repositories/snapshots/ - - + \ No newline at end of file diff --git a/jvm/tests/test_java_env.sh b/jvm/tests/test_java_env.sh index c537efc0..0368fc12 100755 --- a/jvm/tests/test_java_env.sh +++ b/jvm/tests/test_java_env.sh @@ -24,7 +24,14 @@ cd jvm/examples/java log "Creating the jar from application" #Using Docker to build Jar so that maven & other Java dependencies are not needed on CI server -docker run --rm -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3.9.9-eclipse-temurin-22-alpine mvn clean package -q +#fission-java-core must be installed into the container-local Maven repository +#first because it is not resolvable from any remote repository. +docker run --rm \ + -v "$(pwd)":/usr/src/mymaven \ + -v "$(pwd)/../../install-fission-java-core.sh":/usr/local/bin/install-fission-java-core \ + -w /usr/src/mymaven \ + maven:3.9.16-eclipse-temurin-25-alpine \ + sh -c "install-fission-java-core && mvn clean package -q" log "Creating environment for Java" fission env create --name $env --image $JVM_RUNTIME_IMAGE --version 2 --keeparchive=true From 8610a6233f3f806742f2a056df150c32a03d1dae Mon Sep 17 00:00:00 2001 From: Sanket Sudake Date: Sat, 6 Jun 2026 19:18:07 +0530 Subject: [PATCH 2/2] fix(jvm): test the locally built jvm-env image instead of stale Docker Hub image The jvm e2e test relied on the utils.sh default JVM_RUNTIME_IMAGE (fission/jvm-env from Docker Hub, years out of date), so the image loaded into kind by `make jvm-test-images` was never exercised and the freshly built example jar (release 17 bytecode) failed to load on the ancient runtime. Pin JVM_RUNTIME_IMAGE=jvm-env in the test, matching the go/binary/nodejs/python test convention. Also add Collect Fission Dump on failure to the jvm job (same hunk as in #436) so future e2e failures leave pod-level diagnostics. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/environment.yaml | 11 ++++++----- jvm/tests/test_java_env.sh | 5 +++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/environment.yaml b/.github/workflows/environment.yaml index 3e49e806..27584302 100644 --- a/.github/workflows/environment.yaml +++ b/.github/workflows/environment.yaml @@ -72,14 +72,10 @@ jobs: jvm: runs-on: ubuntu-latest needs: check - if: contains( needs.check.outputs.packages, 'jvm' ) + if: contains( needs.check.outputs.packages, '"jvm"' ) steps: - name: Checkout sources uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 - id: filter - with: - filters: .github/workflows/filters/filters.yaml - name: Setup Fission Environment uses: ./.github/actions/setup-cluster - name: jvm @@ -89,6 +85,11 @@ jobs: make router-port-forward - name: jvm-tests run: ./test_utils/run_test.sh jvm/tests/test_java_env.sh + - name: Collect Fission Dump + uses: ./.github/actions/collect-fission-dump + if: ${{ failure() }} + with: + workflow-name: jvm nodejs: runs-on: ubuntu-latest needs: check diff --git a/jvm/tests/test_java_env.sh b/jvm/tests/test_java_env.sh index 0368fc12..4a504b6e 100755 --- a/jvm/tests/test_java_env.sh +++ b/jvm/tests/test_java_env.sh @@ -3,6 +3,11 @@ set -euo pipefail source test_utils/utils.sh +# Use the locally built image loaded into kind by `make jvm-test-images` +# (the utils.sh default points at the stale Docker Hub image), matching the +# convention of the go/binary/nodejs/python tests. +export JVM_RUNTIME_IMAGE=jvm-env + TEST_ID=$(generate_test_id) echo "TEST_ID = $TEST_ID"