mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 84ac34b1d4 | |||
| 7c4f55bc32 | |||
| eabe71d578 | |||
| 95fca53d38 | |||
| ff4f677435 | |||
| cba3201ac2 | |||
| ac29db32f8 | |||
| e83576f6b4 | |||
| 43600f25a5 | |||
| f508bd538d | |||
| bc7e34dbad | |||
| 419ef47996 | |||
| c1f6679dd7 | |||
| de81e41336 | |||
| 99c1027cb2 | |||
| 46d3d2b042 | |||
| 7b4f16145b |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"productTag": "a1aB0000000MR0RIAW",
|
||||
"issueTypeLabels": { "gus: story": "USER STORY", "gus: bug": "BUG P3" },
|
||||
"defaultBuild": "Heroku Unscheduled",
|
||||
"statusWhenClosed": "CLOSED"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "c: dependencies"
|
||||
|
||||
- package-ecosystem: "bundler"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "c: dependencies"
|
||||
@@ -1,7 +0,0 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v2.3.0
|
||||
hooks:
|
||||
- id: check-yaml
|
||||
- id: end-of-file-fixer
|
||||
- id: trailing-whitespace
|
||||
+3
-6
@@ -12,14 +12,13 @@ jobs:
|
||||
- name: Bash linting (shellcheck)
|
||||
script: make check
|
||||
- name: Hatchet integration tests
|
||||
if: env(TRAVIS_PULL_REQUEST_SLUG) = env(TRAVIS_REPO_SLUG)
|
||||
if: env(HEROKU_API_USER) IS present AND env(HEROKU_API_KEY) IS present
|
||||
language: ruby
|
||||
rvm:
|
||||
- 2.6.6
|
||||
- 2.7
|
||||
before_script:
|
||||
- gem install bundler -v 1.16.2
|
||||
script:
|
||||
- bundle exec hatchet ci:setup
|
||||
script:
|
||||
- PARALLEL_SPLIT_TEST_PROCESSES=11 bundle exec parallel_split_test spec/hatchet/
|
||||
|
||||
env:
|
||||
@@ -40,5 +39,3 @@ env:
|
||||
- IS_RUNNING_ON_CI=true
|
||||
- HATCHET_APP_LIMIT=80
|
||||
- HATCHET_DEPLOY_STRATEGY=git
|
||||
- secure: yjtlPE5FbVxTKnjUy/tZUBgSEf4qADD3QOxtgziuid73S0U/1IEXlMGFULsQzIjtlHKmHeywZqpVVEpthIH4RuT7uoX1Pb7SSM/g0T8fT3VoEFbFK1uYl0oZQbUS4Klxv9tPiumj8if3m6ULEGIz1X0wZcMOC0tMLwVCnwmap0E=
|
||||
- secure: ZeFTHWwnpIKE9nAqs88ocmiQh7bKce84lilGm5J23nf3N6V4wNyLwqlkvsM008WGBCaOg9AUx7ZunasT0ANsR5gLP3eV2UUg7ILdRgV2Gy13eNRFheC4PHdN92RqQ3aKoqlIv2K999xlhVjod0NzhkQQXB6PddfQINbuU7ks6As=
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
## Unreleased
|
||||
|
||||
|
||||
## v176 (2020-08-12)
|
||||
|
||||
- Rebuild the Python 3.4.10 archives with the correct version of Python (#1048).
|
||||
- Fix the security update version check message for apps using PyPy (#1040).
|
||||
- Remove `vendor/test-utils` (#1043).
|
||||
|
||||
## v175 (2020-08-05)
|
||||
|
||||
- Update pip from 20.0.2 to 20.1.1 for Python 2.7 and Python 3.5+ (#1030).
|
||||
|
||||
+25
-43
@@ -1,68 +1,50 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.3.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
concurrent-ruby (1.1.6)
|
||||
diff-lcs (1.3)
|
||||
diff-lcs (1.4.4)
|
||||
erubis (2.7.0)
|
||||
excon (0.73.0)
|
||||
heroics (0.0.25)
|
||||
excon (0.76.0)
|
||||
heroics (0.1.1)
|
||||
erubis (~> 2.0)
|
||||
excon
|
||||
moneta
|
||||
multi_json (>= 1.9.2)
|
||||
heroku_hatchet (5.0.3)
|
||||
heroku_hatchet (7.0.0)
|
||||
excon (~> 0)
|
||||
minitest-retry (~> 0.1.9)
|
||||
platform-api (~> 2)
|
||||
repl_runner (~> 0.0.3)
|
||||
platform-api (~> 3)
|
||||
rrrretry (~> 1)
|
||||
thor (~> 0)
|
||||
threaded (~> 0)
|
||||
i18n (1.8.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
minitest (5.14.1)
|
||||
minitest-retry (0.1.9)
|
||||
minitest (>= 5.0)
|
||||
moneta (1.0.0)
|
||||
multi_json (1.14.1)
|
||||
parallel (1.19.1)
|
||||
parallel_split_test (0.7.0)
|
||||
multi_json (1.15.0)
|
||||
parallel (1.19.2)
|
||||
parallel_split_test (0.8.0)
|
||||
parallel (>= 0.5.13)
|
||||
rspec (>= 3.1.0)
|
||||
platform-api (2.2.0)
|
||||
heroics (~> 0.0.25)
|
||||
platform-api (3.0.0)
|
||||
heroics (~> 0.1.1)
|
||||
moneta (~> 1.0.0)
|
||||
rake (12.3.3)
|
||||
repl_runner (0.0.3)
|
||||
activesupport
|
||||
rate_throttle_client (~> 0.1.0)
|
||||
rake (13.0.1)
|
||||
rate_throttle_client (0.1.2)
|
||||
rrrretry (1.0.0)
|
||||
rspec (3.8.0)
|
||||
rspec-core (~> 3.8.0)
|
||||
rspec-expectations (~> 3.8.0)
|
||||
rspec-mocks (~> 3.8.0)
|
||||
rspec-core (3.8.0)
|
||||
rspec-support (~> 3.8.0)
|
||||
rspec-expectations (3.8.1)
|
||||
rspec (3.9.0)
|
||||
rspec-core (~> 3.9.0)
|
||||
rspec-expectations (~> 3.9.0)
|
||||
rspec-mocks (~> 3.9.0)
|
||||
rspec-core (3.9.2)
|
||||
rspec-support (~> 3.9.3)
|
||||
rspec-expectations (3.9.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.8.0)
|
||||
rspec-mocks (3.8.0)
|
||||
rspec-support (~> 3.9.0)
|
||||
rspec-mocks (3.9.1)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.8.0)
|
||||
rspec-retry (0.6.1)
|
||||
rspec-support (~> 3.9.0)
|
||||
rspec-retry (0.6.2)
|
||||
rspec-core (> 3.3)
|
||||
rspec-support (3.8.0)
|
||||
rspec-support (3.9.3)
|
||||
thor (0.20.3)
|
||||
thread_safe (0.3.6)
|
||||
threaded (0.0.4)
|
||||
tzinfo (1.2.7)
|
||||
thread_safe (~> 0.1)
|
||||
zeitwerk (2.3.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
+2
-2
@@ -12,5 +12,5 @@ LATEST_36="python-3.6.11"
|
||||
LATEST_35="python-3.5.9"
|
||||
LATEST_34="python-3.4.10"
|
||||
LATEST_27="python-2.7.18"
|
||||
PYPY_36="pypy3.6-7.3.1"
|
||||
PYPY_27="pypy2.7-7.3.1"
|
||||
LATEST_PYPY_36="pypy3.6-7.3.1"
|
||||
LATEST_PYPY_27="pypy2.7-7.3.1"
|
||||
|
||||
+5
-4
@@ -8,6 +8,7 @@ PYTHON_VERSION=$(cat runtime.txt)
|
||||
VENDORED_PYTHON="${VENDOR_URL}/runtimes/$PYTHON_VERSION.tar.gz"
|
||||
|
||||
SECURITY_UPDATE="Python has released a security update! Please consider upgrading to"
|
||||
SECURITY_UPDATE_PYPY="The PyPy project has released a security update! Please consider upgrading to"
|
||||
|
||||
ONLY_SUPPORTED_2_VERSION="Only the latest version of Python 2 is supported on the platform. Please consider upgrading to"
|
||||
|
||||
@@ -63,15 +64,15 @@ if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
|
||||
fi
|
||||
if [[ "$PYTHON_VERSION" == $PYPY27* ]]; then
|
||||
# security update note
|
||||
if [ "$PYTHON_VERSION" != "$PYPY_27" ]; then
|
||||
puts-warn "Could not find that Pypy version. Did you mean" "${PYPY_27}?"
|
||||
if [ "$PYTHON_VERSION" != "$LATEST_PYPY_27" ]; then
|
||||
puts-warn "$SECURITY_UPDATE_PYPY" "$LATEST_PYPY_27"
|
||||
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||
fi
|
||||
fi
|
||||
if [[ "$PYTHON_VERSION" == $PYPY36* ]]; then
|
||||
# security update note
|
||||
if [ "$PYTHON_VERSION" != "$PYPY_36" ]; then
|
||||
puts-warn "Could not find that Pypy version. Did you mean" "${PYPY_36}?"
|
||||
if [ "$PYTHON_VERSION" != "$LATEST_PYPY_36" ]; then
|
||||
puts-warn "$SECURITY_UPDATE_PYPY" "$LATEST_PYPY_36"
|
||||
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1,27 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.17/Python-2.7.17.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.17 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,27 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.18/Python-2.7.18.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.18 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.7.2/Python-3.7.2.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.7.2 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.4.9/Python-3.4.9.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.4.9 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get install software-properties-common
|
||||
curl --fail --retry 3 --retry-delay 1 --connect-timeout 3 --max-time 30 https://cli-assets.heroku.com/install-ubuntu.sh | sh
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
docopt==0.6.2
|
||||
bob-builder==0.0.17
|
||||
boto==2.48.0
|
||||
bob-builder==0.0.18
|
||||
boto==2.49.0
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
pypy2.7-7.2.0
|
||||
pypy2.7-7.3.1
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
pypy2.7-7.2.0
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
pypy3.6-7.2.0
|
||||
pypy3.6-7.3.1
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
pypy3.6-7.2.0
|
||||
+24
-21
@@ -54,29 +54,14 @@ testPython3_4() {
|
||||
assertCaptured $LATEST_34
|
||||
assertNotCaptured "security update"
|
||||
assertCaptured "Installing pip 19.1.1, setuptools 43.0.0 and wheel 0.33.6"
|
||||
# if cedar 14 and legacy binaries, fail. if cedar 14 and staging, succeed.
|
||||
if [[ ! -n $USE_STAGING_BINARIES ]] && [[ $STACK == "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
# if heroku 18 and legacy binaries, succeed. if heroku 18 and staging, fail.
|
||||
elif [[ -n $USE_STAGING_BINARIES ]] && [[ $STACK == "heroku-18" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
# all else succeed
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPython3_4_warn() {
|
||||
compile "python3_4_warn"
|
||||
assertCaptured "python-3.4.9"
|
||||
assertCaptured "security update!"
|
||||
# if heroku 18 and legacy binaries, succeed. if heroku 18 and staging, fail.
|
||||
if [[ -n $USE_STAGING_BINARIES ]] && [[ $STACK == "heroku-18" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
# all else succeed
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPython3_4_fail() {
|
||||
@@ -197,24 +182,42 @@ testPython3_8_fail() {
|
||||
|
||||
testPypy3_6() {
|
||||
compile "pypy3_6"
|
||||
assertCaptured "Installing pypy"
|
||||
assertNotCaptured "security update"
|
||||
assertCaptured "$LATEST_PYPY_36"
|
||||
assertCaptured "Installing pip 20.1.1, setuptools 47.1.1 and wheel 0.34.2"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPypy3_6_warn() {
|
||||
compile "pypy3_6_warn"
|
||||
if [[ $STACK = "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
assertCaptured "Installing pypy"
|
||||
assertCaptured "$PYPY_36"
|
||||
assertCaptured "Installing pip 20.1.1, setuptools 47.1.1 and wheel 0.34.2"
|
||||
assertCaptured "security update!"
|
||||
assertCaptured "$LATEST_PYPY_36"
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
|
||||
testPypy2_7() {
|
||||
compile "pypy2_7"
|
||||
assertCaptured "Installing pypy"
|
||||
assertNotCaptured "security update"
|
||||
assertCaptured "$LATEST_PYPY_27"
|
||||
assertCaptured "Installing pip 20.1.1, setuptools 44.1.1 and wheel 0.34.2"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPypy2_7_warn() {
|
||||
compile "pypy2_7_warn"
|
||||
if [[ $STACK = "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
assertCaptured "Installing pypy"
|
||||
assertCaptured "$PYPY_27"
|
||||
assertCaptured "Installing pip 20.1.1, setuptools 44.1.1 and wheel 0.34.2"
|
||||
assertCaptured "security update!"
|
||||
assertCaptured "$LATEST_PYPY_27"
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
|
||||
Vendored
-204
@@ -1,204 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# taken from
|
||||
# https://github.com/ryanbrainard/heroku-buildpack-testrunner/blob/master/lib/test_utils.sh
|
||||
|
||||
oneTimeSetUp()
|
||||
{
|
||||
TEST_SUITE_CACHE="$(mktemp -d ${SHUNIT_TMPDIR}/test_suite_cache.XXXX)"
|
||||
}
|
||||
|
||||
oneTimeTearDown()
|
||||
{
|
||||
rm -rf ${TEST_SUITE_CACHE}
|
||||
}
|
||||
|
||||
setUp()
|
||||
{
|
||||
OUTPUT_DIR="$(mktemp -d ${SHUNIT_TMPDIR}/output.XXXX)"
|
||||
STD_OUT="${OUTPUT_DIR}/stdout"
|
||||
STD_ERR="${OUTPUT_DIR}/stderr"
|
||||
BUILD_DIR="${OUTPUT_DIR}/build"
|
||||
CACHE_DIR="${OUTPUT_DIR}/cache"
|
||||
mkdir -p ${OUTPUT_DIR}
|
||||
mkdir -p ${BUILD_DIR}
|
||||
mkdir -p ${CACHE_DIR}
|
||||
}
|
||||
|
||||
tearDown()
|
||||
{
|
||||
rm -rf ${OUTPUT_DIR}
|
||||
}
|
||||
|
||||
capture()
|
||||
{
|
||||
resetCapture
|
||||
|
||||
LAST_COMMAND="$@"
|
||||
|
||||
"$@" >${STD_OUT} 2>${STD_ERR}
|
||||
RETURN=$?
|
||||
rtrn=${RETURN} # deprecated
|
||||
}
|
||||
|
||||
resetCapture()
|
||||
{
|
||||
if [ -f ${STD_OUT} ]; then
|
||||
rm ${STD_OUT}
|
||||
fi
|
||||
|
||||
if [ -f ${STD_ERR} ]; then
|
||||
rm ${STD_ERR}
|
||||
fi
|
||||
|
||||
unset LAST_COMMAND
|
||||
unset RETURN
|
||||
unset rtrn # deprecated
|
||||
}
|
||||
|
||||
detect()
|
||||
{
|
||||
capture ${BUILDPACK_HOME}/bin/detect ${BUILD_DIR}
|
||||
}
|
||||
|
||||
compile()
|
||||
{
|
||||
capture ${BUILDPACK_HOME}/bin/compile ${BUILD_DIR} ${CACHE_DIR}
|
||||
}
|
||||
|
||||
release()
|
||||
{
|
||||
capture ${BUILDPACK_HOME}/bin/release ${BUILD_DIR}
|
||||
}
|
||||
|
||||
assertCapturedEquals()
|
||||
{
|
||||
assertEquals "$@" "$(cat ${STD_OUT})"
|
||||
}
|
||||
|
||||
assertCapturedNotEquals()
|
||||
{
|
||||
assertNotEquals "$@" "$(cat ${STD_OUT})"
|
||||
}
|
||||
|
||||
assertCaptured()
|
||||
{
|
||||
assertFileContains "$@" "${STD_OUT}"
|
||||
}
|
||||
|
||||
assertNotCaptured()
|
||||
{
|
||||
assertFileNotContains "$@" "${STD_OUT}"
|
||||
}
|
||||
|
||||
assertCapturedSuccess()
|
||||
{
|
||||
assertEquals "Expected captured exit code to be 0; was <${RETURN}>" "0" "${RETURN}"
|
||||
assertEquals "Expected STD_ERR to be empty; was <$(cat ${STD_ERR})>" "" "$(cat ${STD_ERR})"
|
||||
}
|
||||
|
||||
# assertCapturedError [[expectedErrorCode] expectedErrorMsg]
|
||||
assertCapturedError()
|
||||
{
|
||||
if [ $# -gt 1 ]; then
|
||||
expectedErrorCode=${1}
|
||||
shift
|
||||
fi
|
||||
|
||||
expectedErrorMsg=${1:-""}
|
||||
|
||||
if [ -z ${expectedErrorCode} ]; then
|
||||
assertTrue "Expected captured exit code to be greater than 0; was <${RETURN}>" "[ ${RETURN} -gt 0 ]"
|
||||
else
|
||||
assertTrue "Expected captured exit code to be <${expectedErrorCode}>; was <${RETURN}>" "[ ${RETURN} -eq ${expectedErrorCode} ]"
|
||||
fi
|
||||
|
||||
assertFileContains "Expected STD_OUT to contain error <${expectedErrorMsg}>" "${expectedErrorMsg}" "${STD_OUT}"
|
||||
assertEquals "STD_ERR should always be empty" "" "$(cat ${STD_ERR})"
|
||||
}
|
||||
|
||||
assertAppDetected()
|
||||
{
|
||||
expectedAppType=${1?"Must provide app type"}
|
||||
|
||||
assertCapturedSuccess
|
||||
assertEquals "${expectedAppType}" "$(cat ${STD_OUT})"
|
||||
}
|
||||
|
||||
assertNoAppDetected()
|
||||
{
|
||||
assertEquals "1" "${RETURN}"
|
||||
assertEquals "no" "$(cat ${STD_OUT})"
|
||||
assertEquals "" "$(cat ${STD_ERR})"
|
||||
}
|
||||
|
||||
_assertContains()
|
||||
{
|
||||
if [ 5 -eq $# ]; then
|
||||
msg=$1
|
||||
shift
|
||||
elif [ ! 4 -eq $# ]; then
|
||||
fail "Expected 4 or 5 parameters; Receieved $# parameters"
|
||||
fi
|
||||
|
||||
needle=$1
|
||||
haystack=$2
|
||||
expectation=$3
|
||||
haystack_type=$4
|
||||
|
||||
case "${haystack_type}" in
|
||||
"file") grep -q -F -e "${needle}" ${haystack} ;;
|
||||
"text") echo "${haystack}" | grep -q -F -e "${needle}" ;;
|
||||
esac
|
||||
|
||||
if [ "${expectation}" != "$?" ]; then
|
||||
case "${expectation}" in
|
||||
0) default_msg="Expected <${haystack}> to contain <${needle}>" ;;
|
||||
1) default_msg="Did not expect <${haystack}> to contain <${needle}>" ;;
|
||||
esac
|
||||
|
||||
fail "${msg:-${default_msg}}"
|
||||
fi
|
||||
}
|
||||
|
||||
assertContains()
|
||||
{
|
||||
_assertContains "$@" 0 "text"
|
||||
}
|
||||
|
||||
assertNotContains()
|
||||
{
|
||||
_assertContains "$@" 1 "text"
|
||||
}
|
||||
|
||||
assertFileContains()
|
||||
{
|
||||
_assertContains "$@" 0 "file"
|
||||
}
|
||||
|
||||
assertFileNotContains()
|
||||
{
|
||||
_assertContains "$@" 1 "file"
|
||||
}
|
||||
|
||||
command_exists () {
|
||||
type "$1" > /dev/null 2>&1 ;
|
||||
}
|
||||
|
||||
assertFileMD5()
|
||||
{
|
||||
expectedHash=$1
|
||||
filename=$2
|
||||
|
||||
if command_exists "md5sum"; then
|
||||
md5_cmd="md5sum ${filename}"
|
||||
expected_md5_cmd_output="${expectedHash} ${filename}"
|
||||
elif command_exists "md5"; then
|
||||
md5_cmd="md5 ${filename}"
|
||||
expected_md5_cmd_output="MD5 (${filename}) = ${expectedHash}"
|
||||
else
|
||||
fail "no suitable MD5 hashing command found on this system"
|
||||
fi
|
||||
|
||||
assertEquals "${expected_md5_cmd_output}" "`${md5_cmd}`"
|
||||
}
|
||||
Reference in New Issue
Block a user