From f208b9c6627a836629455e1536a3d00aa4d2f955 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Wed, 12 Oct 2022 15:19:53 -0400 Subject: [PATCH 1/4] Add fixtures for testing phases 1 and 2 of Dockerfiles Signed-off-by: Natalie Arellano --- builders/alpine/builder.toml | 33 +++++++++++++++++++++- buildpacks/hello-extensions/bin/build | 16 +++++++++++ buildpacks/hello-extensions/bin/detect | 16 +++++++++++ buildpacks/hello-extensions/buildpack.toml | 14 +++++++++ extensions/curl/bin/detect | 12 ++++++++ extensions/curl/bin/generate | 10 +++++++ extensions/curl/extension.toml | 10 +++++++ extensions/tree/bin/detect | 12 ++++++++ extensions/tree/bin/generate | 14 +++++++++ extensions/tree/extension.toml | 10 +++++++ stacks/alpine/run/curl.Dockerfile | 20 +++++++++++++ 11 files changed, 166 insertions(+), 1 deletion(-) create mode 100755 buildpacks/hello-extensions/bin/build create mode 100755 buildpacks/hello-extensions/bin/detect create mode 100644 buildpacks/hello-extensions/buildpack.toml create mode 100755 extensions/curl/bin/detect create mode 100755 extensions/curl/bin/generate create mode 100644 extensions/curl/extension.toml create mode 100755 extensions/tree/bin/detect create mode 100755 extensions/tree/bin/generate create mode 100644 extensions/tree/extension.toml create mode 100644 stacks/alpine/run/curl.Dockerfile diff --git a/builders/alpine/builder.toml b/builders/alpine/builder.toml index 232975c1..58198d7a 100644 --- a/builders/alpine/builder.toml +++ b/builders/alpine/builder.toml @@ -12,7 +12,28 @@ uri = "../../buildpacks/kotlin-gradle" [[buildpacks]] uri = "docker://cnbs/sample-package:hello-universe" -# Order used for detection +[[buildpacks]] +id = "samples/hello-extensions" +version = "0.0.1" +uri = "../../buildpacks/hello-extensions" + +# Extensions to include in builder +[[extensions]] +id = "samples/tree" +version = "0.0.1" +uri = "../../extensions/tree" + +[[extensions]] +id = "samples/curl" +version = "0.0.1" +uri = "../../extensions/curl" + +# Order used for detection (buildpacks) +[[order]] +[[order.group]] +id = "samples/hello-extensions" +version = "0.0.1" + [[order]] [[order.group]] id = "samples/java-maven" @@ -28,6 +49,16 @@ version = "0.0.1" id = "samples/hello-universe" version = "0.0.1" +# Order used for detection (extensions) +[[order-extensions]] +[[order-extensions.group]] +id = "samples/tree" +version = "0.0.1" + +[[order-extensions.group]] +id = "samples/curl" +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 new file mode 100755 index 00000000..3795acb8 --- /dev/null +++ b/buildpacks/hello-extensions/bin/build @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -eo pipefail + +echo "---> Hello Extensions Buildpack" + +tree --version + +layers_dir=$1 + +cat >> "${layers_dir}/launch.toml" <> "${plan_path}" <> "${plan_path}" <> "${output_dir}/run.Dockerfile" <> "${plan_path}" <> "${output_dir}/build.Dockerfile" < Date: Wed, 7 Dec 2022 14:39:17 -0500 Subject: [PATCH 2/4] Bump CI Signed-off-by: Natalie Arellano --- extensions/curl/extension.toml | 2 +- extensions/tree/extension.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/curl/extension.toml b/extensions/curl/extension.toml index 531cd684..a5c1b8e2 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 `curlimages/curl:latest`" diff --git a/extensions/tree/extension.toml b/extensions/tree/extension.toml index 1368a72d..1934deb6 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 at build time" From 924fafb2e795700a6ea8dd022e7c6de5ad34a1fa Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Wed, 7 Dec 2022 15:38:11 -0500 Subject: [PATCH 3/4] Enable experimental features on pack In order to create a builder with image extensions Signed-off-by: Natalie Arellano --- .github/workflows/build-and-deploy.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 7ffef065..c96429da 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -35,6 +35,10 @@ jobs: run: | curl -s -L -o pack.tgz ${{ steps.pack-download-url.outputs.result }} tar -xvf pack.tgz + - name: Set config needed for image extensions + run: | + ./pack config experimental true + ./pack config pull-policy always - name: Build run: PACK_CMD=./pack make build-linux build-wine - uses: azure/docker-login@v1 From f2091f6711f0929553aa5f5559af2b8b5d8ffbf4 Mon Sep 17 00:00:00 2001 From: Natalie Arellano Date: Wed, 7 Dec 2022 16:08:26 -0500 Subject: [PATCH 4/4] Remove --pull-policy=never from alpine builds The alpine builder contains image extensions, and we require the pull policy to be 'always' (so that we can get the manifest for the builder in the registry) Signed-off-by: Natalie Arellano --- Makefile | 62 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/Makefile b/Makefile index 21fb37af..d4538547 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PACK_FLAGS?=--pull-policy=never +PULL_POLICY_NEVER?=--pull-policy=never PACK_BUILD_FLAGS?=--trust-builder PACK_CMD?=pack @@ -28,55 +28,55 @@ build-linux-builders: build-builder-alpine build-builder-bionic build-builder-alpine: build-linux-packages build-sample-root @echo "> Building 'alpine' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:alpine --config $(SAMPLES_ROOT)/builders/alpine/builder.toml $(PACK_FLAGS) + $(PACK_CMD) builder create cnbs/sample-builder:alpine --config $(SAMPLES_ROOT)/builders/alpine/builder.toml $(PULL_POLICY_NEVER) build-builder-bionic: build-linux-packages build-sample-root @echo "> Building 'bionic' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:bionic --config $(SAMPLES_ROOT)/builders/bionic/builder.toml $(PACK_FLAGS) + $(PACK_CMD) builder create cnbs/sample-builder:bionic --config $(SAMPLES_ROOT)/builders/bionic/builder.toml $(PULL_POLICY_NEVER) build-linux-buildpacks: build-buildpacks-alpine build-buildpacks-bionic build-buildpacks-alpine: build-sample-root @echo "> Creating 'hello-moon' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-moon-app:alpine -v --builder cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_BUILD_FLAGS) @echo "> Creating 'hello-processes' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-processes-app:alpine -v --builder cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-processes-app:alpine -v --builder cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes $(PACK_BUILD_FLAGS) @echo "> Creating 'hello-world' app using 'alpine' builder..." - $(PACK_CMD) build sample-hello-world-app:alpine -v --builder cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-world-app:alpine -v --builder cnbs/sample-builder:alpine --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world $(PACK_BUILD_FLAGS) @echo "> Creating 'java-maven' app using 'alpine' builder..." - $(PACK_CMD) build sample-java-maven-app:alpine -v --builder cnbs/sample-builder:alpine --path apps/java-maven $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-java-maven-app:alpine -v --builder cnbs/sample-builder:alpine --path apps/java-maven $(PACK_BUILD_FLAGS) @echo "> Creating 'kotlin-gradle' app using 'alpine' builder..." - $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder cnbs/sample-builder:alpine --path apps/kotlin-gradle $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-kotlin-gradle-app:alpine -v --builder cnbs/sample-builder:alpine --path apps/kotlin-gradle $(PACK_BUILD_FLAGS) build-buildpacks-bionic: build-sample-root @echo "> Creating 'hello-moon' app using 'bionic' builder..." - $(PACK_CMD) build sample-hello-moon-app:bionic -v --builder cnbs/sample-builder:bionic --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-moon-app:bionic -v --builder cnbs/sample-builder:bionic --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) @echo "> Creating 'hello-processes' app using 'bionic' builder..." - $(PACK_CMD) build sample-hello-processes-app:bionic -v --builder cnbs/sample-builder:bionic --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-processes-app:bionic -v --builder cnbs/sample-builder:bionic --buildpack $(SAMPLES_ROOT)/buildpacks/hello-processes $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) @echo "> Creating 'hello-world' app using 'bionic' builder..." - $(PACK_CMD) build sample-hello-world-app:bionic -v --builder cnbs/sample-builder:bionic --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-world-app:bionic -v --builder cnbs/sample-builder:bionic --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) @echo "> Creating 'java-maven' app using 'bionic' builder..." - $(PACK_CMD) build sample-java-maven-app:bionic -v --builder cnbs/sample-builder:bionic --path apps/java-maven $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-java-maven-app:bionic -v --builder cnbs/sample-builder:bionic --path apps/java-maven $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) @echo "> Creating 'kotlin-gradle' app using 'bionic' builder..." - $(PACK_CMD) build sample-kotlin-gradle-app:bionic -v --builder cnbs/sample-builder:bionic --path apps/kotlin-gradle $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-kotlin-gradle-app:bionic -v --builder cnbs/sample-builder:bionic --path apps/kotlin-gradle $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) @echo "> Creating 'ruby-bundler' app using 'bionic' builder..." - $(PACK_CMD) build sample-ruby-bundler-app:bionic -v --builder cnbs/sample-builder:bionic --path apps/ruby-bundler $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-ruby-bundler-app:bionic -v --builder cnbs/sample-builder:bionic --path apps/ruby-bundler $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) build-linux-packages: build-sample-root @echo "> Creating 'hello-world' buildpack package" - $(PACK_CMD) buildpack package cnbs/sample-package:hello-world --config $(SAMPLES_ROOT)/packages/hello-world/package.toml $(PACK_FLAGS) + $(PACK_CMD) buildpack package cnbs/sample-package:hello-world --config $(SAMPLES_ROOT)/packages/hello-world/package.toml $(PULL_POLICY_NEVER) @echo "> Creating 'hello-universe' buildpack package" - $(PACK_CMD) buildpack package cnbs/sample-package:hello-universe --config $(SAMPLES_ROOT)/packages/hello-universe/package.toml $(PACK_FLAGS) + $(PACK_CMD) buildpack package cnbs/sample-package:hello-universe --config $(SAMPLES_ROOT)/packages/hello-universe/package.toml $(PULL_POLICY_NEVER) deploy-linux: deploy-linux-stacks deploy-linux-packages deploy-linux-builders @@ -156,18 +156,18 @@ 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 $(PACK_FLAGS) + $(PACK_CMD) create-builder 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 $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(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 $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(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 $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(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 @@ -233,45 +233,45 @@ build-stack-dotnet-framework-2022: build-builder-nanoserver-1809: build-windows-packages @echo "> Building 'nanoserver-1809' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:nanoserver-1809 --config $(SAMPLES_ROOT)/builders/nanoserver-1809/builder.toml $(PACK_FLAGS) + $(PACK_CMD) builder create cnbs/sample-builder:nanoserver-1809 --config $(SAMPLES_ROOT)/builders/nanoserver-1809/builder.toml $(PULL_POLICY_NEVER) build-builder-dotnet-framework-1809: build-windows-packages @echo "> Building 'dotnet-framework-1809' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:dotnet-framework-1809 --config $(SAMPLES_ROOT)/builders/dotnet-framework-1809/builder.toml $(PACK_FLAGS) + $(PACK_CMD) builder create cnbs/sample-builder:dotnet-framework-1809 --config $(SAMPLES_ROOT)/builders/dotnet-framework-1809/builder.toml $(PULL_POLICY_NEVER) build-builder-dotnet-framework-2004: build-windows-packages @echo "> Building 'dotnet-framework-2004' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:dotnet-framework-2004 --config $(SAMPLES_ROOT)/builders/dotnet-framework-2004/builder.toml $(PACK_FLAGS) + $(PACK_CMD) builder create cnbs/sample-builder:dotnet-framework-2004 --config $(SAMPLES_ROOT)/builders/dotnet-framework-2004/builder.toml $(PULL_POLICY_NEVER) build-builder-dotnet-framework-2022: build-windows-packages @echo "> Building 'dotnet-framework-2022' builder..." - $(PACK_CMD) builder create cnbs/sample-builder:dotnet-framework-2022 --config $(SAMPLES_ROOT)/builders/dotnet-framework-2022/builder.toml $(PACK_FLAGS) + $(PACK_CMD) builder create cnbs/sample-builder:dotnet-framework-2022 --config $(SAMPLES_ROOT)/builders/dotnet-framework-2022/builder.toml $(PULL_POLICY_NEVER) build-buildpacks-nanoserver-1809: build-sample-root @echo "> Creating 'hello-moon-windows' app using 'nanoserver-1809' builder..." - $(PACK_CMD) build sample-hello-moon-windows-app:nanoserver-1809 -v --builder cnbs/sample-builder:nanoserver-1809 --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world-windows --buildpack $(SAMPLES_ROOT)/buildpacks/hello-moon-windows $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-moon-windows-app:nanoserver-1809 -v --builder cnbs/sample-builder:nanoserver-1809 --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 'nanoserver-1809' builder..." - $(PACK_CMD) build sample-hello-world-windows-app:nanoserver-1809 -v --builder cnbs/sample-builder:nanoserver-1809 --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world-windows $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-hello-world-windows-app:nanoserver-1809 -v --builder cnbs/sample-builder:nanoserver-1809 --buildpack $(SAMPLES_ROOT)/buildpacks/hello-world-windows $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) build-buildpacks-dotnet-framework-1809: build-sample-root @echo "> Creating 'dotnet-framework' app using 'dotnet-framework-1809' builder..." - $(PACK_CMD) build sample-dotnet-framework-app:dotnet-framework-1809 -v --builder cnbs/sample-builder:dotnet-framework-1809 --buildpack $(SAMPLES_ROOT)/buildpacks/dotnet-framework --path apps/aspnet $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-dotnet-framework-app:dotnet-framework-1809 -v --builder cnbs/sample-builder:dotnet-framework-1809 --buildpack $(SAMPLES_ROOT)/buildpacks/dotnet-framework --path apps/aspnet $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) build-buildpacks-dotnet-framework-2004: build-sample-root @echo "> Creating 'dotnet-framework' app using 'dotnet-framework-2004' builder..." - $(PACK_CMD) build sample-dotnet-framework-app:dotnet-framework-2004 -v --builder cnbs/sample-builder:dotnet-framework-2004 --buildpack $(SAMPLES_ROOT)/buildpacks/dotnet-framework --path apps/aspnet $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-dotnet-framework-app:dotnet-framework-2004 -v --builder cnbs/sample-builder:dotnet-framework-2004 --buildpack $(SAMPLES_ROOT)/buildpacks/dotnet-framework --path apps/aspnet $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) build-buildpacks-dotnet-framework-2022: build-sample-root @echo "> Creating 'dotnet-framework' app using 'dotnet-framework-2022' builder..." - $(PACK_CMD) build sample-dotnet-framework-app:dotnet-framework-2022 -v --builder cnbs/sample-builder:dotnet-framework-2022 --buildpack $(SAMPLES_ROOT)/buildpacks/dotnet-framework --path apps/aspnet $(PACK_FLAGS) $(PACK_BUILD_FLAGS) + $(PACK_CMD) build sample-dotnet-framework-app:dotnet-framework-2022 -v --builder cnbs/sample-builder:dotnet-framework-2022 --buildpack $(SAMPLES_ROOT)/buildpacks/dotnet-framework --path apps/aspnet $(PULL_POLICY_NEVER) $(PACK_BUILD_FLAGS) build-windows-packages: build-sample-root @echo "> Creating 'hello-world-windows' buildpack package" - $(PACK_CMD) buildpack package cnbs/sample-package:hello-world-windows --config $(SAMPLES_ROOT)/packages/hello-world-windows/package.toml $(PACK_FLAGS) + $(PACK_CMD) buildpack package cnbs/sample-package:hello-world-windows --config $(SAMPLES_ROOT)/packages/hello-world-windows/package.toml $(PULL_POLICY_NEVER) @echo "> Creating 'hello-universe-windows' buildpack package" - $(PACK_CMD) buildpack package cnbs/sample-package:hello-universe-windows --config $(SAMPLES_ROOT)/packages/hello-universe-windows/package.toml $(PACK_FLAGS) + $(PACK_CMD) buildpack package cnbs/sample-package:hello-universe-windows --config $(SAMPLES_ROOT)/packages/hello-universe-windows/package.toml $(PULL_POLICY_NEVER) deploy-windows-packages: @echo "> Deploying windows packages..."