-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild
More file actions
executable file
·130 lines (112 loc) · 4.2 KB
/
Copy pathbuild
File metadata and controls
executable file
·130 lines (112 loc) · 4.2 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
#!/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
composer_layer_dir="${layers_dir}"/composer
mkdir -p "${composer_layer_dir}"/{vendor,profile.d}
local_composer_checksum=$(sha256sum composer.json | cut -d ' ' -f 1 || echo 'not found')
remote_composer_checksum="not found"
if [[ -f "${composer_layer_dir}.toml" ]]; then
remote_composer_checksum=$(yj <"${composer_layer_dir}.toml" -t | jq -r .metadata.version 2>/dev/null || echo 'not found')
fi
cat >"${composer_layer_dir}/profile.d/composer.sh" <<EOL
export COMPOSER_HOME=${composer_layer_dir}
export COMPOSER_VENDOR_DIR=${composer_layer_dir}/vendor
echo "include_path=.:${composer_layer_dir}" >> "${php_layer_dir}/config/php.ini"
EOL
# shellcheck source=/dev/null
. init-stack
composer config --no-plugins bin-dir
composer config --no-plugins vendor-dir
if [[ -f composer.json && "${local_composer_checksum}" == "${remote_composer_checksum}" ]]; then
echo "---> Reusing composer.json"
else
echo "---> Installing composer.json"
composer install
cat >"${composer_layer_dir}.toml" <<EOL
[types]
cache = true
build = true
launch = true
[metadata]
version = "${local_composer_checksum}"
EOL
fi
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}"