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} \ + "$@"