Skip to content

Commit 5a7ba47

Browse files
committed
fix(pack-images): failure writing output to destination
1 parent 1bd3548 commit 5a7ba47

9 files changed

Lines changed: 150 additions & 117 deletions

File tree

Dockerfile.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ USER root
55
RUN cp -rf /var/lib/dpkg /var/lib/dpkg-run; \
66
\
77
\
8-
install-packages zlib1g git autoconf pkg-config build-essential; \
8+
install-packages zlib1g git autoconf pkg-config build-essential zip unzip; \
99
install-stack jq 1.6; \
1010
install-stack yj 5.1.0; \
1111
cp -rf /opt/drycc/*/bin/* /usr/local/bin; \

buildpacks/go/bin/build

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,29 @@ generate_deps_layer run-deps
1717

1818
# 2. DOWNLOAD go
1919
generate_stack_layer go "${plan_path}" false
20-
go_cache_layer_dir="${layers_dir}/go_cache"
21-
2220
# shellcheck source=/dev/null
2321
. init-stack
2422

25-
# Compares previous go.mod checksum to the current go.mod
26-
local_mod_checksum=$(sha256sum go.mod | cut -d ' ' -f 1 || echo 'not found')
27-
remote_mod_checksum='not found'
28-
if [[ -f "${go_cache_layer_dir}.toml" ]]; then
29-
remote_mod_checksum=$(yj <"${go_cache_layer_dir}.toml" -t | jq -r .metadata 2>/dev/null || echo 'not found')
30-
fi
31-
mkdir -p "${go_cache_layer_dir}"
32-
33-
if [[ -f go.mod && "${local_mod_checksum}" == "${remote_mod_checksum}" ]]; then
34-
echo "---> Reusing go.mod"
35-
else
36-
echo "---> Installing go.mod with go mod vendor"
37-
rm "${go_cache_layer_dir}/pkg" -rf
38-
go mod download
39-
fi
40-
cat >"${go_cache_layer_dir}.toml" <<EOL
23+
# 3 build target
24+
target_layer_dir="${layers_dir}"/target
25+
mkdir -p "${target_layer_dir}"/{bin,profile.d}
26+
echo "---> Start building ${DRYCC_APP} version"
27+
28+
cp -rf "$(pwd)" "${target_layer_dir}"/source \
29+
&& cd "${target_layer_dir}"/source \
30+
&& go mod vendor \
31+
&& go build -o "${target_layer_dir}/bin/${DRYCC_APP}" -v . \
32+
&& cd - \
33+
&& rm -rf "${target_layer_dir}"/source
34+
35+
cat >"${target_layer_dir}.toml" <<EOL
4136
[types]
4237
cache = true
4338
build = true
44-
launch = false
45-
46-
[metadata]
47-
version = "${local_mod_checksum}"
39+
launch = true
40+
EOL
41+
cat >"${target_layer_dir}/profile.d/target.sh" <<EOL
42+
export PATH="${target_layer_dir}/bin:${PATH}"
4843
EOL
4944

50-
go mod vendor
51-
go build -o main -v .
52-
generate-launch.sh "${layers_dir}"
45+
generate-launch.sh "${layers_dir}"

buildpacks/java/bin/build

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,30 @@ bp_dir=$(
2727
)
2828

2929
build_choice="maven"
30-
if [ -f pom.xml ] && [ -f gradlew ]; then
30+
if [ -f mvnw ] && [ -f gradlew ]; then
3131
if [[ -f .build-choice ]]; then
3232
build_choice=$(tr <.build-choice -d '[:space:]')
3333
fi
34-
elif [ -f pom.xml ] && [ ! -f gradlew ]; then
34+
elif [ -f mvnw ]; then
3535
build_choice="maven"
36-
elif [ -f gradlew ] && [ ! -f pom.xml ]; then
36+
elif [ -f gradlew ]; then
3737
build_choice="gradle"
3838
fi
3939

40+
target_layer_dir="${layers_dir}/target"
41+
mkdir -p "${target_layer_dir}"/profile.d
42+
4043
if [ "${build_choice}" == "maven" ]; then
41-
"$bp_dir/lib/maven_build" "${layers_dir}"
44+
"$bp_dir/lib/maven_build" "${layers_dir}" "${target_layer_dir}"
4245
elif [ "${build_choice}" == "gradle" ]; then
43-
"$bp_dir/lib/gradle_build" "${layers_dir}"
46+
"$bp_dir/lib/gradle_build" "${layers_dir}" "${target_layer_dir}"
4447
fi
4548

49+
cat >"${target_layer_dir}.toml" <<EOL
50+
[types]
51+
cache = false
52+
build = true
53+
launch = true
54+
EOL
55+
4656
generate-launch.sh "${layers_dir}"

buildpacks/java/lib/gradle_build

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
#!/usr/bin/env bash
22
layers_dir=$1
3-
3+
target_layer_dir=$2
44
gradle_layer_dir="${layers_dir}/gradle"
5+
mkdir -p "${gradle_layer_dir}"
6+
export GRADLE_USER_HOME="${gradle_layer_dir}"
7+
# gradle build
8+
echo "---> Building target with gradle"
9+
cp -rf "$(pwd)" /tmp/source \
10+
&& cd /tmp/source \
11+
&& ./gradlew clean build -x test --no-daemon \
12+
&& mv /tmp/source/build "${target_layer_dir}" \
13+
&& cd -
514

6-
if [[ ! -d ${gradle_layer_dir} ]]; then
7-
mkdir -p ${gradle_layer_dir}
15+
cat >"${target_layer_dir}/profile.d/target.sh" <<EOL
16+
# only execute at runtime
17+
if [ -z "\$INIT_STACK" ]; then
18+
rm -rf $(pwd)/build
19+
cp -rf ${target_layer_dir}/build $(pwd)
820
fi
9-
cat > "${gradle_layer_dir}.toml" << EOF
21+
EOL
22+
23+
cat >"${gradle_layer_dir}.toml" <<EOL
1024
[types]
1125
cache = true
12-
EOF
13-
ln -s ${gradle_layer_dir} $HOME/.gradle
14-
15-
# 5. RUN BUILD
16-
echo "---> Running Gradle Wrapper"
17-
./gradlew clean build -x test --no-daemon
18-
19-
26+
build = true
27+
launch = false
28+
EOL

buildpacks/java/lib/maven_build

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,28 @@
11
#!/usr/bin/env bash
22
layers_dir=$1
3+
target_layer_dir=$2
4+
maven_layer_dir="${layers_dir}/maven"
5+
mkdir -p "${maven_layer_dir}"
6+
# maven build
7+
echo "---> Building target with maven"
8+
cp -rf "$(pwd)" /tmp/source \
9+
&& cd /tmp/source \
10+
&& ln -s "${layers_dir}/maven" "${HOME}/.m2" \
11+
&& ./mvnw clean install -B -DskipTests \
12+
&& mv /tmp/source/target "${target_layer_dir}" \
13+
&& cd -
314

4-
# 4. MAKE MAVEN M2 CACHE LAYER
5-
m2_layer_dir="${layers_dir}/maven_m2"
6-
if [[ ! -d "${m2_layer_dir}" ]]; then
7-
mkdir -p "${m2_layer_dir}"
15+
cat >"${target_layer_dir}/profile.d/target.sh" <<EOL
16+
# only execute at runtime
17+
if [ -z "\$INIT_STACK" ]; then
18+
rm -rf $(pwd)/target
19+
cp -rf ${target_layer_dir}/target $(pwd)
820
fi
9-
cat > "${m2_layer_dir}.toml" << EOF
10-
[types]
11-
cache = true
12-
EOF
13-
ln -s "${m2_layer_dir}" "$HOME/.m2"
14-
# 5. RUN BUILD
15-
MAVEN_OPTS="${MAVEN_OPTS:-"-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"}"
21+
EOL
1622

17-
if [[ -x mvnw ]]; then
18-
echo "---> Running Maven Wrapper"
19-
./mvnw clean install -B -DskipTests
20-
else
21-
maven_url="https://apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz"
22-
maven_version="3.5.4"
23-
maven_layer_dir="${layers_dir}/maven"
24-
if [[ -f "${layers_dir}/maven.toml" ]]; then
25-
cached_maven_url=$(cat "${maven_layer_dir}.toml" | yj -t | jq -r .metadata.url 2>/dev/null || echo 'Maven TOML parsing failed')
26-
fi
27-
if [[ "${maven_url}" != "${cached_maven_url}" ]] ; then
28-
echo "---> Installing Maven"
29-
rm -rf "${maven_layer_dir}"
30-
mkdir -p "${maven_layer_dir}"
31-
wget -q -O - "${maven_url}" | tar pxz -C "${maven_layer_dir}" --strip-components=1
32-
fi
33-
cat > "${maven_layer_dir}.toml" << EOF
23+
cat >"${maven_layer_dir}.toml" <<EOL
3424
[types]
35-
launch = true
36-
build = true
3725
cache = true
38-
[metadata]
39-
version = "${maven_version}"
40-
url = "${maven_url}"
41-
EOF
42-
export PATH="${layers_dir}/maven/bin:${PATH}"
43-
echo "---> Running Maven Wrapper"
44-
mvn clean install -B -DskipTests
45-
fi
46-
26+
build = true
27+
launch = false
28+
EOL

buildpacks/node/bin/build

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ generate_stack_layer node "${plan_path}" true
2424

2525
# 4. install node modules
2626
node_modules_layer_dir="${layers_dir}/node_modules"
27-
mkdir -p "${node_modules_layer_dir}"
27+
mkdir -p "${node_modules_layer_dir}"/profile.d
2828
# Compares previous package.json checksum to the current package.json
2929
local_package_checksum=$(sha256sum package.json | cut -d ' ' -f 1 || echo 'not found')
3030
remote_package_checksum='not found'
@@ -34,14 +34,11 @@ fi
3434

3535
if [[ -f package.json && "${local_package_checksum}" == "${remote_package_checksum}" ]]; then
3636
echo "---> Reusing package.json"
37-
cp -r "${node_modules_layer_dir}"/* ./node_modules/
3837
elif [[ -f package.json ]]; then
3938
echo "---> Installing package.json with npm install."
40-
rm "${node_modules_layer_dir}" -rf
41-
npm install
42-
cp -r ./node_modules "${node_modules_layer_dir}"
43-
fi
44-
cat >"${node_modules_layer_dir}.toml" <<EOL
39+
cp package.json "${node_modules_layer_dir}"
40+
cd "${node_modules_layer_dir}" && npm install && cd -
41+
cat >"${node_modules_layer_dir}.toml" <<EOL
4542
[types]
4643
cache = true
4744
build = true
@@ -50,6 +47,13 @@ launch = true
5047
[metadata]
5148
version = "${local_package_checksum}"
5249
EOL
50+
cat >"${node_modules_layer_dir}"/profile.d/copy_node_modules.sh <<EOL
51+
# only execute at runtime
52+
if [ -z "\$INIT_STACK" ]; then
53+
cp -rf ${node_modules_layer_dir}/node_modules $(pwd)
54+
fi
55+
EOL
56+
fi
5357

5458
json_get_key() {
5559
local file="$1"

buildpacks/php/bin/build

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -69,29 +69,29 @@ version = "${local_extensions_checksum}"
6969
EOL
7070

7171
# Compares previous composer.json checksum to the current composer.json
72-
vendor_layer_dir="${layers_dir}/vendor"
73-
mkdir -p "${vendor_layer_dir}"
72+
composer_layer_dir="${layers_dir}"/composer
73+
mkdir -p "${composer_layer_dir}"/{vendor,profile.d}
7474
local_composer_checksum=$(sha256sum composer.json | cut -d ' ' -f 1 || echo 'not found')
7575
remote_composer_checksum="not found"
76-
if [[ -f "${vendor_layer_dir}.toml" ]]; then
77-
remote_composer_checksum=$(yj <"${vendor_layer_dir}.toml" -t | jq -r .metadata.version 2>/dev/null || echo 'not found')
76+
if [[ -f "${composer_layer_dir}.toml" ]]; then
77+
remote_composer_checksum=$(yj <"${composer_layer_dir}.toml" -t | jq -r .metadata.version 2>/dev/null || echo 'not found')
7878
fi
79+
cat >"${composer_layer_dir}/profile.d/composer.sh" <<EOL
80+
export COMPOSER_HOME=${composer_layer_dir}
81+
export COMPOSER_VENDOR_DIR=${composer_layer_dir}/vendor
82+
echo "include_path=.:${composer_layer_dir}" >> "${php_layer_dir}/config/php.ini"
83+
EOL
84+
# shellcheck source=/dev/null
85+
. init-stack
7986

80-
composer config --no-plugins vendor-dir
8187
composer config --no-plugins bin-dir
82-
88+
composer config --no-plugins vendor-dir
8389
if [[ -f composer.json && "${local_composer_checksum}" == "${remote_composer_checksum}" ]]; then
8490
echo "---> Reusing composer.json"
85-
cp -r "${vendor_layer_dir}" "./vendor"
8691
else
8792
echo "---> Installing composer.json"
88-
composer install --ignore-platform-reqs
89-
if [[ -d "${vendor_layer_dir}" ]]; then
90-
rm "${vendor_layer_dir:?}/*" -rf
91-
cp -r vendor/. "${vendor_layer_dir}/"
92-
fi
93-
fi
94-
cat >"${vendor_layer_dir}.toml" <<EOL
93+
composer install
94+
cat >"${composer_layer_dir}.toml" <<EOL
9595
[types]
9696
cache = true
9797
build = true
@@ -100,6 +100,7 @@ launch = true
100100
[metadata]
101101
version = "${local_composer_checksum}"
102102
EOL
103+
fi
103104

104105
echo "---> Config nginx"
105106
nginx_layer_dir="${layers_dir}/nginx"
@@ -126,4 +127,4 @@ SH
126127

127128
chmod +x "${php_layer_dir}/bin/php-nginx-fpm"
128129

129-
generate-launch.sh "${layers_dir}"
130+
generate-launch.sh "${layers_dir}"

buildpacks/php/bin/install-extensions

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ pecl_extension_install() {
2323

2424
urls_extension_install() {
2525
ext_url=${1:1:-1}
26-
ext_tar=$(echo "${ext_url}" | awk -F "/" '{print $NF}')
27-
ext=$(echo "${ext_tar}" | awk -F "-" '{print $1}')
26+
ext_tmp="${php_layer_dir}"/tmp
27+
ext_tar=/tmp/$(echo "${ext_url}" | awk -F "/" '{print $NF}')
28+
ext=$(echo "${ext_tar}" | awk -F "-" '{print $1}' | awk -F "\/" '{print $3}')
2829
echo "---> Installing extension ${ext_url}"
2930
curl -fsSL "${ext_url}" -o "${ext_tar}" &&
30-
mkdir -p /tmp/"${ext}" &&
31-
tar -xf "${ext_tar}" -C /tmp/"${ext}" --strip-components=1 &&
32-
rm "${ext_tar}" &&
33-
php-ext-configure /tmp/"${ext}" --enable-"${ext}" --with-php-config="${php_layer_dir}"/bin/php-config &&
34-
INSTALL_ROOT="${php_layer_dir}" php-ext-install --ini-name "${php_layer_dir}"/config/php.ini /tmp/"${ext}" &&
35-
rm -r /tmp/"${ext}"
31+
mkdir -p "${ext_tmp}" &&
32+
tar -xf "${ext_tar}" -C "${ext_tmp}" --strip-components=1 &&
33+
php-ext-configure "${ext_tmp}" --enable-"${ext}" --with-php-config="${php_layer_dir}"/bin/php-config &&
34+
INSTALL_ROOT="${php_layer_dir}" php-ext-install --ini-name "${php_layer_dir}"/config/php.ini "${ext_tmp}" &&
35+
rm -rf "${ext_tar}" "${ext_tmp}"
3636
}
3737

3838
main() {

buildpacks/rust/bin/build

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,43 @@ echo "-----> Building application using Cargo"
2626
if [ -s .cargo/config ]; then
2727
cp -f .cargo/config /opt/drycc/rust/config
2828
fi
29-
rm -rf target/
30-
cargo build --release
31-
mkdir -p target/release
32-
find /opt/drycc/rust/target/release -maxdepth 1 -type f -executable -exec cp -a -t target/release {} \;
3329

34-
generate-launch.sh "${layers_dir}"
30+
# cargo layer
31+
cargo_layer_dir="${layers_dir}/cargo"
32+
mkdir -p "${cargo_layer_dir}"
33+
echo "---> Generating cargo layers"
34+
cat >"${cargo_layer_dir}.toml" <<EOL
35+
[types]
36+
cache = true
37+
build = true
38+
launch = false
39+
EOL
40+
41+
# target layer
42+
target_layer_dir="${layers_dir}"/target
43+
mkdir -p "${target_layer_dir}"/{profile.d,release}
44+
45+
echo "---> Building target with cargo"
46+
cp -rf "$(pwd)" /tmp/source \
47+
&& cd /tmp/source \
48+
&& export CARGO_HOME="${cargo_layer_dir}" \
49+
&& export CARGO_TARGET_DIR=/tmp/source/target \
50+
&& cargo build --release \
51+
&& find "${CARGO_TARGET_DIR}"/release -maxdepth 1 -type f -executable -exec cp -a -t "${target_layer_dir}"/release {} \; \
52+
&& cd -
53+
54+
cat >"${target_layer_dir}.toml" <<EOL
55+
[types]
56+
cache = false
57+
build = true
58+
launch = true
59+
EOL
60+
cat >"${target_layer_dir}/profile.d/copy_target.sh" <<EOL
61+
# only execute at runtime
62+
if [ -z "\$INIT_STACK" ]; then
63+
rm -rf $(pwd)/target
64+
cp -rf ${target_layer_dir} $(pwd)
65+
fi
66+
EOL
67+
68+
generate-launch.sh "${layers_dir}"

0 commit comments

Comments
 (0)