Skip to content

Commit

Permalink
build: repair the fedora spec build and make it locally testable
Browse files Browse the repository at this point in the history
  • Loading branch information
loicrouchon committed Sep 10, 2023
1 parent 907c6db commit 3e07294
Show file tree
Hide file tree
Showing 23 changed files with 154 additions and 118 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# https://docs.fedoraproject.org/en-US/java-packaging-howto/packaging_maven_project/

Name: symly
Version: ${version}
Release: 1%{?dist}
Expand All @@ -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
Expand All @@ -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}
Expand Down
7 changes: 0 additions & 7 deletions src/packaging/ant/assemble-jar.xml

This file was deleted.

7 changes: 0 additions & 7 deletions src/packaging/ant/compile-classpath.xml

This file was deleted.

5 changes: 0 additions & 5 deletions src/packaging/ant/compile-module-path.xml

This file was deleted.

10 changes: 0 additions & 10 deletions src/packaging/ant/compile.xml

This file was deleted.

17 changes: 0 additions & 17 deletions src/packaging/ant/properties.properties

This file was deleted.

20 changes: 0 additions & 20 deletions src/packaging/debian/build.xml

This file was deleted.

11 changes: 0 additions & 11 deletions src/packaging/debian/usr/bin/symly

This file was deleted.

17 changes: 0 additions & 17 deletions src/packaging/fedora/usr/bin/symly

This file was deleted.

5 changes: 0 additions & 5 deletions src/packaging/homebrew/bin/symly

This file was deleted.

9 changes: 0 additions & 9 deletions src/packaging/linux/usr/bin/symly

This file was deleted.

7 changes: 7 additions & 0 deletions tools/packaging/ant/assemble-jar.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<project>
<property file="${basedir}/tools/packaging/ant/properties.properties" />
<import file="${basedir}/tools/packaging/ant/clean.xml" />
<import file="${basedir}/tools/packaging/ant/compile.xml" />
<import file="${basedir}/tools/packaging/ant/jar.xml" />
<import file="${basedir}/tools/packaging/ant/manpage.xml" />
</project>
File renamed without changes.
16 changes: 16 additions & 0 deletions tools/packaging/ant/compile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<project default="compile">
<target name="compile" depends="clean">
<mkdir dir="${build-dir.classes}" />
<copy todir="${build-dir.classes}">
<fileset dir="src/main/resources" />
<filterset begintoken="${" endtoken="}">
<filter token="project.version" value="${project.version}" />
</filterset>
</copy>
<javac includeantruntime="false" sourcepath="" srcdir="src/main/java" destdir="${build-dir.classes}"
release="17">
<exclude name="module-info.java" />
<classpath location="${project.classpath}" />
</javac>
</target>
</project>
File renamed without changes.
File renamed without changes.
14 changes: 14 additions & 0 deletions tools/packaging/ant/properties.properties
Original file line number Diff line number Diff line change
@@ -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
22 changes: 22 additions & 0 deletions tools/packaging/fedora/Dockerfile
Original file line number Diff line number Diff line change
@@ -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
21 changes: 21 additions & 0 deletions tools/packaging/fedora/Makefile
Original file line number Diff line number Diff line change
@@ -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 .
42 changes: 42 additions & 0 deletions tools/packaging/fedora/build-from-spec.sh
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
<project basedir="../../.." default="assemble">
<property name="distribution" value="fedora" />
<property name="project.module-path" value="/usr/share/java/picocli/picocli.jar" />
<property name="compile.mode" value="module-path" />
<property name="project.classpath" value="/usr/share/java/picocli/picocli.jar" />

<import file="${basedir}/src/packaging/ant/assemble-jar.xml" />
<import file="${basedir}/tools/packaging/ant/assemble-jar.xml" />

<target name="assemble" depends="jar, manpage" description="generate the distribution">
<mkdir dir="${build-dir.distributions}" />
<copy todir="${build-dir.distributions}">
<file file="LICENSE" />
</copy>
<copy todir="${build-dir.distributions}/usr/bin">
<file file="src/packaging/fedora/usr/bin/${project.name}" />
<file file="tools/packaging/fedora/usr/bin/${project.name}" />
<filterset begintoken="${" endtoken="}">
<filter token="symly.java.options" value="${project.java.options}" />
<filter token="symly.main.class" value="${project.main-class}" />
</filterset>
</copy>
<copy todir="${build-dir.distributions}/usr/share/java/${project.name}">
<fileset dir="${build-dir.jars}" />
Expand Down
18 changes: 18 additions & 0 deletions tools/packaging/fedora/usr/bin/symly
Original file line number Diff line number Diff line change
@@ -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} \
"$@"

0 comments on commit 3e07294

Please sign in to comment.