Compare commits

...

28 Commits

Author SHA1 Message Date
Casey 446410f883 Merge pull request #925 from heroku/reproduce/cache-busting
Fix cache clear on redeploy
2020-03-26 18:25:17 -04:00
Casey Faist abd9ffdbff Missed bash linting check 2020-03-26 17:46:54 -04:00
Casey Faist 408a081a08 Remove faulty test, use Hatchet instead 2020-03-26 16:48:37 -04:00
Casey Faist 01b0c1b0db no longer reference unused build var on travis 2020-03-26 12:40:53 -04:00
Casey Faist 2e5fe9f286 Clean up white space 2020-03-26 11:35:26 -04:00
Casey Faist 6b9ffb92d9 Don't update to use pip cache, yet
Also fix whitespace
2020-03-26 11:34:32 -04:00
Casey Faist bf1563eaa0 clean up commented code 2020-03-26 11:32:18 -04:00
Casey Faist dcb04b96c3 clean up todos and commented code 2020-03-26 11:26:03 -04:00
Casey Faist ab79d077da gitignore the scratch shunit test 2020-03-26 11:24:42 -04:00
Casey Faist 3d31167511 Clear test out of helper test stub 2020-03-24 13:43:18 -04:00
Casey Faist 0c2b954a6d Update Changelog 2020-03-24 13:43:18 -04:00
Casey Faist b65f0cfce3 Add Readme to document install steps 2020-03-24 13:43:18 -04:00
Casey Faist a1ef075b53 Add Hatchet test 2020-03-24 13:43:18 -04:00
Casey Faist dee86babe1 Don't skip install if clearing cache 2020-03-24 13:43:18 -04:00
Casey Faist 6a02499140 Update caching logic so new apps don't get logs
actually add changes

Missing fi
2020-03-24 13:43:18 -04:00
Casey Faist b8fd617d9c Bash conditional operaters needed for brackets
Removing brackets also works

Wrong diff check - inverted

Remove uninstall step

Whitespace is hard
2020-03-24 13:43:18 -04:00
Casey Faist f7c422e07d test clear cache and cache requirements.txt 2020-03-24 13:43:18 -04:00
Casey Faist cc6a03aa54 Test result of using pip cache on Heroku 2020-03-24 13:43:18 -04:00
Casey Faist 56ecd1aef7 add quick test case 2020-03-24 13:43:18 -04:00
Casey Faist a98a87e1bc Remove the lines that bust the cache when we detect that sqlite has changed 2020-03-12 14:20:49 -07:00
Casey Faist 8c9521d806 Create failcase for deploying the same code twice 2020-03-12 13:47:29 -07:00
Casey a9e5c60106 Merge pull request #922 from heroku/django/warn
Warn about EOL for Django release
2020-03-05 12:33:32 -08:00
Casey Faist 1df55a6c3c and add a changelog 2020-03-04 16:03:10 -08:00
Casey Faist a51e4f8660 warn about EOL for Django release 2020-03-04 15:58:27 -08:00
Casey 46281960c7 Merge pull request #911 from heroku/https-instead-of-ftp
Use GitHub HTTPS instead of sourceware FTP
2020-03-03 15:04:28 -07:00
Casey Faist a19d4950a9 changelog update and typo fix 2020-03-03 12:31:58 -08:00
Casey 753134a2fa Merge branch 'master' into https-instead-of-ftp 2020-03-03 13:26:03 -07:00
Camille Baldock 9ff9466fd5 Use GitHub HTTPS instead of sourceware FTP 2019-12-20 12:21:52 -08:00
10 changed files with 101 additions and 31 deletions
+2
View File
@@ -10,3 +10,5 @@ buildpack/*
builds/dockerenv.staging*
builds/dockerenv.production
test/scratch
+3 -3
View File
@@ -10,11 +10,11 @@ before_script:
script:
- docker build --pull --tag travis-build-cedar-14 --file $(pwd)/builds/cedar-14.Dockerfile .
- docker run --rm -e "STACK=cedar-14" -e "USE_STAGING_BINARIES=$USE_STAGING_BINARIES" travis-build-cedar-14 bash $TESTFOLDER
- docker run --rm -e "STACK=cedar-14" travis-build-cedar-14 bash $TESTFOLDER
- docker build --pull --tag travis-build-heroku-16 --file $(pwd)/builds/heroku-16.Dockerfile .
- docker run --rm -e "STACK=heroku-16" -e "USE_STAGING_BINARIES=$USE_STAGING_BINARIES" travis-build-heroku-16 bash $TESTFOLDER
- docker run --rm -e "STACK=heroku-16" travis-build-heroku-16 bash $TESTFOLDER
- docker build --pull --tag travis-build-heroku-18 --file $(pwd)/builds/heroku-18.Dockerfile .
- docker run --rm -e "STACK=heroku-18" -e "USE_STAGING_BINARIES=$USE_STAGING_BINARIES" travis-build-heroku-18 bash $TESTFOLDER
- docker run --rm -e "STACK=heroku-18" travis-build-heroku-18 bash $TESTFOLDER
jobs:
include:
+9 -3
View File
@@ -2,12 +2,18 @@
# Master
- Python 3.8.2 now available.
- Add failcase for cache busting
- Bugfix: Clearing pip dependencies
- Correct ftp to https in vendored file
- Warn for Django 1.11 approaching EOL, provide link to roadmap
--------------------------------------------------------------------------------
# 163 (2020-02-20)
# 165 (2020-02-27)
- Python 3.8.2 now available.
# 164 (2020-02-20)
- Update requirements.txt builds to use Pip 20.0.2
- Download get-pip.py to tmpdir instead of root dir
-9
View File
@@ -259,17 +259,8 @@ mtime "python.install.time" "${start}"
# shellcheck source=bin/steps/pipenv
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.
(( start=$(nowms) ))
# shellcheck source=bin/steps/pip-uninstall
source "$BIN_DIR/steps/pip-uninstall"
mtime "pip.uninstall.time" "${start}"
# If no requirements.txt file given, assume `setup.py develop` is intended.
# This allows for people to ship a setup.py application to Heroku
# (which is rare, but I vouch that it should work!)
if [ ! -f requirements.txt ] && [ ! -f Pipfile ]; then
echo "-e ." > requirements.txt
+28
View File
@@ -0,0 +1,28 @@
# Python Buildpack Install Steps
TODO: Add context on Python install steps, such as why symlinking vs copying
## Installing the Pip tool
The Python Buildpack uses a tool called `get-pip` to install the pip tool. This
is done in the `python` script.
This is in part because Python historically did not come with pip by default.
## Installing Python packages using Pip
### Convention: Use `python` process to invoke Pip
We don't use this convention (yet) but this is an upcoming change being considered.
This is a bigger concern on Windows than it is in Linux environments, but an
emerging convention in the Python community is to invoke pip using:
```
python3 -m pip [options]
```
Invoking pip this way ensures correct location - python knows where these
packages are stored because it put them there (defaults to Python's pathing info).
All normal command line options are available using this method.
+7 -3
View File
@@ -38,9 +38,16 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
mcount "failure.none-version"
fi
if grep -q 'django==1.*' requirements.txt; then
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 "For more information, check out https://www.djangoproject.com/weblog/2015/jun/25/roadmap/"
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
PIP_STATUS="${PIPESTATUS[0]}"
set -e
@@ -52,12 +59,9 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
exit 1
fi
# Smart Requirements handling
cp requirements.txt .heroku/python/requirements-declared.txt
/app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
echo
# Install test dependencies, for CI.
if [ "$INSTALL_TEST" ]; then
if [[ -f "$1/requirements-test.txt" ]]; then
+24 -9
View File
@@ -86,14 +86,6 @@ if [[ "$STACK" != "$CACHED_PYTHON_STACK" ]]; then
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
if [ ! "$(cat .heroku/python-version)" = "$PYTHON_VERSION" ]; then
puts-step "Found $(cat .heroku/python-version), removing"
@@ -103,6 +95,29 @@ if [ -f .heroku/python-version ]; then
fi
fi
# Check if we should reinstall python dependencies
if [[ ! -f "$CACHE_DIR/.heroku/requirements.txt" ]]; then
# 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
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
# 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
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
fi
if [ ! "$SKIP_INSTALL" ]; then
puts-step "Installing $PYTHON_VERSION"
@@ -137,7 +152,7 @@ if ! curl -s "${GETPIP_URL}" -o "$GETPIP_PY" &> /dev/null; then
exit 1
fi
# If Pip isn't up to date:
# If a new Python has been installed or Pip isn't up to date:
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then
puts-step "Installing pip"
+2 -2
View File
@@ -15,11 +15,11 @@ hash -r
echo "Building libffi…"
SOURCE_TARBALL='ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz'
SOURCE_TARBALL='https://github.com/libffi/libffi/archive/v3.1.tar.gz'
curl -L $SOURCE_TARBALL | tar x
cd libffi-3.1
cd v3.1
./configure --prefix=$OUT_PREFIX --disable-static &&
make
make install
+19 -1
View File
@@ -1,10 +1,28 @@
require_relative '../spec_helper'
describe "Python!!!!!!!!!!!" do
describe "Default Python Deploy" do
it "🐍" do
Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app|
expect(app.output).to match(/Installing pip/)
expect(app.run('python -V')).to match(/3.6.10/)
expect(app.output).to_not match("Clearing cached dependencies")
# Redeploy
run!(%Q{echo "flask" >> requirements.txt})
run!(%Q{git add . ; git commit --allow-empty -m next})
app.push!
# Check for the cache tohave cleared
expect(app.output).to match("Clearing cached dependencies")
run!(%Q{git commit --allow-empty -m next})
app.push!
# The cache should not clear with no changes
expect(app.output).to_not match("Clearing cached dependencies")
end
end
end
+7 -1
View File
@@ -20,4 +20,10 @@ if ENV['TRAVIS']
exit 0 if ENV['TRAVIS_PULL_REQUEST'] != 'false' && ENV['TRAVIS_BRANCH'] == 'master'
end
DEFAULT_STACK = 'heroku-16'
DEFAULT_STACK = 'heroku-18'
def run!(cmd)
out = `#{cmd}`
raise "Error running command #{cmd} with output: #{out}" unless $?.success?
return out
end