-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild
More file actions
executable file
·92 lines (83 loc) · 3.45 KB
/
build
File metadata and controls
executable file
·92 lines (83 loc) · 3.45 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
#!/usr/bin/env bash
set -eo pipefail
echo "---> Ruby Buildpack"
# 1. GET ARGS
layers_dir=$1
plan_path=$3
# 2. DOWNLOAD RUBY
ruby_layer_dir="${layers_dir}/ruby"
mkdir -p "${ruby_layer_dir}"
arch=$(dpkg --print-architecture) # amd64 arm64
ruby_arch=$(uname -m) # x86_64 aarch64
# determine ruby version provided during detection
ruby_version=$(< "${plan_path}" yj -t | jq -r '.entries[] | select(.name == "ruby") | .version')
bin_version=${ruby_version:0:4}0
remote_ruby_version="not found"
if [[ -f "${ruby_layer_dir}.toml" ]]; then
remote_ruby_version=$(< "${ruby_layer_dir}.toml" yj -t | jq -r .metadata 2>/dev/null || echo 'not found')
fi
if [[ "${ruby_version}" == "${remote_ruby_version}" ]] ; then
echo "---> Reusing ruby"
else
echo "---> Downloading and extracting Ruby ${ruby_version}"
ruby_url="https://buildpacks.drycc.cc/ruby/${CNB_STACK_ID}/ruby-${ruby_version}-${arch}.tar.gz"
wget -q -O - "${ruby_url}" | tar -xzf - -C "${ruby_layer_dir}"
cat > "${ruby_layer_dir}.toml" <<EOL
cache = true
launch = true
metadata = "${ruby_version}"
EOL
# shellcheck disable=SC2006
for file in `(ls "${ruby_layer_dir}/bin/")`
do
if [ "${file}" != 'ruby' ]; then
sed -ir 's/\#\!\/usr\/local\/bin\/ruby/\#\!\/usr\/bin\/env\ ruby/g' "${ruby_layer_dir}/bin/${file}"
fi
done
if [ ! -s "${ruby_layer_dir}"/profile.d/ruby.sh ]; then
mkdir "${ruby_layer_dir}"/profile.d
cat > "${ruby_layer_dir}"/profile.d/ruby.sh <<EOL
export PATH="${ruby_layer_dir}/bin:${PATH}"
export C_INCLUDE_PATH="${C_INCLUDE_PATH}:${ruby_layer_dir}/include"
export CPLUS_INCLUDE_PATH="${C_INCLUDE_PATH}:${ruby_layer_dir}/include"
export LIBRARY_PATH="${LD_LIBRARY_PATH}:${ruby_layer_dir}/lib"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ruby_layer_dir}/lib"
export RUBYLIB="${ruby_layer_dir}/lib/ruby/${bin_version}/${ruby_arch}-linux/:${ruby_layer_dir}/lib/ruby/${bin_version}"
export GEM_PATH="${ruby_layer_dir}/lib/ruby/gems/"
export GEM_HOME="${ruby_layer_dir}/lib/ruby/gems/"
export RUBYPATH="${ruby_layer_dir}/bin/"
EOL
fi
fi
# 3. MAKE RUBY AVAILABLE TO THIS SCRIPT
export PATH="${ruby_layer_dir}/bin:${PATH}"
export C_INCLUDE_PATH="${C_INCLUDE_PATH}:${ruby_layer_dir}/include"
export CPLUS_INCLUDE_PATH="${C_INCLUDE_PATH}:${ruby_layer_dir}/include"
export LIBRARY_PATH="${LD_LIBRARY_PATH}:${ruby_layer_dir}/lib"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ruby_layer_dir}/lib"
export RUBYLIB="${ruby_layer_dir}/lib/ruby/${bin_version}/${ruby_arch}-linux/:${ruby_layer_dir}/lib/ruby/${bin_version}"
export GEM_PATH="${ruby_layer_dir}/lib/ruby/gems/"
export GEM_HOME="${ruby_layer_dir}/lib/ruby/gems/"
export RUBYPATH="${ruby_layer_dir}/bin/"
# Compares previous Gemfile.lock checksum to the current Gemfile.lock
bundler_layer_dir="${layers_dir}/bundler"
local_bundler_checksum=$(sha256sum Gemfile.lock | cut -d ' ' -f 1 || echo 'not found')
remote_bundler_checksum="not found"
if [[ -f "${bundler_layer_dir}.toml" ]]; then
remote_bundler_checksum=$(< "${bundler_layer_dir}.toml" yj -t | jq -r .metadata 2>/dev/null || echo 'not found')
fi
mkdir -p "${bundler_layer_dir}/bin"
bundle config --local path "${bundler_layer_dir}" >/dev/null
bundle config --local bin "${bundler_layer_dir}/bin" >/dev/null
if [[ -f Gemfile.lock && "${local_bundler_checksum}" == "${remote_bundler_checksum}" ]] ; then
echo "---> Reusing gems"
else
echo "---> Installing gems"
cat > "${bundler_layer_dir}.toml" <<EOL
cache = true
launch = true
metadata = "${local_bundler_checksum}"
EOL
bundle install
fi
generate-launch.sh "${layers_dir}"