Piped-Alpine/build.sh

176 lines
3.7 KiB
Bash
Executable file

#!/usr/bin/env bash
# shellcheck source=patcher.sh
WORKDIR=$(pwd)
ARCH="${ARCH:-x86_64}"
LIBC="${LIBC:-musl}"
TARGET="$ARCH-unknown-linux-$LIBC"
# ---
dep () {
if ! which "$1" 2>/dev/null
then
echo "$1 not found"
exit 1
fi
}
clone () {
git clone --single-branch --depth 1 "$1" "$2" || exit 2
}
cd_and_exec () {
old=$(pwd)
cd "$1" || exit 3
shift
"$@" || exit 4
cd "$old" || exit 3
}
update_repo () {
if [ -e "$1" ]
then
echo "$1 exists, updating"
old=$(pwd)
cd "$1" || exit 3
git stash && git stash drop
git pull || exit 2
cd "$old" || exit 3
else
echo "$1 not found, cloning"
clone "$2" "$1"
fi
}
try_exec () {
"$@"
return 0
}
set_piped_version () {
# From GitHub Actions
commit_date=$(git log -1 --date=short --pretty=format:%cd)
commit_sha=$(git rev-parse --short HEAD)
echo "$commit_date-$commit_sha" >VERSION
}
title () {
# Newline, Bold text, $1, Normal text, Newline
printf '\n\033[1m%s\033[0m\n' "$1"
}
# ---
title 'Checking dependencies...'
dep git
dep java
dep cargo
dep 7z
title 'Updating repositories...'
update_repo backend https://github.com/TeamPiped/Piped-Backend
update_repo reqwest4j https://github.com/TeamPiped/reqwest4j
title 'Applying patches...'
source patcher.sh
cd_and_exec backend patch_backend
cd_and_exec reqwest4j patch_reqwest4j
# ---
[ "$LIBC" = "musl" ] && export RUSTFLAGS="-C target-feature=-crt-static"
title 'Building reqwest-jni'
cd_and_exec reqwest4j/reqwest-jni \
cargo build --release --target "$TARGET"
title 'Building reqwest4j without Rust library...'
OLD_PATH="$PATH"
export JAVA_HOME="/usr/lib/jvm/java-21-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"
cd_and_exec reqwest4j ./gradlew shadowJar
cd_and_exec reqwest4j ./gradlew --stop
export PATH="$OLD_PATH"
unset JAVA_HOME
# ---
title 'Adding built libreqwest_jni into reqwest4j JAR...'
title '--Copying files'
# Copy JAR into workdir
REQ4J_NAME="reqwest4j.jar"
REQ4J="$WORKDIR/$REQ4J_NAME"
cd_and_exec reqwest4j/build/libs \
find . -maxdepth 1 -name 'reqwest4j-*-all.jar' -exec \
cp {} "$REQ4J" \;
# Copy built reqwest-jni into workdir
REQJNI_NAME="libreqwest.so"
REQJNI="$WORKDIR/$REQJNI_NAME"
cd_and_exec "reqwest4j/reqwest-jni/target/$TARGET/release" \
cp libreqwest_jni.so "$REQJNI"
# Create JAR native libraries tree
title '--Creating libraries directory tree'
NATIVES="META-INF/natives/linux/$ARCH"
mkdir -p "$NATIVES"
# Move reqwest-jni to native libraries directory
title '--Moving libreqwest'
mv "$REQJNI" "$NATIVES/$REQJNI_NAME"
# Add native libraries into JAR
title '--Injecting libraries directory into reqwest4j JAR'
7z u "$REQ4J" META-INF
# Clean up
title '--Cleaning up'
rm -rf META-INF
rm -f "$REQJNI"
# ---
title 'Adding reqwest4j JAR into Piped sources...'
cd_and_exec backend mkdir -p libs
cd_and_exec backend/libs mv "$REQ4J" ./
title 'Creating VERSION file...'
cd_and_exec backend set_piped_version
title 'Building Piped...'
OLD_PATH="$PATH"
export JAVA_HOME="/usr/lib/jvm/java-21-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"
cd_and_exec backend ./gradlew shadowJar
cd_and_exec backend ./gradlew --stop
export PATH="$OLD_PATH"
unset JAVA_HOME
# ---
title 'Copying Piped JAR...'
cd_and_exec backend/build/libs \
find . -maxdepth 1 -name 'piped-*-all.jar' -exec \
cp {} "$WORKDIR/piped.jar" \;
title 'Copying config and version...'
cd_and_exec backend cp config.properties VERSION "$WORKDIR"
# ---
echo
echo '*** ************** ***'
echo '*** DONE ***'
echo '*** ************** ***'
title 'You need these files:'
for f in "piped.jar" "config.properties" "VERSION"
do
echo " $(readlink -f "$f")"
done