-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild
More file actions
executable file
·131 lines (119 loc) · 3.89 KB
/
Copy pathbuild
File metadata and controls
executable file
·131 lines (119 loc) · 3.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env bash
# shellcheck source=/dev/null
. generate-layer.sh
set -eo pipefail
echo "---> Java Buildpack"
#amd64 aarch64
arch=$(dpkg --print-architecture)
if [ "${arch}" == "arm64" ]; then
arch="aarch64"
fi
# 1. GET ARGS
bp_dir=$(
cd "$(dirname "$0")"/..
pwd
)
layers_dir=$1
env_dir="$2/env"
plan_path=$3
# 2. LOAD USER-PROVIDED BUILD-TIME ENVIRONMENT VARIABLES
if compgen -G "${env_dir}"/* >/dev/null; then
for var in "${env_dir}"/*; do
declare "$(basename "${var}")=$(<"${var}")"
done
fi
# 3. INSTALL JAVA
get_jdk_url() {
if [ "${arch}" == "amd64" ]; then
local arch="x64"
fi
if [ "${version}" == "8" ]; then
echo "https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_${arch}_linux_8u292b10.tar.gz"
elif [ "${version}" == "11" ]; then
echo "https://github.com/AdoptOpenJDK/openjdk11-upstream-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_${arch}_linux_11.0.11_9.tar.gz"
elif [ "${version}" == "16" ]; then
echo "https://download.java.net/java/GA/jdk16.0.1/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-16.0.1_linux-${arch}_bin.tar.gz"
elif [ "${version}" == "17" ]; then
echo "https://download.java.net/java/early_access/jdk17/28/GPL/openjdk-17-ea+28_linux-${arch}_bin.tar.gz"
elif [ "${version}" == "18" ]; then
echo "https://download.java.net/java/early_access/jdk18/3/GPL/openjdk-18-ea+3_linux-${arch}_bin.tar.gz"
else
echo "${version}"
fi
}
version=$(yj <"${plan_path}" -t | jq -r '.entries[] | select(.name == "jdk") | .version')
jdk_url="$(get_jdk_url)"
# If it doesn't exist locally, create a JDK cache layer
# This makes JDK available to subsequent buildpacks as well
jdk_layer_dir=${layers_dir}/jdk
if [[ -f "${jdk_layer_dir}.toml" ]]; then
cached_jdk_url=$(yj <"${jdk_layer_dir}.toml" -t | jq -r .metadata.url 2>/dev/null || echo 'JDK TOML parsing failed')
fi
if [[ "${jdk_url}" != "${cached_jdk_url}" ]]; then
echo "---> Downloading JDK"
rm -rf "${layers_dir}"/jdk
mkdir -p "${layers_dir}"/jdk/env
wget -q -O - "${jdk_url}" | tar pxz -C "${jdk_layer_dir}" --strip-components=1
cat >"${jdk_layer_dir}.toml" <<EOF
launch = true
build = true
cache = true
[metadata]
version = "${version}"
EOF
echo "${layers_dir}"/jdk >"${layers_dir}"/jdk/env/JAVA_HOME
if [[ -z "${LD_LIBRARY_PATH}" ]]; then
echo "${JAVA_HOME}/jre/lib/${arch}/server" >"${jdk_layer_dir}/env/LD_LIBRARY_PATH"
else
echo "${JAVA_HOME}/jre/lib/${arch}/server:${LD_LIBRARY_PATH}" >"${jdk_layer_dir}"/env/LD_LIBRARY_PATH
fi
mkdir -p "${jdk_layer_dir}/profile.d"
cat >"${jdk_layer_dir}/profile.d/jdk.sh" <<EOF
export JAVA_HOME="${jdk_layer_dir}"
if [[ -z \$LD_LIBRARY_PATH ]]; then
export LD_LIBRARY_PATH="\$JAVA_HOME/jre/lib/${arch}/server"
else
export LD_LIBRARY_PATH="\$JAVA_HOME/jre/lib/${arch}/server:${LD_LIBRARY_PATH}"
fi
EOF
fi
# Set env variables to make jdk accessible
for var in "$layers_dir"/jdk/env/*; do
declare "$(basename "$var")=$(<"$var")"
done
export PATH=${jdk_layer_dir}/bin:$PATH
# 4. MAKE CACHE LAYER, RUN BUILD
# shellcheck disable=SC1090
source "$bp_dir/lib/gradle_build"
# shellcheck disable=SC1090
source "$bp_dir/lib/maven_build"
build_choice="maven"
if [ -f pom.xml ] && [ -f gradlew ]; then
if [[ -f .build-choice ]]; then
build_choice=$(tr <.build-choice -d '[:space:]')
fi
elif [ -f pom.xml ] && [ ! -f gradlew ]; then
build_choice="maven"
elif [ -f gradlew ] && [ ! -f pom.xml ]; then
build_choice="gradle"
fi
if [ "${build_choice}" == "maven" ]; then
maven_build
elif [ "${build_choice}" == "gradle" ]; then
gradle_build
fi
# 6. SET DEFAULT START COMMAND
if [ -f Procfile ]; then
generate-launch.sh "${layers_dir}"
else
target_dir="build/libs"
# shellcheck disable=SC2044
for jar_file in $(find "$target_dir" -maxdepth 1 -name "*.jar" -type f); do
cat >>"${layers_dir}/launch.toml" <<EOL
[[processes]]
type = "web"
command = "java -jar ${jar_file}"
EOL
break
done
fi