Compare commits

...

17 Commits

Author SHA1 Message Date
kennethreitz 65648fb7a8 fix tests 2017-03-16 12:44:36 -04:00
kennethreitz 45b0d18532 fix tests further 2017-03-16 12:29:07 -04:00
kennethreitz 8f258ae0b8 remove pipstrip 2017-03-16 12:16:59 -04:00
kennethreitz b80f7a953f fix tests 2017-03-16 12:13:00 -04:00
kennethreitz f27a84e015 change the step order 2017-03-16 00:02:33 -04:00
kennethreitz 5794bacbbf cleanup 2017-03-16 00:00:55 -04:00
kennethreitz e29b60dcfd cleanups 2017-03-15 23:59:52 -04:00
kennethreitz 7c95b156ce fix syntax error 2017-03-15 23:59:21 -04:00
kennethreitz e05346e8c1 fixes to buildpack 2017-03-15 23:58:47 -04:00
kennethreitz 9deea01360 fix 2017-03-15 23:57:24 -04:00
kennethreitz c19f0f83ee fix build 2017-03-15 23:54:59 -04:00
kennethreitz 8b88d655c4 remove venv support 2017-03-15 16:48:05 -04:00
kennethreitz 0e8c0077ff remove legacy behavior 2017-03-15 16:47:24 -04:00
kennethreitz cfda557b31 updated makefile 2017-03-14 13:40:01 -04:00
kennethreitz 44c2b75b8d fix runtime-fixer 2017-03-14 13:36:29 -04:00
kennethreitz c3849fb6d3 improvements 2017-03-14 13:36:14 -04:00
kennethreitz 5608ed9f3c fix build 2017-03-14 13:21:40 -04:00
21 changed files with 20187 additions and 87 deletions
+5
View File
@@ -8,6 +8,11 @@ test-cedar-14:
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=cedar-14" heroku/cedar:14 bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run;'
@echo ""
test-heroku-16:
@echo "Running tests in docker (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 ""
tools:
git clone https://github.com/kennethreitz/pip-pop.git
mv pip-pop/bin/* vendor/pip-pop/
+9 -26
View File
@@ -27,10 +27,7 @@ BUILD_DIR=$1
CACHE_DIR=$2
ENV_DIR=$3
# Static configurations for virtualenv caches.
VIRTUALENV_LOC=".heroku/venv"
LEGACY_TRIGGER="lib/python2.7"
# Python defaults
DEFAULT_PYTHON_VERSION="python-2.7.13"
DEFAULT_PYTHON_STACK="cedar-14"
PYTHON_EXE="/app/.heroku/python/bin/python"
@@ -130,12 +127,6 @@ fi
# Prepare the cache.
mkdir -p $CACHE_DIR
# Purge "old-style" virtualenvs.
bpwatch start clear_old_venvs
[ -d $CACHE_DIR/$LEGACY_TRIGGER ] && rm -fr $CACHE_DIR/.heroku/bin $CACHE_DIR/.heroku/lib $CACHE_DIR/.heroku/include
[ -d $CACHE_DIR/$VIRTUALENV_LOC ] && rm -fr $CACHE_DIR/.heroku/venv $CACHE_DIR/.heroku/src
bpwatch stop clear_old_venvs
# Restore old artifacts from the cache.
bpwatch start restore_cache
mkdir -p .heroku
@@ -144,7 +135,6 @@ bpwatch start restore_cache
cp -R $CACHE_DIR/.heroku/python-stack .heroku/ &> /dev/null || true
cp -R $CACHE_DIR/.heroku/python-version .heroku/ &> /dev/null || true
cp -R $CACHE_DIR/.heroku/vendor .heroku/ &> /dev/null || true
cp -R $CACHE_DIR/.heroku/venv .heroku/ &> /dev/null || true
if [[ -d $CACHE_DIR/.heroku/src ]]; then
cp -R $CACHE_DIR/.heroku/src .heroku/ &> /dev/null || true
fi
@@ -159,7 +149,6 @@ if [[ $BUILD_DIR != '/app' ]]; then
# we will not remove these later so subsequent buildpacks can still invoke it
ln -nsf $BUILD_DIR/.heroku/python /app/.heroku/python
ln -nsf $BUILD_DIR/.heroku/vendor /app/.heroku/vendor
ln -nsf $BUILD_DIR/.heroku/venv /app/.heroku/venv
# Note: .heroku/src is copied in later.
fi
@@ -173,12 +162,12 @@ source $BIN_DIR/steps/setuptools
source $BIN_DIR/steps/pipenv
# If no requirements.txt file given, assume `setup.py develop` is intended.
if [ ! -f requirements.txt ]; then
if [ ! -f requirements.txt ] && [ ! -f Pipfile ]; then
echo "-e ." > requirements.txt
fi
# Uninstall removed dependencies with Pip.
source $BIN_DIR/steps/pip-uninstall
# Fix egg-links.
source $BIN_DIR/steps/eggpath-fix
# Mercurial support.
source $BIN_DIR/steps/mercurial
@@ -198,6 +187,9 @@ source $BIN_DIR/steps/gdal
# Install dependencies with Pip (where the magic happens).
source $BIN_DIR/steps/pip-install
# Uninstall removed dependencies with Pip.
source $BIN_DIR/steps/pip-uninstall
# Support for NLTK corpora.
sub-env $BIN_DIR/steps/nltk
@@ -226,15 +218,8 @@ bpwatch start post_compile
source $BIN_DIR/steps/hooks/post_compile
bpwatch stop post_compile
set +e
# rewrite build dir in egg links to /app so things are found at runtime
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
set -e
set +e
# Support for PyPy
find .heroku/python/lib-python/*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
set -e
# Fix egg-links, again.
source $BIN_DIR/steps/eggpath-fix2
# Store new artifacts in cache.
bpwatch start dump_cache
@@ -243,7 +228,6 @@ bpwatch start dump_cache
rm -rf $CACHE_DIR/.heroku/python-version
rm -rf $CACHE_DIR/.heroku/python-stack
rm -rf $CACHE_DIR/.heroku/vendor
rm -rf $CACHE_DIR/.heroku/venv
rm -rf $CACHE_DIR/.heroku/src
mkdir -p $CACHE_DIR/.heroku
@@ -251,7 +235,6 @@ bpwatch start dump_cache
cp -R .heroku/python-version $CACHE_DIR/.heroku/
cp -R .heroku/python-stack $CACHE_DIR/.heroku/ &> /dev/null || true
cp -R .heroku/vendor $CACHE_DIR/.heroku/ &> /dev/null || true
cp -R .heroku/venv $CACHE_DIR/.heroku/ &> /dev/null || true
if [[ -d .heroku/src ]]; then
cp -R .heroku/src $CACHE_DIR/.heroku/ &> /dev/null || true
fi
+11
View File
@@ -0,0 +1,11 @@
set +e
# delete any existing egg links, to uninstall exisisting installations.
find .heroku/python/lib/python*/site-packages/ -name "*.egg-link" -delete 2> /dev/null
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#" &> /dev/null
set -e
set +e
# Support for the above, for PyPy.
find .heroku/python/lib-python/*/site-packages/ -name "*.egg-link" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#$(pwd)/#" &> /dev/null
find .heroku/python/lib-python/*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#" &> /dev/null
set -e
+9
View File
@@ -0,0 +1,9 @@
set +e
# rewrite build dir in egg links to /app so things are found at runtime
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
set -e
set +e
# Support for PyPy
find .heroku/python/lib-python/*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
set -e
+1 -13
View File
@@ -1,17 +1,5 @@
# Install dependencies with Pip.
puts-cmd "pip install -r requirements.txt"
set +e
# delete any existing egg links, to uninstall exisisting installations.
find .heroku/python/lib/python*/site-packages/ -name "*.egg-link" -delete 2> /dev/null
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#" &> /dev/null
set -e
set +e
# Support for the above, for PyPy.
find .heroku/python/lib-python/*/site-packages/ -name "*.egg-link" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#$(pwd)/#" &> /dev/null
find .heroku/python/lib-python/*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#" &> /dev/null
set -e
puts-step "Installing requirements with pip"
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
Executable → Regular
+4 -7
View File
@@ -1,13 +1,10 @@
# Generate requriements.txt with pipenv.
# Pipenv support (Generate requriements.txt with pipenv).
if [[ -f Pipfile ]]; then
if [[ ! -f requirements.txt ]]; then
puts-step "Generating 'requirements.txt' with pipenv"
pip install git+https://github.com/kennethreitz/pipenv.git#egg=pipenv &> /dev/null
pipenv lock --requirements > requirements.txt 2> /dev/null
/app/.heroku/python/bin/pip install pipenv --upgrade &> /dev/null
pipstrip requirements.txt
/app/.heroku/python/bin/pipenv lock --requirements --no-hashes > $BUILD_DIR/requirements.txt 2> /dev/null
fi
fi
fi
+12 -11
View File
@@ -3,19 +3,20 @@
if [[ -f $BUILD_DIR/Pipfile.lock ]]; then
if [[ ! -f $BUILD_DIR/runtime.txt ]]; then
if [[ ! -f Pipfile.lock ]]; then
pipenv lock 2> /dev/null
if [[ ! -f $BUILD_DIR/Pipfile.lock ]]; then
puts-warn "No 'pipfile.lock' found! We recommend you commit this into your repository."
fi
if [[ -f $BUILD_DIR/Pipfile.lock ]]; then
set +e
PYTHON=$(cat $BUILD_DIR/Pipfile.lock | jq '._meta.requires.python_version' -r)
set -e
set +e
PYTHON=$(cat $BUILD_DIR/Pipfile.lock | jq '._meta.requires.python_version' -r)
set -e
if [ "$PYTHON" = 2.7 ]; then
echo "python-2.7.13" > $BUILD_DIR/runtime.txt
fi
if [ "$PYTHON" = 3.6 ]; then
echo "python-3.6.0" > $BUILD_DIR/runtime.txt
if [ "$PYTHON" = 2.7 ]; then
echo "python-2.7.13" > $BUILD_DIR/runtime.txt
fi
if [ "$PYTHON" = 3.6 ]; then
echo "python-3.6.0" > $BUILD_DIR/runtime.txt
fi
fi
fi
fi
+7 -15
View File
@@ -1,4 +1,5 @@
set +e
runtime-fixer runtime.txt
PYTHON_VERSION=$(cat runtime.txt)
# Install Python.
@@ -54,23 +55,14 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
TMPTARDIR=$(mktemp -d)
trap "rm -rf $TMPTARDIR" RETURN
bpwatch start install_setuptools
# Prepare it for the real world
# puts-step "Installing Setuptools ($SETUPTOOLS_VERSION)"
tar zxf $ROOT_DIR/vendor/setuptools-$SETUPTOOLS_VERSION.tar.gz -C $TMPTARDIR
cd $TMPTARDIR/setuptools-$SETUPTOOLS_VERSION/
python setup.py install &> /dev/null
cd $WORKING_DIR
bpwatch stop install_setuptoools
puts-step "Installing pip"
bpwatch start install_pip
# puts-step "Installing Pip ($PIP_VERSION)"
tar zxf $ROOT_DIR/vendor/pip-$PIP_VERSION.tar.gz -C $TMPTARDIR
cd $TMPTARDIR/pip-$PIP_VERSION/
python setup.py install &> /dev/null
cd $WORKING_DIR
# Remove old installations.
rm -fr /app/.heroku/python/lib/python2.7/site-packages/pip-*
rm -fr /app/.heroku/python/lib/python2.7/site-packages/setuptools-*
/app/.heroku/python/bin/python $ROOT_DIR/vendor/get-pip.py &> /dev/null
bpwatch stop install_pip
bpwatch stop prepare_environment
fi
+1
View File
@@ -0,0 +1 @@
wordnet
+1
View File
@@ -0,0 +1 @@
nltk
View File
View File
+9
View File
@@ -0,0 +1,9 @@
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[packages]
requests = "*"
[requires]
python_version = "3.6"
+23
View File
@@ -0,0 +1,23 @@
{
"default": {
"requests": {
"version": "==2.13.0",
"hash": "sha256:1a720e8862a41aa22e339373b526f508ef0c8988baf48b84d3fc891a8e237efb"
}
},
"develop": {},
"_meta": {
"sources": [
{
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
],
"requires": {
"python_version": "3.6"
},
"hash": {
"sha256": "5866990104fc8f27d13cdf01abc2a32c553129e03f666316cacc5b42d3e0884e"
}
}
}
+2
View File
@@ -0,0 +1,2 @@
[packages]
"delegator.py" = "*"
+19
View File
@@ -1,11 +1,30 @@
#!/usr/bin/env bash
testPipenv() {
compile "pipenv"
assertCapturedSuccess
}
testPipenvVersion() {
compile "pipenv-version"
assertCaptured "3.6.0"
assertCapturedSuccess
}
testNoRequirements() {
compile "no-requirements"
assertCapturedError
}
testNLTK() {
compile "nltk"
assertCaptured "wordnet"
assertCapturedSuccess
}
testSetupPy() {
compile "setup-py"
assertCaptured "maya"
+2
View File
@@ -150,6 +150,8 @@ _assertContains()
debug()
{
cat $STD_OUT
echo '^^^^^^'
cat $STD_ERR
}
assertContains()
+20061
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
-15
View File
@@ -1,15 +0,0 @@
#!/usr/bin/env python
import sys
req_file = sys.argv[1]
lines = []
with open(req_file, 'r') as f:
r = f.readlines()
for l in r:
lines.append(l.split('--hash')[0])
with open(req_file, 'w') as f:
f.write('\n'.join(lines))
Vendored Executable
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env python
import sys
runtime_file = sys.argv[1]
with open(runtime_file, 'r') as f:
r = f.read().strip()
with open(runtime_file, 'w') as f:
f.write(r)