Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add gradle-remote to execute gradle builds on a build server #8760

Merged
merged 1 commit into from
Jan 31, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions gradle-remote
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/bash
wmontwe marked this conversation as resolved.
Show resolved Hide resolved

# 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)
Loading