Skip to content

Instantly share code, notes, and snippets.

@schneems
Created January 13, 2025 16:29
Show Gist options
  • Save schneems/72a67cd8e9267f4a3ffce2798ad18db0 to your computer and use it in GitHub Desktop.
Save schneems/72a67cd8e9267f4a3ffce2798ad18db0 to your computer and use it in GitHub Desktop.

Echo path bash buildpack

$ cat echo-path-buildpack/bin/build
#!/usr/bin/env bash

set -euo pipefail

layers_dir="$1"
env_dir="$2/env"
plan_path="$3"

echo "PATH=${PATH}"

exit 0

Write PATH bash buildpack

$ cat first-path-buildpack/bin/build
#!/usr/bin/env bash

set -euo pipefail

layers_dir="$1"
env_dir="$2/env"
plan_path="$3"

create_layer() {
  local layer_dir="$1"
  mkdir -p "$layer_dir/bin"
  mkdir -p "$layer_dir/env"
  touch "$layer_dir/bin/lol"
  chmod +x "$layer_dir/bin/lol"
  echo -e '[types]\nlaunch = true\nbuild = true' > "$layer_dir.toml"
  echo -n ":" > "$layer_dir/env/PATH.delim"
}

layer_dir="$CNB_LAYERS_DIR/0001_first"
create_layer "$layer_dir"
echo -n "/manually_set_path_prepend/bin" > "$layer_dir/env/PATH.prepend"

exit 0

Bash only behavior

$ pack build debugging-app --path . --buildpack ./first-path-buildpack --buildpack ./echo-path-buildpack
24: Pulling from heroku/builder
Digest: sha256:770cbacea87ae3e06c3773723015b03706f98f78b31be4fd1b963c9ba861eb04
Status: Image is up to date for heroku/builder:24
24: Pulling from heroku/heroku
Digest: sha256:9483dc324ebd0615f936808da8da14c401c790f96b13a331208c4513a57c2051
Status: Image is up to date for heroku/heroku:24
Warning: Builder is trusted but additional modules were added; using the untrusted (5 phases) build flow
0.20.5: Pulling from buildpacksio/lifecycle
Digest: sha256:3274fe28594f484240fc3f17e46b7b45e304830e544dcdd82ce19472d159ef71
Status: Image is up to date for buildpacksio/lifecycle:0.20.5
===> ANALYZING
[analyzer] Restoring data for SBOM from previous image
===> DETECTING
[detector] examples/first-path 0.0.1
[detector] examples/echo-path  0.0.1
===> RESTORING
===> BUILDING
[builder] PATH=/manually_set_path_prepend/bin:/layers/examples_first-path/0001_first/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
===> EXPORTING
[exporter] Adding layer 'examples/first-path:0001_first'
[exporter] Reusing layer 'buildpacksio/lifecycle:launch.sbom'
[exporter] Added 1/1 app layer(s)
[exporter] Reusing layer 'buildpacksio/lifecycle:launcher'
[exporter] Reusing layer 'buildpacksio/lifecycle:config'
[exporter] Adding label 'io.buildpacks.lifecycle.metadata'
[exporter] Adding label 'io.buildpacks.build.metadata'
[exporter] Adding label 'io.buildpacks.project.metadata'
[exporter] no default process type
[exporter] Saving debugging-app...
[exporter] *** Images (7aeb81fb1a9c):
[exporter]       debugging-app
Successfully built image debugging-app
$ docker run --rm -it debugging-app "bash"
heroku@ceca80e1bab8:/workspace$ echo $PATH
/manually_set_path_prepend/bin:/layers/examples_first-path/0001_first/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment