57 lines
1.8 KiB
Bash
Executable file
57 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# This script serves as a drop-in replacement for running Gradle tasks locally.
|
|
# It automates the process of building a Gradle project on a remote server by synchronizing local files,
|
|
# executing specified Gradle tasks remotely, and copying all build outputs back to your local machine.
|
|
|
|
# Disclaimer
|
|
echo "Please note that this script is quite basic and not recommended for use with public build servers."
|
|
echo "Since rsync transfers all files from the developer's machine, including potentially sensitive information"
|
|
echo "like secrets or configuration files, it should be used with care."
|
|
|
|
if ! [ -f build.gradle.kts ]; then
|
|
echo "No build.gradle.kts found"
|
|
exit 1
|
|
fi
|
|
|
|
remote=$GRADLE_REMOTE_SSH
|
|
if [ -z "$remote" ]; then
|
|
echo "\$GRADLE_REMOTE_SSH is not set, please set it to a valid SSH login on your build server"
|
|
exit 1
|
|
fi
|
|
|
|
remote_dir=$GRADLE_REMOTE_DIR
|
|
if [ -z "$remote_dir" ]; then
|
|
echo "\$GRADLE_REMOTE_DIR is not set, please set it to the directory where the project should be copied on the remote server"
|
|
exit 1
|
|
fi
|
|
|
|
remote_project_dir="$remote_dir/$(basename "$(dirname "$PWD")")_$(basename "$PWD")"
|
|
|
|
set -e
|
|
|
|
# Define rsync exclusions
|
|
exclusions=(
|
|
--exclude .git/
|
|
--exclude .github/
|
|
--exclude .gradle/
|
|
--exclude .idea/
|
|
--exclude .kotlin/
|
|
--exclude .signing/
|
|
--exclude metadata
|
|
--exclude build/
|
|
)
|
|
|
|
# Define rsync inclusions
|
|
inclusions=(
|
|
--include .gradle/gradle.properties
|
|
)
|
|
|
|
# Copy the project to the remote server, excluding specified paths but including gradle properties
|
|
rsync -irc "${exclusions[@]}" "${inclusions[@]}" --delete . "$remote:$remote_project_dir"
|
|
|
|
# Run the gradle command on the remote
|
|
ssh -t "$remote" "cd $remote_project_dir && ./gradlew $*"
|
|
|
|
# Copy the build directory back
|
|
rsync --delete -ircuq "$remote:$remote_project_dir/build" . | (grep -v '/$' || true)
|