From 8cb379f83b3f35ecaf3ec90e711b306d79711023 Mon Sep 17 00:00:00 2001 From: Ed Morley <501702+edmorley@users.noreply.github.com> Date: Tue, 19 May 2020 14:16:59 +0100 Subject: [PATCH] Add support for latest CPython and PyPy versions (#977) Adds support for: * CPython 2.7.18, 3.5.9, 3.7.7 and 3.8.3 * PyPy 2.7 and 3.6, version 7.3.1 The binaries will need generating and uploading before CI will pass. Note: Whilst the build script for CPython 3.8.3 did already exist in the repository, it appears to have been accidentally created in #920, which predated the existence of that version of Python - so the binaries do not exist on S3. The Heroku-18 Docker image tag has also been unpinned, since the new libssl version is now available at runtime in all environments, so we don't need to force building against the older version of the headers. Fixes W-7582174. --- CHANGELOG.md | 2 ++ README.md | 6 +++--- bin/default_pythons | 12 ++++++------ builds/heroku-18.Dockerfile | 2 +- builds/runtimes/pypy2.7-7.3.1 | 4 ++++ builds/runtimes/pypy3.6-7.3.1 | 4 ++++ builds/runtimes/python-2.7.18 | 27 +++++++++++++++++++++++++++ builds/runtimes/python-3.5.9 | 4 ++++ builds/runtimes/python-3.7.7 | 4 ++++ builds/runtimes/python2 | 0 test/fixtures/python2/runtime.txt | 2 +- test/fixtures/python3_5/runtime.txt | 2 +- 12 files changed, 57 insertions(+), 12 deletions(-) create mode 100755 builds/runtimes/pypy2.7-7.3.1 create mode 100755 builds/runtimes/pypy3.6-7.3.1 create mode 100755 builds/runtimes/python-2.7.18 create mode 100755 builds/runtimes/python-3.5.9 create mode 100755 builds/runtimes/python-3.7.7 mode change 100644 => 100755 builds/runtimes/python2 diff --git a/CHANGELOG.md b/CHANGELOG.md index bfb248f..4ea834e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ # Master +- Python 2.7.18, 3.5.9, 3.7.7 and 3.8.3 are now available (CPython). +- PyPy 2.7 and 3.6, version 7.3.1 are now available (Note: PyPy support is in beta) - Docs: Fix explanation of runtime.txt generation when using pipenv - Bugfix: Correctly detect Python version when using a `python_version` of `3.8` in `Pipfile.lock` diff --git a/README.md b/README.md index dda1bfa..b7f2d6c 100644 --- a/README.md +++ b/README.md @@ -62,10 +62,10 @@ Specify a Python Runtime Supported runtime options include: -- `python-3.8.2` -- `python-3.7.6` +- `python-3.8.3` +- `python-3.7.7` - `python-3.6.10` -- `python-2.7.17` +- `python-2.7.18` ## Tests diff --git a/bin/default_pythons b/bin/default_pythons index 6c6d4a1..f016b86 100755 --- a/bin/default_pythons +++ b/bin/default_pythons @@ -1,14 +1,14 @@ #!/usr/bin/env bash DEFAULT_PYTHON_VERSION="python-3.6.10" -LATEST_38="python-3.8.2" -LATEST_37="python-3.7.6" +LATEST_38="python-3.8.3" +LATEST_37="python-3.7.7" LATEST_36="python-3.6.10" -LATEST_35="python-3.5.7" +LATEST_35="python-3.5.9" 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" +LATEST_27="python-2.7.18" +PYPY_36="pypy3.6-7.3.1" +PYPY_27="pypy2.7-7.3.1" export DEFAULT_PYTHON_VERSION \ LATEST_38 \ diff --git a/builds/heroku-18.Dockerfile b/builds/heroku-18.Dockerfile index 80ad34d..9ee3080 100644 --- a/builds/heroku-18.Dockerfile +++ b/builds/heroku-18.Dockerfile @@ -1,4 +1,4 @@ -FROM heroku/heroku:18-build.v16 +FROM heroku/heroku:18-build WORKDIR /app ENV WORKSPACE_DIR="/app/builds" \ diff --git a/builds/runtimes/pypy2.7-7.3.1 b/builds/runtimes/pypy2.7-7.3.1 new file mode 100755 index 0000000..40761e9 --- /dev/null +++ b/builds/runtimes/pypy2.7-7.3.1 @@ -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-7.3.1 b/builds/runtimes/pypy3.6-7.3.1 new file mode 100755 index 0000000..e429be8 --- /dev/null +++ b/builds/runtimes/pypy3.6-7.3.1 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/pypy3.6 diff --git a/builds/runtimes/python-2.7.18 b/builds/runtimes/python-2.7.18 new file mode 100755 index 0000000..155e16d --- /dev/null +++ b/builds/runtimes/python-2.7.18 @@ -0,0 +1,27 @@ +#!/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 '{}' + diff --git a/builds/runtimes/python-3.5.9 b/builds/runtimes/python-3.5.9 new file mode 100755 index 0000000..ad41723 --- /dev/null +++ b/builds/runtimes/python-3.5.9 @@ -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.7 b/builds/runtimes/python-3.7.7 new file mode 100755 index 0000000..ad41723 --- /dev/null +++ b/builds/runtimes/python-3.7.7 @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Build Path: /app/.heroku/python/ + +source $(dirname $0)/python3 diff --git a/builds/runtimes/python2 b/builds/runtimes/python2 old mode 100644 new mode 100755 diff --git a/test/fixtures/python2/runtime.txt b/test/fixtures/python2/runtime.txt index b334cca..586b673 100644 --- a/test/fixtures/python2/runtime.txt +++ b/test/fixtures/python2/runtime.txt @@ -1 +1 @@ -python-2.7.17 +python-2.7.18 diff --git a/test/fixtures/python3_5/runtime.txt b/test/fixtures/python3_5/runtime.txt index df4118a..435a592 100644 --- a/test/fixtures/python3_5/runtime.txt +++ b/test/fixtures/python3_5/runtime.txt @@ -1 +1 @@ -python-3.5.7 +python-3.5.9