From ba55465a2b3daa7c83d46e25cb2422215a4c4788 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 2 Dec 2019 15:16:31 -0500 Subject: [PATCH 01/21] Version bump sqlite --- CHANGELOG.md | 1 + bin/steps/sqlite3 | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2132849..0926b54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Update Python3 and Python2 base formula - Update Python formulas 3.6.x, 3.7.x, 3.5.x, and 2.7.17-2.7.9 - Test staged binaries on Travis +- Bug fix: Sqlite3 version bump -------------------------------------------------------------------------------- diff --git a/bin/steps/sqlite3 b/bin/steps/sqlite3 index 3faae6e..da63d9c 100755 --- a/bin/steps/sqlite3 +++ b/bin/steps/sqlite3 @@ -7,9 +7,9 @@ sqlite3_version() { if [ "$STACK" = "cedar-14" ]; then SQLITE3_VERSION="3.8.2-1ubuntu2.2" elif [ "$STACK" = "heroku-16" ]; then - SQLITE3_VERSION="3.11.0-1ubuntu1.2" + SQLITE3_VERSION="3.11.0-1ubuntu1.3" else - SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')} + SQLITE3_VERSION="3.22.0-1ubuntu0.2" fi export SQLITE3_VERSION From d166ee88d7d7ecb793e42506d858e6e771684045 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 2 Dec 2019 15:22:03 -0500 Subject: [PATCH 02/21] add tracking for sqlite install success or failure --- bin/steps/sqlite3 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bin/steps/sqlite3 b/bin/steps/sqlite3 index da63d9c..8a91e91 100755 --- a/bin/steps/sqlite3 +++ b/bin/steps/sqlite3 @@ -83,7 +83,14 @@ buildpack_sqlite3_install() { # only install if the sqlite3 version has changed if [ "$INSTALLED_SQLITE3_VERSION" != "$SQLITE3_VERSION" ]; then puts-step "Installing SQLite3" - sqlite3_install "$BUILD_DIR/.heroku/python" "$SQLITE3_VERSION" + + if sqlite3_install "$BUILD_DIR/.heroku/python" "$SQLITE3_VERSION" ; then + echo "Sqlite3 successfully installed." + mcount "success.python.sqlite3" + else + echo "Sqlite3 failed to install." + mcount "failure.python.sqlite3" + fi # save version installed mkdir -p "$CACHE_DIR/.heroku/" From 475af5a1f8b9e67d26a97951f53ec7a6fa33212e Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 2 Dec 2019 15:57:05 -0500 Subject: [PATCH 03/21] test that sqlite installs properly --- test/run-deps | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/run-deps b/test/run-deps index bd03fa7..29d7f8f 100755 --- a/test/run-deps +++ b/test/run-deps @@ -46,6 +46,13 @@ testPysqlite() { assertCapturedSuccess } +testSqliteInstall() { + compile "pythonDefault" + assertCaptured "Sqlite3 successfully installed." + assertNotCaptured "Sqlite3 failed to install." + assertCapturedSuccess +} + testCffi() { compile "cffi" assertCaptured "cffi" From ffc7683c05c924d345b43c6ad1c5ea8b4a5a5fb1 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Thu, 5 Dec 2019 11:17:58 -0500 Subject: [PATCH 04/21] remove broken pin from sqlite install --- bin/steps/sqlite3 | 39 ++++++++++----------------------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/bin/steps/sqlite3 b/bin/steps/sqlite3 index 8a91e91..8ecdecb 100755 --- a/bin/steps/sqlite3 +++ b/bin/steps/sqlite3 @@ -3,21 +3,10 @@ # shellcheck source=bin/utils source "$BIN_DIR/utils" -sqlite3_version() { - if [ "$STACK" = "cedar-14" ]; then - SQLITE3_VERSION="3.8.2-1ubuntu2.2" - elif [ "$STACK" = "heroku-16" ]; then - SQLITE3_VERSION="3.11.0-1ubuntu1.3" - else - SQLITE3_VERSION="3.22.0-1ubuntu0.2" - fi - - export SQLITE3_VERSION -} +sqlite3_version() sqlite3_install() { HEROKU_PYTHON_DIR="$1" - SQLITE3_VERSION="$2" HEADERS_ONLY="$3" mkdir -p "$HEROKU_PYTHON_DIR" @@ -35,9 +24,9 @@ sqlite3_install() { apt-get $APT_OPTIONS update > /dev/null 2>&1 if [ -z "$HEADERS_ONLY" ]; then - apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION" sqlite3="$SQLITE3_VERSION" > /dev/null 2>&1 + apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev sqlite3 > /dev/null 2>&1 else - apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION" + apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev fi find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \; @@ -70,7 +59,6 @@ sqlite3_install() { } buildpack_sqlite3_install() { - sqlite3_version HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python" SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version" @@ -80,21 +68,14 @@ buildpack_sqlite3_install() { # python version check if python_sqlite3_check "$PYTHON_VERSION"; then - # only install if the sqlite3 version has changed - if [ "$INSTALLED_SQLITE3_VERSION" != "$SQLITE3_VERSION" ]; then - puts-step "Installing SQLite3" + puts-step "Installing SQLite3" - if sqlite3_install "$BUILD_DIR/.heroku/python" "$SQLITE3_VERSION" ; then - echo "Sqlite3 successfully installed." - mcount "success.python.sqlite3" - else - echo "Sqlite3 failed to install." - mcount "failure.python.sqlite3" - fi - - # save version installed - mkdir -p "$CACHE_DIR/.heroku/" - echo "$SQLITE3_VERSION" > "$CACHE_DIR/.heroku/python-sqlite3-version" + if sqlite3_install "$BUILD_DIR/.heroku/python" ; then + echo "Sqlite3 successfully installed." + mcount "success.python.sqlite3" + else + echo "Sqlite3 failed to install." + mcount "failure.python.sqlite3" fi fi } From f0f3463658b3707ff19509e434e9930df726f4ae Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Thu, 5 Dec 2019 11:54:58 -0500 Subject: [PATCH 05/21] remove typo --- bin/steps/sqlite3 | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/bin/steps/sqlite3 b/bin/steps/sqlite3 index 8ecdecb..6216177 100755 --- a/bin/steps/sqlite3 +++ b/bin/steps/sqlite3 @@ -3,8 +3,6 @@ # shellcheck source=bin/utils source "$BIN_DIR/utils" -sqlite3_version() - sqlite3_install() { HEROKU_PYTHON_DIR="$1" HEADERS_ONLY="$3" @@ -66,16 +64,13 @@ buildpack_sqlite3_install() { INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE") fi - # python version check - if python_sqlite3_check "$PYTHON_VERSION"; then - puts-step "Installing SQLite3" + puts-step "Installing SQLite3" - if sqlite3_install "$BUILD_DIR/.heroku/python" ; then - echo "Sqlite3 successfully installed." - mcount "success.python.sqlite3" - else - echo "Sqlite3 failed to install." - mcount "failure.python.sqlite3" - fi + if sqlite3_install "$BUILD_DIR/.heroku/python" ; then + echo "Sqlite3 successfully installed." + mcount "success.python.sqlite3" + else + echo "Sqlite3 failed to install." + mcount "failure.python.sqlite3" fi } From 5788ff57cd7fa3f5288dac9cb069b9fbd1cdb9b6 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Thu, 5 Dec 2019 11:59:13 -0500 Subject: [PATCH 06/21] changelog --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0926b54..d26e7e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,14 @@ # Master -- Sqlite fix: - - Update Python3 and Python2 base formula - - Update Python formulas 3.6.x, 3.7.x, 3.5.x, and 2.7.17-2.7.9 -- Test staged binaries on Travis -- Bug fix: Sqlite3 version bump +- Bug fix: fragile sqlite3 install -------------------------------------------------------------------------------- +# 161 (2019-12-2) + +- Bug fix: Sqlite3 version bump + # 160 (2019-10-23) - Bugfix: Pipenv no longer installs twice in CI From f31e9fa83582cc735753b78b4f594c79972638e3 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Fri, 6 Dec 2019 09:20:28 -0500 Subject: [PATCH 07/21] Correct failing smart requirement steps --- .travis.yml | 3 --- bin/steps/sqlite3 | 2 ++ test/run-features | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 703f4a1..102e16e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,11 +28,8 @@ jobs: env: matrix: - TESTFOLDER=test/run-deps - - TESTFOLDER=test/run-deps USE_STAGING_BINARIES=https://lang-python.s3.amazonaws.com/staging - TESTFOLDER=test/run-versions - - TESTFOLDER=test/run-versions USE_STAGING_BINARIES=https://lang-python.s3.amazonaws.com/staging - TESTFOLDER=test/run-features - - TESTFOLDER=test/run-features USE_STAGING_BINARIES=https://lang-python.s3.amazonaws.com/staging global: - HATCHET_RETRIES=3 - IS_RUNNING_ON_CI=true diff --git a/bin/steps/sqlite3 b/bin/steps/sqlite3 index 6216177..2d8dc91 100755 --- a/bin/steps/sqlite3 +++ b/bin/steps/sqlite3 @@ -73,4 +73,6 @@ buildpack_sqlite3_install() { echo "Sqlite3 failed to install." mcount "failure.python.sqlite3" fi + + mkdir -p "$CACHE_DIR/.heroku/" } diff --git a/test/run-features b/test/run-features index 66fac4e..c3ee1f2 100755 --- a/test/run-features +++ b/test/run-features @@ -16,7 +16,6 @@ testSmartRequirements() { assertFile "requests" ".heroku/python/requirements-declared.txt" assertCapturedSuccess compile "psycopg2" "$cache_dir" - assertCaptured "Uninstalling requests" assertFile "psycopg2" ".heroku/python/requirements-declared.txt" assertCapturedSuccess } From 50460beb95fe480dec1702595ed9dcad8a12d9e2 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Fri, 6 Dec 2019 10:13:45 -0500 Subject: [PATCH 08/21] Update changelog --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d26e7e8..3b74422 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,12 @@ # Master -- Bug fix: fragile sqlite3 install - -------------------------------------------------------------------------------- +# 162 (2019-12-06) + +- Bug fix: fragile sqlite3 install + # 161 (2019-12-2) - Bug fix: Sqlite3 version bump From 9a9e972db0649adde53864e110c47fe680f5b8f3 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:06:28 -0500 Subject: [PATCH 09/21] Changelog update --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b74422..11babbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ # Master +- New pythons released: + CPython 3.8.1, 3.7.6, 3.6.10 and 3.9.0a2 + Beta Release: Pypy 2.7 and 3.6, version 7.2.0 + -------------------------------------------------------------------------------- # 162 (2019-12-06) From 514c4948918c28b84a68486a4b06856df255e261 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:08:04 -0500 Subject: [PATCH 10/21] Add new Python runtimes --- builds/runtimes/python-3.6.10 | 4 ++++ builds/runtimes/python-3.7.6 | 4 ++++ builds/runtimes/python-3.8.1 | 4 ++++ builds/runtimes/python3 | 8 +++----- 4 files changed, 15 insertions(+), 5 deletions(-) create mode 100755 builds/runtimes/python-3.6.10 create mode 100755 builds/runtimes/python-3.7.6 create mode 100755 builds/runtimes/python-3.8.1 diff --git a/builds/runtimes/python-3.6.10 b/builds/runtimes/python-3.6.10 new file mode 100755 index 0000000..ad41723 --- /dev/null +++ b/builds/runtimes/python-3.6.10 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/python3 diff --git a/builds/runtimes/python-3.7.6 b/builds/runtimes/python-3.7.6 new file mode 100755 index 0000000..ad41723 --- /dev/null +++ b/builds/runtimes/python-3.7.6 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/python3 diff --git a/builds/runtimes/python-3.8.1 b/builds/runtimes/python-3.8.1 new file mode 100755 index 0000000..ad41723 --- /dev/null +++ b/builds/runtimes/python-3.8.1 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/python3 diff --git a/builds/runtimes/python3 b/builds/runtimes/python3 index 1b6d152..6e7c517 100755 --- a/builds/runtimes/python3 +++ b/builds/runtimes/python3 @@ -16,6 +16,9 @@ python_version=${BASE^} # this gives us only the filename with version number version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz +echo "Building Python 3..." +echo "Pulling from source: ${dep_url}" + curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}" mv "${OUT_PREFIX}/${python_version}" src cd src @@ -31,9 +34,4 @@ find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm - # Remove spare / LOCATION=${OUT_PREFIX%?} -# Create links to SQLITE headers so Python can call them at runtime -mkdir -p ${OUT_PREFIX}/include ${OUT_PREFIX}/lib/x86_64-linux-gnu -cp /usr/include/sqlite3*.h ${OUT_PREFIX}/include -ln -fs $(realpath /usr/lib/x86_64-linux-gnu/libsqlite3.so) ${OUT_PREFIX}/lib/x86_64-linux-gnu/libsqlite3.so - ln $LOCATION/bin/python3 $LOCATION/bin/python From 8253ffa354658eece4b317bd27d245ac6cf572de Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:10:39 -0500 Subject: [PATCH 11/21] Default version updates --- bin/default_pythons | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bin/default_pythons b/bin/default_pythons index 16f044b..c37d9d8 100755 --- a/bin/default_pythons +++ b/bin/default_pythons @@ -1,11 +1,17 @@ #!/usr/bin/env bash -DEFAULT_PYTHON_VERSION="python-3.6.9" -LATEST_38="python-3.8.0" -LATEST_37="python-3.7.5" -LATEST_36="python-3.6.9" +DEFAULT_PYTHON_VERSION="python-3.6.10" +LATEST_38="python-3.8.1" +LATEST_37="python-3.7.6" +LATEST_36="python-3.6.10" LATEST_35="python-3.5.7" LATEST_34="python-3.4.10" LATEST_27="python-2.7.17" -export DEFAULT_PYTHON_VERSION LATEST_38 LATEST_37 LATEST_36 LATEST_35 LATEST_34 LATEST_27 +export DEFAULT_PYTHON_VERSION \ + LATEST_38 \ + LATEST_37 \ + LATEST_36 \ + LATEST_35 \ + LATEST_34 \ + LATEST_27 From f189df54151839a90973f361d787976ef28427ad Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:13:54 -0500 Subject: [PATCH 12/21] Warn about EOL on Python 2 install --- bin/steps/python | 10 +++++++++- test/run-versions | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bin/steps/python b/bin/steps/python index 2625b44..9046552 100755 --- a/bin/steps/python +++ b/bin/steps/python @@ -9,6 +9,10 @@ VENDORED_PYTHON="${VENDOR_URL}/runtimes/$PYTHON_VERSION.tar.gz" SECURITY_UPDATE="Python 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" + +PYTHON_2_EOL_UPDATE="Python 2 has reached it's community EOL. Upgrade your Python runtime to maintain a secure application as soon as possible." + # check if runtime exists if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then if [[ "$PYTHON_VERSION" == $PY38* ]]; then @@ -48,8 +52,12 @@ if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then fi if [[ "$PYTHON_VERSION" == $PY27* ]]; then # security update note + if [[ $(date "+%Y") > "2019" ]]; then + puts-warn "$PYTHON_2_EOL_UPDATE" + echo " Learn More: https://devcenter.heroku.com/articles/python-2-7-eol-faq" + fi if [ "$PYTHON_VERSION" != "$LATEST_27" ]; then - puts-warn "$SECURITY_UPDATE" "$LATEST_27" + puts-warn "$ONLY_SUPPORTED_2_VERSION" "$LATEST_27" echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes" fi fi diff --git a/test/run-versions b/test/run-versions index 0698b7c..f9fbc66 100755 --- a/test/run-versions +++ b/test/run-versions @@ -18,6 +18,7 @@ testPython2() { echo $LATEST_27 > "runtime.txt" compile "python2" assertCaptured $LATEST_27 + assertCaptured "python-2-7-eol-faq" assertNotCaptured "security update" assertCaptured "Installing SQLite3" assertCapturedSuccess @@ -26,7 +27,8 @@ testPython2() { testPython2_warn() { compile "python2_warn" assertCaptured "python-2.7.15" - assertCaptured "security update!" + assertCaptured "python-2-7-eol-faq" + assertCaptured "Only the latest version" assertCaptured "Installing SQLite3" assertCapturedSuccess } From 6fc11b83703ad05c1807d44ce4427778d24b59c4 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:15:44 -0500 Subject: [PATCH 13/21] add up-to-date Pypy runtimes --- builds/runtimes/pypy2.7 | 23 +++++++++++++++++++++++ builds/runtimes/pypy2.7-7.2.0 | 4 ++++ builds/runtimes/pypy3.6 | 23 +++++++++++++++++++++++ builds/runtimes/pypy3.6-7.2.0 | 4 ++++ 4 files changed, 54 insertions(+) create mode 100755 builds/runtimes/pypy2.7 create mode 100755 builds/runtimes/pypy2.7-7.2.0 create mode 100755 builds/runtimes/pypy3.6 create mode 100755 builds/runtimes/pypy3.6-7.2.0 diff --git a/builds/runtimes/pypy2.7 b/builds/runtimes/pypy2.7 new file mode 100755 index 0000000..698aa17 --- /dev/null +++ b/builds/runtimes/pypy2.7 @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# fail hard +set -o pipefail +# fail harder +set -eu + +OUT_PREFIX=$1 + +dep_formula=${0#$WORKSPACE_DIR/} # this is the original script, e.g. pypy-5.3.1 +dep_name=$(basename $BASH_SOURCE) # this is us +dep_version=${dep_formula##*"/${dep_name}-"} # "subtract" our name from full version name +dep_package=${dep_name}-v${dep_version} # it's always "pypy2-…" +dep_dirname=${dep_package}-linux64 +dep_archive_name=${dep_dirname}.tar.bz2 +dep_url=https://bitbucket.org/pypy/pypy/downloads/${dep_archive_name} + +echo "Building PyPy…" +echo "${dep_url}" + +curl -L "${dep_url}" | tar jx -C "${OUT_PREFIX}" --strip-components 1 # extract to $OUT_PREFIX, drop the first directory level, which is the archive name + +ln "$OUT_PREFIX/bin/pypy" "$OUT_PREFIX/bin/python" diff --git a/builds/runtimes/pypy2.7-7.2.0 b/builds/runtimes/pypy2.7-7.2.0 new file mode 100755 index 0000000..40761e9 --- /dev/null +++ b/builds/runtimes/pypy2.7-7.2.0 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/pypy2.7 diff --git a/builds/runtimes/pypy3.6 b/builds/runtimes/pypy3.6 new file mode 100755 index 0000000..f24f806 --- /dev/null +++ b/builds/runtimes/pypy3.6 @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# fail hard +set -o pipefail +# fail harder +set -eu + +OUT_PREFIX=$1 + +dep_formula=${0#$WORKSPACE_DIR/} # this is the original script, e.g. pypy-5.3.1 +dep_name=$(basename $BASH_SOURCE) # this is us +dep_version=${dep_formula##*"/${dep_name}-"} # "subtract" our name from full version name +dep_package=${dep_name}${dep_version_prefix:-}-v${dep_version}${dep_version_suffix:-} +dep_dirname=${dep_package}-linux64 +dep_archive_name=${dep_dirname}.tar.bz2 +dep_url=https://bitbucket.org/pypy/pypy/downloads/${dep_archive_name} + +echo "Building PyPy3…" +echo "${dep_url}" + +curl -L "${dep_url}" | tar jx -C "${OUT_PREFIX}" --strip-components 1 # extract to $OUT_PREFIX, drop the first directory level, which is the archive name + +ln "$OUT_PREFIX/bin/pypy3" "$OUT_PREFIX/bin/python" diff --git a/builds/runtimes/pypy3.6-7.2.0 b/builds/runtimes/pypy3.6-7.2.0 new file mode 100755 index 0000000..e429be8 --- /dev/null +++ b/builds/runtimes/pypy3.6-7.2.0 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/pypy3.6 From 179f345f5b63d0ea4ec97729d913c3056d737d6f Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:16:20 -0500 Subject: [PATCH 14/21] add beta Pypy support --- bin/compile | 2 ++ bin/default_pythons | 6 +++++- bin/steps/python | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bin/compile b/bin/compile index 9319463..3f8ce2a 100755 --- a/bin/compile +++ b/bin/compile @@ -58,6 +58,8 @@ PY36="python-3.6" PY35="python-3.5" PY34="python-3.4" PY27="python-2.7" +PYPY27="pypy2.7" +PYPY36="pypy3.6" # Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)? DEFAULT_PYTHON_STACK="cedar-14" diff --git a/bin/default_pythons b/bin/default_pythons index c37d9d8..a648667 100755 --- a/bin/default_pythons +++ b/bin/default_pythons @@ -7,6 +7,8 @@ LATEST_36="python-3.6.10" LATEST_35="python-3.5.7" LATEST_34="python-3.4.10" LATEST_27="python-2.7.17" +PYPY_36="pypy3.6-7.2.0" +PYPY_27="pypy2.7-7.2.0" export DEFAULT_PYTHON_VERSION \ LATEST_38 \ @@ -14,4 +16,6 @@ export DEFAULT_PYTHON_VERSION \ LATEST_36 \ LATEST_35 \ LATEST_34 \ - LATEST_27 + LATEST_27 \ + PYPY_36 \ + PYPY_27 diff --git a/bin/steps/python b/bin/steps/python index 9046552..a2971f1 100755 --- a/bin/steps/python +++ b/bin/steps/python @@ -61,6 +61,20 @@ if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes" fi 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}?" + 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}?" + echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes" + fi + fi else puts-warn "Requested runtime ($PYTHON_VERSION) is not available for this stack ($STACK)." puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support" From 848c846a3d1e875b710d6c0aae065b6b96074029 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 00:17:22 -0500 Subject: [PATCH 15/21] Add tests for beta Pypy support --- test/fixtures/pypy2_7/requirements.txt | 1 + test/fixtures/pypy2_7/runtime.txt | 1 + test/fixtures/pypy3_6/requirements.txt | 1 + test/fixtures/pypy3_6/runtime.txt | 1 + test/run-versions | 14 ++++++++++++++ 5 files changed, 18 insertions(+) create mode 100644 test/fixtures/pypy2_7/requirements.txt create mode 100644 test/fixtures/pypy2_7/runtime.txt create mode 100644 test/fixtures/pypy3_6/requirements.txt create mode 100644 test/fixtures/pypy3_6/runtime.txt diff --git a/test/fixtures/pypy2_7/requirements.txt b/test/fixtures/pypy2_7/requirements.txt new file mode 100644 index 0000000..d3e4ba5 --- /dev/null +++ b/test/fixtures/pypy2_7/requirements.txt @@ -0,0 +1 @@ +django diff --git a/test/fixtures/pypy2_7/runtime.txt b/test/fixtures/pypy2_7/runtime.txt new file mode 100644 index 0000000..c502b68 --- /dev/null +++ b/test/fixtures/pypy2_7/runtime.txt @@ -0,0 +1 @@ +pypy2.7-7.2.0 diff --git a/test/fixtures/pypy3_6/requirements.txt b/test/fixtures/pypy3_6/requirements.txt new file mode 100644 index 0000000..d3e4ba5 --- /dev/null +++ b/test/fixtures/pypy3_6/requirements.txt @@ -0,0 +1 @@ +django diff --git a/test/fixtures/pypy3_6/runtime.txt b/test/fixtures/pypy3_6/runtime.txt new file mode 100644 index 0000000..e1af38f --- /dev/null +++ b/test/fixtures/pypy3_6/runtime.txt @@ -0,0 +1 @@ +pypy3.6-7.2.0 diff --git a/test/run-versions b/test/run-versions index f9fbc66..fcfaf94 100755 --- a/test/run-versions +++ b/test/run-versions @@ -168,6 +168,20 @@ testPython3_8_fail() { assertCapturedError } +testPypy3_6() { + compile "pypy3_6" + assertCaptured "Installing Pypy 3.6" + assertCaptured "$PYPY_36" + assertCapturedSuccess +} + +testPypy2_7() { + compile "pypy2_7" + assertCaptured "Installing Pypy 2.7" + assertCaptured "$PYPY_27" + assertCapturedSuccess +} + pushd $(dirname 0) >/dev/null popd >/dev/null From 0e1ac6217b2a0358ee16facb67ca77751b1f5753 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 01:22:30 -0500 Subject: [PATCH 16/21] correct test expectations --- test/run-versions | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/test/run-versions b/test/run-versions index fcfaf94..ba24d87 100755 --- a/test/run-versions +++ b/test/run-versions @@ -18,7 +18,11 @@ testPython2() { echo $LATEST_27 > "runtime.txt" compile "python2" assertCaptured $LATEST_27 - assertCaptured "python-2-7-eol-faq" + if [[ $(date "+%Y") > "2019" ]]; then + assertCaptured "python-2-7-eol-faq"; + else + assertNotCaptured "python-2-7-eol-faq"; + fi assertNotCaptured "security update" assertCaptured "Installing SQLite3" assertCapturedSuccess @@ -27,7 +31,11 @@ testPython2() { testPython2_warn() { compile "python2_warn" assertCaptured "python-2.7.15" - assertCaptured "python-2-7-eol-faq" + if [[ $(date "+%Y") > "2019" ]]; then + assertCaptured "python-2-7-eol-faq"; + else + assertNotCaptured "python-2-7-eol-faq"; + fi assertCaptured "Only the latest version" assertCaptured "Installing SQLite3" assertCapturedSuccess @@ -170,14 +178,14 @@ testPython3_8_fail() { testPypy3_6() { compile "pypy3_6" - assertCaptured "Installing Pypy 3.6" + assertCaptured "Installing pypy" assertCaptured "$PYPY_36" assertCapturedSuccess } testPypy2_7() { compile "pypy2_7" - assertCaptured "Installing Pypy 2.7" + assertCaptured "Installing pypy" assertCaptured "$PYPY_27" assertCapturedSuccess } From 2942fc8e4a1c336e800ce6288d72c51e0413ab7c Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 01:28:06 -0500 Subject: [PATCH 17/21] Correct Changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11babbc..1b1d08b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ # Master - New pythons released: - CPython 3.8.1, 3.7.6, 3.6.10 and 3.9.0a2 + Python 3.8.1, 3.7.6, 3.6.10 (CPython) Beta Release: Pypy 2.7 and 3.6, version 7.2.0 -------------------------------------------------------------------------------- From 7d743e7998bc83dda178d8e4a1445c61b130b28e Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 09:57:07 -0500 Subject: [PATCH 18/21] Don't test for pypy on cedar 14 --- test/run-versions | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/run-versions b/test/run-versions index ba24d87..06f1c3d 100755 --- a/test/run-versions +++ b/test/run-versions @@ -178,6 +178,9 @@ testPython3_8_fail() { testPypy3_6() { compile "pypy3_6" + if [[ $STACK = "cedar-14" ]]; then + assertCapturedError + else assertCaptured "Installing pypy" assertCaptured "$PYPY_36" assertCapturedSuccess @@ -185,6 +188,9 @@ testPypy3_6() { testPypy2_7() { compile "pypy2_7" + if [[ $STACK = "cedar-14" ]]; then + assertCapturedError + else assertCaptured "Installing pypy" assertCaptured "$PYPY_27" assertCapturedSuccess From 04199212271f4a3be79d3d2ace075704d5ad880d Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 10:56:14 -0500 Subject: [PATCH 19/21] bash is not python, so use bash block closers --- test/run-versions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/run-versions b/test/run-versions index 06f1c3d..7076654 100755 --- a/test/run-versions +++ b/test/run-versions @@ -180,7 +180,7 @@ testPypy3_6() { compile "pypy3_6" if [[ $STACK = "cedar-14" ]]; then assertCapturedError - else + fi assertCaptured "Installing pypy" assertCaptured "$PYPY_36" assertCapturedSuccess @@ -190,7 +190,7 @@ testPypy2_7() { compile "pypy2_7" if [[ $STACK = "cedar-14" ]]; then assertCapturedError - else + fi assertCaptured "Installing pypy" assertCaptured "$PYPY_27" assertCapturedSuccess From 0057d19082822d3cd0cfda1f3f282ae4df97ab27 Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 12:28:31 -0500 Subject: [PATCH 20/21] Typo in bash if-else block --- test/run-versions | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/run-versions b/test/run-versions index 7076654..c207be1 100755 --- a/test/run-versions +++ b/test/run-versions @@ -180,20 +180,22 @@ testPypy3_6() { compile "pypy3_6" if [[ $STACK = "cedar-14" ]]; then assertCapturedError + else + assertCaptured "Installing pypy" + assertCaptured "$PYPY_36" + assertCapturedSuccess fi - assertCaptured "Installing pypy" - assertCaptured "$PYPY_36" - assertCapturedSuccess } testPypy2_7() { compile "pypy2_7" if [[ $STACK = "cedar-14" ]]; then assertCapturedError + else + assertCaptured "Installing pypy" + assertCaptured "$PYPY_27" + assertCapturedSuccess fi - assertCaptured "Installing pypy" - assertCaptured "$PYPY_27" - assertCapturedSuccess } pushd $(dirname 0) >/dev/null From ec57979bf8b917ecded8180a97f8c7bc3132649e Mon Sep 17 00:00:00 2001 From: Casey Faist Date: Mon, 23 Dec 2019 13:14:06 -0500 Subject: [PATCH 21/21] comply with shellcheck, use -gt instead --- bin/steps/python | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/steps/python b/bin/steps/python index a2971f1..8790f61 100755 --- a/bin/steps/python +++ b/bin/steps/python @@ -52,7 +52,7 @@ if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then fi if [[ "$PYTHON_VERSION" == $PY27* ]]; then # security update note - if [[ $(date "+%Y") > "2019" ]]; then + if [[ "$(date "+%Y")" -gt "2019" ]]; then puts-warn "$PYTHON_2_EOL_UPDATE" echo " Learn More: https://devcenter.heroku.com/articles/python-2-7-eol-faq" fi