-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild
More file actions
executable file
·129 lines (110 loc) · 4.07 KB
/
Copy pathbuild
File metadata and controls
executable file
·129 lines (110 loc) · 4.07 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
#!/usr/bin/env bash
set -eo pipefail
echo "---> PHP Buildpack"
# 1. GET ARGS
layers_dir=$1
plan_path=$3
# shellcheck source=/dev/null
. generate-project.sh "${layers_dir}"
php_layer_dir="${layers_dir}"/php
extensions_layer_dir="${layers_dir}"/extensions
mkdir -p "${extensions_layer_dir}"/{docs,ext}
bp_dir=$(
cd "$(dirname "$0")"/..
pwd
)
# 2. Install build deps
# shellcheck source=/dev/null
. generate-layers.sh "${layers_dir}"
generate_deps_layer build-deps
generate_deps_layer run-deps
# 3. install php and nginx
generate_stack_layer php "${plan_path}" true
generate_stack_layer nginx "${plan_path}" true
# 4. pre php env and tools
php_version=$(yj <"${plan_path}" -t | jq -r ".entries[] | select(.name == \"php\") | .metadata.version")
export php_version="${php_version}"
export php_layer_dir="${php_layer_dir}"
mkdir -p "${php_layer_dir}"/config/
cp -rf "${php_layer_dir}/sbin/php-fpm" "${php_layer_dir}/bin"
cp -rf "${bp_dir}/config/php/"* "${php_layer_dir}"/config/
cp -rf "${bp_dir}"/lib/* "${php_layer_dir}"/bin/
mv -f "${php_layer_dir}"/bin/Builder.php "${php_layer_dir}"/lib/php/PEAR/Builder.php
# shellcheck source=/dev/null
. init-stack
# Compares previous extensions.json checksum to the current extensions.json
pecl config-set ext_dir "${extensions_layer_dir}"/ext
pecl config-set doc_dir "${extensions_layer_dir}"/docs
local_extensions_checksum="$(sha256sum extensions.json | cut -d ' ' -f 1 || echo 'not found')"
remote_extensions_checksum="not found"
if [[ -f "${extensions_layer_dir}.toml" ]]; then
remote_extensions_checksum=$(yj <"${extensions_layer_dir}.toml" -t | jq -r .metadata.version 2>/dev/null || echo 'not found')
fi
if [[ -f extensions.json && "${local_extensions_checksum}" == "${remote_extensions_checksum}" ]]; then
echo "---> Reusing extensions.json"
elif [[ -f extensions.json ]]; then
echo "---> Installing extensions.json"
rm "${php_layer_dir}"/ext/* -rf
cp -f "${bp_dir}/config/php/php.ini" "${php_layer_dir}/config/"
"${bp_dir}"/bin/install-extensions
fi
cat >"${extensions_layer_dir}.toml" <<EOL
[types]
cache = true
build = true
launch = true
[metadata]
version = "${local_extensions_checksum}"
EOL
# Compares previous composer.json checksum to the current composer.json
vendor_layer_dir="${layers_dir}/vendor"
mkdir -p "${vendor_layer_dir}"
local_composer_checksum=$(sha256sum composer.json | cut -d ' ' -f 1 || echo 'not found')
remote_composer_checksum="not found"
if [[ -f "${vendor_layer_dir}.toml" ]]; then
remote_composer_checksum=$(yj <"${vendor_layer_dir}.toml" -t | jq -r .metadata.version 2>/dev/null || echo 'not found')
fi
composer config --no-plugins vendor-dir
composer config --no-plugins bin-dir
if [[ -f composer.json && "${local_composer_checksum}" == "${remote_composer_checksum}" ]]; then
echo "---> Reusing composer.json"
cp -r "${vendor_layer_dir}" "./vendor"
else
echo "---> Installing composer.json"
composer install --ignore-platform-reqs
if [[ -d "${vendor_layer_dir}" ]]; then
rm "${vendor_layer_dir:?}/*" -rf
cp -r vendor/. "${vendor_layer_dir}/"
fi
fi
cat >"${vendor_layer_dir}.toml" <<EOL
[types]
cache = true
build = true
launch = true
[metadata]
version = "${local_composer_checksum}"
EOL
echo "---> Config nginx"
nginx_layer_dir="${layers_dir}/nginx"
mkdir -p "${layers_dir}/nginx/"logs
cp -r /opt/drycc/nginx/conf/* "${nginx_layer_dir}"
cp "${bp_dir}/config/nginx/base.conf" "${nginx_layer_dir}/nginx-php.conf.tpl"
cat >"${nginx_layer_dir}.toml" <<EOL
[types]
cache = true
build = true
launch = true
EOL
cat >"${php_layer_dir}/bin/php-nginx-fpm" <<SH
#!/usr/bin/env bash
mkdir -p "${layers_dir}/log" /tmp/nginx/logs/
touch "${layers_dir}/log/php-fpm.log"
cat "${nginx_layer_dir}/nginx-php.conf.tpl" > "${nginx_layer_dir}/nginx-php.conf"
sed -i "s|@ROOT@|\$(readlink -f \$1)|g" "${nginx_layer_dir}/nginx-php.conf"
sed -i "s|@PORT@|\$2|g" "${nginx_layer_dir}/nginx-php.conf"
php-fpm -c "${php_layer_dir}/config/php.ini" -y "${php_layer_dir}/config/php-fpm.conf" -p "${php_layer_dir}"
nginx -p "${nginx_layer_dir}" -c "${nginx_layer_dir}/nginx-php.conf"
SH
chmod +x "${php_layer_dir}/bin/php-nginx-fpm"
generate-launch.sh "${layers_dir}"