diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a08b6aa..aa51710 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -35,7 +35,7 @@ jobs:
run: ./mvnw --batch-mode verify
- name: Re-run integration tests in opaque testing mode
- run: ./mvnw --batch-mode verify -DopaqueTesting=true
+ run: ./mvnw --batch-mode verify -DopaqueTesting=true # TODO migrate this to a maven fail-safe execution
- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
diff --git a/src/packaging/fedora/symly.spec b/src/jreleaser/distributions/rpm-spec/symly.spec
similarity index 85%
rename from src/packaging/fedora/symly.spec
rename to src/jreleaser/distributions/rpm-spec/symly.spec
index 0bdf1bc..c9e73fd 100644
--- a/src/packaging/fedora/symly.spec
+++ b/src/jreleaser/distributions/rpm-spec/symly.spec
@@ -1,3 +1,5 @@
+# https://docs.fedoraproject.org/en-US/java-packaging-howto/packaging_maven_project/
+
Name: symly
Version: ${version}
Release: 1%{?dist}
@@ -8,7 +10,7 @@ URL: https://github.com/loicrouchon/symly
Source0: https://github.com/loicrouchon/symly/archive/refs/tags/v${version}.tar.gz
BuildArch: noarch
-BuildRequires: java-17-openjdk-devel, ant, picocli
+BuildRequires: java-latest-openjdk-devel, ant, picocli
Requires: java-latest-openjdk-headless, picocli
%description
@@ -17,15 +19,14 @@ It replicates and maintains a file tree structure of one
or more repository layers into a directory by creating
symbolic links.
-
%prep
-
%setup -q -n symly-${version}
+
%build
-ant -f src/packaging/fedora/build.xml
+ant -f tools/packaging/fedora/build.xml -Dproject.version="${version}" -v
%install
-%define distdir build/ant/fedora/distributions
+%define distdir target/distributions/fedora
find .
mkdir -p %{buildroot}/usr/bin %{buildroot}/usr/share/java/%{name} %{buildroot}/usr/share/man/man1/
install -p -m 755 %{distdir}/usr/bin/%{name} %{buildroot}/usr/bin/%{name}
diff --git a/src/packaging/ant/assemble-jar.xml b/src/packaging/ant/assemble-jar.xml
deleted file mode 100644
index ae34e47..0000000
--- a/src/packaging/ant/assemble-jar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/packaging/ant/compile-classpath.xml b/src/packaging/ant/compile-classpath.xml
deleted file mode 100644
index 1810b6e..0000000
--- a/src/packaging/ant/compile-classpath.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
diff --git a/src/packaging/ant/compile-module-path.xml b/src/packaging/ant/compile-module-path.xml
deleted file mode 100644
index e4f6407..0000000
--- a/src/packaging/ant/compile-module-path.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/src/packaging/ant/compile.xml b/src/packaging/ant/compile.xml
deleted file mode 100644
index ece20ee..0000000
--- a/src/packaging/ant/compile.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/src/packaging/ant/properties.properties b/src/packaging/ant/properties.properties
deleted file mode 100644
index b649886..0000000
--- a/src/packaging/ant/properties.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-project.name=symly
-
-build-dir=build/ant/${distribution}
-build-dir.classes=${build-dir}/classes
-build-dir.jars=${build-dir}/jars
-build-dir.distributions=${build-dir}/distributions
-
-manpage.manpage.dir=src/docs/resources/manpage/manpage
-manpage.gz.dir=${build-dir}/docs/manpage/gz
-
-project.jar-file=${build-dir.jars}/${project.name}.jar
-project.module-name=org.${project.name}
-project.main-class=org.${project.name}.cli.Main
-project.main-module-path=${project.jar-file}
-
-project.commands.main-command=org.${project.name}.cli.MainCommand
-project.commands.bean-factory=org.${project.name}.cli.BeanFactory
diff --git a/src/packaging/debian/build.xml b/src/packaging/debian/build.xml
deleted file mode 100644
index dd5311b..0000000
--- a/src/packaging/debian/build.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/packaging/debian/usr/bin/symly b/src/packaging/debian/usr/bin/symly
deleted file mode 100755
index 87e370e..0000000
--- a/src/packaging/debian/usr/bin/symly
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env sh
-set -e
-
-JAVA_CMD="$(jvm-finder --min-java-version 17)"
-MODULE_PATH=/usr/share/java/symly.jar:/usr/share/java/picocli.jar
-MAIN_CLASS="org.symly.cli.Main"
-
-exec "{$JAVA_CMD}" \
- --class-path "$MODULE_PATH" \
- "${MAIN_CLASS}" \
- "$@"
diff --git a/src/packaging/fedora/usr/bin/symly b/src/packaging/fedora/usr/bin/symly
deleted file mode 100755
index 3637855..0000000
--- a/src/packaging/fedora/usr/bin/symly
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env sh
-
-if [ -d "/usr/lib/jvm" ]; then
- JVM="/usr/lib/jvm/$(ls /usr/lib/jvm | grep -E "java-[0-9]+" | sort -V -r | head -n 1)"
- if [ $JVM != "/usr/lib/jvm/" ]; then
- JAVA_HOME=$JVM
- fi
-fi
-
-JAVACMD="${JAVA_HOME}/bin/java"
-MODULE_PATH=/usr/share/java/symly/symly.jar:/usr/share/java/picocli/picocli.jar
-MAIN_MODULE="org.symly/org.symly.cli.Main"
-
-exec "$JAVACMD" \
- --module-path "$MODULE_PATH" \
- --module "${MAIN_MODULE}" \
- "$@"
diff --git a/src/packaging/homebrew/bin/symly b/src/packaging/homebrew/bin/symly
deleted file mode 100755
index 142ed7a..0000000
--- a/src/packaging/homebrew/bin/symly
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env sh
-if [ "$HOMEBREW_PREFIX" != "" ] && [ -d "$HOMEBREW_PREFIX/opt/openjdk" ]; then
- export JAVA_HOME="$HOMEBREW_PREFIX/opt/openjdk"
-fi
-"$(dirname "$(realpath "$0")")/../libexec/bin/symly" "$@"
diff --git a/src/packaging/linux/usr/bin/symly b/src/packaging/linux/usr/bin/symly
deleted file mode 100755
index 6601dc1..0000000
--- a/src/packaging/linux/usr/bin/symly
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env sh
-
-if [ -d "/usr/lib/jvm" ]; then
- JVM="/usr/lib/jvm/$(ls /usr/lib/jvm | grep -E "java-[0-9]+" | sort -V -r | head -n 1)"
- if [ $JVM != "/usr/lib/jvm/" ]; then
- export JAVA_HOME=$JVM
- fi
-fi
-/usr/share/symly/bin/symly "$@"
diff --git a/tools/packaging/ant/assemble-jar.xml b/tools/packaging/ant/assemble-jar.xml
new file mode 100644
index 0000000..e7c26bc
--- /dev/null
+++ b/tools/packaging/ant/assemble-jar.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/packaging/ant/clean.xml b/tools/packaging/ant/clean.xml
similarity index 100%
rename from src/packaging/ant/clean.xml
rename to tools/packaging/ant/clean.xml
diff --git a/tools/packaging/ant/compile.xml b/tools/packaging/ant/compile.xml
new file mode 100644
index 0000000..4276827
--- /dev/null
+++ b/tools/packaging/ant/compile.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/packaging/ant/jar.xml b/tools/packaging/ant/jar.xml
similarity index 100%
rename from src/packaging/ant/jar.xml
rename to tools/packaging/ant/jar.xml
diff --git a/src/packaging/ant/manpage.xml b/tools/packaging/ant/manpage.xml
similarity index 100%
rename from src/packaging/ant/manpage.xml
rename to tools/packaging/ant/manpage.xml
diff --git a/tools/packaging/ant/properties.properties b/tools/packaging/ant/properties.properties
new file mode 100644
index 0000000..5904c1d
--- /dev/null
+++ b/tools/packaging/ant/properties.properties
@@ -0,0 +1,14 @@
+project.name=symly
+
+build.properties=target/ant/properties.properties
+build-dir=target/ant/${distribution}
+build-dir.classes=${build-dir}/classes
+build-dir.jars=${build-dir}/jars
+build-dir.distributions=target/distributions/${distribution}
+
+manpage.manpage.dir=src/docs/resources/manpage/manpage
+manpage.gz.dir=${build-dir}/docs/manpage/gz
+
+project.jar-file=${build-dir.jars}/${project.name}.jar
+project.main-class=org.${project.name}.cli.Main
+project.java.options=-XX:+NeverActAsServerClassMachine
diff --git a/tools/packaging/fedora/Dockerfile b/tools/packaging/fedora/Dockerfile
new file mode 100644
index 0000000..c20e438
--- /dev/null
+++ b/tools/packaging/fedora/Dockerfile
@@ -0,0 +1,22 @@
+FROM fedora:39
+
+# Runtime dependencies
+RUN dnf install -y \
+ java-latest-openjdk-headless \
+ picocli \
+ && dnf autoremove -y
+
+# Additional dependencies for build
+RUN dnf install -y \
+ java-latest-openjdk-devel \
+ ant \
+ rpmdevtools \
+ && dnf autoremove -y
+
+# Additional dependencies for build
+RUN dnf install -y \
+ git \
+ && dnf autoremove -y
+
+VOLUME /workspace
+WORKDIR /workspace
diff --git a/tools/packaging/fedora/Makefile b/tools/packaging/fedora/Makefile
new file mode 100644
index 0000000..debbedc
--- /dev/null
+++ b/tools/packaging/fedora/Makefile
@@ -0,0 +1,21 @@
+#!/usr/bin/env make
+HOST_ROOT_DIR=$(shell pwd)/../../..
+ROOT_DIR=/workspace
+PACKAGING_DIR=$(ROOT_DIR)/tools/packaging/fedora
+
+.PHONY: build
+build:
+ podman run -ti \
+ -v "$(HOST_ROOT_DIR):$(ROOT_DIR)" \
+ symly/fedora-build-env:latest \
+ "$(PACKAGING_DIR)/build-from-spec.sh"
+
+.PHONY: build-shell
+build-shell:
+ podman run -ti \
+ -v "$(HOST_ROOT_DIR):$(ROOT_DIR)" \
+ symly/fedora-build-env:latest
+
+.PHONY: build-env
+build-env:
+ podman build -t symly/fedora-build-env:latest .
diff --git a/tools/packaging/fedora/build-from-spec.sh b/tools/packaging/fedora/build-from-spec.sh
new file mode 100755
index 0000000..2b15d65
--- /dev/null
+++ b/tools/packaging/fedora/build-from-spec.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+set -e
+set -x
+
+VERSION="0.11.0r"
+
+DIR=$(dirname "$0")
+ROOT_DIR="$DIR/../../.."
+ARCHIVE_NAME="symly-$VERSION"
+ARCHIVE="$ARCHIVE_NAME.tar.gz"
+SPEC="rpmbuild/SPECS/symly.spec"
+
+cd "$ROOT_DIR"
+SOURCE_DATE_EPOCH="$(git log -1 --pretty=%ct)"
+export SOURCE_DATE_EPOCH
+echo "SOURCE_DATE_EPOCH: $SOURCE_DATE_EPOCH"
+
+rm -rf "$ROOT_DIR/.wip/$ARCHIVE_NAME"
+mkdir "$ROOT_DIR/.wip/$ARCHIVE_NAME"
+cp -R \
+ $ROOT_DIR/docs \
+ $ROOT_DIR/LICENSE \
+ $ROOT_DIR/pom.xml \
+ $ROOT_DIR/src \
+ $ROOT_DIR/tools \
+ "$ROOT_DIR/.wip/$ARCHIVE_NAME"
+
+cd "$ROOT_DIR/.wip"
+tar cvf "$ARCHIVE" "$ARCHIVE_NAME"
+
+cd ~
+rm -rf ~/rpmbuild
+rpmdev-setuptree
+
+sed "s/\${version}/$VERSION/" < "$ROOT_DIR/src/jreleaser/distributions/rpm-spec/symly.spec" > $SPEC
+#cat "$ROOT_DIR/src/jreleaser/distributions/rpm-spec/symly.spec" | sed "s/\${version}/$VERSION/" > $SPEC
+cp "$ROOT_DIR/.wip/symly-${VERSION}.tar.gz" "rpmbuild/SOURCES/v${VERSION}.tar.gz"
+
+rm -rf /workspace/.wip/rpmbuild/
+rpmbuild -bb "$SPEC" ; cp -R rpmbuild /workspace/.wip/rpmbuild
+
+bash
diff --git a/src/packaging/fedora/build.xml b/tools/packaging/fedora/build.xml
similarity index 60%
rename from src/packaging/fedora/build.xml
rename to tools/packaging/fedora/build.xml
index ea8feb6..6dd757b 100644
--- a/src/packaging/fedora/build.xml
+++ b/tools/packaging/fedora/build.xml
@@ -1,9 +1,8 @@
-
-
+
-
+
@@ -11,7 +10,11 @@
-
+
+
+
+
+
diff --git a/tools/packaging/fedora/usr/bin/symly b/tools/packaging/fedora/usr/bin/symly
new file mode 100755
index 0000000..0b3b916
--- /dev/null
+++ b/tools/packaging/fedora/usr/bin/symly
@@ -0,0 +1,18 @@
+#!/usr/bin/env sh
+set -e
+
+if [ -d "/usr/lib/jvm" ]; then
+ JVM="/usr/lib/jvm/$(ls /usr/lib/jvm | grep -E "java-[0-9]+" | sort -V -r | head -n 1)"
+ if [ $JVM != "/usr/lib/jvm/" ]; then
+ JAVA_HOME="$JVM"
+ fi
+fi
+
+JAVA_CMD="$JAVA_HOME/bin/java"
+CLASSPATH=/usr/share/java/symly/symly.jar:/usr/share/java/picocli/picocli.jar
+
+exec "$JAVA_CMD" \
+ --class-path "$CLASSPATH" \
+ ${symly.java.options} \
+ ${symly.main.class} \
+ "$@"