diff --git a/.forgejo/workflows/build_and_release.yml b/.forgejo/workflows/build_and_release.yml
new file mode 100644
index 0000000..695cf86
--- /dev/null
+++ b/.forgejo/workflows/build_and_release.yml
@@ -0,0 +1,72 @@
+name: Docker Image CI
+
+on:
+ push:
+
+ pull_request:
+
+env:
+ REGISTRY: git.dc09.ru # Change to your registry (e.g., forgejo.example.com)
+ GITHUB_TOKEN: ${{ secrets.FORGEJO_PASSWORD }}
+ GITHUB_API_URL: https://git.dc09.ru
+ GITHUB_BASE_REF: git.dc09.ru
+ GITHUB_SERVER_URL: https://git.dc09.ru
+ DOCKERHUB_TOKEN: ${{ secrets.FORGEJO_PASSWORD }}
+ DOCKER_TOKEN: ${{ secrets.FORGEJO_PASSWORD }}
+ FORGEJO_URL: https://git.dc09.ru
+
+jobs:
+ build-and-push:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ images:
+ - dockerfile: 'Dockerfile.openj9'
+ image_name: 'openj9'
+ context: './'
+ build-args: ["WITH_JDK=false"]
+ - dockerfile: 'Dockerfile.piped'
+ image_name: 'piped'
+ context: './'
+ build-args: []
+ # Add more images as needed
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Log in to the Container registry
+ uses: docker/login-action@v3
+ with:
+ registry: git.dc09.ru
+ username: ${{ secrets.FORGEJO_USERNAME }}
+ password: ${{ secrets.FORGEJO_PASSWORD }}
+ token: ${{ secrets.FORGEJO_PASSWORD }}
+ opts.auth: ${{ secrets.FORGEJO_PASSWORD }}
+ - name: Printenv
+ run: env | sort
+ - name: Extract metadata (tags, labels)
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ context: git
+ images: |
+ git.dc09.ru/${{ env.GITHUB_REPOSITORY_OWNER }}/${{ matrix.images.image_name }}
+ tags: |
+ type=ref,event=branch
+ type=ref,event=pr
+ type=semver,pattern={{version}}
+ type=semver,pattern={{major}}.{{minor}}
+ github-token: ${{ secrets.FORGEJO_PASSWORD }}
+ github-server: https://git.dc09.ru
+
+
+ - name: Build and push Docker image
+ uses: docker/build-push-action@v5
+ with:
+ context: ${{ matrix.images.context }}
+ file: ${{ matrix.images.dockerfile }}
+ push: ${{ github.event_name == 'push' }}
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+ build-args: ${{ matrix.images.build-args }}
\ No newline at end of file
diff --git a/Dockerfile.openj9 b/Dockerfile.openj9
index c28da77..66ebf66 100644
--- a/Dockerfile.openj9
+++ b/Dockerfile.openj9
@@ -1,14 +1,14 @@
-FROM ubuntu:24.10 AS build
+FROM ubuntu:25.04 AS build
# partly copied from mkdocker.sh
# Copyright IBM Corp (Eclipse Public License 2.0)
-RUN apt update \
- && apt upgrade -y \
- && apt install -qq -y --no-install-recommends \
- ant ant-contrib autoconf build-essential ca-certificates cmake cpio curl file g++-13 gcc-13 gdb git \
+RUN apt -qq update \
+ && apt -qq upgrade -y \
+ && apt -qq install -y --no-install-recommends \
+ ant ant-contrib autoconf build-essential ca-certificates cmake cpio curl file gcc-14 g++-14 gdb git \
libasound2-dev libcups2-dev libdwarf-dev libelf-dev libexpat1-dev libffi-dev libfontconfig libfontconfig1-dev \
libfreetype6-dev libnuma-dev libssl-dev libx11-dev libxext-dev libxrandr-dev libxrender-dev libxt-dev libxtst-dev \
- make nasm pkg-config python3 python3-dev rsync systemtap-sdt-dev unzip wget xvfb zip zlib1g-dev \
+ make nasm pkg-config python3 python3-dev rsync systemtap-sdt-dev unzip wget xvfb zip zlib1g-dev execstack unzip \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
@@ -18,14 +18,28 @@ RUN mkdir /build/bootjdk /build/dist \
&& tar -xzf jdk21.tar.gz --directory=/build/bootjdk --strip-components=1 \
&& rm -f jdk21.tar.gz
+RUN wget --progress=dot:mega -O jtreg.zip https://builds.shipilev.net/jtreg/jtreg-7.5.1%2B1.zip \
+ && unzip jtreg.zip -d /build \
+ && rm -rf jtreg.zip
+
+ENV JT_HOME=/build/jtreg
+
+RUN find /build/bootjdk -name '*.so' | xargs execstack -c
+
RUN git clone --single-branch --depth 1 \
https://github.com/ibmruntimes/openj9-openjdk-jdk21.git \
/build/src
WORKDIR /build/src
RUN bash get_source.sh
-RUN bash configure --with-boot-jdk=/build/bootjdk --with-mixedrefs=static --with-openssl=system
-RUN make all
+
+RUN bash configure \
+ --enable-libffi-bundling --enable-ddr --enable-jitserver \
+ --enable-fallback-linker --with-jtreg=/build/jtreg --with-boot-jdk=/build/bootjdk \
+ --with-openssl=system --with-extra-ldflags="-Wl,-z,noexecstack"
+
+RUN make all JOBS=$(nproc)
+RUN make install
# jlink by advice from https://adoptium.net/blog/2021/10/jlink-to-produce-own-runtime/
WORKDIR /build/src/build/linux-x86_64-server-release/images
@@ -40,15 +54,44 @@ jdk.nio.mapmode,jdk.random,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsu
jdk.xml.dom,jdk.zipfs,openj9.criu,openj9.cuda,openj9.dataaccess,openj9.gpu,openj9.jvm,\
openj9.sharedclasses,openj9.zosconditionhandling
+
+
+ENV JAVA_HOME=/build/src/build/linux-x86_64-server-release/images/jre
+ENV PATH="$JAVA_HOME/bin:$JAVA_HOME/lib:$PATH"
+ENV TEST_JDK_HOME=/build/src/build/linux-x86_64-server-release/images/jdk
+ENV TEST_ROOT=/build/src/openj9/test
+ENV DIAGNOSTICLEVEL=nodetails
+ENV NATIVE_TEST_LIBS=/build/src/build/linux-x86_64-server-release/images/test
+
+RUN cd /build/src/openj9/test \
+ && git clone https://github.com/adoptium/TKG.git
+
+WORKDIR /build/src/openj9/test/TKG
+
+ENV BUILD_LIST=functional
+
+RUN find ../ -type f -name "playlist.xml" | xargs sed -i 's#jit_jar#jit_jarhttps://github.com/#g'
+RUN find ../ -type f -name "playlist.xml" | xargs sed -i 's#testJITServer#testJITServerhttps://github.com/#g'
+
+RUN make compile -j$(nproc)
+
+RUN make genParallelList PARALLEL_OPTIONS=TEST=_sanity.functional.regular TEST_TIME= NUM_MACHINES=$(nproc)
+
+RUN cat parallelList.mk
+
+RUN make -f parallelList.mk JOBS=$(nproc)
+
+WORKDIR /build/src/build/linux-x86_64-server-release/images
RUN mv ./* /build/dist/
+
# ------
-FROM ubuntu:24.10 AS run
+FROM ubuntu:25.04 AS run
COPY --from=build /build/dist/jre /usr/lib/jvm/openj9-jre
ENV JAVA_HOME=/usr/lib/jvm/openj9-jre
-ENV PATH="$JAVA_HOME/bin:$PATH"
+ENV PATH="$JAVA_HOME/bin:$JAVA_HOME/lib:$PATH"
# verify installation
RUN java --version