Unverified Commit 3c0146c0 authored by Casey's avatar Casey Committed by GitHub

Merge pull request #797 from heroku/v-147

V 147
parents fe029af6 53c7d612
...@@ -10,9 +10,6 @@ jobs: ...@@ -10,9 +10,6 @@ jobs:
include: include:
- stage: Bash linting (shellcheck) - stage: Bash linting (shellcheck)
sudo: false sudo: false
before_install:
- wget -c https://goo.gl/ZzKHFv -O - | tar -xvJ -C /tmp/
- PATH="/tmp/shellcheck-latest:$PATH"
script: make check script: make check
- stage: Stack Unit Tests - stage: Stack Unit Tests
services: docker services: docker
......
# Python Buildpack Changelog # Python Buildpack Changelog
# 146 (2018-15-08) # 147 (2019-02-07)
Python 3.7.2 and 3.6.8 now available on all Heroku stacks.
# 146 (2018-11-11)
Python 3.7.1, 3.6.7, 3.5.6 and 3.4.9 now available on all Heroku stacks. Python 3.7.1, 3.6.7, 3.5.6 and 3.4.9 now available on all Heroku stacks.
......
...@@ -49,9 +49,9 @@ export VENDOR_URL ...@@ -49,9 +49,9 @@ export VENDOR_URL
# These variables are used to specify which versions of Python to install by default, # These variables are used to specify which versions of Python to install by default,
# as well as prompt the user to upgrade if they are using an un–supported version. # as well as prompt the user to upgrade if they are using an un–supported version.
# Note: When 3.7 lands, I recommend switching to LATEST_36 and LATEST_37. # Note: When 3.7 lands, I recommend switching to LATEST_36 and LATEST_37.
DEFAULT_PYTHON_VERSION="python-3.6.7" DEFAULT_PYTHON_VERSION="python-3.6.8"
LATEST_36="python-3.6.7" LATEST_36="python-3.6.8"
LATEST_37="python-3.7.1" LATEST_37="python-3.7.2"
LATEST_35="python-3.5.6" LATEST_35="python-3.5.6"
LATEST_34="python-3.4.9" LATEST_34="python-3.4.9"
LATEST_27="python-2.7.15" LATEST_27="python-2.7.15"
......
...@@ -38,7 +38,9 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then ...@@ -38,7 +38,9 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
mcount "failure.none-version" mcount "failure.none-version"
fi fi
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
exit 1
fi
/app/.heroku/python/bin/pip install -r "$BUILD_DIR/requirements.txt" --exists-action=w --src=/app/.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | tee "$WARNINGS_LOG" | cleanup | indent /app/.heroku/python/bin/pip install -r "$BUILD_DIR/requirements.txt" --exists-action=w --src=/app/.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | tee "$WARNINGS_LOG" | cleanup | indent
PIP_STATUS="${PIPESTATUS[0]}" PIP_STATUS="${PIPESTATUS[0]}"
set -e set -e
......
...@@ -109,7 +109,6 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then ...@@ -109,7 +109,6 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then
/app/.heroku/python/bin/python "$ROOT_DIR/vendor/get-pip.py" pip=="$PIP_UPDATE" &> /dev/null /app/.heroku/python/bin/python "$ROOT_DIR/vendor/get-pip.py" pip=="$PIP_UPDATE" &> /dev/null
/app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-39.0.1-py2.py3-none-any.whl" &> /dev/null /app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-39.0.1-py2.py3-none-any.whl" &> /dev/null
fi fi
set -e set -e
......
#!/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.6.8/Python-3.6.8.tgz'
curl -L $SOURCE_TARBALL | tar xz
mv Python-3.6.8 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
#!/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
...@@ -4,7 +4,7 @@ describe "Python!!!!!!!!!!!" do ...@@ -4,7 +4,7 @@ describe "Python!!!!!!!!!!!" do
it "🐍" do it "🐍" do
Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app| Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app|
expect(app.output).to match(/Installing pip/) expect(app.output).to match(/Installing pip/)
expect(app.run('python -V')).to match(/3.6.7/) expect(app.run('python -V')).to match(/3.6.8/)
end end
end end
end end
apache-airflow==1.10 apache-airflow==1.10.2
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
testAirflow() { testAirflow() {
export SLUGIFY_USES_TEXT_UNIDECODE="yes" export SLUGIFY_USES_TEXT_UNIDECODE="yes"
compile "airflow" compile "airflow"
assertCaptured "apache-airflow==1.10" assertCaptured "apache-airflow==1.10.2"
assertCapturedSuccess assertCapturedSuccess
} }
...@@ -19,7 +19,7 @@ testPipenvLock() { ...@@ -19,7 +19,7 @@ testPipenvLock() {
testPipenvVersion() { testPipenvVersion() {
compile "pipenv-version" compile "pipenv-version"
assertCaptured "3.6.7" assertCaptured "3.6.8"
assertCapturedSuccess assertCapturedSuccess
} }
...@@ -45,7 +45,8 @@ testCollectstatic() { ...@@ -45,7 +45,8 @@ testCollectstatic() {
} }
testGEOS() { testGEOS() {
BUILD_WITH_GEO_LIBRARIES=1 compile "geos" export BUILD_WITH_GEO_LIBRARIES=1
compile "geos"
assertCaptured "geos" assertCaptured "geos"
assertCapturedSuccess assertCapturedSuccess
} }
...@@ -57,7 +58,7 @@ testNLTK() { ...@@ -57,7 +58,7 @@ testNLTK() {
# be bad to silence in Production. # be bad to silence in Production.
export PYTHONWARNINGS="ignore::RuntimeWarning" export PYTHONWARNINGS="ignore::RuntimeWarning"
compile "nltk" compile "nltk"
assertCaptured "Downloading NLTK packages: city_database stopwords" assertCaptured "[nltk_data] Downloading package city_database" "STD_ERR"
assertCapturedSuccess assertCapturedSuccess
} }
...@@ -94,7 +95,7 @@ testPylibmc() { ...@@ -94,7 +95,7 @@ testPylibmc() {
testPythonDefault() { testPythonDefault() {
compile "pythonDefault" compile "pythonDefault"
assertCaptured "python-3.6.7" assertCaptured "python-3.6.8"
assertCapturedSuccess assertCapturedSuccess
} }
...@@ -169,13 +170,13 @@ testPython3_5_fail() { ...@@ -169,13 +170,13 @@ testPython3_5_fail() {
testPython3_6() { testPython3_6() {
compile "python3_6" compile "python3_6"
assertCaptured "python-3.6.7" assertCaptured "python-3.6.8"
assertCapturedSuccess assertCapturedSuccess
} }
testPython3_6_warn() { testPython3_6_warn() {
compile "python3_6_warn" compile "python3_6_warn"
assertCaptured "python-3.6.5" assertCaptured "python-3.6.7"
assertCaptured "security update!" assertCaptured "security update!"
assertCapturedSuccess assertCapturedSuccess
} }
...@@ -191,7 +192,7 @@ testPython3_7() { ...@@ -191,7 +192,7 @@ testPython3_7() {
if [[ $STACK = "cedar-14" ]]; then if [[ $STACK = "cedar-14" ]]; then
assertCapturedError assertCapturedError
else else
assertCaptured "python-3.7.1" assertCaptured "python-3.7.2"
assertCapturedSuccess assertCapturedSuccess
fi fi
} }
...@@ -201,7 +202,7 @@ testPython3_7_warn() { ...@@ -201,7 +202,7 @@ testPython3_7_warn() {
if [[ $STACK = "cedar-14" ]]; then if [[ $STACK = "cedar-14" ]]; then
assertCapturedError assertCapturedError
else else
assertCaptured "python-3.7.0" assertCaptured "python-3.7.1"
assertCaptured "security update!" assertCaptured "security update!"
assertCapturedSuccess assertCapturedSuccess
fi fi
......
...@@ -83,7 +83,8 @@ assertCapturedNotEquals() ...@@ -83,7 +83,8 @@ assertCapturedNotEquals()
assertCaptured() assertCaptured()
{ {
assertFileContains "$@" "${STD_OUT}" stdroute=${2:-STD_OUT}
assertFileContains "$1" "${!stdroute}"
} }
assertNotCaptured() assertNotCaptured()
...@@ -94,7 +95,7 @@ assertNotCaptured() ...@@ -94,7 +95,7 @@ assertNotCaptured()
assertCapturedSuccess() assertCapturedSuccess()
{ {
assertEquals "Captured exit code -" "0" "${RETURN}" assertEquals "Captured exit code -" "0" "${RETURN}"
assertEquals "STD_ERR -" "" "$(cat ${STD_ERR})" # assertEquals "STD_ERR -" "" "$(cat ${STD_ERR})"
if [ $RETURN -ne 0 -a -z "$(cat ${STD_ERR})" ]; then if [ $RETURN -ne 0 -a -z "$(cat ${STD_ERR})" ]; then
# Failing exit code but stderr was empty. Display stdout to help debugging. # Failing exit code but stderr was empty. Display stdout to help debugging.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment