From 9634f2d4dbe7bf126e9e385f255ab7d22add1381 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 10:43:52 -0500 Subject: [PATCH 01/28] Untrust alpine builder since it contains extensions Signed-off-by: Natalie Arellano --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cfaaec6..5ab2747 100644 --- a/Makefile +++ b/Makefile @@ -37,10 +37,12 @@ build-builder-bionic: build-linux-packages build-sample-root build-linux-buildpacks: build-buildpacks-alpine build-buildpacks-bionic build-buildpacks-alpine: build-sample-root - @echo "> Starting local registry to push alpine builder to (since builds with extensions require the builder to exist in a registry with --pull-policy=always and we don't want to override the locally built builder)" + @echo "> Starting local registry to store alpine builder (when builder contains extensions it must exist in a registry so that builds can use --pull-policy=always and we don't want to override the locally built builder)" docker run -d --rm -p 5000:5000 registry:2 docker tag cnbs/sample-builder:alpine localhost:5000/cnbs/sample-builder:alpine docker push localhost:5000/cnbs/sample-builder:alpine + @echo "> Untrusting builder so that we can use the 5 phases (necessary when builder contains extensions)" + pack config trusted-builders remove cnbs/sample-builder:alpine @echo "> Creating 'hello-moon' app using 'alpine' builder..." $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_BUILD_FLAGS) From a169cf53c472744f202ffcae31a4db444ce5487b Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 13:31:40 -0500 Subject: [PATCH 02/28] Wait for registry to be ready Signed-off-by: Natalie Arellano --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 5ab2747..3e5bae2 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,7 @@ build-linux-buildpacks: build-buildpacks-alpine build-buildpacks-bionic build-buildpacks-alpine: build-sample-root @echo "> Starting local registry to store alpine builder (when builder contains extensions it must exist in a registry so that builds can use --pull-policy=always and we don't want to override the locally built builder)" docker run -d --rm -p 5000:5000 registry:2 + sleep 2 docker tag cnbs/sample-builder:alpine localhost:5000/cnbs/sample-builder:alpine docker push localhost:5000/cnbs/sample-builder:alpine @echo "> Untrusting builder so that we can use the 5 phases (necessary when builder contains extensions)" From 27f7efa20fc478a8d805a006b7a39956ae931791 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 14:03:08 -0500 Subject: [PATCH 03/28] Use locally built pack Signed-off-by: Natalie Arellano --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3e5bae2..1b7e89c 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ build-buildpacks-alpine: build-sample-root docker tag cnbs/sample-builder:alpine localhost:5000/cnbs/sample-builder:alpine docker push localhost:5000/cnbs/sample-builder:alpine @echo "> Untrusting builder so that we can use the 5 phases (necessary when builder contains extensions)" - pack config trusted-builders remove cnbs/sample-builder:alpine + $(PACK_CMD) config trusted-builders remove cnbs/sample-builder:alpine @echo "> Creating 'hello-moon' app using 'alpine' builder..." $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_BUILD_FLAGS) From 7507615210f60f7d1c6c199c31cb421bb861ba1d Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 17:48:13 -0500 Subject: [PATCH 04/28] Untrust builder Signed-off-by: Natalie Arellano --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1b7e89c..d656e3b 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,8 @@ build-buildpacks-alpine: build-sample-root docker tag cnbs/sample-builder:alpine localhost:5000/cnbs/sample-builder:alpine docker push localhost:5000/cnbs/sample-builder:alpine @echo "> Untrusting builder so that we can use the 5 phases (necessary when builder contains extensions)" - $(PACK_CMD) config trusted-builders remove cnbs/sample-builder:alpine + $(PACK_CMD) config trusted-builders + $(PACK_CMD) config trusted-builders remove localhost:5000/cnbs/sample-builder:alpine @echo "> Creating 'hello-moon' app using 'alpine' builder..." $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_BUILD_FLAGS) From 40bdf0a8a56e9f9f96d0aca9cd1c1d6b2ba9b611 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 17:50:22 -0500 Subject: [PATCH 05/28] Really untrust builder Signed-off-by: Natalie Arellano --- Makefile | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index d656e3b..cd131b5 100644 --- a/Makefile +++ b/Makefile @@ -42,24 +42,21 @@ build-buildpacks-alpine: build-sample-root sleep 2 docker tag cnbs/sample-builder:alpine localhost:5000/cnbs/sample-builder:alpine docker push localhost:5000/cnbs/sample-builder:alpine - @echo "> Untrusting builder so that we can use the 5 phases (necessary when builder contains extensions)" - $(PACK_CMD) config trusted-builders - $(PACK_CMD) config trusted-builders remove localhost:5000/cnbs/sample-builder:alpine @echo "> Creating 'hello-moon' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon @echo "> Creating 'hello-processes' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-processes-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-processes-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes @echo "> Creating 'hello-world' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-world-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-world-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world @echo "> Creating 'java-maven' app using 'alpine' builder..." - $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/java-maven $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/java-maven @echo "> Creating 'kotlin-gradle' app using 'alpine' builder..." - $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/kotlin-gradle $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/kotlin-gradle build-buildpacks-bionic: build-sample-root @echo "> Creating 'hello-moon' app using 'bionic' builder..." From d6a66bbf0f0620c1a150286574b264830712c82d Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 18:00:02 -0500 Subject: [PATCH 06/28] Fix restorer Signed-off-by: Natalie Arellano --- Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index cd131b5..b191f5d 100644 --- a/Makefile +++ b/Makefile @@ -44,19 +44,19 @@ build-buildpacks-alpine: build-sample-root docker push localhost:5000/cnbs/sample-builder:alpine @echo "> Creating 'hello-moon' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon + $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon --network=host @echo "> Creating 'hello-processes' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-processes-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes + $(PACK_CMD) build sample-hello-processes-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes --network=host @echo "> Creating 'hello-world' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-world-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world + $(PACK_CMD) build sample-hello-world-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --network=host @echo "> Creating 'java-maven' app using 'alpine' builder..." - $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/java-maven + $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/java-maven --network=host @echo "> Creating 'kotlin-gradle' app using 'alpine' builder..." - $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/kotlin-gradle + $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/kotlin-gradle --network=host build-buildpacks-bionic: build-sample-root @echo "> Creating 'hello-moon' app using 'bionic' builder..." From 037f4ae7c6d838de97e1fdac75f554a5118064ba Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 27 Feb 2023 18:35:07 -0500 Subject: [PATCH 07/28] Specify java buildpack Otherwise the hello extensions buildpack will detect Signed-off-by: Natalie Arellano --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b191f5d..ef07ad3 100644 --- a/Makefile +++ b/Makefile @@ -53,10 +53,10 @@ build-buildpacks-alpine: build-sample-root $(PACK_CMD) build sample-hello-world-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --network=host @echo "> Creating 'java-maven' app using 'alpine' builder..." - $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/java-maven --network=host + $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/java-maven --path apps/java-maven --network=host @echo "> Creating 'kotlin-gradle' app using 'alpine' builder..." - $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/kotlin-gradle --network=host + $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/kotlin-gradle --path apps/kotlin-gradle --network=host build-buildpacks-bionic: build-sample-root @echo "> Creating 'hello-moon' app using 'bionic' builder..." From 81ed57e136ff8264be9d41a3420f900142195bec Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Fri, 3 Mar 2023 14:48:54 -0500 Subject: [PATCH 08/28] In its former state, the hello-extensions buildpack always detected and failed the build by default (as it requires tree, which is not installed on the builder) Now, the buildpack will opt-in to the build only if a build-time environment variable is set Additionally, it can be made to require dependencies through the environment, instead of having to edit the /bin/build script Signed-off-by: Natalie Arellano --- buildpacks/hello-extensions/bin/build | 2 +- buildpacks/hello-extensions/bin/detect | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/buildpacks/hello-extensions/bin/build b/buildpacks/hello-extensions/bin/build index 3795acb..b6fb7dc 100755 --- a/buildpacks/hello-extensions/bin/build +++ b/buildpacks/hello-extensions/bin/build @@ -7,7 +7,7 @@ tree --version layers_dir=$1 -cat >> "${layers_dir}/launch.toml" <>"${layers_dir}/launch.toml" <> "${plan_path}" <>"${plan_path}" <>"${plan_path}" < Date: Fri, 3 Mar 2023 14:52:10 -0500 Subject: [PATCH 09/28] Apply suggestions from code review Signed-off-by: Natalie Arellano --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ef07ad3..b191f5d 100644 --- a/Makefile +++ b/Makefile @@ -53,10 +53,10 @@ build-buildpacks-alpine: build-sample-root $(PACK_CMD) build sample-hello-world-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --network=host @echo "> Creating 'java-maven' app using 'alpine' builder..." - $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/java-maven --path apps/java-maven --network=host + $(PACK_CMD) build sample-java-maven-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/java-maven --network=host @echo "> Creating 'kotlin-gradle' app using 'alpine' builder..." - $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/kotlin-gradle --path apps/kotlin-gradle --network=host + $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder localhost:5000/cnbs/sample-builder:alpine --path apps/kotlin-gradle --network=host build-buildpacks-bionic: build-sample-root @echo "> Creating 'hello-moon' app using 'bionic' builder..." From 0d791aa5302c32db693d5cc8d1cb90361ef03aea Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 3 Apr 2023 17:11:35 -0400 Subject: [PATCH 10/28] WIP Signed-off-by: Natalie Arellano --- extensions/curl/bin/generate | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/extensions/curl/bin/generate b/extensions/curl/bin/generate index d3656b0..5f2cebe 100755 --- a/extensions/curl/bin/generate +++ b/extensions/curl/bin/generate @@ -5,6 +5,13 @@ set -eo pipefail output_dir=$CNB_OUTPUT_DIR # 2. GENERATE run.Dockerfile -cat >> "${output_dir}/run.Dockerfile" <>"${output_dir}/run.Dockerfile" <>"${output_dir}/run.Dockerfile" < /from-curl.txt +EOL +fi From 4384e869ccd8449e3cd282e3e564eb0a1b31a707 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Tue, 4 Apr 2023 17:51:07 -0400 Subject: [PATCH 11/28] Add cowsay extension to demonstrate run image extension Signed-off-by: Natalie Arellano --- builders/alpine/builder.toml | 9 +++++++++ buildpacks/hello-extensions/bin/build | 5 +++++ buildpacks/hello-extensions/bin/detect | 7 +++++++ extensions/cowsay/bin/detect | 12 ++++++++++++ extensions/cowsay/bin/generate | 20 ++++++++++++++++++++ extensions/cowsay/extension.toml | 10 ++++++++++ extensions/curl/bin/generate | 7 ------- extensions/curl/extension.toml | 2 +- extensions/tree/bin/generate | 2 +- extensions/tree/extension.toml | 2 +- 10 files changed, 66 insertions(+), 10 deletions(-) create mode 100755 extensions/cowsay/bin/detect create mode 100755 extensions/cowsay/bin/generate create mode 100644 extensions/cowsay/extension.toml diff --git a/builders/alpine/builder.toml b/builders/alpine/builder.toml index 58198d7..0875dc4 100644 --- a/builders/alpine/builder.toml +++ b/builders/alpine/builder.toml @@ -28,6 +28,11 @@ id = "samples/curl" version = "0.0.1" uri = "../../extensions/curl" +[[extensions]] +id = "samples/cowsay" +version = "0.0.1" +uri = "../../extensions/cowsay" + # Order used for detection (buildpacks) [[order]] [[order.group]] @@ -59,6 +64,10 @@ version = "0.0.1" id = "samples/curl" version = "0.0.1" +[[order-extensions.group]] +id = "samples/cowsay" +version = "0.0.1" + # Stack that will be used by the builder [stack] id = "io.buildpacks.samples.stacks.alpine" diff --git a/buildpacks/hello-extensions/bin/build b/buildpacks/hello-extensions/bin/build index b6fb7dc..008a3aa 100755 --- a/buildpacks/hello-extensions/bin/build +++ b/buildpacks/hello-extensions/bin/build @@ -13,4 +13,9 @@ type = "curl" command = ["curl"] args = ["--version"] default = true + +[[processes]] +type = "cowsay" +command = ["cowsay"] +args = ["MOOOO!"] EOL diff --git a/buildpacks/hello-extensions/bin/detect b/buildpacks/hello-extensions/bin/detect index f6dbedf..a73888e 100755 --- a/buildpacks/hello-extensions/bin/detect +++ b/buildpacks/hello-extensions/bin/detect @@ -23,3 +23,10 @@ if [[ "${BP_REQUIRES}" == *"curl"* ]]; then name = "curl" EOL fi + +if [[ "${BP_REQUIRES}" == *"cowsay"* ]]; then + cat >>"${plan_path}" <> "${plan_path}" <>"${output_dir}/run.Dockerfile" <>"${output_dir}/run.Dockerfile" <>"${output_dir}/run.Dockerfile" < /from-curl.txt -EOL -fi diff --git a/extensions/curl/extension.toml b/extensions/curl/extension.toml index a5c1b8e..18f8134 100644 --- a/extensions/curl/extension.toml +++ b/extensions/curl/extension.toml @@ -7,4 +7,4 @@ id = "samples/curl" version = "0.0.1" name = "Curl Extension" homepage = "https://github.com/buildpacks/samples/tree/main/extensions/curl" -description = "A simple extension that switches the runtime base image to `curlimages/curl:latest`" +description = "A simple extension that switches the runtime base image to `run-image-curl`, based on `curlimages/curl`" diff --git a/extensions/tree/bin/generate b/extensions/tree/bin/generate index ebc777c..4e8acb0 100755 --- a/extensions/tree/bin/generate +++ b/extensions/tree/bin/generate @@ -10,5 +10,5 @@ ARG base_image FROM \${base_image} USER root -RUN apk update update && apk add tree +RUN apk update && apk add tree EOL diff --git a/extensions/tree/extension.toml b/extensions/tree/extension.toml index 1934deb..5fb1590 100644 --- a/extensions/tree/extension.toml +++ b/extensions/tree/extension.toml @@ -7,4 +7,4 @@ id = "samples/tree" version = "0.0.1" name = "Tree Extension" homepage = "https://github.com/buildpacks/samples/tree/main/extensions/tree" -description = "A simple extension that installs tree at build time" +description = "A simple extension that installs tree on the builder image" From 25f2e4ae054384345502be80fcb5f09502f42d21 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Fri, 7 Apr 2023 15:46:58 -0400 Subject: [PATCH 12/28] Fixes - When switching the run image, include the registry context (if not Docker Hub) - Verify that run image extensions are applied on top of the new run image Signed-off-by: Natalie Arellano --- extensions/cowsay/bin/generate | 2 ++ extensions/curl/bin/generate | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/extensions/cowsay/bin/generate b/extensions/cowsay/bin/generate index 97f02fc..1b4c52d 100755 --- a/extensions/cowsay/bin/generate +++ b/extensions/cowsay/bin/generate @@ -9,6 +9,8 @@ cat >>"${output_dir}/run.Dockerfile" <>"${output_dir}/run.Dockerfile" < Date: Mon, 17 Apr 2023 12:08:37 +0200 Subject: [PATCH 13/28] Fix cowsay and also check that curl is present when it is installed Signed-off-by: Natalie Arellano --- extensions/cowsay/bin/generate | 3 +-- stacks/alpine/run/curl.Dockerfile | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/extensions/cowsay/bin/generate b/extensions/cowsay/bin/generate index 1b4c52d..3febf25 100755 --- a/extensions/cowsay/bin/generate +++ b/extensions/cowsay/bin/generate @@ -17,6 +17,5 @@ RUN apk update && \ cd /tmp && \ git clone https://github.com/schacon/cowsay.git && \ cd cowsay ; ./install.sh /usr/local && \ - rm -rf /var/cache/apk/* /var/tmp/* /tmp/* && \ - apk del git + rm -rf /var/cache/apk/* /var/tmp/* /tmp/* EOL diff --git a/stacks/alpine/run/curl.Dockerfile b/stacks/alpine/run/curl.Dockerfile index af98065..82dd053 100644 --- a/stacks/alpine/run/curl.Dockerfile +++ b/stacks/alpine/run/curl.Dockerfile @@ -1,5 +1,7 @@ FROM curlimages/curl +RUN curl --version + ARG cnb_uid=1000 ARG cnb_gid=1001 From d115dae1a62eb9f6b777f4591325b8e649c3e8e0 Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Thu, 8 Jun 2023 05:53:41 +0100 Subject: [PATCH 14/28] Update CircelCI executor image Use the latest Ubuntu image that is available to us Signed-off-by: Aidan Delaney --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5233bf9..a29a8f8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,6 +7,7 @@ workflows: main: jobs: - pack/build: + executor-image: ubuntu-2204:2023.04.2 working-directory: apps/java-maven image-name: cnbs/circleci-sample builder: 'cnbs/sample-builder:jammy' From c0de5d0b97d31127bea4e2f16aed21aa9c90afb9 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Fri, 7 Jul 2023 14:54:18 -0400 Subject: [PATCH 15/28] Bump CI Signed-off-by: Natalie Arellano --- buildpacks/hello-extensions/bin/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildpacks/hello-extensions/bin/build b/buildpacks/hello-extensions/bin/build index b6fb7dc..3795acb 100755 --- a/buildpacks/hello-extensions/bin/build +++ b/buildpacks/hello-extensions/bin/build @@ -7,7 +7,7 @@ tree --version layers_dir=$1 -cat >>"${layers_dir}/launch.toml" <> "${layers_dir}/launch.toml" < Date: Fri, 7 Jul 2023 14:59:11 -0400 Subject: [PATCH 16/28] Fix Dockerfiles by re-setting the user at the end Signed-off-by: Natalie Arellano --- extensions/cowsay/bin/generate | 3 +++ extensions/tree/bin/generate | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/extensions/cowsay/bin/generate b/extensions/cowsay/bin/generate index 3febf25..f879c7d 100755 --- a/extensions/cowsay/bin/generate +++ b/extensions/cowsay/bin/generate @@ -18,4 +18,7 @@ RUN apk update && \ git clone https://github.com/schacon/cowsay.git && \ cd cowsay ; ./install.sh /usr/local && \ rm -rf /var/cache/apk/* /var/tmp/* /tmp/* + +ARG user_id +USER \${user_id} EOL diff --git a/extensions/tree/bin/generate b/extensions/tree/bin/generate index 4e8acb0..7c7d88e 100755 --- a/extensions/tree/bin/generate +++ b/extensions/tree/bin/generate @@ -11,4 +11,8 @@ FROM \${base_image} USER root RUN apk update && apk add tree + +ARG user_id +USER \${user_id} EOL + From 98cc0d5093d1aa1ea6fb0e99e279239a601797b7 Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Mon, 10 Jul 2023 06:28:09 +0000 Subject: [PATCH 17/28] Update apt-get to apt Use the newer `apt` instead of `apt-get` --- Makefile | 2 +- stacks/jammy/base/Dockerfile | 4 ++-- stacks/jammy/build/Dockerfile | 4 ++-- stacks/wine/build/Dockerfile | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index a9054c2..9c307d1 100644 --- a/Makefile +++ b/Makefile @@ -157,7 +157,7 @@ build-stack-wine: build-builder-wine: build-sample-root @echo "> Building 'wine' builder..." - $(PACK_CMD) create-builder cnbs/sample-builder:wine --config $(SAMPLES_ROOT)/builders/wine/builder.toml $(PULL_POLICY_NEVER) + $(PACK_CMD) builder create cnbs/sample-builder:wine --config $(SAMPLES_ROOT)/builders/wine/builder.toml $(PULL_POLICY_NEVER) build-wine-apps: build-sample-root @echo "> Creating 'batch-script' app using 'wine' builder..." diff --git a/stacks/jammy/base/Dockerfile b/stacks/jammy/base/Dockerfile index a867b29..fbb79de 100755 --- a/stacks/jammy/base/Dockerfile +++ b/stacks/jammy/base/Dockerfile @@ -4,8 +4,8 @@ ARG cnb_uid=1000 ARG cnb_gid=1000 # Install packages that we want to make available at both build and run time -RUN apt-get update && \ - apt-get install -y xz-utils ca-certificates libyaml-0-2 && \ +RUN apt update && \ + apt install -y xz-utils ca-certificates libyaml-0-2 && \ rm -rf /var/lib/apt/lists/* # Create user and group diff --git a/stacks/jammy/build/Dockerfile b/stacks/jammy/build/Dockerfile index 9a35fd4..221bfbf 100755 --- a/stacks/jammy/build/Dockerfile +++ b/stacks/jammy/build/Dockerfile @@ -2,8 +2,8 @@ ARG base_image FROM ${base_image} # Install packages that we want to make available at build time -RUN apt-get update && \ - apt-get install -y git wget jq && \ +RUN apt update && \ + apt install -y git wget jq && \ rm -rf /var/lib/apt/lists/* COPY ./bin/yj-linux /usr/local/bin/yj diff --git a/stacks/wine/build/Dockerfile b/stacks/wine/build/Dockerfile index 7180305..1436c3b 100755 --- a/stacks/wine/build/Dockerfile +++ b/stacks/wine/build/Dockerfile @@ -3,8 +3,8 @@ FROM ubuntu:jammy # Install packages that we want to make available at build time # Base + Wine 32/64bit + dependencies RUN dpkg --add-architecture i386 && \ - apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + apt update && \ + DEBIAN_FRONTEND=noninteractive apt install -y \ xz-utils ca-certificates \ git wget wine64 wine32 xvfb x11-apps socat && \ rm -rf /var/lib/apt/lists/* From 3235698139b29fde65edcdfcb4d3780742b06b2f Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Mon, 10 Jul 2023 11:50:23 -0400 Subject: [PATCH 18/28] Use https://pkgs.alpinelinux.org/package/edge/testing/x86/cowsay to simplify cowsay extension Signed-off-by: Natalie Arellano --- extensions/cowsay/bin/generate | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/extensions/cowsay/bin/generate b/extensions/cowsay/bin/generate index f879c7d..2fd92cd 100755 --- a/extensions/cowsay/bin/generate +++ b/extensions/cowsay/bin/generate @@ -12,12 +12,7 @@ FROM \${base_image} RUN curl --version USER root -RUN apk update && \ - apk add --no-cache git perl && \ - cd /tmp && \ - git clone https://github.com/schacon/cowsay.git && \ - cd cowsay ; ./install.sh /usr/local && \ - rm -rf /var/cache/apk/* /var/tmp/* /tmp/* +RUN apk update && apk add cowsay ARG user_id USER \${user_id} From e0bc197ebeec67e21569dbe27a762d63daacf39f Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Mon, 20 Feb 2023 06:09:01 +0000 Subject: [PATCH 19/28] Bump stack from Bionic to Jammy Use a more recent Ubuntu LTS release Signed-off-by: Aidan Delaney --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a29a8f8..3b79422 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -28,4 +28,4 @@ jobs: docker load -i /tmp/workspace/images/image.tgz docker run -d -p 8080:8080 cnbs/circleci-sample sleep 40 - curl -k localhost:8080 \ No newline at end of file + curl -k localhost:8080 From 859c8133fcab06b7d9a56e20d0e4bdda57c46b35 Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Mon, 20 Feb 2023 06:18:09 +0000 Subject: [PATCH 20/28] Bump API version for sample buildpacks Use a buildpack API version that is not subject to the deprecation RFC Signed-off-by: Aidan Delaney --- apps/bash-script/bash-script-buildpack/buildpack.toml | 2 +- .../batch-script/batch-script-buildpack/buildpack.toml | 2 +- builders/wine/builder.toml | 2 +- buildpacks/dotnet-framework/bin/build.bat | 3 ++- buildpacks/dotnet-framework/buildpack.toml | 2 +- buildpacks/hello-moon-windows/buildpack.toml | 2 +- buildpacks/hello-moon/buildpack.toml | 2 +- buildpacks/hello-processes/bin/build | 6 +++--- buildpacks/hello-processes/buildpack.toml | 2 +- buildpacks/hello-universe-windows/buildpack.toml | 2 +- buildpacks/hello-universe/buildpack.toml | 2 +- buildpacks/hello-world-windows/buildpack.toml | 2 +- buildpacks/hello-world/buildpack.toml | 2 +- buildpacks/java-maven/bin/build | 9 +++++++-- buildpacks/java-maven/buildpack.toml | 2 +- buildpacks/kotlin-gradle/bin/build | 10 +++++++--- buildpacks/kotlin-gradle/buildpack.toml | 2 +- buildpacks/ruby-bundler/bin/build | 8 +++++--- buildpacks/ruby-bundler/buildpack.toml | 2 +- 19 files changed, 38 insertions(+), 26 deletions(-) diff --git a/apps/bash-script/bash-script-buildpack/buildpack.toml b/apps/bash-script/bash-script-buildpack/buildpack.toml index 9ff82a6..dc81cd4 100644 --- a/apps/bash-script/bash-script-buildpack/buildpack.toml +++ b/apps/bash-script/bash-script-buildpack/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/apps/batch-script/batch-script-buildpack/buildpack.toml b/apps/batch-script/batch-script-buildpack/buildpack.toml index 8a4af0b..144b88c 100644 --- a/apps/batch-script/batch-script-buildpack/buildpack.toml +++ b/apps/batch-script/batch-script-buildpack/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/builders/wine/builder.toml b/builders/wine/builder.toml index 0205aa5..80d1881 100644 --- a/builders/wine/builder.toml +++ b/builders/wine/builder.toml @@ -16,4 +16,4 @@ build-image = "cnbs/sample-stack-build:wine" # Requires explicit Windows lifecycle to override pack's Linux default [lifecycle] -uri = "https://github.com/buildpacks/lifecycle/releases/download/v0.10.2/lifecycle-v0.10.2+windows.x86-64.tgz" +uri = "https://github.com/buildpacks/lifecycle/releases/download/v0.16.0/lifecycle-v0.16.0+windows.x86-64.tgz" diff --git a/buildpacks/dotnet-framework/bin/build.bat b/buildpacks/dotnet-framework/bin/build.bat index b7e605e..e6accbb 100644 --- a/buildpacks/dotnet-framework/bin/build.bat +++ b/buildpacks/dotnet-framework/bin/build.bat @@ -15,6 +15,7 @@ if not exist %layer_path% ( if not exist %layer_toml_path% ( ( + echo [types] echo launch = false echo build = true echo cache = true @@ -40,5 +41,5 @@ if %ERRORLEVEL% NEQ 0 ( ( echo [[processes]] echo type = "web" -echo command = "C:\\ServiceMonitor.exe w3svc" +echo command = ["C:\\ServiceMonitor.exe", "w3svc"] ) >> %launch_toml_path% diff --git a/buildpacks/dotnet-framework/buildpack.toml b/buildpacks/dotnet-framework/buildpack.toml index 50faa9f..5469e66 100755 --- a/buildpacks/dotnet-framework/buildpack.toml +++ b/buildpacks/dotnet-framework/buildpack.toml @@ -1,4 +1,4 @@ -api = "0.2" +api = "0.9" [buildpack] id = "samples/dotnet-framework" diff --git a/buildpacks/hello-moon-windows/buildpack.toml b/buildpacks/hello-moon-windows/buildpack.toml index c08b6b2..e861522 100644 --- a/buildpacks/hello-moon-windows/buildpack.toml +++ b/buildpacks/hello-moon-windows/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/hello-moon/buildpack.toml b/buildpacks/hello-moon/buildpack.toml index 12b0058..8e38607 100644 --- a/buildpacks/hello-moon/buildpack.toml +++ b/buildpacks/hello-moon/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/hello-processes/bin/build b/buildpacks/hello-processes/bin/build index 474a19c..2f7387d 100755 --- a/buildpacks/hello-processes/bin/build +++ b/buildpacks/hello-processes/bin/build @@ -4,9 +4,8 @@ set -eo pipefail echo "---> Hello processes buildpack" # INPUT ARGUMENTS -env_dir=$2/env layers_dir=$1 -plan_path=$3 +env_dir=$2/env # ADD SYS-INFO PROCESS echo "---> Adding sys-info process" @@ -14,6 +13,7 @@ sysinfo_layer_dir="${layers_dir}/sys-info" mkdir -p ${sysinfo_layer_dir} cat > "${sysinfo_layer_dir}.toml" << EOF +[types] launch = true EOF @@ -30,7 +30,7 @@ chmod +x ${sysinfo_script} cat >> "${layers_dir}/launch.toml" < Done" diff --git a/buildpacks/hello-processes/buildpack.toml b/buildpacks/hello-processes/buildpack.toml index 41aac1d..d467050 100644 --- a/buildpacks/hello-processes/buildpack.toml +++ b/buildpacks/hello-processes/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/hello-universe-windows/buildpack.toml b/buildpacks/hello-universe-windows/buildpack.toml index b52f12a..75cf44b 100644 --- a/buildpacks/hello-universe-windows/buildpack.toml +++ b/buildpacks/hello-universe-windows/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/hello-universe/buildpack.toml b/buildpacks/hello-universe/buildpack.toml index 777862b..0587c27 100644 --- a/buildpacks/hello-universe/buildpack.toml +++ b/buildpacks/hello-universe/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/hello-world-windows/buildpack.toml b/buildpacks/hello-world-windows/buildpack.toml index e77413e..3e16cc5 100644 --- a/buildpacks/hello-world-windows/buildpack.toml +++ b/buildpacks/hello-world-windows/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/hello-world/buildpack.toml b/buildpacks/hello-world/buildpack.toml index a063eb0..0c7c40c 100644 --- a/buildpacks/hello-world/buildpack.toml +++ b/buildpacks/hello-world/buildpack.toml @@ -1,5 +1,5 @@ # Buildpack API version -api = "0.2" +api = "0.9" # Buildpack ID and metadata [buildpack] diff --git a/buildpacks/java-maven/bin/build b/buildpacks/java-maven/bin/build index 9ef9364..227f632 100755 --- a/buildpacks/java-maven/bin/build +++ b/buildpacks/java-maven/bin/build @@ -42,6 +42,7 @@ if [[ ${jdk_url} != ${cached_jdk_url} ]] ; then wget -q -O - "$jdk_url" | tar pxz -C "${jdk_layer_dir}" --strip-components=1 cat > "${jdk_layer_dir}.toml" << EOF +[types] launch = true build = true cache = true @@ -80,7 +81,10 @@ export PATH=${jdk_layer_dir}/bin:$PATH m2_layer_dir="${layers_dir}/maven_m2" if [[ ! -d ${m2_layer_dir} ]]; then mkdir -p ${m2_layer_dir} - echo "cache = true" > ${m2_layer_dir}.toml + cat > ${m2_layer_dir}.toml << EOF +[types] +cache = true +EOF fi ln -s ${m2_layer_dir} $HOME/.m2 @@ -101,6 +105,7 @@ else mkdir -p "${maven_layer_dir}" wget -q -O - "${maven_url}" | tar pxz -C "${maven_layer_dir}" --strip-components=1 cat > "${maven_layer_dir}.toml" << EOF +[types] launch = true build = true cache = true @@ -122,7 +127,7 @@ for jar_file in $(find "$target_dir" -maxdepth 1 -name "*.jar" -type f); do cat >> "${layers_dir}/launch.toml" < "${jdk_layer_dir}.toml" << EOF +[types] launch = true build = true cache = true @@ -77,13 +78,16 @@ gradle_layer_dir="${layers_dir}/gradle" if [[ ! -d ${gradle_layer_dir} ]]; then mkdir -p ${gradle_layer_dir} - echo "cache = true" > ${gradle_layer_dir}.toml + cat >> ${gradle_layer_dir}.toml < Running Gradle Wrapper" -./gradlew clean build -x test --no-daemon +GRADLE_OPTS=-Dorg.gradle.daemon=false ./gradlew clean build -x test # 6. SET DEFAULT START COMMAND target_dir="build/libs" @@ -91,7 +95,7 @@ for jar_file in $(find "$target_dir" -maxdepth 1 -name "*.jar" -type f); do cat >> "${layers_dir}/launch.toml" < Downloading and extracting Ruby ${ruby_version}" ruby_url=https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-22/ruby-${ruby_version}.tgz @@ -20,6 +20,7 @@ wget -q -O - "${ruby_url}" | tar -xzf - -C "${ruby_layer_dir}" # 3. MAKE RUBY AVAILABLE DURING LAUNCH cat > "${ruby_layer_dir}.toml" < Installing gems" mkdir "${bundler_layer_dir}" cat > "${bundler_layer_dir}.toml" <> "${layers_dir}/launch.toml" < Date: Thu, 23 Feb 2023 06:47:48 +0000 Subject: [PATCH 21/28] Equalise hello-world-windows and hello-moon-windows These are both no-op buildpacks, make them syntactically the same. Signed-off-by: Aidan Delaney --- buildpacks/hello-moon-windows/bin/build.bat | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/buildpacks/hello-moon-windows/bin/build.bat b/buildpacks/hello-moon-windows/bin/build.bat index 5c5e406..97f6bba 100644 --- a/buildpacks/hello-moon-windows/bin/build.bat +++ b/buildpacks/hello-moon-windows/bin/build.bat @@ -2,10 +2,13 @@ echo --- Hello Moon buildpack -set env_dir=%2\env +:: INPUT ARGUMENTS +set platform_dir=%2 +set env_dir=%platform_dir%\env set layers_dir=%1 set plan_path=%3 +:: ENV VARS echo env_dir: %env_dir% echo env_vars: for /f "tokens=*" %%f in ('dir /s /q /b %env_dir%') do ( @@ -17,7 +20,10 @@ for /f "tokens=*" %%o in ('set') do ( echo %%o ) +:: LAYERS echo layers_dir: %layers_dir% + +:: PLAN echo plan_path: %plan_path% echo plan contents: for /f "tokens=*" %%o in ('type %plan_path%') do ( From 0d749155c65aa4c8e40a4f05631e2ad73ca4ef77 Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Fri, 14 Jul 2023 07:26:01 +0100 Subject: [PATCH 22/28] Drop wine samples support We build on Windows and Linux. Wine is a complexity that we do not need in order to demonstrate buildpacks. Signed-off-by: Aidan Delaney --- Makefile | 53 ---------------------- stacks/wine/build/Dockerfile | 39 ---------------- stacks/wine/build/bin/lifecycle-wrapper.sh | 31 ------------- stacks/wine/run/Dockerfile | 9 ---- 4 files changed, 132 deletions(-) delete mode 100755 stacks/wine/build/Dockerfile delete mode 100755 stacks/wine/build/bin/lifecycle-wrapper.sh delete mode 100755 stacks/wine/run/Dockerfile diff --git a/Makefile b/Makefile index 592f00f..cc0ea1e 100644 --- a/Makefile +++ b/Makefile @@ -151,59 +151,6 @@ set-experimental: @echo "> Setting experimental" $(PACK_CMD) config experimental true -#################### -## Wine -#################### - -build-wine: build-stack-wine build-builder-wine build-buildpacks-wine - -build-stack-wine: - @echo "> Building 'wine' stack..." - bash stacks/build-stack.sh stacks/wine - -build-builder-wine: build-sample-root - @echo "> Building 'wine' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:wine --config $(SAMPLES_ROOT)/builders/wine/builder.toml $(PULL_POLICY_NEVER) - -build-wine-apps: build-sample-root - @echo "> Creating 'batch-script' app using 'wine' builder..." - $(PACK_CMD) build sample-batch-script-app:wine -v --builder cnbs/sample-builder:wine --path apps/batch-script $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) - -build-buildpacks-wine: build-sample-root - @echo "> Creating 'hello-moon-windows' app using 'wine' builder..." - $(PACK_CMD) build sample-hello-moon-windows-app:wine -v --builder cnbs/sample-builder:wine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world-windows --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon-windows $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) - - @echo "> Creating 'hello-world-windows' app using 'wine' builder..." - $(PACK_CMD) build sample-hello-world-windows-app:wine -v --builder cnbs/sample-builder:wine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world-windows $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) - -deploy-wine: deploy-wine-stacks deploy-wine-builders - -deploy-wine-stacks: - @echo "> Deploying 'wine' stack..." - docker push cnbs/sample-stack-run:wine - docker push cnbs/sample-stack-build:wine - -deploy-wine-builders: - @echo "> Deploying 'wine' builder..." - docker push cnbs/sample-builder:wine - -clean-wine: - @echo "> Removing 'wine' stack..." - docker rmi cnbs/sample-stack-base:wine || true - docker rmi cnbs/sample-stack-run:wine || true - docker rmi cnbs/sample-stack-build:wine || true - - @echo "> Removing builders..." - docker rmi cnbs/sample-builder:wine || true - - @echo "> Removing 'wine' apps..." - docker rmi sample-hello-moon-windows-app:wine || true - docker rmi sample-hello-world-windows-app:wine || true - docker rmi sample-batch-script-app:wine || true - - @echo "> Removing '.tmp'" - rm -rf .tmp - #################### ## Windows #################### diff --git a/stacks/wine/build/Dockerfile b/stacks/wine/build/Dockerfile deleted file mode 100755 index 1436c3b..0000000 --- a/stacks/wine/build/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:jammy - -# Install packages that we want to make available at build time -# Base + Wine 32/64bit + dependencies -RUN dpkg --add-architecture i386 && \ - apt update && \ - DEBIAN_FRONTEND=noninteractive apt install -y \ - xz-utils ca-certificates \ - git wget wine64 wine32 xvfb x11-apps socat && \ - rm -rf /var/lib/apt/lists/* - -# Create symlinks for lifecycle executables to wrapper. The wrapper creates the Wine environment and calls lifecycle.exe -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/analyzer -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/builder -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/creator -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/detector -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/exporter -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/rebaser -COPY ./bin/lifecycle-wrapper.sh /cnb/lifecycle/restorer -RUN chmod 555 /cnb/lifecycle/* - -ARG cnb_uid=1000 -ARG cnb_gid=1000 - -# Create user and group -RUN groupadd cnb --gid ${cnb_gid} && \ - useradd --uid ${cnb_uid} --gid ${cnb_gid} -m -s /bin/bash cnb - -# Set required CNB information -ENV CNB_USER_ID=${cnb_uid} -ENV CNB_GROUP_ID=${cnb_gid} - -# Set required CNB information -ARG stack_id -ENV CNB_STACK_ID=${stack_id} -LABEL io.buildpacks.stack.id=${stack_id} - -# Set user and group (as declared in base image) -USER ${CNB_USER_ID}:${CNB_GROUP_ID} diff --git a/stacks/wine/build/bin/lifecycle-wrapper.sh b/stacks/wine/build/bin/lifecycle-wrapper.sh deleted file mode 100755 index 1fd30af..0000000 --- a/stacks/wine/build/bin/lifecycle-wrapper.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -set -o errexit -o pipefail -o nounset - -# symlink CNB directories into C: -mkdir -p $HOME/.wine/drive_c/ -ln -s /cnb $HOME/.wine/drive_c/ -ln -s /layers $HOME/.wine/drive_c/ -ln -s /platform $HOME/.wine/drive_c/ -ln -s /cache $HOME/.wine/drive_c/ -ln -s /workspace $HOME/.wine/drive_c/ - -# remove debug messages -export WINEDEBUG=fixme-all,-ole,+msgbox # suppress non-fatal messages: "fixme:", "err:ole"; log all "invisible" msgbox messages & Structured Error Handling failures -export WINEDLLOVERRIDES="mscoree,mshtml=" # suppress wine-gecko messages - -# start background Xvfb for wine X11 dependency -export DISPLAY=:0.0 -nohup Xvfb :0 -screen 0 1024x768x16 -nolisten unix & - -# start background socat to proxy between /var/run/docker.sock and tcp://localhost:2375, and override default //./pipe/docker_engine -socat TCP-LISTEN:2375,reuseaddr,fork,bind=127.0.0.1 UNIX-CLIENT:/var/run/docker.sock & -export DOCKER_HOST=tcp://localhost:2375 - -# run wine once before running lifecycle to isolate setup errors -if ! wine cmd /c exit 0 > /tmp/wine-build-init.log 2>&1; then - echo "Wine stack wrapper failed to initialize:" - cat /tmp/wine-build-init.log - exit 1 -fi - -exec wine64 $0.exe $* diff --git a/stacks/wine/run/Dockerfile b/stacks/wine/run/Dockerfile deleted file mode 100755 index 819f9da..0000000 --- a/stacks/wine/run/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -# Based on scratch since lifecycle will export Windows-formatted images that cannot run on Linux but can be inspected and rebased. -FROM scratch - -# Set required CNB information -ARG stack_id -LABEL io.buildpacks.stack.id="${stack_id}" - -# Add any file to create a minimal top layer, required for pack -COPY Dockerfile /top-layer-placeholder From daa3048260127d17bde7ea5a77b5aa15b374acac Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Fri, 14 Jul 2023 07:31:03 +0100 Subject: [PATCH 23/28] Explicitly specify linux/amd64 in stacks Use the linux/amd64 base images on which to build our stacks. Signed-off-by: Aidan Delaney --- stacks/alpine/base/Dockerfile | 2 +- stacks/jammy/base/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stacks/alpine/base/Dockerfile b/stacks/alpine/base/Dockerfile index 9826d01..ad58d93 100755 --- a/stacks/alpine/base/Dockerfile +++ b/stacks/alpine/base/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3 +FROM --platform=linux/amd64 alpine:3 ARG cnb_uid=1000 ARG cnb_gid=1001 diff --git a/stacks/jammy/base/Dockerfile b/stacks/jammy/base/Dockerfile index fbb79de..6606257 100755 --- a/stacks/jammy/base/Dockerfile +++ b/stacks/jammy/base/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:jammy +FROM --platform=linux/amd64 ubuntu:jammy ARG cnb_uid=1000 ARG cnb_gid=1000 From c3f59bef4e407680bf08e85e42cca730a33d7b91 Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Fri, 14 Jul 2023 07:39:19 +0100 Subject: [PATCH 24/28] Drop wine builder We have removed the wine stack, now remove the builder. Signed-off-by: Aidan Delaney --- builders/wine/README.md | 78 -------------------------------------- builders/wine/builder.toml | 19 ---------- 2 files changed, 97 deletions(-) delete mode 100644 builders/wine/README.md delete mode 100644 builders/wine/builder.toml diff --git a/builders/wine/README.md b/builders/wine/README.md deleted file mode 100644 index 1d717ee..0000000 --- a/builders/wine/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# Sample Wine Builder - -A Linux builder that runs a Windows lifecycle using the [Wine emulation layer](https://www.winehq.org/) within a Linux container. Provides an emulated Windows environment for detect/build phases but generates _**unrunnable**_ app images by default. - -Supported `pack build` cases: -* Test basic Windows buildpacks. -* Build and inspect minimal Windows app images. -* Test Windows lifecycle implementations ([example](#Test-Windows-lifecycle-implementations)). -* Build or rebase an app image with a runnable Windows run image ([example](#Build-and-publish-a-runnable-Windows-app-image-to-a-registry)). - -What is **not** supported: -* Creating runnable app images on a local daemon, due to Windows/Linux image formatting differences. -* Using buildpackages, due to Windows/Linux layer formatting differences. - -### Prerequisites -* [Pack](https://buildpacks.io/docs/install-pack/) -* Docker daemon with Linux container support - -### Usage - -#### Creating the builder - -```bash -pack create-builder cnbs/sample-builder:wine --config builder.toml -``` - -#### Build app with builder - -```bash -pack build sample-app --builder cnbs/sample-builder:wine --path ../../apps/batch-script/ -``` - -_Note: After building, app is not runnable but can be inspected with `docker` or `dive`._ - -#### Test Windows lifecycle implementations - ```bash - # Replace with locally built lifecycle tarball - sed -i.bak '$s!uri = .*!uri = "../../../lifecycle/out/lifecycle-v0.0.0+windows.x86-64.tgz"!' builder.toml - - pack create-builder cnbs/sample-builder:wine --config builder.toml - - pack build sample-app --builder cnbs/sample-builder:wine --trust-builder - ``` - -#### Build and publish a runnable Windows app image to a registry - -```bash -myrepo= - -crane copy mcr.microsoft.com/windows/nanoserver:1809-amd64 ${myrepo}/sample-stack-run:nanoserver-1809-wine - -crane mutate ${myrepo}/sample-stack-run:nanoserver-1809-wine --label io.buildpacks.stack.id=io.buildpacks.samples.stacks.wine - -pack build ${myrepo}/sample-app:wine \ - --publish \ - --run-image ${myrepo}/sample-stack-run:nanoserver-1809-wine \ - --builder cnbs/sample-builder:wine \ - --path ../../apps/batch-script/ \ - --trust-builder -``` - -After, with a WCOW daemon -```bash -docker run --rm ${myrepo}/sample-app:wine -## output: Buildpacks.io ASCII banner -``` - -### How it works -* Builder is a Linux image but with a Windows lifecycle. -* Linux build-phase container runs [`lifecycle-wrapper.sh`](../../stacks/wine/build/bin/lifecycle-wrapper.sh) instead of normal Linux `lifecycle` binary. -* Lifecycle wrapper does the following: - * Maps Linux container CNB dirs into Wine environment. - * Sets up Wine dependencies. - * Proxies `/var/run/docker.sock` to `127.0.0.1:2375` and sets `DOCKER_HOST`. - * Execs `wine lifecycle.exe`, using phase name and arguments. -* `lifecycle.exe` runs normally as if in a Windows runtime environment: - * Executes Windows-formatted buildpack executables (`.bat`,`.exe`), profile scripts, etc. - * Exports app images in Windows format to either a registry or local daemon (with `scratch`-based run-image, unless otherwise specified). diff --git a/builders/wine/builder.toml b/builders/wine/builder.toml deleted file mode 100644 index 80d1881..0000000 --- a/builders/wine/builder.toml +++ /dev/null @@ -1,19 +0,0 @@ -# Buildpacks to include in builder -[[buildpacks]] -uri = "../../buildpacks/hello-world-windows" - -# Order used for detection -[[order]] -[[order.group]] -id = "samples/hello-world-windows" -version = "0.0.1" - -# Stack that will be used by the builder -[stack] -id = "io.buildpacks.samples.stacks.wine" -run-image = "cnbs/sample-stack-run:wine" -build-image = "cnbs/sample-stack-build:wine" - -# Requires explicit Windows lifecycle to override pack's Linux default -[lifecycle] -uri = "https://github.com/buildpacks/lifecycle/releases/download/v0.16.0/lifecycle-v0.16.0+windows.x86-64.tgz" From 1f21174b72267f42f27508629ebf953dfb8d852a Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Fri, 14 Jul 2023 07:47:07 +0100 Subject: [PATCH 25/28] Remove wine build references Do not add the wine stack to buildpacks. Remove calls to build and deploy wine. Signed-off-by: Aidan Delaney --- .github/workflows/build-and-deploy.yml | 6 +++--- apps/batch-script/batch-script-buildpack/buildpack.toml | 3 --- buildpacks/hello-moon-windows/buildpack.toml | 3 --- buildpacks/hello-world-windows/buildpack.toml | 3 --- 4 files changed, 3 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 6bf2c73..38e0cb2 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -40,7 +40,7 @@ jobs: ./pack config experimental true ./pack config pull-policy always - name: Build - run: PACK_CMD=./pack make build-linux build-wine + run: PACK_CMD=./pack make build-linux - uses: azure/docker-login@v1 if: ${{ github.ref == 'refs/heads/main' }} with: @@ -48,9 +48,9 @@ jobs: password: ${{ secrets.REGISTRY_PASSWORD }} - name: Deploy if: ${{ github.ref == 'refs/heads/main' }} - run: make deploy-linux deploy-wine + run: make deploy-linux - name: Clean up - run: make clean-linux clean-wine + run: make clean-linux build-deploy-windows: strategy: matrix: diff --git a/apps/batch-script/batch-script-buildpack/buildpack.toml b/apps/batch-script/batch-script-buildpack/buildpack.toml index 144b88c..5a6a452 100644 --- a/apps/batch-script/batch-script-buildpack/buildpack.toml +++ b/apps/batch-script/batch-script-buildpack/buildpack.toml @@ -10,6 +10,3 @@ name = "Batch Script Buildpack" # Stacks that the buildpack will work with [[stacks]] id = "io.buildpacks.samples.stacks.nanoserver-1809" - -[[stacks]] -id = "io.buildpacks.samples.stacks.wine" diff --git a/buildpacks/hello-moon-windows/buildpack.toml b/buildpacks/hello-moon-windows/buildpack.toml index e861522..4a241ef 100644 --- a/buildpacks/hello-moon-windows/buildpack.toml +++ b/buildpacks/hello-moon-windows/buildpack.toml @@ -20,6 +20,3 @@ id = "io.buildpacks.samples.stacks.dotnet-framework-1809" [[stacks]] id = "io.buildpacks.samples.stacks.dotnet-framework-2022" - -[[stacks]] -id = "io.buildpacks.samples.stacks.wine" diff --git a/buildpacks/hello-world-windows/buildpack.toml b/buildpacks/hello-world-windows/buildpack.toml index 3e16cc5..51d30f0 100644 --- a/buildpacks/hello-world-windows/buildpack.toml +++ b/buildpacks/hello-world-windows/buildpack.toml @@ -16,6 +16,3 @@ id = "io.buildpacks.samples.stacks.nanoserver-1809" [[stacks]] id = "io.buildpacks.samples.stacks.dotnet-framework-2022" - -[[stacks]] -id = "io.buildpacks.samples.stacks.wine" From a9f0be1727bc2fafcb23ea1bb2ea1cac2db0b3e8 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Tue, 25 Jul 2023 12:05:07 -0400 Subject: [PATCH 26/28] Pin to pack 0.30.0-pre3 Signed-off-by: Natalie Arellano --- .github/workflows/build-and-deploy.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 38e0cb2..254ec16 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -22,10 +22,12 @@ jobs: with: github-token: ${{secrets.GITHUB_TOKEN}} result-encoding: string + # FIXME: Revert back to 'getLatestRelease' when pack 0.30.0 is released script: | - return github.rest.repos.getLatestRelease({ + return github.rest.repos.getReleaseByTag({ owner: "buildpacks", - repo: "pack" + repo: "pack", + tag: "v0.30.0-pre3" }).then(result => { return result.data.assets .filter(a => a.name.includes("-linux.tgz")) From 16890c590dbccd91c8ff5e2fbb88b870b0b9ea7b Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Tue, 25 Jul 2023 12:17:24 -0400 Subject: [PATCH 27/28] Bump CI Signed-off-by: Natalie Arellano --- .github/workflows/build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 254ec16..321c43d 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -22,7 +22,7 @@ jobs: with: github-token: ${{secrets.GITHUB_TOKEN}} result-encoding: string - # FIXME: Revert back to 'getLatestRelease' when pack 0.30.0 is released + # FIXME: Revert back to 'getLatestRelease' when pack v0.30.0 is released script: | return github.rest.repos.getReleaseByTag({ owner: "buildpacks", From 8fa4447e65145e5a727d203103c554bce2b085d6 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Tue, 25 Jul 2023 12:30:21 -0400 Subject: [PATCH 28/28] Make web the default process for Java (to fix CircleCI) Signed-off-by: Natalie Arellano --- buildpacks/java-maven/bin/build | 1 + 1 file changed, 1 insertion(+) diff --git a/buildpacks/java-maven/bin/build b/buildpacks/java-maven/bin/build index 227f632..40793f2 100755 --- a/buildpacks/java-maven/bin/build +++ b/buildpacks/java-maven/bin/build @@ -128,6 +128,7 @@ for jar_file in $(find "$target_dir" -maxdepth 1 -name "*.jar" -type f); do [[processes]] type = "web" command = ["java", "-jar", "${jar_file}"] +default = true EOL break; done \ No newline at end of file