diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c1c7c5..d989c9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Python Buildpack Changelog -# 151 (2019-03-) +# 152 (2019-04-04) + +Python 3.7.3 now available. + +# 151 (2019-03-21) Python 3.5.7 and 3.4.10 now available on all Heroku stacks. diff --git a/bin/default_pythons b/bin/default_pythons index dbdb106..db3b6d0 100755 --- a/bin/default_pythons +++ b/bin/default_pythons @@ -2,7 +2,7 @@ DEFAULT_PYTHON_VERSION="python-3.6.8" LATEST_36="python-3.6.8" -LATEST_37="python-3.7.2" +LATEST_37="python-3.7.3" LATEST_35="python-3.5.7" LATEST_34="python-3.4.10" LATEST_27="python-2.7.16" diff --git a/builds/runtimes/python-3.7.3 b/builds/runtimes/python-3.7.3 new file mode 100755 index 0000000..4254362 --- /dev/null +++ b/builds/runtimes/python-3.7.3 @@ -0,0 +1,32 @@ +#!/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.3/Python-3.7.3.tgz' +curl -L $SOURCE_TARBALL | tar xz +mv Python-3.7.3 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 diff --git a/test/run b/test/run index 2bc27cf..34f5fa5 100755 --- a/test/run +++ b/test/run @@ -2,7 +2,7 @@ # Default Python Versions # shellcheck source=bin/default_pythons -source "$BIN_DIR/default_pythons" +source "bin/default_pythons" testAirflow() { export SLUGIFY_USES_TEXT_UNIDECODE="yes" @@ -98,14 +98,19 @@ testPylibmc() { } testPythonDefault() { + updateVersion "pythonDefault" $DEFAULT_PYTHON_VERSION compile "pythonDefault" assertCaptured $DEFAULT_PYTHON_VERSION + assertNotCaptured "security update" assertCapturedSuccess } testPython2() { + updateVersion "python2" $LATEST_27 + echo $LATEST_27 > "runtime.txt" compile "python2" assertCaptured $LATEST_27 + assertNotCaptured "security update" assertCapturedSuccess } @@ -123,9 +128,13 @@ testPython2_fail() { } testPython3_4() { - compile "python3_4" - assertCaptured $LATEST_34 - assertCapturedSuccess + if [[ $STACK != "cedar-14" ]]; then + updateVersion "python3_4" $LATEST_34 + compile "python3_4" + assertCaptured $LATEST_34 + assertNotCaptured "security update" + assertCapturedSuccess + fi } testPython3_4_warn() { @@ -146,9 +155,13 @@ testPython3_4_fail() { } testPython3_5() { - compile "python3_5" - assertCaptured $LATEST_35 - assertCapturedSuccess + if [[ $STACK != "cedar-14" ]]; then + updateVersion "python3_5" $LATEST_35 + compile "python3_5" + assertCaptured $LATEST_35 + assertNotCaptured "security update" + assertCapturedSuccess + fi } testPython3_5_warn() { @@ -169,8 +182,10 @@ testPython3_5_fail() { } testPython3_6() { + updateVersion "python3_6" $LATEST_36 compile "python3_6" assertCaptured $LATEST_36 + assertNotCaptured "security update" assertCapturedSuccess } @@ -188,10 +203,12 @@ testPython3_6_fail() { } testPython3_7() { + updateVersion "python3_7" $LATEST_37 compile "python3_7" if [[ $STACK = "cedar-14" ]]; then assertCapturedError else + assertNotCaptured "security update" assertCaptured $LATEST_37 assertCapturedSuccess fi diff --git a/test/utils b/test/utils index 2de7b0c..1ddd24e 100644 --- a/test/utils +++ b/test/utils @@ -71,6 +71,11 @@ release() capture ${BUILDPACK_HOME}/bin/release ${BUILD_DIR} } +updateVersion() +{ + echo "$2" > "test/fixtures/${1}/runtime.txt" +} + assertCapturedEquals() { assertEquals "$@" "$(cat ${STD_OUT})"