BD-Core-FHIR-IG/_build.sh

177 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
set -e
# Variables
dlurl="https://github.com/HL7/fhir-ig-publisher/releases/latest/download/publisher.jar"
publisher_jar="publisher.jar"
input_cache_path="$(pwd)/input-cache/"
skipPrompts=false
upper_path="../"
scriptdlroot="https://raw.githubusercontent.com/HL7/ig-publisher-scripts/main"
build_bat_url="${scriptdlroot}/_build.bat"
build_sh_url="${scriptdlroot}/_build.sh"
function check_jar_location() {
if [ -f "${input_cache_path}${publisher_jar}" ]; then
jar_location="${input_cache_path}${publisher_jar}"
echo "Found publisher.jar in input-cache"
elif [ -f "${upper_path}${publisher_jar}" ]; then
jar_location="${upper_path}${publisher_jar}"
echo "Found publisher.jar in parent folder"
else
jar_location="not_found"
echo "publisher.jar not found in input-cache or parent folder"
fi
}
function check_internet_connection() {
if ping -c 1 tx.fhir.org &>/dev/null; then
online=true
echo "We're online and tx.fhir.org is available."
latest_version=$(curl -s https://api.github.com/repos/HL7/fhir-ig-publisher/releases/latest | grep tag_name | cut -d'"' -f4)
else
online=false
echo "We're offline or tx.fhir.org is unavailable."
fi
}
function update_publisher() {
echo "Publisher jar location: ${input_cache_path}${publisher_jar}"
read -p "Download or update publisher.jar? (Y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
echo "Downloading latest publisher.jar (~200 MB)..."
mkdir -p "$input_cache_path"
curl -L "$dlurl" -o "${input_cache_path}${publisher_jar}"
else
echo "Skipped downloading publisher.jar"
fi
update_scripts_prompt
}
function update_scripts_prompt() {
read -p "Update scripts (_build.bat and _build.sh)? (Y/N): " update_confirm
if [[ "$update_confirm" =~ ^[Yy]$ ]]; then
echo "Updating scripts..."
curl -L "$build_bat_url" -o "_build.new.bat" && mv "_build.new.bat" "_build.bat"
curl -L "$build_sh_url" -o "_build.new.sh" && mv "_build.new.sh" "_build.sh"
chmod +x _build.sh
echo "Scripts updated."
else
echo "Skipped updating scripts."
fi
}
function build_ig() {
if [ "$jar_location" != "not_found" ]; then
args=()
if [ "$online" = "false" ]; then
args+=("-tx" "n/a")
fi
java -Dfile.encoding=UTF-8 -jar "$jar_location" -ig . "${args[@]}" "$@"
else
echo "publisher.jar not found. Please run update."
fi
}
function build_nosushi() {
if [ "$jar_location" != "not_found" ]; then
java -Dfile.encoding=UTF-8 -jar "$jar_location" -ig . -no-sushi "$@"
else
echo "publisher.jar not found. Please run update."
fi
}
function build_notx() {
if [ "$jar_location" != "not_found" ]; then
java -Dfile.encoding=UTF-8 -jar "$jar_location" -ig . -tx n/a "$@"
else
echo "publisher.jar not found. Please run update."
fi
}
function jekyll_build() {
echo "Running Jekyll build..."
jekyll build -s temp/pages -d output
}
function cleanup() {
echo "Cleaning up temp directories..."
if [ -f "${input_cache_path}${publisher_jar}" ]; then
mv "${input_cache_path}${publisher_jar}" ./
rm -rf "${input_cache_path}"*
mkdir -p "$input_cache_path"
mv "$publisher_jar" "$input_cache_path"
fi
rm -rf ./output ./template ./temp
echo "Cleanup complete."
}
check_jar_location
check_internet_connection
# Handle command-line argument or menu
case "$1" in
update) update_publisher ;;
build) build_ig ;;
nosushi) build_nosushi ;;
notx) build_notx ;;
jekyll) jekyll_build ;;
clean) cleanup ;;
exit) exit 0 ;;
*)
# Compute default choice
default_choice=2 # Build by default
if [ "$jar_location" = "not_found" ]; then
default_choice=1 # Download if jar is missing
elif [ "$online" = "false" ]; then
default_choice=4 # Offline build
elif [ -n "$latest_version" ]; then
current_version=$(java -jar "$jar_location" -v 2>/dev/null | tr -d '\r')
if [ "$current_version" != "$latest_version" ]; then
default_choice=1 # Offer update if newer version exists
fi
fi
echo "---------------------------------------------"
echo "Publisher: ${current_version:-unknown}; Latest: ${latest_version:-unknown}"
echo "Publisher location: $jar_location"
echo "Online: $online"
echo "---------------------------------------------"
echo
echo "Please select an option:"
echo "1) Download or update publisher"
echo "2) Build IG"
echo "3) Build IG without Sushi"
echo "4) Build IG without TX server"
echo "5) Jekyll build"
echo "6) Cleanup temp directories"
echo "0) Exit"
echo
# Read with timeout, but default if nothing entered
echo -n "Choose an option [default: $default_choice]: "
read -t 5 choice || choice="$default_choice"
choice="${choice:-$default_choice}"
echo "You selected: $choice"
case "$choice" in
1) update_publisher ;;
2) build_ig ;;
3) build_nosushi ;;
4) build_notx ;;
5) jekyll_build ;;
6) cleanup ;;
0) exit 0 ;;
*) echo "Invalid option." ;;
esac
;;
esac