Compare commits

...

30 Commits

Author SHA1 Message Date
Casey 583c1ab160 Merge pull request #736 from heroku/v-138
v 138 changelog
2018-08-01 16:49:37 -05:00
Casey Faist c7f5532854 v 138 changelog 2018-08-01 16:04:24 -05:00
Terence Lee 0fe4f91395 Merge pull request #713 from hone/sqlite3
Update SQLite3
2018-07-26 17:21:08 -05:00
Terence Lee 221722fb27 setup libsqlite3-dev and sqlite3 binary to match stack's libsqlite3-0
With inspiration from @KevinBrolly, this patch uses the stack image
SQLite3 package but also still providing the dev headers and binary that
users may still be using today. The benefit is that we won't need to
rebuild all the python binaries for this to take affect. We can just
stop shipping SQLite3 from future binaries. In addition, we don't need
to worry about what version and when to update SQLite3 and maintaining
the packages ourselves.

This also includes updates to Python 2.7.15 and Python 3.6.6 so they can
rebuilt with the stack image dev headers instead of building our own
vendored SQLite3.
2018-07-26 16:49:23 -05:00
Terence Lee e82f1e4d1e add Python version operators 2018-07-26 16:32:04 -05:00
Terence Lee f7e5930047 Merge pull request #733 from heroku/v137
v137 changelog
2018-07-17 14:02:40 -05:00
Terence Lee f51dfb5eb4 v137 changelog 2018-07-17 12:51:36 -05:00
Ian Stapleton Cordasco 06b7f97eff Merge pull request #729 from heroku/bug/728
Prevent Python 3.7 from being unsupported
2018-07-10 08:09:39 -05:00
Ian Stapleton Cordasco 74873b5b71 Merge branch 'master' into bug/728 2018-07-10 07:53:39 -05:00
Ian Stapleton Cordasco 731876d6e8 Be clearer in our warnings about which Py3 we mean 2018-07-10 07:38:31 -05:00
Ian Stapleton Cordasco a775b06d2f Merge pull request #731 from heroku/heroku-18-ci
Add heroku-18 to our Travis CI config
2018-07-10 07:31:44 -05:00
Ian Stapleton Cordasco 2d290e94e9 Add heroku-18 to our Travis CI config
- Add stage to Travis CI config and update tests.sh script to recognize
  it

- Update tests to assert there is no Python 2 on Heroku-18

- Update nltk fixture to use Python 3.6 so we can test it on all stacks

Closes gh-730
2018-07-09 11:51:03 -05:00
Ian Stapleton Cordasco 179e6287b1 Prevent Python 3.7 from being unsupported
Python 3.7.0 is supported but not preferred given how new it is. As a
result, we don't want it to be the default, but we also don't want users
to be confused when upgrading to it.

Closes gh-728
2018-07-06 09:11:26 -05:00
Ian Stapleton Cordasco 18945ff1a9 Merge pull request #724 from heroku/publish-automation
Steal the java buildpack's release script
2018-07-06 08:34:12 -05:00
Ian Stapleton Cordasco 2e630ab55c Steal the java buildpack's release script
This will make releasing new versions easier for us.

Closes gh-723
2018-06-28 12:33:54 -05:00
Ian Stapleton Cordasco 83d5d6caa9 Merge pull request #722 from heroku/python-3.7-and-3.6.6
Build Python 3.6.6 and 3.7.0
2018-06-28 11:09:23 -05:00
Ian Stapleton Cordasco abade31848 Update defaults for Python 3 apps on Heroku
Also update our documentation and CHANGELOG for this version of the
buildpack.
2018-06-28 10:57:13 -05:00
Ian Stapleton Cordasco 9a3c1fab04 Build Python 3.6.6 and 3.7.0
Add runtime build recipes for our newly released versions

Closes gh-720
Closes gh-721
2018-06-28 08:33:50 -05:00
Ian Stapleton Cordasco d18f1fedd8 Merge pull request #710 from KevinBrolly/master
Updated README for python 3.6.5 and CHANGELOG for v135
2018-06-12 08:19:20 -05:00
Kevin Brolly d9a963c8b2 Updated README for python 3.6.5 and CHANGELOG for v135 2018-06-08 12:14:55 -07:00
Ian Stapleton Cordasco dbeca147d2 Merge pull request #701 from allyjweir/bump-pipenv-version
Bump pipenv version
2018-05-29 07:11:12 -05:00
Ian Stapleton Cordasco ca41bc87d3 Merge branch 'master' into bump-pipenv-version 2018-05-25 12:56:58 -05:00
Ian Stapleton Cordasco e717d0a60b Merge pull request #703 from heroku/fix-new-shellcheck-warnings
Fix new shellcheck warnings breaking periodic CI
2018-05-25 12:56:43 -05:00
Ian Stapleton Cordasco f0081e6faf Fix new shellcheck warnings breaking periodic CI
New warnings were found in our periodic (CRON) CI jobs.

Fixes https://travis-ci.org/heroku/heroku-buildpack-python/jobs/383404864
2018-05-25 12:16:47 -05:00
Ally Weir 57ec0c38ae Fix shellcheck linting issues 2018-05-24 14:38:14 +01:00
Ally Weir f1e1df2fa1 Bump pipenv version 2018-05-24 11:37:01 +01:00
Ian Stapleton Cordasco b0f49570d4 Merge pull request #699 from heroku/reenable-shellcheck
Let's test re-enabling shellcheck in CI
2018-05-18 08:39:52 -05:00
Ian Stapleton Cordasco f072b73093 Fix-up SC2219 errors in our shell scripts
Caught these with the re-added shellcheck linting.
2018-05-10 08:32:24 -05:00
Ian Stapleton Cordasco f174d03f7d Let's test re-enabling shellcheck in CI
shellcheck is a truly valuable utility. Unfortunately installing the
packages from debian-sid introduces a conflict. Let's try another
suggestion from: https://github.com/koalaman/shellcheck/wiki/TravisCI

Refs
https://github.com/heroku/heroku-buildpack-python/commit/a0275888a26b8f0132c7bb9fe3bf194b5c4fab1f
2018-05-10 08:16:36 -05:00
Pradeep Damodara af7332b5b2 Update pipenv-to-pip to read lockfiles properly
Use the appropriate encoding to read a Pipfile.lock so we can
properly load the data.

Closes #678
2018-05-07 14:47:45 -05:00
23 changed files with 366 additions and 63 deletions
+11 -9
View File
@@ -2,15 +2,17 @@ language: bash
dist: trusty
jobs:
include:
# - stage: "Bash linting (shellcheck)"
# sudo: false
# addons:
# apt:
# sources:
# - debian-sid # Grab shellcheck from the Debian repo (o_O)
# packages:
# - shellcheck
# script: make check
- stage: "Bash linting (shellcheck)"
sudo: false
before_install:
- wget -c https://goo.gl/ZzKHFv -O - | tar -xvJ -C /tmp/
- PATH="/tmp/shellcheck-latest:$PATH"
script: make check
- stage: "Stack Tests"
services: docker
env: STACK=heroku-18
script: ./tests.sh
- stage: "Stack Tests"
services: docker
+16
View File
@@ -1,5 +1,21 @@
# Python Buildpack Changelog
# 138
Use stack image SQLite3 instead of vendoring
# 137
Prevent 3.7.0 from appearing as unsupported in buildpack messaging.
# 136
Upgrade to 3.6.6 and support 3.7.0 on all runtimes.
# 135
Upgrade Pipenv to v2018.5.18.
# 134
Default to 3.6.5, bugfixes.
+13
View File
@@ -0,0 +1,13 @@
FROM heroku/heroku:18-build
WORKDIR /app
ENV WORKSPACE_DIR="/app/builds" \
S3_BUCKET="lang-python" \
S3_PREFIX="heroku-18/"
RUN apt-get update && apt-get install -y python-pip && rm -rf /var/lib/apt/lists/*
COPY requirements.txt /app/
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
COPY . /app
+5
View File
@@ -18,6 +18,11 @@ test-heroku-16:
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=heroku-16" heroku/heroku:16-build bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run;'
@echo ""
test-heroku-18:
@echo "Running tests in docker (heroku-18)..."
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=heroku-18" heroku/heroku:18-build bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run;'
@echo ""
buildenv-heroku-16:
@echo "Creating build environment (heroku-16)..."
@echo
+4 -3
View File
@@ -23,9 +23,9 @@ Deploying a Python application couldn't be easier:
$ git push heroku master
-----> Python app detected
-----> Installing python-3.6.4
-----> Installing python-3.6.6
-----> Installing pip
-----> Installing requirements with Pipenv 11.7.1…
-----> Installing requirements with Pipenv 2018.5.18
...
Installing dependencies from Pipfile…
-----> Discovering process types
@@ -58,5 +58,6 @@ Or, with a `runtime.txt` file:
Runtime options include:
- `python-3.6.4`
- `python-3.7.0`
- `python-3.6.6`
- `python-2.7.15`
+21 -8
View File
@@ -49,8 +49,9 @@ export VENDOR_URL
# 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 unsupported version.
# Note: When 3.7 lands, I recommend switching to LATEST_36 and LATEST_37.
DEFAULT_PYTHON_VERSION="python-3.6.5"
LATEST_3="python-3.6.5"
DEFAULT_PYTHON_VERSION="python-3.6.6"
LATEST_36="python-3.6.6"
LATEST_37="python-3.7.0"
LATEST_2="python-2.7.15"
# Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)?
@@ -58,7 +59,7 @@ DEFAULT_PYTHON_STACK="cedar-14"
# If pip doesn't match this version (the version we install), run the installer.
PIP_UPDATE="9.0.2"
export DEFAULT_PYTHON_VERSION DEFAULT_PYTHON_STACK PIP_UPDATE LATEST_2 LATEST_3
export DEFAULT_PYTHON_VERSION DEFAULT_PYTHON_STACK PIP_UPDATE LATEST_2 LATEST_36 LATEST_37
# Common Problem Warnings:
# This section creates a temporary file in which to stick the output of `pip install`.
@@ -159,6 +160,8 @@ cp -R "$CACHE_DIR/.heroku/python" .heroku/ &> /dev/null || true
cp -R "$CACHE_DIR/.heroku/python-stack" .heroku/ &> /dev/null || true
# A plain text file which contains the current python version being used (used for cache busting).
cp -R "$CACHE_DIR/.heroku/python-version" .heroku/ &> /dev/null || true
# A plain text file which contains the current sqlite3 version being used (used for cache busting).
cp -R "$CACHE_DIR/.heroku/python-sqlite3-version" .heroku/ &> /dev/null || true
# Any pre-compiled binaries, provided by the buildpack.
cp -R "$CACHE_DIR/.heroku/vendor" .heroku/ &> /dev/null || true
# "editable" installations of code repositories, via pip or pipenv.
@@ -221,7 +224,7 @@ fi
# Download / Install Python, from pre-build binaries available on Amazon S3.
# This step also bootstraps pip / setuptools.
let start=$(nowms)
(( start=$(nowms) ))
# shellcheck source=bin/steps/python
source "$BIN_DIR/steps/python"
mtime "python.install.time" "${start}"
@@ -233,7 +236,7 @@ source "$BIN_DIR/steps/pipenv"
# Uninstall removed dependencies with Pip.
# The buildpack will automatically remove any declared dependencies (in requirements.txt)
# that were explicitly removed. This machinery is a bit complex, but it is not complicated.
let start=$(nowms)
(( start=$(nowms) ))
# shellcheck source=bin/steps/pip-uninstall
source "$BIN_DIR/steps/pip-uninstall"
mtime "pip.uninstall.time" "${start}"
@@ -273,11 +276,21 @@ sub_env "$BIN_DIR/steps/geo-libs"
# shellcheck source=bin/steps/gdal
source "$BIN_DIR/steps/gdal"
# SQLite3 support.
# This sets up and installs sqlite3 dev headers and the sqlite3 binary but not the
# libsqlite3-0 library since that exists on the stack image.
# Note: This only applies to Python 2.7.15+ and Python 3.6.6+
(( start=$(nowms) ))
# shellcheck source=bin/steps/sqlite3
source "$BIN_DIR/steps/sqlite3"
buildpack_sqlite3_install
mtime "sqlite3.install.time" "${start}"
# pip install
# -----------
# Install dependencies with pip (where the magic happens).
let start=$(nowms)
(( start=$(nowms) ))
# shellcheck source=bin/steps/pip-install
source "$BIN_DIR/steps/pip-install"
mtime "pip.install.time" "${start}"
@@ -286,7 +299,7 @@ mtime "pip.install.time" "${start}"
# Note: this may only work on Python 2.7. I don't think many customers use this functionality,
# and it should probably be undocumented.
# (there's an import error on 3.6 that should hopefully be fixed upstream at some point)
let start=$(nowms)
(( start=$(nowms) ))
sub_env "$BIN_DIR/steps/nltk"
mtime "nltk.download.time" "${start}"
@@ -304,7 +317,7 @@ fi
# This is the cause for the majority of build failures on the Python platform.
# These failures are intentional — if collectstatic (which can be tricky, at times) fails,
# your build fails.
let start=$(nowms)
(( start=$(nowms) ))
sub_env "$BIN_DIR/steps/collectstatic"
mtime "collectstatic.time" "${start}"
+1 -1
View File
@@ -11,7 +11,7 @@
# - $DEBUG_COLLECTSTATIC: upon failure, print out environment variables.
# shellcheck source=bin/utils
source $BIN_DIR/utils
source "$BIN_DIR/utils"
# Location of 'manage.py', if it exists.
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' -printf '%d\t%P\n' | sort -nk1 | cut -f2 | head -1)
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# shellcheck source=bin/utils
source $BIN_DIR/utils
source "$BIN_DIR/utils"
if [ ! "$SKIP_PIP_INSTALL" ]; then
+1 -1
View File
@@ -3,7 +3,7 @@
set +e
# Install dependencies with Pip.
# shellcheck source=bin/utils
source $BIN_DIR/utils
source "$BIN_DIR/utils"
if [ ! "$SKIP_PIP_INSTALL" ]; then
+2 -2
View File
@@ -3,7 +3,7 @@
# export CLINT_FORCE_COLOR=1
# export PIPENV_FORCE_COLOR=1
# shellcheck source=bin/utils
source $BIN_DIR/utils
source "$BIN_DIR/utils"
set -e
if [[ -f Pipfile.lock ]]; then
@@ -41,7 +41,7 @@ if [ ! "$SKIP_PIPENV_INSTALL" ]; then
export PIP_EXTRA_INDEX_URL
fi
export PIPENV_VERSION="11.8.2"
export PIPENV_VERSION="2018.5.18"
# Install pipenv.
/app/.heroku/python/bin/pip install pipenv==$PIPENV_VERSION --upgrade &> /dev/null
+4 -1
View File
@@ -22,7 +22,10 @@ if [[ -f $BUILD_DIR/Pipfile ]]; then
echo "$LATEST_2" > "$BUILD_DIR/runtime.txt"
fi
if [ "$PYTHON" = 3.6 ]; then
echo "$LATEST_3" > "$BUILD_DIR/runtime.txt"
echo "$LATEST_36" > "$BUILD_DIR/runtime.txt"
fi
if [ "$PYTHON" = 3.7 ]; then
echo "$LATEST_37" > "$BUILD_DIR/runtime.txt"
fi
fi
+18 -5
View File
@@ -14,17 +14,30 @@ if [[ $PYTHON_VERSION =~ ^python-2 ]]; then
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
else
if [[ "$PYTHON_VERSION" != "$LATEST_3" ]]; then
puts-warn "The latest version of Python 3 is $LATEST_3 (you are using $PYTHON_VERSION, which is unsupported)."
puts-warn "We recommend upgrading by specifying the latest version ($LATEST_3)."
if [[ $PYTHON_VERSION =~ ^python-3.7 ]] && [[ "$PYTHON_VERSION" != "$LATEST_37" ]]; then
puts-warn "The latest version of Python 3.7 is $LATEST_37 (you are using $PYTHON_VERSION, which is unsupported)."
puts-warn "We recommend upgrading by specifying the latest version ($LATEST_37)."
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
else
if [[ "$PYTHON_VERSION" != "$LATEST_36" ]]; then
puts-warn "The latest version of Python 3.6 is $LATEST_36 (you are using $PYTHON_VERSION, which is unsupported)."
puts-warn "We recommend upgrading by specifying the latest version ($LATEST_36)."
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
fi
fi
if [[ "$STACK" != "$CACHED_PYTHON_STACK" ]]; then
puts-step "Stack has changed from $CACHED_PYTHON_STACK to $STACK, clearing cache"
rm -fr .heroku/python-stack .heroku/python-version .heroku/python .heroku/vendor
rm -fr .heroku/python-stack .heroku/python-version .heroku/python .heroku/vendor .heroku/python .heroku/python-sqlite3-version
fi
# need to clear the cache for first time installing SQLite3,
# since the version is changing and could lead to runtime errors
# with compiled extensions.
if [ -d .heroku/python ] && [ ! -f .heroku/python-sqlite3-version ] && python_sqlite3_check "$PYTHON_VERSION"; then
puts-step "Need to update SQLite3, clearing cache"
rm -fr .heroku/python-stack .heroku/python-version .heroku/python .heroku/vendor
fi
if [ -f .heroku/python-version ]; then
+87
View File
@@ -0,0 +1,87 @@
#!/usr/bin/env bash
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
sqlite3_version() {
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')}
export SQLITE3_VERSION
}
sqlite3_install() {
HEROKU_PYTHON_DIR="$1"
SQLITE3_VERSION="$2"
HEADERS_ONLY="$3"
mkdir -p "$HEROKU_PYTHON_DIR"
APT_CACHE_DIR="$HEROKU_PYTHON_DIR/apt/cache"
APT_STATE_DIR="$HEROKU_PYTHON_DIR/apt/state"
mkdir -p "$APT_CACHE_DIR/archives/partial"
mkdir -p "$APT_STATE_DIR/lists/partial"
APT_OPTIONS="-o debug::nolocking=true"
APT_OPTIONS="$APT_OPTIONS -o dir::cache=$APT_CACHE_DIR"
APT_OPTIONS="$APT_OPTIONS -o dir::state=$APT_STATE_DIR"
APT_OPTIONS="$APT_OPTIONS -o dir::etc::sourcelist=/etc/apt/sources.list"
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
else
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION"
fi
find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \;
mkdir -p "$HEROKU_PYTHON_DIR/include"
mkdir -p "$HEROKU_PYTHON_DIR/lib"
# remove old sqlite3 libraries/binaries
find "$HEROKU_PYTHON_DIR/include/" -name "sqlite3*.h" -exec rm -f {} \;
find "$HEROKU_PYTHON_DIR/lib/" -name "libsqlite3.*" -exec rm -f {} \;
rm -f "$HEROKU_PYTHON_DIR/lib/pkgconfig/sqlite3.pc"
rm -f "$HEROKU_PYTHON_DIR/bin/sqlite3"
# copy over sqlite3 headers & bins and setup linking against the stack image library
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/include/"* "$HEROKU_PYTHON_DIR/include/"
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu"/libsqlite3.*a "$HEROKU_PYTHON_DIR/lib/"
mkdir -p "$HEROKU_PYTHON_DIR/lib/pkgconfig"
# set the right prefix/lib directories
sed -e 's/prefix=\/usr/prefix=\/app\/.heroku\/python/' -e 's/\/x86_64-linux-gnu//' "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu/pkgconfig/sqlite3.pc" > "$HEROKU_PYTHON_DIR/lib/pkgconfig/sqlite3.pc"
# need to point the libsqlite3.so to the stack image library for /usr/bin/ld -lsqlite3
SQLITE3_LIBFILE="/usr/lib/x86_64-linux-gnu/$(readlink -n "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu/libsqlite3.so")"
ln -s "$SQLITE3_LIBFILE" "$HEROKU_PYTHON_DIR/lib/libsqlite3.so"
if [ -z "$HEADERS_ONLY" ]; then
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/bin"/* "$HEROKU_PYTHON_DIR/bin/"
fi
# cleanup
rm -rf "$HEROKU_PYTHON_DIR/sqlite3/"
rm -rf "$HEROKU_PYTHON_DIR/apt/"
}
buildpack_sqlite3_install() {
sqlite3_version
HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python"
SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version"
if [ -f "$SQLITE3_VERSION_FILE" ]; then
INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE")
fi
# 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"
sqlite3_install "$BUILD_DIR/.heroku/python" "$SQLITE3_VERSION"
# save version installed
mkdir -p "$CACHE_DIR/.heroku/"
echo "$SQLITE3_VERSION" > "$CACHE_DIR/.heroku/python-sqlite3-version"
fi
fi
}
+38
View File
@@ -58,3 +58,41 @@ measure-size() {
echo "$(du -s .heroku/python 2>/dev/null || echo 0) | awk '{print $1}')"
}
# Python version operator >
version_gt() {
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1";
}
# Python verison operator >=
version_gte() {
if [ "$1" == "$2" ]; then
return 0
fi
version_gt "$1" "$2"
}
# Check if Python 2
python2_check() {
VERSION="$1"
version_gte "$VERSION" "python-2.7.0" && version_gt "python-3.0.0" "$VERSION"
}
# Check if Python 3
python3_check() {
VERSION="$1"
version_gte "$VERSION" "python-3.0.0" && version_gt "python-4.0.0" "$VERSION"
}
# Check if Python version needs to install SQLite3
python_sqlite3_check() {
VERSION="$1"
MIN_PYTHON_3="python-3.6.6"
MIN_PYTHON_2="python-2.7.15"
( python2_check "$VERSION" && version_gte "$VERSION" "$MIN_PYTHON_2" ) \
|| ( python3_check "$VERSION" && version_gte "$VERSION" "$MIN_PYTHON_3" ) \
|| ( version_gte "$VERSION" "3.7.0" )
}
+9 -1
View File
@@ -1,8 +1,16 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
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.15/Python-2.7.15.tgz'
+29
View File
@@ -0,0 +1,29 @@
#!/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.6/Python-3.6.6.tgz'
curl -L $SOURCE_TARBALL | tar xz
mv Python-3.6.6 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 '{}' +
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
+29
View File
@@ -0,0 +1,29 @@
#!/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.0/Python-3.7.0.tgz'
curl -L $SOURCE_TARBALL | tar xz
mv Python-3.7.0 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 '{}' +
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
set -e
BP_NAME=${1:-"heroku/python"}
curVersion=$(heroku buildpacks:versions "$BP_NAME" | awk 'FNR == 3 { print $1 }')
newVersion="v$((curVersion + 1))"
read -p "Deploy as version: $newVersion [y/n]? " choice
case "$choice" in
y|Y ) echo "";;
n|N ) exit 0;;
* ) exit 1;;
esac
originMaster=$(git rev-parse origin/master)
echo "Tagging commit $originMaster with $newVersion... "
git tag "$newVersion" "${originMaster:?}"
git push origin refs/tags/$newVersion
heroku buildpacks:publish "$BP_NAME" "$newVersion"
if [ $(git tag | grep -q previous-version) ]; then
echo "Updating previous-version tag"
git tag -d previous-version
git push origin :previous-version
git tag previous-version latest-version
fi
if [ $(git tag | grep -q latest-version) ]; then
echo "Updating latest-version tag"
git tag -d latest-version
git push origin :latest-version
git tag latest-version "${originMaster:?}"
git push --tags
fi
echo "Done."
+1 -1
View File
@@ -1 +1 @@
python-2.7.13
python-3.6.6
+11 -23
View File
@@ -1,27 +1,14 @@
{
"_meta": {
"hash": {
"sha256": "397f2c55e3558ea57d292e3fc19b34e483770e5ec02cdedfb1f330680cd26635"
},
"host-environment-markers": {
"implementation_name": "cpython",
"implementation_version": "3.6.3",
"os_name": "posix",
"platform_machine": "x86_64",
"platform_python_implementation": "CPython",
"platform_release": "16.7.0",
"platform_system": "Darwin",
"platform_version": "Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64",
"python_full_version": "3.6.3",
"python_version": "3.6",
"sys_platform": "darwin"
"sha256": "09ad9dcae1870ba083f43c5a05ed8943b23bd4c27e61a13ecf4e16d18500ad98"
},
"pipfile-spec": 6,
"requires": {},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
@@ -29,22 +16,23 @@
"default": {
"delegator.py": {
"hashes": [
"sha256:2575c4adc923ad0b8fdaa433f862b2b7cf21982717fb23cc895fd8f249ea820c",
"sha256:495e11ada66648650171a6c9a188df4eb050b235abff8771f41ee8a064eb9ded"
"sha256:2d46966a7f484d271b09e2646eae1e9acadc4fdf2cb760c142f073e81c927d8d",
"sha256:58f3ea6fe36680e1d828e2e66e52844b826f186409dfee4436e42351b0e699fe"
],
"version": "==0.0.13"
"index": "pypi",
"version": "==0.1.0"
},
"pexpect": {
"hashes": [
"sha256:f853b52afaf3b064d29854771e2db509ef80392509bde2dd7a6ecf2dfc3f0018",
"sha256:3d132465a75b57aa818341c6521392a06cc660feb3988d7f1074f39bd23c9a92"
"sha256:9783f4644a3ef8528a6f20374eeb434431a650c797ca6d8df0d81e30fffdfa24",
"sha256:9f8eb3277716a01faafaba553d629d3d60a1a624c7cf45daa600d2148c30020c"
],
"version": "==4.2.1"
"version": "==4.5.0"
},
"ptyprocess": {
"hashes": [
"sha256:e8c43b5eee76b2083a9badde89fd1bbce6c8942d1045146e100b7b5e014f4f1a",
"sha256:e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365"
"sha256:e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365",
"sha256:e8c43b5eee76b2083a9badde89fd1bbce6c8942d1045146e100b7b5e014f4f1a"
],
"version": "==0.5.2"
}
+19 -5
View File
@@ -12,7 +12,7 @@ testPipenvLock() {
testPipenvVersion() {
compile "pipenv-version"
assertCaptured "3.6.5"
assertCaptured "3.6.6"
assertCapturedSuccess
}
@@ -39,6 +39,11 @@ testGEOS() {
}
testNLTK() {
# NOTE: This is a RuntimeWarning emitted by Python 3's runpy.py script
# which is what is used when you call `python -m <module>`. This is due to
# how nltk imports things. It's not actually an error, but it would probably
# be bad to silence in Production.
export PYTHONWARNINGS="ignore::RuntimeWarning"
compile "nltk"
assertCaptured "Downloading NLTK packages: city_database stopwords"
assertCapturedSuccess
@@ -76,14 +81,23 @@ testPylibmc() {
}
testPython2() {
compile "python2"
assertCaptured "python-2.7.15"
assertCapturedSuccess
if [[ "$STACK" == "heroku-16" ]] || [[ "$STACK" == "cedar-14" ]]; then
compile "python2"
assertCaptured "python-2.7.15"
assertCapturedSuccess
fi
}
testNoPython2() {
if [[ "$STACK" == "heroku-18" ]]; then
compile "python2"
assertCapturedError
fi
}
testPython3() {
compile "python3"
assertCaptured "python-3.6.5"
assertCaptured "python-3.6.6"
assertCapturedSuccess
}
+6 -1
View File
@@ -13,4 +13,9 @@ fi
if [[ "$STACK" == "heroku-16" ]]; then
make test-heroku-16
exit $?
fi
fi
if [[ "$STACK" == "heroku-18" ]]; then
make test-heroku-18
exit $?
fi
+2 -1
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python
import io
import json
import sys
@@ -7,7 +8,7 @@ import sys
def main():
INFILE = sys.argv[1]
with open(INFILE, 'rb') as f:
with io.open(INFILE, 'r', encoding='utf-8') as f:
lockfile = json.load(f)
packages = []