Compare commits

...

46 Commits
0.2.3 ... main

Author SHA1 Message Date
Juan Bustamante 2f19abaa19
Merge pull request #51 from buildpacks/update-version
Update default version of @orb.yml
2023-11-24 08:42:09 -05:00
Juan Bustamante 530701a74e
Merge branch 'main' into update-version
Signed-off-by: Juan Bustamante <jbustamante@vmware.com>
2023-11-24 08:41:55 -05:00
Juan Bustamante a5f67de09e
Merge pull request #52 from AidanDelaney/trust-builder
Trust the build by default
2023-11-24 08:40:47 -05:00
Juan Bustamante 3155c35c0d
Merge pull request #53 from AidanDelaney/update-base-image
Update machine image and pack version
2023-11-24 08:40:10 -05:00
buildpack-bot a1b0f2d6a5 Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2023-11-14 20:21:40 +00:00
Joe Kutner 5eb4f17c7c
Merge pull request #54 from edmorley/update-example-builder-image
Update examples to use a supported builder image
2023-10-16 18:33:19 -05:00
Ed Morley 619e3e2dd4
Update examples to use a supported builder image
The `heroku/buildpacks:18` builder image has been EOLed and aborts
with an error message.

The examples have been updated to use the newer `heroku/builder:22`.

For all available builder image variants, see:
https://github.com/heroku/cnb-builder-images/blob/main/README.md

Signed-off-by: Ed Morley <501702+edmorley@users.noreply.github.com>
2023-10-03 14:05:21 +01:00
Aidan Delaney f0578ebd4b Update machine image and pack version
Update to using a modern Ubuntu base image and use latest `pack`
version by default

Signed-off-by: Aidan Delaney <adelaney21@bloomberg.net>
2023-06-08 05:50:30 +01:00
Aidan Delaney 0cddf0d5d6 Trust the build by default
`pack` should trust the builder by default

Signed-off-by: Aidan Delaney <adelaney21@bloomberg.net>
2023-04-09 18:36:22 +01:00
Javier Romero 913be197c6
Merge pull request #48 from buildpacks/update-version
Update default version of @orb.yml
2022-06-03 16:30:32 -05:00
buildpack-bot cc391d52f9 Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2022-05-06 13:37:34 +00:00
Javier Romero de7c5df218
Merge pull request #47 from buildpacks/update-version
Update default version of @orb.yml
2022-04-23 12:30:45 -05:00
buildpack-bot 8c2d84ba38 Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2022-04-22 15:36:26 +00:00
Javier Romero 17d3f29875
Merge pull request #46 from edmorley/curl-retry-timeouts
Add retries, timeouts and status code checking to curl usages
2022-04-14 12:12:02 -05:00
Ed Morley fff3f220a2
Add retries, timeouts and status code checking to curl usages
To improve CI reliability in the case of transient network/GitHub/CDN issues.

Closes #45.

Signed-off-by: Ed Morley <501702+edmorley@users.noreply.github.com>
2022-04-08 20:10:43 +01:00
Javier Romero 46ec76538d
Merge pull request #44 from buildpacks/update-version
Update default version of @orb.yml
2022-04-06 11:11:04 -05:00
buildpack-bot 87dad6af6a Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2022-04-02 18:22:50 +00:00
Javier Romero 2246e4a453
Merge pull request #42 from buildpacks/update-version
Update default version of @orb.yml
2022-02-14 14:19:52 -06:00
buildpack-bot 02c8c71447 Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2022-02-10 18:28:29 +00:00
Javier Romero 3727a921a7
Merge pull request #41 from buildpacks/update-version
Update default version of @orb.yml
2021-11-08 11:21:50 -06:00
Javier Romero 7dd27675eb Fix yamllint error + add configuration
Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-11-08 11:19:08 -06:00
buildpack-bot 7710ecaa6a Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2021-11-08 17:07:49 +00:00
Javier Romero 50b35365e1
Merge pull request #38 from buildpacks/update-version
Update default version of @orb.yml
2021-10-20 08:57:57 -07:00
Javier Romero 0c86df4f76
Merge pull request #39 from importhuman/update-default-version
Add workflow_dispatch to allow manual trigger
2021-09-18 08:13:50 -05:00
Ujjwal Goyal a65fef7c5d Fix spacing in update-version.yml
Signed-off-by: Ujjwal Goyal <importujjwal@gmail.com>
2021-09-18 18:23:36 +05:30
Ujjwal Goyal 47b249190b Add workflow_dispatch to allow manual trigger
Signed-off-by: Ujjwal Goyal <importujjwal@gmail.com>
2021-09-18 18:19:13 +05:30
buildpack-bot 42e38e4e5d Update version to latest release of buildpacks/pack
Signed-off-by: GitHub <noreply@github.com>
2021-09-18 00:06:58 +00:00
Javier Romero d7368a57c9
Merge pull request #37 from importhuman/update-default-version
Fix update-version.yml, update pack in @orb.yml
2021-09-17 14:05:13 -05:00
Ujjwal Goyal 94eb5b3ab1 Fix update-version.yml, update pack in @orb.yml
Signed-off-by: Ujjwal Goyal <importujjwal@gmail.com>
2021-09-17 17:22:00 +05:30
Javier Romero 7cfdb28c63
Merge pull request #36 from importhuman/update-default-version
Fix update-version.yml
2021-08-27 14:28:53 -05:00
Ujjwal Goyal 1bcabd71dd Fix update-version.yml
Signed-off-by: Ujjwal Goyal <importujjwal@gmail.com>
2021-08-25 23:39:41 +05:30
Javier Romero 1b51d3b608
Merge pull request #35 from importhuman/update-default-version
Remove -f flag from sed script
2021-08-20 11:29:59 -05:00
Ujjwal Goyal 4bae602fd7 Remove -f flag from sed script
Signed-off-by: Ujjwal Goyal <importujjwal@gmail.com>
2021-08-20 11:30:50 +05:30
Javier Romero 1952baeaa9
Merge pull request #34 from importhuman/update-default-version
Add workflow to update default pack version
2021-08-19 14:25:32 -05:00
Ujjwal Goyal bf300f4744 Add workflow to update default pack version
Signed-off-by: Ujjwal Goyal <importujjwal@gmail.com>
2021-08-19 22:36:36 +05:30
David Freilich ddeaa001d0
Merge pull request #33 from edmorley/update-default-pack
Update default Pack version from 0.18.1 to 0.20.0
2021-08-13 02:27:01 +03:00
Ed Morley 24def30fbd
Update default Pack version from 0.18.1 to 0.20.0
https://github.com/buildpacks/pack/releases/tag/v0.19.0
https://github.com/buildpacks/pack/releases/tag/v0.20.0
Signed-off-by: Ed Morley <501702+edmorley@users.noreply.github.com>
2021-08-02 11:46:09 +01:00
Javier Romero 1abdea7406
Merge pull request #32 from buildpacks/pack-tags
Add support for multiple tags and buildpacks declarations
2021-05-25 00:29:30 -05:00
Javier Romero cf44fd8451 Add support for multiple tags and buildpacks declarations
Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-05-05 06:32:15 -05:00
Javier Romero f4b67a4f4f Make buildpack flag plural supporting multiple buildpacks
Also rearchitected to support testing.

Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-05-05 05:44:25 -05:00
Javier Romero 00c283d2da
Merge pull request #31 from buildpacks/unit-tests
Added unit tests for save-image-to-workspace command
2021-05-04 06:59:11 -05:00
Javier Romero dbc9e301eb CI: Update orb-tools version
Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-05-04 06:52:57 -05:00
Javier Romero 11e6612ec6 CI: Use orb pack
Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-05-04 06:50:58 -05:00
Javier Romero 8f8745e69d Merge branch 'release/0.2.3' into unit-tests 2021-05-04 06:47:27 -05:00
Javier Romero 9a13a52644 Add .editorconfig
Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-05-04 06:42:41 -05:00
Javier Romero 0634d3a885 Added unit tests for save-image-to-workspace command
Signed-off-by: Javier Romero <rjavier@vmware.com>
2021-05-04 06:34:58 -05:00
17 changed files with 1749 additions and 93 deletions

View File

@ -2,7 +2,7 @@ version: 2.1
# Orb depedencies
orbs:
orb-tools: circleci/orb-tools@9.1.0
orb-tools: circleci/orb-tools@10.0.3
## used for integration tests
buildpacks: buildpacks/pack@<<pipeline.parameters.dev-orb-version>>
@ -24,9 +24,17 @@ parameters:
# Jobs to use in workflows
jobs:
test:
machine:
image: ubuntu-2204:2023.04.2
steps:
- checkout
- run:
name: Run unit tests
command: make test
github-release:
machine:
image: ubuntu-2004:202010-01
image: ubuntu-2204:2023.04.2
steps:
- run:
name: Install releaser
@ -75,16 +83,31 @@ workflows:
when: << pipeline.parameters.run-integration-tests >>
jobs:
- buildpacks/build:
working-directory: samples/apps/ruby-bundler
name: "Minimal"
builder: cnbs/sample-builder:bionic
image-name: test-image
builder: heroku/buildpacks:18
working-directory: samples/apps/ruby-bundler
after-checkout:
- run: git clone --depth=1 https://github.com/buildpacks/samples.git samples
- buildpacks/build:
name: "All Options"
builder: cnbs/sample-builder:bionic
image-name: test-image
working-directory: samples/apps/ruby-bundler
buildpacks: samples/ruby-bundler
env-vars: "ENV_1=VAL 1;ENV_2=VAL 2"
tags: "another-image:2"
image-file: "exported-image.tgz"
version: "0.18.1"
after-checkout:
- run: git clone --depth=1 https://github.com/buildpacks/samples.git samples
validate-dev:
unless: << pipeline.parameters.run-integration-tests >>
jobs:
- orb-tools/lint
- orb-tools/pack
- test
- orb-tools/pack:
use-orb-pack: true
- orb-tools/publish-dev:
orb-name: buildpacks/pack
requires:
@ -112,6 +135,7 @@ workflows:
unless: << pipeline.parameters.run-integration-tests >>
jobs:
- orb-tools/pack:
use-orb-pack: true
filters:
branches:
ignore: /.*/

8
.editorconfig Normal file
View File

@ -0,0 +1,8 @@
[*]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
[Makefile]
indent_style = tab

27
.github/workflows/update-version.yml vendored Normal file
View File

@ -0,0 +1,27 @@
name: update-pack-version
on:
repository_dispatch:
types:
- pack-release
workflow_dispatch:
jobs:
update-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Update pack version of buildpacks/pack-orb/src/@orb.yml on new pack release
run: |
NEW_VERSION=$(curl -s -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/buildpacks/pack/releases/latest | jq .tag_name -r | cut -c 2-)
sed -i 's/default: [0-9]\{1,\}.[0-9]\{1,\}.[0-9]\{1,\}/default: '"${NEW_VERSION}"'/g' src/@orb.yml
- name: Create pull request
uses: peter-evans/create-pull-request@v3.10.0
with:
token: ${{ secrets.DISTRIBUTION_GITHUB_TOKEN }}
commit-message: Update version to latest release of buildpacks/pack
title: Update default version of @orb.yml
body: Updates default version of @orb.yml to reflect release changes in buildpacks/pack
branch: update-version
base: main
signoff: true

6
.yamllint Normal file
View File

@ -0,0 +1,6 @@
extends: relaxed
rules:
line-length:
max: 200
allow-non-breakable-inline-mappings: true

View File

@ -12,4 +12,12 @@
```
make lint
```
```
### Testing
Tests are structured as recommended by the [Orb Project Template](https://github.com/CircleCI-Public/Orb-Project-Template/tree/master/src/tests). They use [shunit2](https://github.com/kward/shunit2) instead of [BATS-Core](https://github.com/bats-core/bats-core).
```
make test
```

View File

@ -1,11 +1,28 @@
BRANCH?=$(shell git branch --show-current)
VERSION?=$(shell echo $(BRANCH) | grep "^release" | sed 's;release\/\(.*\);\1;')
.PHONY: validate
.PHONY: publish-dev
publish-dev:
@echo "> Publishing new dev:alpha version..."
circleci orb pack src/ | circleci orb publish - buildpacks/pack@dev:alpha
.PHONY: lint
lint:
@echo "NOTE: If changes have been make to .circleci/config.yml "\
"that depend on changes to the orb. It may require for the 'dev:alpha' "\
"version to be updated.\n\nYou may run 'publish-dev' to do so (if permissions allow).\n"
@echo "> Validating orb..."
circleci orb pack src/ | circleci orb validate -
@echo "> Validating CI config..."
circleci config validate .circleci/config.yml
.PHONE: test
test:
@echo "> Running tests..."
cd ./src/tests/; find . -type f -name "*_test.sh" -exec {} \;
.PHONY: future-version
future-version:
@echo "> Determining future version..."
@ -26,4 +43,4 @@ generate-changelog:
@awk 'n>=3 { print a[n%3] } { a[n++%3]=$$0 }' "$(TMP_DIR)/CHANGELOG.md" > CHANGELOG.md
@echo "> CHANGELOG:"
@cat CHANGELOG.md
@cat CHANGELOG.md

View File

@ -11,32 +11,36 @@ jobs:
machine:
image: << parameters.executor-image >>
parameters:
builder:
type: string
description: Builder image name to use.
image-name:
type: string
description: Image name (aka tag) of the app image to be produced.
working-directory:
type: string
description: The directory where the app source is located.
default: ""
image-name:
buildpacks:
type: string
description: Image name (aka tag) of the app image to be produced.
image-file:
type: string
description: Filename to save the app image as locally.
default: "image.tgz"
builder:
type: string
description: Builder image name to use.
buildpack:
type: string
description: Explicit buildpack to use for building.
description: The specific buildpacks to execute. Semicolon (;) delimited.
default: ""
env-vars:
type: string
description: Build-time environment variables. Semicolon (;) delimited.
default: ""
tags:
type: string
description: Additional image names to create. Semicolon (;) delimited.
default: ""
image-file:
type: string
description: Filename to save the app image as locally.
default: "image.tgz"
version:
type: string
description: Version of 'pack' to use.
default: 0.18.1
default: 0.29.0
after-checkout:
description: Optional steps to run after checking out the code.
type: steps
@ -44,7 +48,7 @@ jobs:
executor-image:
type: string
description: Image to execute 'pack' in.
default: ubuntu-2004:202010-01
default: ubuntu-2204:2023.04.2
steps:
- run: sudo chown -R circleci /var/lib/docker/volumes
- install-pack:
@ -55,78 +59,16 @@ jobs:
condition: << parameters.after-checkout >>
steps: << parameters.after-checkout >>
- pack-build:
working-directory: << parameters.working-directory >>
image-name: << parameters.image-name >>
builder: << parameters.builder >>
buildpack: << parameters.buildpack >>
image-name: << parameters.image-name >>
path: << parameters.working-directory >>
buildpacks: << parameters.buildpacks >>
env-vars: << parameters.env-vars >>
tags: << parameters.tags >>
- save-image-to-workspace:
image-name: << parameters.image-name >>
image-file: << parameters.image-file >>
commands:
save-image-to-workspace:
description: "Save image"
parameters:
image-name:
type: string
image-file:
type: string
default: image.tgz
steps:
- run:
name: Save image to workspace
command: |
mkdir -p images
docker save -o images/<< parameters.image-file >> << parameters.image-name >>
- persist_to_workspace:
root: .
paths:
- ./
pack-build:
description: "Run pack build"
parameters:
working-directory:
type: string
image-name:
type: string
builder:
type: string
buildpack:
type: string
env-vars:
type: string
steps:
- restore_cache:
key: pack-cache-<< parameters.image-name >>-<< parameters.builder >>-{{ arch }}
- run:
name: Run pack build
command: |
ENV_VARS=""
in="<< parameters.env-vars >>"
IFS=';' list=($in)
for item in "${list[@]}"; do
case "$item" in
*\ * )
IFS='='
read -a strarr \<<<"$item"
ENV_VARS="--env ${strarr[0]}=\"${strarr[1]}\" ${ENV_VARS}"
unset IFS
;;
*)
ENV_VARS="--env ${item} ${ENV_VARS}"
;;
esac
done
WORKING_DIRECTORY=$(if [ -n "<< parameters.working-directory >>" ]; then echo -n "--path << parameters.working-directory >>"; else echo -n ""; fi)
BUILD_PACK_ARG=$(if [ -n "<< parameters.buildpack >>" ]; then echo -n "--buildpack << parameters.buildpack >>"; else echo -n ""; fi)
eval pack build --no-color << parameters.image-name >> --builder << parameters.builder >> "${WORKING_DIRECTORY}" "${BUILD_PACK_ARG}" "${ENV_VARS}"
- save_cache:
key: pack-cache-<< parameters.image-name >>-<< parameters.builder >>-{{ arch }}-{{ epoch }}
paths:
- /var/lib/docker/volumes/
install-pack:
description: "Setup and install pack"
parameters:
@ -137,13 +79,13 @@ commands:
type: string
version:
type: string
default: 0.18.1
default: 0.29.0
steps:
- run:
name: "Setup and install pack"
command: |
mkdir -p << parameters.install-dir >>
curl -L "https://github.com/buildpack/pack/releases/download/v<< parameters.version >>/pack-v<< parameters.version >>-linux.tgz" | tar xzm -C << parameters.install-dir >>
curl -L --fail --retry 3 --connect-timeout 5 --max-time 60 "https://github.com/buildpack/pack/releases/download/v<< parameters.version >>/pack-v<< parameters.version >>-linux.tgz" | tar xzm -C << parameters.install-dir >>
export PATH="$PATH:<< parameters.install-dir >>"
mkdir -p ~/.docker/
if [ ! -f ~/.docker/config.json ]; then

View File

@ -0,0 +1,41 @@
description: "Run pack build"
parameters:
builder:
type: string
description: The builder image name to use for building.
image-name:
type: string
description: The primary image name to save the image as.
path:
type: string
description: The path to the working directory to run `pack build` in.
default: ""
buildpacks:
type: string
description: The specific buildpacks to execute. Semicolon (;) delimited.
default: ""
env-vars:
type: string
description: Environment variables to set during the build. Semicolon (;) delimited.
default: ""
tags:
type: string
description: Additional image names to create. Semicolon (;) delimited.
default: ""
steps:
- restore_cache:
key: pack-cache-<< parameters.image-name >>-<< parameters.builder >>-{{ arch }}
- run:
name: Run pack build
environment:
PARAM_BUILDER: << parameters.builder >>
PARAM_IMAGE_NAME: << parameters.image-name >>
PARAM_PATH: << parameters.path >>
PARAM_BUILDPACKS: << parameters.buildpacks >>
PARAM_ENV_VARS: << parameters.env-vars >>
PARAM_TAGS: << parameters.tags >>
command: <<include(scripts/pack-build.sh)>>
- save_cache:
key: pack-cache-<< parameters.image-name >>-<< parameters.builder >>-{{ arch }}-{{ epoch }}
paths:
- /var/lib/docker/volumes/

View File

@ -0,0 +1,17 @@
description: "Save image to file"
parameters:
image-name:
type: string
image-file:
type: string
steps:
- run:
name: Save image to workspace
environment:
PARAM_IMAGE_NAME: << parameters.image-name >>
PARAM_IMAGE_FILE: << parameters.image-file >>
command: <<include(scripts/save-image-to-workspace.sh)>>
- persist_to_workspace:
root: .
paths:
- ./

View File

@ -9,4 +9,4 @@ usage:
jobs:
- buildpacks/build:
image-name: myimage
builder: heroku/buildpacks:18
builder: heroku/builder:22

View File

@ -10,7 +10,7 @@ usage:
- buildpacks/build:
image-name: myimage
image-file: myimage.tgz
builder: heroku/buildpacks:18
builder: heroku/builder:22
- publish:
requires:
- buildpacks/build

View File

@ -9,5 +9,5 @@ usage:
jobs:
- buildpacks/build:
image-name: myimage
builder: heroku/buildpacks:18
builder: heroku/builder:22
buildpack: heroku/ruby

68
src/scripts/pack-build.sh Normal file
View File

@ -0,0 +1,68 @@
#!/usr/bin/env bash
create_buildpack_flags() {
local flags=()
IFS=';' read -ra entries <<<"$1"
for entry in "${entries[@]}"; do
flags+=("--buildpack \"${entry}\"")
done
echo "${flags[@]}"
}
create_env_var_flags() {
local flags=()
IFS=';' read -ra entries <<<"$1"
for entry in "${entries[@]}"; do
IFS='=' read -ra parts <<<"$entry"
flags+=("--env ${parts[0]}=\"${parts[1]}\"")
done
echo "${flags[@]}"
}
create_path_flag() {
if [ -n "$1" ]; then
echo "--path \"$1\""
fi
}
create_tag_flags() {
local flags=()
IFS=';' read -ra entries <<<"$1"
for entry in "${entries[@]}"; do
flags+=("--tag \"${entry}\"")
done
echo "${flags[@]}"
}
create_command() {
for i in PARAM_BUILDER,builder PARAM_IMAGE_NAME,image-name; do
KEY=${i%,*}
VAL=${i#*,}
if [[ -z "${!KEY}" ]]; then
echo "param '${VAL}' is required!"
exit 1
fi
done
echo pack build \
--no-color \
--builder \"${PARAM_BUILDER}\" \
--trust-builder \
$(create_path_flag "${PARAM_PATH}") \
$(create_buildpack_flags "${PARAM_BUILDPACKS}") \
$(create_env_var_flags "${PARAM_ENV_VARS}") \
$(create_tag_flags "${PARAM_TAGS}") \
\"${PARAM_IMAGE_NAME}\"
}
main() {
eval $(create_command)
}
if [[ -n $(echo "$0" | sed 's/.*_test$//;s/.*_test\.sh$//') ]]; then
main "$@"
fi

View File

@ -0,0 +1,26 @@
#!/usr/bin/env bash
main() {
for i in PARAM_IMAGE_FILE,image-file PARAM_IMAGE_NAME,image-name; do
KEY=${i%,*}
VAL=${i#*,}
if [[ -z "${!KEY}" ]]; then
echo "param ${VAL} is required!"
exit 1
fi
done
local image_dir="${IMAGE_DIR:-images}"
echo "> Ensuring image dir '${image_dir}' exists..."
mkdir -p "$image_dir"
local full_image_path="${image_dir}/${PARAM_IMAGE_FILE}"
echo "> Exporting image '${PARAM_IMAGE_NAME}' as '${full_image_path}'..."
docker save -o "${full_image_path}" ${PARAM_IMAGE_NAME}
echo "> Saved as '${full_image_path}'..."
}
if [[ -n $(echo "$0" | sed 's/.*_test$//;s/.*_test\.sh$//') ]]; then
main "$@"
fi

86
src/tests/pack-build_test.sh Executable file
View File

@ -0,0 +1,86 @@
#!/usr/bin/env bash
testBuildpackFlagsWithNoValues() {
local values=""
local results=$(create_buildpack_flags "${values}") code="$?"
assertEquals 0 "$code"
assertEquals "$results" ""
}
testBuildpackFlagsWithValues() {
local values="my-buildpack@1.2.3;docker.io/org/other-buildpack:latest"
local results=$(create_buildpack_flags "${values}") code="$?"
assertEquals 0 "$code"
assertContains "$results" "--buildpack \"my-buildpack@1.2.3\""
assertContains "$results" "--buildpack \"docker.io/org/other-buildpack:latest\""
}
testEnvVarsFlagsWithNoValues() {
local values=""
local results=$(create_env_var_flags "${values}") code="$?"
assertEquals 0 "$code"
assertEquals "$results" ""
}
testEnvVarsFlagsWithValues() {
local values="ENV_1=VAL_1;ENV_2=VAL 2;"
local results=$(create_env_var_flags "${values}") code="$?"
assertEquals 0 "$code"
assertContains "$results" "--env ENV_1=\"VAL_1\""
assertContains "$results" "--env ENV_2=\"VAL 2\""
}
testPathFlagWithNoValue() {
local value=""
local results=$(create_path_flag "${value}") code="$?"
assertEquals 0 "$code"
assertEquals "$results" ""
}
testPathFlagWithValue() {
local value="some/nested/dir"
local results=$(create_path_flag "${value}") code="$?"
assertEquals 0 "$code"
assertContains "$results" "--path \"some/nested/dir\""
}
testTagFlagsWithNoValues() {
local values=""
local results=$(create_tag_flags "${values}") code="$?"
assertEquals 0 "$code"
assertEquals "$results" ""
}
testTagFlagsWithValues() {
local values="my-image;docker.io/org/image:2"
local results=$(create_tag_flags "${values}") code="$?"
assertEquals 0 "$code"
assertContains "$results" "--tag \"my-image\""
assertContains "$results" "--tag \"docker.io/org/image:2\""
}
testCreateCommandMissingBuilder() {
local results=$(create_command) code="$?"
assertEquals 1 "$code"
assertContains "$results" "param 'builder' is required!"
}
testCreateCommandMissingImageName() {
local results=$(PARAM_BUILDER=some-builder create_command) code="$?"
assertEquals 1 "$code"
assertContains "$results" "param 'image-name' is required!"
}
testCreateCommandFull() {
local results=$(PARAM_BUILDER=some-builder PARAM_IMAGE_NAME=some/image:latest PARAM_PATH=some/dir PARAM_BUILDPACKS=my-buildpack@1.2.3 PARAM_ENV_VARS="ENV_1=VAL_1" PARAM_TAGS="another/tag:2" create_command) code="$?"
assertEquals 0 "$code"
assertEquals 'pack build --no-color --builder "some-builder" --path "some/dir" --buildpack "my-buildpack@1.2.3" --env ENV_1="VAL_1" --tag "another/tag:2" "some/image:latest"' "$results"
}
oneTimeSetUp() {
echo "> Loading script under test..."
source './../scripts/pack-build.sh'
}
# Load shUnit2
. ./shunit2

View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
testParamImageFileRequired() {
local results="$(PARAM_IMAGE_NAME='name' main)" code="$?"
assertEquals 1 $code
assertContains "$results" "param image-file is required!"
}
testParamImageNameRequired() {
local results="$(PARAM_IMAGE_FILE='file' main)" code="$?"
assertEquals 1 $code
assertContains "$results" "param image-name is required!"
}
testImageFileIsCreated() {
cat <<EOF >${SHUNIT_TMPDIR}/Dockerfile
FROM busybox AS build-env
RUN touch /empty
FROM scratch
COPY --from=build-env /empty /.emptyfile
EOF
local image_name="test$RANDOM"
echo "> Creating docker image..."
docker build -t ${image_name} ${SHUNIT_TMPDIR}
local image_dir="${SHUNIT_TMPDIR}/images"
local results="$(IMAGE_DIR=$image_dir PARAM_IMAGE_NAME=$image_name PARAM_IMAGE_FILE='image.img' main)" code="$?"
assertEquals 0 $code
assertContains "$results" "$image_dir"
assertContains "$results" "$image_name"
ls -al $image_dir/image.img
}
oneTimeSetUp() {
echo "> Loading script under test..."
source './../scripts/save-image-to-workspace.sh'
}
# Load shUnit2
. ./shunit2

1343
src/tests/shunit2 Executable file

File diff suppressed because it is too large Load Diff