Files
kestra/dev-tools/copy-plugin.sh
2025-06-25 17:01:31 +02:00

100 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
###############################################################################
# Script : copy-plugin.sh
# Description : Script to automate the build and deployment of Kestra plugins locally
#
# This script performs the following operations:
# 1. Checks and configures the KESTRA_PLUGINS_DIR environment variable
# 2. Executes a Gradle build with shadowJar task
# 3. Copies all generated JAR files to the Kestra plugins directory
#
# Usage:
# ./copy-plugin.sh
#
# Prerequisites:
# - bash or zsh shell
# - Gradle installed or using the Gradle wrapper (./gradlew)
# - Write access to ~/.zshrc
# - Write permissions on Kestra plugins directory
#
# Environment variables:
# KESTRA_PLUGINS_DIR : Path to Kestra plugins directory
# If not defined, script will prompt for it
#
# Return codes:
# 0 : Success
# 1 : Error (invalid directory, build failure, copy error)
#
# Notes:
# - Script will automatically add KESTRA_PLUGINS_DIR to ~/.zshrc
# - JAR files are searched in all build/libs subdirectories
###############################################################################
# Check if KESTRA_PLUGINS_DIR is set
if [ -z "$KESTRA_PLUGINS_DIR" ]; then
# Prompt the user for the Kestra plugins directory
echo -n "KESTRA_PLUGINS_DIR is not set. Please enter the path to your Kestra plugins directory: "
read plugins_dir
# Validate if the entered directory is not empty
if [ -z "$plugins_dir" ]; then
echo "Error: Plugin directory cannot be empty. Exiting."
exit 1
fi
# Expand tilde (~) if present in the input path
plugins_dir=$(eval echo "$plugins_dir")
# Add export to ~/.zshrc
echo "Adding 'export KESTRA_PLUGINS_DIR=\"$plugins_dir\"' to ~/.zshrc"
echo "export KESTRA_PLUGINS_DIR=\"$plugins_dir\"" >> ~/.zshrc
# Source .zshrc to make the variable available in the current session
source ~/.zshrc
echo "KESTRA_PLUGINS_DIR has been set and sourced."
else
echo "KESTRA_PLUGINS_DIR is already set to: $KESTRA_PLUGINS_DIR"
fi
# Ensure the KESTRA_PLUGINS_DIR exists
if [ ! -d "$KESTRA_PLUGINS_DIR" ]; then
echo "Error: KESTRA_PLUGINS_DIR ($KESTRA_PLUGINS_DIR) does not exist or is not a directory. Please create it or set the correct path."
exit 1
fi
echo "Starting Gradle build..."
# Run ./gradlew shadowJar
if ./gradlew shadowJar; then
echo "Gradle build (shadowJar) completed successfully."
# Find all 'build/libs' directories and copy *.jar files from them
found_jars=0
find . -type d -name "libs" -path "*/build/libs" | while read -r build_libs_dir; do
echo "Found build/libs directory: $build_libs_dir"
if ls "$build_libs_dir"/*.jar &>/dev/null; then # Check if there are any .jar files
echo "Copying *.jar files from $build_libs_dir to $KESTRA_PLUGINS_DIR"
cp "$build_libs_dir"/*.jar "$KESTRA_PLUGINS_DIR"
if [ $? -eq 0 ]; then
echo "Successfully copied JAR files from $build_libs_dir"
found_jars=1 # Set flag if at least one copy operation was successful
else
echo "Error: Failed to copy JAR files from $build_libs_dir."
fi
else
echo "No *.jar files found in $build_libs_dir."
fi
done
# Check if any JARs were found and copied
if [ "$found_jars" -eq 0 ]; then
echo "Warning: No *.jar files were found in any 'build/libs' directories or failed to copy."
# Exit 1 for a warning, or 0 if it's acceptable that no JARs are found
fi
else
echo "Error: Gradle build (shadowJar) failed. Please check the build output for errors."
exit 1
fi
echo "Script finished."