mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 60614232da | |||
| edb7004a28 | |||
| ea350a6694 | |||
| 027d49eb58 | |||
| 49597f22ca | |||
| 4bb8f59f2c | |||
| d4b6b0190d | |||
| 2c2cbc4653 | |||
| d0629cd6ef | |||
| 398a0fb202 | |||
| 5bf80a2270 | |||
| 61609930c1 | |||
| 0fa27b7b0d | |||
| cc247753e5 | |||
| 4da1ca71b5 | |||
| 3d70b2e9ff | |||
| 87e9fb2ccc | |||
| 0d61f83269 | |||
| e12ad47397 | |||
| 307cb13159 | |||
| 156da405e0 | |||
| ea90db6d13 | |||
| 56f7ccc511 | |||
| a2c72f77f9 | |||
| 93a5144033 | |||
| ac76968c90 | |||
| 2b3a90ec0c | |||
| 48a368ac71 | |||
| 4d2e74b411 | |||
| d8b37dcaf8 | |||
| 312b9ca6de | |||
| 4e8831a3a3 | |||
| c402d37451 | |||
| 563a9c9187 | |||
| b1e3256128 | |||
| ac93a57492 | |||
| 5828fbfe7d | |||
| b7d8aa4d7d | |||
| a6510f0f77 |
+22
-4
@@ -2,13 +2,31 @@
|
|||||||
|
|
||||||
# Master
|
# Master
|
||||||
|
|
||||||
- Add failcase for cache busting
|
- Set Code Owners to @heroku/langauges
|
||||||
- Bugfix: Clearing pip dependencies
|
- Bugfix: Caching on subsequent redeploys
|
||||||
- Correct ftp to https in vendored file
|
- Update tests to support latest version of Python
|
||||||
- Warn for Django 1.11 approaching EOL, provide link to roadmap
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# 168 (2020-04-06)
|
||||||
|
|
||||||
|
- Doc: Update Readme with version numbers
|
||||||
|
- update Code Owners to include the Heroku Buildpack Maintainers team
|
||||||
|
- Deprecation warning: BUILD_WITH_GEO_LIBRARIES is now deprecated. See warning for details.
|
||||||
|
- Clean up build log output
|
||||||
|
- Update Python versions in README to match docs
|
||||||
|
- Django version detection fixed, link updated
|
||||||
|
|
||||||
|
# 167 (2020-03-26)
|
||||||
|
|
||||||
|
- Add failcase for cache busting
|
||||||
|
- Bugfix: Clearing pip dependencies
|
||||||
|
|
||||||
|
# 166 (2020-03-05)
|
||||||
|
|
||||||
|
- Correct ftp to https in vendored file
|
||||||
|
- Warn for Django 1.11 approaching EOL, provide link to roadmap
|
||||||
|
|
||||||
# 165 (2020-02-27)
|
# 165 (2020-02-27)
|
||||||
|
|
||||||
- Python 3.8.2 now available.
|
- Python 3.8.2 now available.
|
||||||
|
|||||||
@@ -61,8 +61,9 @@ Specify a Python Runtime
|
|||||||
|
|
||||||
Supported runtime options include:
|
Supported runtime options include:
|
||||||
|
|
||||||
- `python-3.7.4`
|
- `python-3.8.2`
|
||||||
- `python-3.6.9`
|
- `python-3.7.6`
|
||||||
|
- `python-3.6.10`
|
||||||
- `python-2.7.17`
|
- `python-2.7.17`
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|||||||
+1
-1
@@ -175,7 +175,7 @@ cd "$BUILD_DIR"
|
|||||||
# - Once the build is complete, `~/.heroku/{known-paths}` is copied back into the cache.
|
# - Once the build is complete, `~/.heroku/{known-paths}` is copied back into the cache.
|
||||||
|
|
||||||
# Create the cache directory, if it doesn't exist.
|
# Create the cache directory, if it doesn't exist.
|
||||||
mkdir -p "$CACHE_DIR"
|
mkdir -p "$CACHE_DIR/.heroku"
|
||||||
|
|
||||||
# Restore old artifacts from the cache.
|
# Restore old artifacts from the cache.
|
||||||
mkdir -p .heroku
|
mkdir -p .heroku
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ source "$BIN_DIR/utils"
|
|||||||
if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
|
if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
|
||||||
|
|
||||||
if [ ! -f ".heroku/vendor/bin/gdalserver" ]; then
|
if [ ! -f ".heroku/vendor/bin/gdalserver" ]; then
|
||||||
|
|
||||||
|
puts-warn "The vendored GDAL package in the Heroku Python Buildpack now deprecated."
|
||||||
|
puts-warn "To enable GDAL use an alternative buildpack is available here - https://github.com/heroku/heroku-geo-buildpack"
|
||||||
|
|
||||||
echo "-----> Noticed GDAL. Bootstrapping gdal."
|
echo "-----> Noticed GDAL. Bootstrapping gdal."
|
||||||
mkdir -p .heroku/vendor
|
mkdir -p .heroku/vendor
|
||||||
# Download and extract cryptography into target vendor directory.
|
# Download and extract cryptography into target vendor directory.
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ source "$BIN_DIR/utils"
|
|||||||
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
|
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
|
||||||
mcount "buildvar.BUILD_WITH_GEO_LIBRARIES"
|
mcount "buildvar.BUILD_WITH_GEO_LIBRARIES"
|
||||||
|
|
||||||
|
puts-warn "The GDAL, GEOS and PROJ binaries and BUILD_WITH_GEO_LIBRARIES functonality are now deprecated."
|
||||||
|
puts-warn "An alternative buildpack to enable GDAL, GEOS and PROJ use is available here - https://github.com/heroku/heroku-geo-buildpack"
|
||||||
|
|
||||||
if [ ! -f ".heroku/vendor/bin/proj" ]; then
|
if [ ! -f ".heroku/vendor/bin/proj" ]; then
|
||||||
echo "-----> Bootstrapping gdal, geos, proj."
|
echo "-----> Bootstrapping gdal, geos, proj."
|
||||||
mkdir -p .heroku/vendor
|
mkdir -p .heroku/vendor
|
||||||
|
|||||||
@@ -38,10 +38,10 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
|
|||||||
mcount "failure.none-version"
|
mcount "failure.none-version"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if grep -q 'django==1.*' requirements.txt; then
|
if grep -qi '^django==1.*' requirements.txt; then
|
||||||
puts-warn "Your Django version is nearing the end of its community support."
|
puts-warn "Your Django version is nearing the end of its community support."
|
||||||
puts-warn "Upgrade to continue to receive security updates and for the best experience with Django."
|
puts-warn "Upgrade to continue to receive security updates and for the best experience with Django."
|
||||||
puts-warn "For more information, check out https://www.djangoproject.com/weblog/2015/jun/25/roadmap/"
|
puts-warn "For more information, check out https://www.djangoproject.com/download/#supported-versions"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
|
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
|
||||||
|
|||||||
+5
-10
@@ -100,22 +100,17 @@ if [[ ! -f "$CACHE_DIR/.heroku/requirements.txt" ]]; then
|
|||||||
# IF there's no cached dependencies, update cached version of requirements.txt
|
# IF there's no cached dependencies, update cached version of requirements.txt
|
||||||
# This should only run for new apps and first deploys after this update
|
# This should only run for new apps and first deploys after this update
|
||||||
cp -R "$BUILD_DIR/requirements.txt" "$CACHE_DIR/.heroku/requirements.txt"
|
cp -R "$BUILD_DIR/requirements.txt" "$CACHE_DIR/.heroku/requirements.txt"
|
||||||
# If we don't already have a python version, this is a new app
|
|
||||||
if [ -f .heroku/python-version ]; then
|
|
||||||
puts-step "Clearing cached dependencies"
|
|
||||||
# if there are any differences, clear the Python cache
|
|
||||||
# Installing Python over again does not take noticably more time
|
|
||||||
rm -rf .heroku/python
|
|
||||||
unset SKIP_INSTALL
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# IF there IS a cached directory, check for differences with the new one
|
# IF there IS a cached directory, check for differences with the new one
|
||||||
if ! diff "$BUILD_DIR/requirements.txt" "$CACHE_DIR/.heroku/requirements.txt"; then
|
if ! diff "$BUILD_DIR/requirements.txt" "$CACHE_DIR/.heroku/requirements.txt" &> /dev/null; then
|
||||||
puts-step "Clearing cached dependencies"
|
puts-step "Requirements file has been changed, clearing cached dependencies"
|
||||||
# if there are any differences, clear the Python cache
|
# if there are any differences, clear the Python cache
|
||||||
# Installing Python over again does not take noticably more time
|
# Installing Python over again does not take noticably more time
|
||||||
|
cp -R "$BUILD_DIR/requirements.txt" "$CACHE_DIR/.heroku/requirements.txt"
|
||||||
rm -rf .heroku/python
|
rm -rf .heroku/python
|
||||||
unset SKIP_INSTALL
|
unset SKIP_INSTALL
|
||||||
|
else
|
||||||
|
puts-step "No change in requirements detected, installing from cache"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ buildpack_sqlite3_install() {
|
|||||||
puts-step "Installing SQLite3"
|
puts-step "Installing SQLite3"
|
||||||
|
|
||||||
if sqlite3_install "$BUILD_DIR/.heroku/python" ; then
|
if sqlite3_install "$BUILD_DIR/.heroku/python" ; then
|
||||||
echo "Sqlite3 successfully installed."
|
|
||||||
mcount "success.python.sqlite3"
|
mcount "success.python.sqlite3"
|
||||||
else
|
else
|
||||||
echo "Sqlite3 failed to install."
|
echo "Sqlite3 failed to install."
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
---
|
---
|
||||||
- - "./repos/python/python-getting-started"
|
- - "./repos/python/python-getting-started"
|
||||||
- f56b90499ec11e1c9576da2f8c7331300e189db3
|
- 443a90c58be6881583cd7ef628e3869e3c30bb98
|
||||||
|
|||||||
@@ -3,26 +3,40 @@ require_relative '../spec_helper'
|
|||||||
describe "Default Python Deploy" do
|
describe "Default Python Deploy" 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|
|
||||||
|
|
||||||
|
# What should happen on first deploy
|
||||||
expect(app.output).to match(/Installing pip/)
|
expect(app.output).to match(/Installing pip/)
|
||||||
expect(app.run('python -V')).to match(/3.6.10/)
|
|
||||||
|
|
||||||
|
# What should not happen
|
||||||
|
expect(app.output).to_not match("Requirements file has been changed, updating cache")
|
||||||
|
expect(app.output).to_not match("No change in requirements detected, installing from cache")
|
||||||
|
expect(app.output).to_not match("No such file or directory")
|
||||||
|
expect(app.output).to_not match("cp: cannot create regular file")
|
||||||
|
|
||||||
expect(app.output).to_not match("Clearing cached dependencies")
|
# Redeploy with changed requirements file
|
||||||
|
run!(%Q{echo "" >> requirements.txt})
|
||||||
# Redeploy
|
|
||||||
run!(%Q{echo "flask" >> requirements.txt})
|
run!(%Q{echo "flask" >> requirements.txt})
|
||||||
run!(%Q{git add . ; git commit --allow-empty -m next})
|
run!(%Q{git add . ; git commit --allow-empty -m next})
|
||||||
app.push!
|
app.push!
|
||||||
|
|
||||||
# Check for the cache tohave cleared
|
# Check for the cache to have cleared
|
||||||
expect(app.output).to match("Clearing cached dependencies")
|
expect(app.output).to match("Requirements file has been changed, updating cache")
|
||||||
|
|
||||||
|
# What should not happen when the requirements file is changed
|
||||||
|
expect(app.output).to_not match("No dependencies found, preparing to install")
|
||||||
|
expect(app.output).to_not match("No change in requirements detected, installing from cache")
|
||||||
|
|
||||||
run!(%Q{git commit --allow-empty -m next})
|
run!(%Q{git commit --allow-empty -m next})
|
||||||
app.push!
|
app.push!
|
||||||
|
|
||||||
# The cache should not clear with no changes
|
# With no changes on redeploy, the cache should
|
||||||
expect(app.output).to_not match("Clearing cached dependencies")
|
expect(app.output).to match("No change in requirements detected, installing from cache")
|
||||||
|
|
||||||
|
# With no changes on redeploy, the cache should not
|
||||||
|
expect(app.output).to_not match("Requirements file has been changed, updating cache")
|
||||||
|
expect(app.output).to_not match("No dependencies found, preparing to install")
|
||||||
|
|
||||||
|
expect(app.run('python -V')).to match(/3.7.6/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
pwned-passwords-django==1.4
|
||||||
|
Django==2.1
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
Django==1.11
|
||||||
+8
-1
@@ -23,6 +23,14 @@ testGEOS() {
|
|||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testGEOSDeprecation() {
|
||||||
|
export BUILD_WITH_GEO_LIBRARIES=1
|
||||||
|
compile "geos"
|
||||||
|
assertCaptured " ! The GDAL, GEOS and PROJ binaries and BUILD_WITH_GEO_LIBRARIES functonality are now deprecated.
|
||||||
|
! An alternative buildpack to enable GDAL, GEOS and PROJ use is available here - https://github.com/heroku/heroku-geo-buildpack"
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
testNLTK() {
|
testNLTK() {
|
||||||
# NOTE: This is a RuntimeWarning emitted by Python 3's runpy.py script
|
# 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
|
# which is what is used when you call `python -m <module>`. This is due to
|
||||||
@@ -48,7 +56,6 @@ testPysqlite() {
|
|||||||
|
|
||||||
testSqliteInstall() {
|
testSqliteInstall() {
|
||||||
compile "pythonDefault"
|
compile "pythonDefault"
|
||||||
assertCaptured "Sqlite3 successfully installed."
|
|
||||||
assertNotCaptured "Sqlite3 failed to install."
|
assertNotCaptured "Sqlite3 failed to install."
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,6 +74,18 @@ testNoRequirements() {
|
|||||||
assertCapturedError
|
assertCapturedError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testWarnOldDjango() {
|
||||||
|
compile "old-django"
|
||||||
|
assertCaptured "Your Django version is nearing the end of its community support."
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
|
testDontWarnOldDjango() {
|
||||||
|
compile "not-old-django"
|
||||||
|
assertNotCaptured "Your Django version is nearing the end of its community support."
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
pushd $(dirname 0) >/dev/null
|
pushd $(dirname 0) >/dev/null
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user