mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 15:00:19 +00:00
42076f1bf4
The standalone Geo buildpack offers more modern GDAL/GEOS/PROJ library versions, and can be used by apps in all languages, not just Python: https://github.com/heroku/heroku-geo-buildpack As such the Python buildpack's undocumented built-in support was deprecated back in April 2020, with a scheduled removal date of 6th October 2020: https://devcenter.heroku.com/changelog-items/1759 https://help.heroku.com/D5INLB1A/python-s-build_with_geo_libraries-legacy-feature-is-now-deprecated Metrics show very few builds continuing to use the built-in support. Apps with the `BUILD_WITH_GEO_LIBRARIES` env var set will now be shown a warning directing them to the standalone buildpack, as well as apps that hit GDAL related pip install errors but aren't using the env var. This also moves us one step closer to being able to remove the vendored copy of pip-pop (which is partially broken on newer pip). Closes @W-7654424@.
156 lines
4.3 KiB
Bash
Executable File
156 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Default Python Versions
|
|
# shellcheck source=bin/default_pythons
|
|
source "bin/default_pythons"
|
|
|
|
testGitEgg() {
|
|
compile "git-egg"
|
|
assertCaptured "requests"
|
|
assertCapturedSuccess
|
|
}
|
|
|
|
testSmartRequirements() {
|
|
local cache_dir="$(mktmpdir)"
|
|
compile "requirements-standard" "$cache_dir"
|
|
assertFile "requests" ".heroku/python/requirements-declared.txt"
|
|
assertCapturedSuccess
|
|
compile "psycopg2" "$cache_dir"
|
|
assertFile "psycopg2" ".heroku/python/requirements-declared.txt"
|
|
assertCapturedSuccess
|
|
}
|
|
|
|
testStackChange() {
|
|
local cache_dir="$(mktmpdir)"
|
|
mkdir -p "${cache_dir}/.heroku"
|
|
echo "different-stack" > "${cache_dir}/.heroku/python-stack"
|
|
compile "requirements-standard" "$cache_dir"
|
|
assertCaptured "clearing cache"
|
|
assertFile "$STACK" ".heroku/python-stack"
|
|
assertCapturedSuccess
|
|
}
|
|
|
|
testSetupPy() {
|
|
compile "setup-py"
|
|
assertCaptured "maya"
|
|
# Can't use `assertCapturedSuccess` since stderr contains:
|
|
# "cp: cannot stat '/tmp/build_*/requirements.txt': No such file or directory" (W-7924941)
|
|
assertCapturedSuccessWithStdErr
|
|
}
|
|
|
|
testStandardRequirements() {
|
|
compile "requirements-standard"
|
|
assertCaptured "requests"
|
|
assertCapturedSuccess
|
|
}
|
|
|
|
testPipenv() {
|
|
compile "pipenv"
|
|
assertCaptured "Installing pip 9.0.2, setuptools 47.1.1 and wheel 0.34.2"
|
|
# Can't use `assertCapturedSuccess` since stderr contains:
|
|
# "cp: cannot stat '/tmp/build_*/requirements.txt': No such file or directory" (W-7924941)
|
|
assertCapturedSuccessWithStdErr
|
|
}
|
|
|
|
testPipenvLock() {
|
|
compile "pipenv-lock"
|
|
# Can't use `assertCapturedSuccess` since stderr contains:
|
|
# "cp: cannot stat '/tmp/build_*/requirements.txt': No such file or directory" (W-7924941)
|
|
assertCapturedSuccessWithStdErr
|
|
}
|
|
|
|
testPipenvPythonVersion3_6() {
|
|
compile "pipenv-version"
|
|
assertCaptured "Installing ${LATEST_36}"
|
|
# Can't use `assertCapturedSuccess` since stderr contains:
|
|
# "cp: cannot stat '/tmp/build_*/requirements.txt': No such file or directory" (W-7924941)
|
|
assertCapturedSuccessWithStdErr
|
|
}
|
|
|
|
testPipenvPythonVersion2_7() {
|
|
# Python 2.7 is EOL, so it has not been built for Heroku-20.
|
|
if [[ $STACK == "heroku-20" ]]; then
|
|
return
|
|
fi
|
|
compile "pipenv-version2"
|
|
assertCaptured "Installing ${LATEST_27}"
|
|
# Can't use `assertCapturedSuccess` since stderr contains:
|
|
# "cp: cannot stat '/tmp/build_*/requirements.txt': No such file or directory" (W-7924941)
|
|
assertCapturedSuccessWithStdErr
|
|
}
|
|
|
|
testPipenvPythonFullVersion() {
|
|
compile "pipenv-full-version"
|
|
assertCaptured "3.7.8"
|
|
# Can't use `assertCapturedSuccess` since stderr contains:
|
|
# "cp: cannot stat '/tmp/build_*/requirements.txt': No such file or directory" (W-7924941)
|
|
assertCapturedSuccessWithStdErr
|
|
}
|
|
|
|
testNoRequirements() {
|
|
compile "no-requirements"
|
|
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
|
|
}
|
|
|
|
testHooks() {
|
|
# Test that the hooks are called correctly, and that the environment contains
|
|
# the app's config vars but no unexpected env vars from the buildpack.
|
|
local env_dir="$(mktmpdir)"
|
|
echo 'test' > "${env_dir}/SOME_APP_CONFIG_VAR"
|
|
local expected_env_vars=(
|
|
_
|
|
BIN_DIR
|
|
BPLOG_PREFIX
|
|
BUILD_DIR
|
|
BUILDPACK_LOG_FILE
|
|
CACHE_DIR
|
|
C_INCLUDE_PATH
|
|
CPLUS_INCLUDE_PATH
|
|
ENV_DIR
|
|
EXPORT_PATH
|
|
HOME
|
|
LANG
|
|
LD_LIBRARY_PATH
|
|
LIBRARY_PATH
|
|
OLDPWD
|
|
PATH
|
|
PIP_NO_PYTHON_VERSION_WARNING
|
|
PKG_CONFIG_PATH
|
|
PROFILE_PATH
|
|
PWD
|
|
PYTHONUNBUFFERED
|
|
SHLVL
|
|
SOME_APP_CONFIG_VAR
|
|
STACK
|
|
)
|
|
if [[ "${STACK}" == "heroku-16" ]]; then
|
|
# Remove "OLDPWD" from expected_env_vars since for bash <4.4 it's not exported to subshells:
|
|
# https://github.com/heroku/heroku-buildpack-python/pull/1011#issuecomment-665117835
|
|
read -ra expected_env_vars <<< "${expected_env_vars[@]/OLDPWD/}"
|
|
fi
|
|
compile 'hooks' '' "${env_dir}"
|
|
assertCaptured "pre_compile ran!"
|
|
assertCaptured "pre_compile env: ${expected_env_vars[*]}."
|
|
assertCaptured "post_compile ran!"
|
|
assertCaptured "post_compile env: ${expected_env_vars[*]}."
|
|
assertCapturedSuccess
|
|
}
|
|
|
|
pushd $(dirname 0) >/dev/null
|
|
popd >/dev/null
|
|
|
|
source $(pwd)/test/utils
|
|
source $(pwd)/test/shunit2
|