Compare commits

..

8 Commits

Author SHA1 Message Date
Casey 76bb572a4d Release prep 151 (#813)
* new runtimes

* update default latest
2019-03-21 10:54:12 -07:00
Casey 8db4a79392 changelog 150 update (#810) 2019-03-14 11:40:14 -07:00
Casey 21430070ad Python release prep (#809)
* new recipe for new runtime

* add new runtime formula

* add test updates for new runtime release

* wrangle tests into submission

* update tests to use default_pythons

* delete commented code
2019-03-13 12:25:03 -07:00
Casey 20bbb3f54d changelog update for v149 (#806) 2019-03-11 11:51:07 -07:00
Casey bebc0cf439 Python 2.7.16 (#808)
* new recipe for new runtime

* add new runtime formula

* wrangle tests into submission
2019-03-11 13:22:29 -04:00
David Zülke c361c2ffc4 HOTFIX for cedar-14 python builds (#805) 2019-03-04 14:46:33 -08:00
Casey 13d2a58add update changelog (#803) 2019-02-21 15:24:08 -08:00
Casey 49e9147439 track usage of older feature steps (#802)
* track usage of older feature steps

* remove typo whitespace

* make buildvars consistently cased
2019-02-21 14:06:20 -08:00
21 changed files with 157 additions and 38 deletions
+16
View File
@@ -1,5 +1,21 @@
# Python Buildpack Changelog # Python Buildpack Changelog
# 151 (2019-03-)
Python 3.5.7 and 3.4.10 now available on all Heroku stacks.
# 150 (2019-03-13)
Python 2.7.16 now available on all Heroku stacks.
# 149 (2019-03-04)
Hotfix for broken Cedar 14 deploys
# 148 (2019-02-21)
No user facing changes, improving internal metrics
# 147 (2019-02-07) # 147 (2019-02-07)
Python 3.7.2 and 3.6.8 now available on all Heroku stacks. Python 3.7.2 and 3.6.8 now available on all Heroku stacks.
+1 -1
View File
@@ -4,7 +4,7 @@
test: test-heroku-18 test-heroku-16 test: test-heroku-18 test-heroku-16
check: check:
@shellcheck -x bin/compile bin/detect bin/release bin/test-compile bin/utils bin/warnings @shellcheck -x bin/compile bin/detect bin/release bin/test-compile bin/utils bin/warnings bin/default_pythons
@shellcheck -x bin/steps/collectstatic bin/steps/eggpath-fix bin/steps/eggpath-fix2 bin/steps/gdal bin/steps/geo-libs bin/steps/mercurial bin/steps/nltk bin/steps/pip-install bin/steps/pip-uninstall bin/steps/pipenv bin/steps/pipenv-python-version bin/steps/pylibmc bin/steps/python @shellcheck -x bin/steps/collectstatic bin/steps/eggpath-fix bin/steps/eggpath-fix2 bin/steps/gdal bin/steps/geo-libs bin/steps/mercurial bin/steps/nltk bin/steps/pip-install bin/steps/pip-uninstall bin/steps/pipenv bin/steps/pipenv-python-version bin/steps/pylibmc bin/steps/python
@shellcheck -x bin/steps/hooks/* @shellcheck -x bin/steps/hooks/*
+4 -12
View File
@@ -45,16 +45,9 @@ if [[ -n ${BUILDPACK_VENDOR_URL:-} ]]; then
fi fi
export VENDOR_URL export VENDOR_URL
# Which versions of Python are we using? # Default Python Versions
# These variables are used to specify which versions of Python to install by default, # shellcheck source=bin/default_pythons
# as well as prompt the user to upgrade if they are using an unsupported version. source "$BIN_DIR/default_pythons"
# Note: When 3.7 lands, I recommend switching to LATEST_36 and LATEST_37.
DEFAULT_PYTHON_VERSION="python-3.6.8"
LATEST_36="python-3.6.8"
LATEST_37="python-3.7.2"
LATEST_35="python-3.5.6"
LATEST_34="python-3.4.9"
LATEST_27="python-2.7.15"
# Supported Python Branches # Supported Python Branches
PY37="python-3.7" PY37="python-3.7"
@@ -68,8 +61,7 @@ DEFAULT_PYTHON_STACK="cedar-14"
# If pip doesn't match this version (the version we install), run the installer. # If pip doesn't match this version (the version we install), run the installer.
PIP_UPDATE="9.0.2" PIP_UPDATE="9.0.2"
export DEFAULT_PYTHON_VERSION DEFAULT_PYTHON_STACK PIP_UPDATE export DEFAULT_PYTHON_STACK PIP_UPDATE
export LATEST_27 LATEST_36 LATEST_37 LATEST_35 LATEST_34
export PY37 PY36 PY35 PY27 PY34 export PY37 PY36 PY35 PY27 PY34
# Common Problem Warnings: # Common Problem Warnings:
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
DEFAULT_PYTHON_VERSION="python-3.6.8"
LATEST_36="python-3.6.8"
LATEST_37="python-3.7.2"
LATEST_35="python-3.5.7"
LATEST_34="python-3.4.10"
LATEST_27="python-2.7.16"
export DEFAULT_PYTHON_VERSION LATEST_37 LATEST_36 LATEST_35 LATEST_34 LATEST_27
+1 -1
View File
@@ -26,9 +26,9 @@ if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
mkdir -p .heroku/vendor mkdir -p .heroku/vendor
# Download and extract cryptography into target vendor directory. # Download and extract cryptography into target vendor directory.
curl "$VENDORED_GDAL" -s | tar zxv -C .heroku/vendor &> /dev/null curl "$VENDORED_GDAL" -s | tar zxv -C .heroku/vendor &> /dev/null
mcount "steps.vendor.gdal"
fi fi
GDAL=$(pwd)/vendor GDAL=$(pwd)/vendor
export GDAL export GDAL
fi fi
+3
View File
@@ -22,6 +22,7 @@ source "$BIN_DIR/utils"
# If GDAL exists within requirements, use vendored gdal. # If GDAL exists within requirements, use vendored gdal.
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
mcount "buildvar.BUILD_WITH_GEO_LIBRARIES"
if [ ! -f ".heroku/vendor/bin/proj" ]; then if [ ! -f ".heroku/vendor/bin/proj" ]; then
echo "-----> Bootstrapping gdal, geos, proj." echo "-----> Bootstrapping gdal, geos, proj."
@@ -31,9 +32,11 @@ if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
curl "$VENDORED_GEOS" -s | tar zxv -C .heroku/vendor &> /dev/null curl "$VENDORED_GEOS" -s | tar zxv -C .heroku/vendor &> /dev/null
curl "$VENDORED_PROJ" -s | tar zxv -C .heroku/vendor &> /dev/null curl "$VENDORED_PROJ" -s | tar zxv -C .heroku/vendor &> /dev/null
mcount "steps.vendor.geo_libs"
# Copy libjasper from build image to slug. # Copy libjasper from build image to slug.
if [[ "$STACK" == "heroku-16" ]]; then if [[ "$STACK" == "heroku-16" ]]; then
cp /usr/lib/x86_64-linux-gnu/libjasper.so* ".heroku/vendor/lib/." cp /usr/lib/x86_64-linux-gnu/libjasper.so* ".heroku/vendor/lib/."
mcount "steps.vendor.libjasper"
fi fi
fi fi
+1 -1
View File
@@ -4,6 +4,6 @@
if [[ -f "requirements.txt" ]]; then if [[ -f "requirements.txt" ]]; then
if (grep -Fiq "hg+" requirements.txt) then if (grep -Fiq "hg+" requirements.txt) then
/app/.heroku/python/bin/pip install mercurial | cleanup | indent /app/.heroku/python/bin/pip install mercurial | cleanup | indent
mcount "steps.mercurial"
fi fi
fi fi
+2
View File
@@ -27,6 +27,8 @@ if sp-grep -s nltk; then
python -m nltk.downloader -d "$BUILD_DIR/.heroku/python/nltk_data" "${nltk_packages[@]}" | indent python -m nltk.downloader -d "$BUILD_DIR/.heroku/python/nltk_data" "${nltk_packages[@]}" | indent
set_env NLTK_DATA "/app/.heroku/python/nltk_data" set_env NLTK_DATA "/app/.heroku/python/nltk_data"
mcount "buildvar.NLTK_PACKAGES_DEFINITION"
mcount "steps.nltk"
else else
puts-warn "'nltk.txt' not found, not downloading any corpora" puts-warn "'nltk.txt' not found, not downloading any corpora"
puts-warn "Learn more: https://devcenter.heroku.com/articles/python-nltk" puts-warn "Learn more: https://devcenter.heroku.com/articles/python-nltk"
+1
View File
@@ -29,6 +29,7 @@ if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
mkdir -p .heroku/vendor mkdir -p .heroku/vendor
# Download and extract libmemcached into target vendor directory. # Download and extract libmemcached into target vendor directory.
curl "$VENDORED_MEMCACHED" -s | tar zxv -C .heroku/vendor &> /dev/null curl "$VENDORED_MEMCACHED" -s | tar zxv -C .heroku/vendor &> /dev/null
mcount "steps.vendor.pylibmc"
fi fi
LIBMEMCACHED=$(pwd)/vendor LIBMEMCACHED=$(pwd)/vendor
+5 -1
View File
@@ -4,7 +4,11 @@
source "$BIN_DIR/utils" source "$BIN_DIR/utils"
sqlite3_version() { sqlite3_version() {
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')} if [ "$STACK" = "cedar-14" ]; then
SQLITE3_VERSION="3.8.2-1ubuntu2.2"
else
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')}
fi
export SQLITE3_VERSION export SQLITE3_VERSION
} }
+27
View File
@@ -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.16/Python-2.7.16.tgz'
curl -L $SOURCE_TARBALL | tar xz
mv Python-2.7.16 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 '{}' +
+32
View File
@@ -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.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
+32
View File
@@ -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.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
+1 -1
View File
@@ -1 +1 @@
python-2.7.15 python-2.7.16
+1 -1
View File
@@ -1 +1 @@
python-2.7.16 python-2.7.99
+1 -1
View File
@@ -1 +1 @@
python-2.7.14 python-2.7.15
+1 -1
View File
@@ -1 +1 @@
python-3.4.10 python-3.4.99
+1 -1
View File
@@ -1 +1 @@
python-3.5.7 python-3.5.99
+1 -1
View File
@@ -1 +1 @@
python-3.6.9 python-3.6.99
+1 -1
View File
@@ -1 +1 @@
python-3.7.3 python-3.7.99
+15 -15
View File
@@ -1,5 +1,9 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Default Python Versions
# shellcheck source=bin/default_pythons
source "$BIN_DIR/default_pythons"
testAirflow() { testAirflow() {
export SLUGIFY_USES_TEXT_UNIDECODE="yes" export SLUGIFY_USES_TEXT_UNIDECODE="yes"
compile "airflow" compile "airflow"
@@ -19,13 +23,13 @@ testPipenvLock() {
testPipenvVersion() { testPipenvVersion() {
compile "pipenv-version" compile "pipenv-version"
assertCaptured "3.6.8" assertCaptured $DEFAULT_PYTHON_VERSION
assertCapturedSuccess assertCapturedSuccess
} }
testPipenvVersion2() { testPipenvVersion2() {
compile "pipenv-version2" compile "pipenv-version2"
assertCaptured "2.7.15" assertCaptured $LATEST_27
assertCapturedSuccess assertCapturedSuccess
} }
testPipenvFullVersion() { testPipenvFullVersion() {
@@ -95,25 +99,21 @@ testPylibmc() {
testPythonDefault() { testPythonDefault() {
compile "pythonDefault" compile "pythonDefault"
assertCaptured "python-3.6.8" assertCaptured $DEFAULT_PYTHON_VERSION
assertCapturedSuccess assertCapturedSuccess
} }
testPython2() { testPython2() {
compile "python2" compile "python2"
assertCaptured "python-2.7.15" assertCaptured $LATEST_27
assertCapturedSuccess assertCapturedSuccess
} }
testPython2_warn() { testPython2_warn() {
compile "python2_warn" compile "python2_warn"
if [[ $STACK = "heroku-18" ]]; then assertCaptured "python-2.7.15"
assertCapturedError assertCaptured "security update!"
else assertCapturedSuccess
assertCaptured "python-2.7.14"
assertCaptured "security update!"
assertCapturedSuccess
fi
} }
testPython2_fail() { testPython2_fail() {
@@ -124,7 +124,7 @@ testPython2_fail() {
testPython3_4() { testPython3_4() {
compile "python3_4" compile "python3_4"
assertCaptured "python-3.4.9" assertCaptured $LATEST_34
assertCapturedSuccess assertCapturedSuccess
} }
@@ -147,7 +147,7 @@ testPython3_4_fail() {
testPython3_5() { testPython3_5() {
compile "python3_5" compile "python3_5"
assertCaptured "python-3.5.6" assertCaptured $LATEST_35
assertCapturedSuccess assertCapturedSuccess
} }
@@ -170,7 +170,7 @@ testPython3_5_fail() {
testPython3_6() { testPython3_6() {
compile "python3_6" compile "python3_6"
assertCaptured "python-3.6.8" assertCaptured $LATEST_36
assertCapturedSuccess assertCapturedSuccess
} }
@@ -192,7 +192,7 @@ testPython3_7() {
if [[ $STACK = "cedar-14" ]]; then if [[ $STACK = "cedar-14" ]]; then
assertCapturedError assertCapturedError
else else
assertCaptured "python-3.7.2" assertCaptured $LATEST_37
assertCapturedSuccess assertCapturedSuccess
fi fi
} }