Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration test against jammy #218

Merged
merged 3 commits into from
Jul 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion .github/workflows/test-pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@ on:
branches:
- main

concurrency:
# only one instance of test suite per PR at one time
group: pr-${{ github.event.number }}
cancel-in-progress: true

jobs:
unit:
name: Unit Tests
runs-on: ubuntu-latest
outputs:
builders: ${{ steps.builders.outputs.builders }}
steps:
- name: Setup Go
uses: actions/setup-go@v3
Expand All @@ -21,10 +28,23 @@ jobs:
- name: Run Unit Tests
run: ./scripts/unit.sh

- name: Get builders from integration.json
id: builders
run: |
source "${{ github.workspace }}/scripts/.util/builders.sh"

builders="$(util::builders::list "${{ github.workspace }}/integration.json")"
printf "Output: %s\n" "${builders}"
printf "::set-output name=builders::%s\n" "${builders}"

integration:
name: Integration Tests
runs-on: ubuntu-latest
needs: unit
strategy:
matrix:
builder: ${{ fromJSON(needs.unit.outputs.builders) }}
fail-fast: false # don't cancel all test jobs when one fails
steps:
- name: Setup Go
uses: actions/setup-go@v3
Expand All @@ -37,7 +57,7 @@ jobs:
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* || true

- name: Run Integration Tests
run: ./scripts/integration.sh --use-token
run: ./scripts/integration.sh --use-token --builder ${{ matrix.builder }}
env:
GIT_TOKEN: ${{ github.token }}

Expand Down
3 changes: 0 additions & 3 deletions buildpack.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,5 @@ api = "0.7"
include-files = ["bin/run", "bin/build", "bin/detect", "buildpack.toml"]
pre-package = "./scripts/build.sh"

[[stacks]]
id = "io.buildpacks.stacks.bionic"

[[stacks]]
id = "*"
1 change: 1 addition & 0 deletions integration.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"builders": ["paketobuildpacks/builder-jammy-buildpackless-base"],
"node-engine": "github.com/paketo-buildpacks/node-engine",
"npm-install": "github.com/paketo-buildpacks/npm-install",
"watchexec" : "github.com/paketo-buildpacks/watchexec"
Expand Down
26 changes: 26 additions & 0 deletions scripts/.util/builders.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash

set -eu
set -o pipefail

# shellcheck source=SCRIPTDIR/print.sh
source "$(dirname "${BASH_SOURCE[0]}")/print.sh"

function util::builders::list() {
local integrationJSON="${1}"
local builders=""
if [[ -f "${integrationJSON}" ]]; then
builders="$(jq --compact-output 'select(.builder != null) | [.builder]' "${integrationJSON}")"

if [[ -z "${builders}" ]]; then
builders="$(jq --compact-output 'select(.builders != null) | .builders' "${integrationJSON}")"
fi
fi

if [[ -z "${builders}" ]]; then
util::print::info "No builders specified. Falling back to default builder..."
builders="$(jq --compact-output --null-input '["index.docker.io/paketobuildpacks/builder:buildpackless-base"]')"
fi

echo "${builders}"
}
77 changes: 46 additions & 31 deletions scripts/integration.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ source "${PROGDIR}/.util/print.sh"
# shellcheck source=SCRIPTDIR/.util/git.sh
source "${PROGDIR}/.util/git.sh"

# shellcheck source=SCRIPTDIR/.util/builders.sh
source "${PROGDIR}/.util/builders.sh"

function main() {
local builderArray
builderArray=()
while [[ "${#}" != 0 ]]; do
case "${1}" in
--use-token|-t)
Expand All @@ -29,6 +34,11 @@ function main() {
exit 0
;;

--builder|-b)
builderArray+=("${2}")
shift 2
;;

"")
# skip if the argument is empty
shift 1
Expand All @@ -44,8 +54,32 @@ function main() {
fi

tools::install
images::pull
tests::run

if [ ${#builderArray[@]} -eq 0 ]; then
util::print::title "No builders provided. Finding builders in integration.json..."

local builders
builders="$(util::builders::list "${BUILDPACKDIR}/integration.json" | jq -r '.[]' )"

# shellcheck disable=SC2206
IFS=$'\n' builderArray=(${builders})
unset IFS
fi

# shellcheck disable=SC2068
images::pull ${builderArray[@]}

local testout
testout=$(mktemp)
for builder in "${builderArray[@]}"; do
util::print::title "Setting default pack builder image..."
pack config default-builder "${builder}"

tests::run "${builder}" "${testout}"
done

util::tools::tests::checkfocus "${testout}"
util::print::success "** GO Test Succeeded with all builders**"
}

function usage() {
Expand All @@ -55,8 +89,10 @@ integration.sh [OPTIONS]
Runs the integration test suite.

OPTIONS
--help -h prints the command usage
--use-token -t use GIT_TOKEN from lastpass
--help -h prints the command usage
--use-token -t use GIT_TOKEN from lastpass
--builder <name> -b <name> sets the name of the builder(s) that are pulled / used for testing.
Defaults to "builders" array in integration.json, if present.
USAGE
}

Expand All @@ -77,22 +113,7 @@ function tools::install() {
}

function images::pull() {
local builders
builders=""

if [[ -f "${BUILDPACKDIR}/integration.json" ]]; then
builders="$(jq -r .builder "${BUILDPACKDIR}/integration.json")"

if [[ "${builders}" == "null" || -z "${builders}" ]]; then
builders="$(jq -r 'select(.builders != null) | .builders[]' "${BUILDPACKDIR}/integration.json")"
fi
fi

if [[ "${builders}" == "null" || -z "${builders}" ]]; then
builders="index.docker.io/paketobuildpacks/builder:buildpackless-base"
fi

while read -r builder; do
for builder in "${@}"; do
util::print::title "Pulling builder image ${builder}..."
docker pull "${builder}"

Expand All @@ -111,12 +132,7 @@ function images::pull() {

util::print::title "Pulling lifecycle image..."
docker pull "${lifecycle_image}"
done <<< "${builders}"

util::print::title "Setting default pack builder image..."
local default
read -r default <<< "${builders}"
pack config default-builder "${default}"
done
}

function token::fetch() {
Expand All @@ -126,14 +142,13 @@ function token::fetch() {

function tests::run() {
util::print::title "Run Buildpack Runtime Integration Tests"
util::print::info "Using ${1} as builder..."

testout=$(mktemp)
pushd "${BUILDPACKDIR}" > /dev/null
if GOMAXPROCS="${GOMAXPROCS:-4}" go test -count=1 -timeout 0 ./integration/... -v -run Integration | tee "${testout}"; then
util::tools::tests::checkfocus "${testout}"
util::print::success "** GO Test Succeeded **"
if GOMAXPROCS="${GOMAXPROCS:-4}" go test -count=1 -timeout 0 ./integration/... -v -run Integration | tee "${2}"; then
util::print::info "** GO Test Succeeded with ${1}**"
else
util::print::error "** GO Test Failed **"
util::print::error "** GO Test Failed with ${1}**"
fi
popd > /dev/null
}
Expand Down