mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
184 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 181e3395f9 | |||
| 013ba6b1d9 | |||
| bce5bf4869 | |||
| 0fdb62faa9 | |||
| 42507a3f9a | |||
| f89ee6750e | |||
| 122722f89e | |||
| 8cb379f83b | |||
| d3a60b21fe | |||
| 7e80ea8fbe | |||
| c78ffd5ac4 | |||
| a06b536109 | |||
| dd646998d3 | |||
| 484bd44a1e | |||
| 932cd257c9 | |||
| 989351467f | |||
| d68a7c594c | |||
| 97f783ce96 | |||
| 106f2997fa | |||
| 373a656272 | |||
| 0abc749aff | |||
| 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 | |||
| 446410f883 | |||
| abd9ffdbff | |||
| 408a081a08 | |||
| 01b0c1b0db | |||
| 2e5fe9f286 | |||
| 6b9ffb92d9 | |||
| bf1563eaa0 | |||
| dcb04b96c3 | |||
| ab79d077da | |||
| 2b3a90ec0c | |||
| 48a368ac71 | |||
| 3d31167511 | |||
| 0c2b954a6d | |||
| b65f0cfce3 | |||
| a1ef075b53 | |||
| dee86babe1 | |||
| 6a02499140 | |||
| b8fd617d9c | |||
| f7c422e07d | |||
| cc6a03aa54 | |||
| 56ecd1aef7 | |||
| 4d2e74b411 | |||
| d8b37dcaf8 | |||
| a98a87e1bc | |||
| 8c9521d806 | |||
| 312b9ca6de | |||
| a9e5c60106 | |||
| 1df55a6c3c | |||
| a51e4f8660 | |||
| 46281960c7 | |||
| a19d4950a9 | |||
| 753134a2fa | |||
| 998a15395b | |||
| e68f556e63 | |||
| ef333c516b | |||
| 552f0f77d5 | |||
| 583b9cfd95 | |||
| c182bacdf2 | |||
| ca9b6de50f | |||
| 5910581665 | |||
| c1f6862110 | |||
| 520c240edd | |||
| 61341d17b8 | |||
| acfc7240f8 | |||
| e32aaf9d00 | |||
| ec57979bf8 | |||
| 0057d19082 | |||
| 0419921227 | |||
| 7d743e7998 | |||
| 2942fc8e4a | |||
| 0e1ac6217b | |||
| 848c846a3d | |||
| 179f345f5b | |||
| 6fc11b8370 | |||
| f189df5415 | |||
| 8253ffa354 | |||
| 514c494891 | |||
| 9a9e972db0 | |||
| 9ff9466fd5 | |||
| 1750242ccd | |||
| 50460beb95 | |||
| 4e8831a3a3 | |||
| 69c17b343a | |||
| f31e9fa835 | |||
| 5788ff57cd | |||
| f0f3463658 | |||
| ffc7683c05 | |||
| 3a6f7f849b | |||
| 475af5a1f8 | |||
| d166ee88d7 | |||
| ba55465a2b | |||
| c402d37451 | |||
| 8eb2954e92 | |||
| 468d27ab98 | |||
| 515a222cc4 | |||
| 53c4674ecd | |||
| 93a620e6ed | |||
| a7a257e099 | |||
| 40e91a9755 | |||
| 7686370d81 | |||
| 2d6990425e | |||
| b5b640ab00 | |||
| dfe28cbe28 | |||
| 8fc94c0868 | |||
| 86fc9f156b | |||
| 2a4f0a66c3 | |||
| 87ba8b499a | |||
| f03b7ed048 | |||
| bf1b1dc3f8 | |||
| a421ea93e3 | |||
| 3c40bf8bea | |||
| f28465bec7 | |||
| fade163df8 | |||
| 13fad186ff | |||
| c12f395c9a | |||
| 43c54abf0e | |||
| 151df58e86 | |||
| 1c87fd3d6e | |||
| 50cdf10a36 | |||
| 0be5993e32 | |||
| 3f9a80ad24 | |||
| 14c15f4dd8 | |||
| 9bd5fa7c7f | |||
| 89885a4472 | |||
| 3c193bd475 | |||
| a7f62496b1 | |||
| f1b0f8c154 | |||
| 563a9c9187 | |||
| f90dfbc12e | |||
| 9ca0c4eb84 | |||
| dc694d4712 | |||
| b4b94abea0 | |||
| 0c66cea063 | |||
| 48f6e20fc5 | |||
| b1e3256128 | |||
| 7ceb774c63 | |||
| ac93a57492 | |||
| 5828fbfe7d | |||
| f43caaadc3 | |||
| bb31a012fd | |||
| b7d8aa4d7d | |||
| a6510f0f77 | |||
| 9ab6a56cba | |||
| ab89e49235 | |||
| 5293169aa8 | |||
| 3698cb5715 | |||
| e821501114 | |||
| 03c12e8081 | |||
| de18566b47 | |||
| 939594ecf4 | |||
| d54da94d47 | |||
| ce6657d5fe | |||
| 74bc1d4049 | |||
| c4b4bfaa3c | |||
| 7c82017a0e | |||
| 6a8aa1e2b0 | |||
| 35873ee517 |
+1
-1
@@ -1 +1 @@
|
|||||||
* @heroku/languages
|
* @heroku/languages
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
name: Check Changelog
|
name: Check Changelog
|
||||||
|
|
||||||
on: [pull_request]
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, edited, synchronize]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|||||||
@@ -10,3 +10,5 @@ buildpack/*
|
|||||||
|
|
||||||
builds/dockerenv.staging*
|
builds/dockerenv.staging*
|
||||||
builds/dockerenv.production
|
builds/dockerenv.production
|
||||||
|
|
||||||
|
test/scratch
|
||||||
|
|||||||
+11
-6
@@ -1,12 +1,14 @@
|
|||||||
language: ruby
|
language: ruby
|
||||||
dist: trusty
|
dist: bionic
|
||||||
sudo: required
|
sudo: required
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
|
||||||
rvm:
|
rvm:
|
||||||
- 2.4.4
|
- 2.6.6
|
||||||
before_script:
|
before_script:
|
||||||
- gem install bundler -v 1.16.2
|
- gem install bundler -v 1.16.2
|
||||||
- bundle exec hatchet ci:setup
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- docker build --pull --tag travis-build-cedar-14 --file $(pwd)/builds/cedar-14.Dockerfile .
|
- docker build --pull --tag travis-build-cedar-14 --file $(pwd)/builds/cedar-14.Dockerfile .
|
||||||
@@ -22,9 +24,12 @@ jobs:
|
|||||||
sudo: false
|
sudo: false
|
||||||
script: make check
|
script: make check
|
||||||
- stage: Hatchet Integration
|
- stage: Hatchet Integration
|
||||||
if: branch = master
|
if: env(TRAVIS_PULL_REQUEST_SLUG) = env(TRAVIS_REPO_SLUG)
|
||||||
name: Run Hatchet
|
name: Run Hatchet
|
||||||
script: "bundle exec rspec"
|
script:
|
||||||
|
- bundle exec hatchet ci:setup
|
||||||
|
- PARALLEL_SPLIT_TEST_PROCESSES=11 bundle exec parallel_split_test spec/hatchet/
|
||||||
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
- TESTFOLDER=test/run-deps
|
- TESTFOLDER=test/run-deps
|
||||||
@@ -33,7 +38,7 @@ env:
|
|||||||
global:
|
global:
|
||||||
- HATCHET_RETRIES=3
|
- HATCHET_RETRIES=3
|
||||||
- IS_RUNNING_ON_CI=true
|
- IS_RUNNING_ON_CI=true
|
||||||
- HATCHET_APP_LIMIT=5
|
- HATCHET_APP_LIMIT=80
|
||||||
- HATCHET_DEPLOY_STRATEGY=git
|
- HATCHET_DEPLOY_STRATEGY=git
|
||||||
- secure: yjtlPE5FbVxTKnjUy/tZUBgSEf4qADD3QOxtgziuid73S0U/1IEXlMGFULsQzIjtlHKmHeywZqpVVEpthIH4RuT7uoX1Pb7SSM/g0T8fT3VoEFbFK1uYl0oZQbUS4Klxv9tPiumj8if3m6ULEGIz1X0wZcMOC0tMLwVCnwmap0E=
|
- secure: yjtlPE5FbVxTKnjUy/tZUBgSEf4qADD3QOxtgziuid73S0U/1IEXlMGFULsQzIjtlHKmHeywZqpVVEpthIH4RuT7uoX1Pb7SSM/g0T8fT3VoEFbFK1uYl0oZQbUS4Klxv9tPiumj8if3m6ULEGIz1X0wZcMOC0tMLwVCnwmap0E=
|
||||||
- secure: ZeFTHWwnpIKE9nAqs88ocmiQh7bKce84lilGm5J23nf3N6V4wNyLwqlkvsM008WGBCaOg9AUx7ZunasT0ANsR5gLP3eV2UUg7ILdRgV2Gy13eNRFheC4PHdN92RqQ3aKoqlIv2K999xlhVjod0NzhkQQXB6PddfQINbuU7ks6As=
|
- secure: ZeFTHWwnpIKE9nAqs88ocmiQh7bKce84lilGm5J23nf3N6V4wNyLwqlkvsM008WGBCaOg9AUx7ZunasT0ANsR5gLP3eV2UUg7ILdRgV2Gy13eNRFheC4PHdN92RqQ3aKoqlIv2K999xlhVjod0NzhkQQXB6PddfQINbuU7ks6As=
|
||||||
|
|||||||
+73
-1
@@ -2,9 +2,81 @@
|
|||||||
|
|
||||||
# Master
|
# Master
|
||||||
|
|
||||||
- Python 2.7.17 now available on Heroku 18 and 16.
|
|
||||||
|
# 172 (2020-07-17)
|
||||||
|
|
||||||
|
- Python 3.8.4 is now available (CPython)
|
||||||
|
|
||||||
|
# 171 (2020-07-07)
|
||||||
|
|
||||||
|
- Python 3.6.11 and 3.7.8 are now available (CPython).
|
||||||
|
|
||||||
|
# 170 (2020-05-19)
|
||||||
|
|
||||||
|
- Python 2.7.18, 3.5.9, 3.7.7 and 3.8.3 are now available (CPython).
|
||||||
|
- PyPy 2.7 and 3.6, version 7.3.1 are now available (Note: PyPy support is in beta)
|
||||||
|
- Docs: Fix explanation of runtime.txt generation when using pipenv
|
||||||
|
- Bugfix: Correctly detect Python version when using a `python_version` of `3.8` in `Pipfile.lock`
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# 169 (2020-04-22)
|
||||||
|
|
||||||
|
- Add a Hatchet test for python 3.8.2
|
||||||
|
- Set Code Owners to @heroku/langauges
|
||||||
|
- Bugfix: Caching on subsequent redeploys
|
||||||
|
- Update tests to support latest version of Python
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
||||||
|
# 163 (2019-12-23)
|
||||||
|
|
||||||
|
- New pythons released:
|
||||||
|
Python 3.8.1, 3.7.6, 3.6.10 (CPython)
|
||||||
|
Beta Release: Pypy 2.7 and 3.6, version 7.2.0
|
||||||
|
|
||||||
|
# 162 (2019-12-06)
|
||||||
|
|
||||||
|
- Bug fix: fragile sqlite3 install
|
||||||
|
|
||||||
|
# 161 (2019-12-2)
|
||||||
|
|
||||||
|
- Bug fix: Sqlite3 version bump
|
||||||
|
|
||||||
|
# 160 (2019-10-23)
|
||||||
|
|
||||||
|
- Bugfix: Pipenv no longer installs twice in CI
|
||||||
|
|
||||||
|
# 159 (2019-10-22)
|
||||||
|
|
||||||
|
- Python 2.7.17 now available on Heroku 18 and 16.
|
||||||
|
|
||||||
# 158 (2019-10-21)
|
# 158 (2019-10-21)
|
||||||
|
|
||||||
- Python 3.7.5 and 3.8.0 now available on Heroku 18 and 16.
|
- Python 3.7.5 and 3.8.0 now available on Heroku 18 and 16.
|
||||||
|
|||||||
@@ -4,3 +4,5 @@ gem "rspec"
|
|||||||
gem "heroku_hatchet"
|
gem "heroku_hatchet"
|
||||||
gem "rspec-retry"
|
gem "rspec-retry"
|
||||||
gem "rake"
|
gem "rake"
|
||||||
|
gem "parallel_split_test"
|
||||||
|
|
||||||
|
|||||||
+17
-10
@@ -1,21 +1,22 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
activesupport (5.2.1)
|
activesupport (6.0.3.1)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 0.7, < 2)
|
i18n (>= 0.7, < 2)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
concurrent-ruby (1.1.3)
|
zeitwerk (~> 2.2, >= 2.2.2)
|
||||||
|
concurrent-ruby (1.1.6)
|
||||||
diff-lcs (1.3)
|
diff-lcs (1.3)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
excon (0.62.0)
|
excon (0.73.0)
|
||||||
heroics (0.0.25)
|
heroics (0.0.25)
|
||||||
erubis (~> 2.0)
|
erubis (~> 2.0)
|
||||||
excon
|
excon
|
||||||
moneta
|
moneta
|
||||||
multi_json (>= 1.9.2)
|
multi_json (>= 1.9.2)
|
||||||
heroku_hatchet (4.0.6)
|
heroku_hatchet (5.0.3)
|
||||||
excon (~> 0)
|
excon (~> 0)
|
||||||
minitest-retry (~> 0.1.9)
|
minitest-retry (~> 0.1.9)
|
||||||
platform-api (~> 2)
|
platform-api (~> 2)
|
||||||
@@ -23,17 +24,21 @@ GEM
|
|||||||
rrrretry (~> 1)
|
rrrretry (~> 1)
|
||||||
thor (~> 0)
|
thor (~> 0)
|
||||||
threaded (~> 0)
|
threaded (~> 0)
|
||||||
i18n (1.1.1)
|
i18n (1.8.2)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
minitest (5.11.3)
|
minitest (5.14.1)
|
||||||
minitest-retry (0.1.9)
|
minitest-retry (0.1.9)
|
||||||
minitest (>= 5.0)
|
minitest (>= 5.0)
|
||||||
moneta (1.0.0)
|
moneta (1.0.0)
|
||||||
multi_json (1.13.1)
|
multi_json (1.14.1)
|
||||||
|
parallel (1.19.1)
|
||||||
|
parallel_split_test (0.7.0)
|
||||||
|
parallel (>= 0.5.13)
|
||||||
|
rspec (>= 3.1.0)
|
||||||
platform-api (2.2.0)
|
platform-api (2.2.0)
|
||||||
heroics (~> 0.0.25)
|
heroics (~> 0.0.25)
|
||||||
moneta (~> 1.0.0)
|
moneta (~> 1.0.0)
|
||||||
rake (12.3.1)
|
rake (12.3.3)
|
||||||
repl_runner (0.0.3)
|
repl_runner (0.0.3)
|
||||||
activesupport
|
activesupport
|
||||||
rrrretry (1.0.0)
|
rrrretry (1.0.0)
|
||||||
@@ -55,17 +60,19 @@ GEM
|
|||||||
thor (0.20.3)
|
thor (0.20.3)
|
||||||
thread_safe (0.3.6)
|
thread_safe (0.3.6)
|
||||||
threaded (0.0.4)
|
threaded (0.0.4)
|
||||||
tzinfo (1.2.5)
|
tzinfo (1.2.7)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
|
zeitwerk (2.3.0)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
heroku_hatchet
|
heroku_hatchet
|
||||||
|
parallel_split_test
|
||||||
rake
|
rake
|
||||||
rspec
|
rspec
|
||||||
rspec-retry
|
rspec-retry
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
1.16.3
|
2.1.4
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
[[source]]
|
|
||||||
url = "https://pypi.python.org/simple"
|
|
||||||
verify_ssl = true
|
|
||||||
name = "pypi"
|
|
||||||
|
|
||||||
[dev-packages]
|
|
||||||
|
|
||||||
[packages]
|
|
||||||
"bob-builder" = "==0.0.13"
|
|
||||||
Generated
-52
@@ -1,52 +0,0 @@
|
|||||||
{
|
|
||||||
"_meta": {
|
|
||||||
"hash": {
|
|
||||||
"sha256": "36d17c46a8b1b844b3cae475f6f42d6c0a9e59b2a9685cbcdc0985656a7a129f"
|
|
||||||
},
|
|
||||||
"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"
|
|
||||||
},
|
|
||||||
"pipfile-spec": 6,
|
|
||||||
"requires": {},
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"name": "pypi",
|
|
||||||
"url": "https://pypi.python.org/simple",
|
|
||||||
"verify_ssl": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"bob-builder": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:b4de49a8e436fcaf82236ea43f78413b4a4c92100726e382ab57b6bdfb38fe64",
|
|
||||||
"sha256:288e3e765c4890fe9a63ae52ac6b4a963c13fe508482c70ff701a5ae21b9a673"
|
|
||||||
],
|
|
||||||
"version": "==0.0.13"
|
|
||||||
},
|
|
||||||
"boto": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:13be844158d1bd80a94c972c806ec8381b9ea72035aa06123c5db6bc6a6f3ead",
|
|
||||||
"sha256:deb8925b734b109679e3de65856018996338758f4b916ff4fe7bb62b6d7000d1"
|
|
||||||
],
|
|
||||||
"version": "==2.48.0"
|
|
||||||
},
|
|
||||||
"docopt": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"
|
|
||||||
],
|
|
||||||
"version": "==0.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"develop": {}
|
|
||||||
}
|
|
||||||
@@ -46,7 +46,8 @@ To specify your python version, you also need a `runtime.txt` file - unless you
|
|||||||
|
|
||||||
Current default Python Runtime: Python 3.6.9
|
Current default Python Runtime: Python 3.6.9
|
||||||
|
|
||||||
Alternatively, you can provide a `setup.py` file, or a `Pipfile`. Using `Pipenv` will generate `runtime.txt` based on `python-version` at build time.
|
Alternatively, you can provide a `setup.py` file, or a `Pipfile`.
|
||||||
|
Using `pipenv` will generate `runtime.txt` at build time if one of the field `python_version` or `python_full_version` is specified in the `requires` section of your `Pipfile`.
|
||||||
|
|
||||||
Specify a Buildpack Version
|
Specify a Buildpack Version
|
||||||
---------------------------
|
---------------------------
|
||||||
@@ -61,9 +62,10 @@ Specify a Python Runtime
|
|||||||
|
|
||||||
Supported runtime options include:
|
Supported runtime options include:
|
||||||
|
|
||||||
- `python-3.7.4`
|
- `python-3.8.4`
|
||||||
- `python-3.6.9`
|
- `python-3.7.8`
|
||||||
- `python-2.7.16`
|
- `python-3.6.11`
|
||||||
|
- `python-2.7.18`
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
|
|||||||
+22
-11
@@ -58,11 +58,31 @@ PY36="python-3.6"
|
|||||||
PY35="python-3.5"
|
PY35="python-3.5"
|
||||||
PY34="python-3.4"
|
PY34="python-3.4"
|
||||||
PY27="python-2.7"
|
PY27="python-2.7"
|
||||||
|
PYPY27="pypy2.7"
|
||||||
|
PYPY36="pypy3.6"
|
||||||
|
|
||||||
# Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)?
|
# Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)?
|
||||||
DEFAULT_PYTHON_STACK="cedar-14"
|
DEFAULT_PYTHON_STACK="cedar-14"
|
||||||
# If pip doesn't match this version (the version we install), run the installer.
|
# If pip doesn't match this version (the version we install), run the installer.
|
||||||
PIP_UPDATE="9.0.2"
|
PIP_UPDATE="20.0.2"
|
||||||
|
|
||||||
|
for file in "$BUILD_DIR/runtime.txt" "$CACHE_DIR/.heroku/python-version" ; do
|
||||||
|
[ -f "$file" ] || continue
|
||||||
|
|
||||||
|
version=$(tr -d '[:space:]' < "$file")
|
||||||
|
|
||||||
|
case "$version" in "$PY34"*)
|
||||||
|
# Python 3.4 support was dropped in pip >= 19.2.
|
||||||
|
PIP_UPDATE="19.1.1"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -f "$BUILD_DIR/Pipfile" ]]; then
|
||||||
|
# Do not force pipenv users to re-install pipenv locally.
|
||||||
|
PIP_UPDATE="9.0.2"
|
||||||
|
fi
|
||||||
|
|
||||||
export DEFAULT_PYTHON_STACK PIP_UPDATE
|
export DEFAULT_PYTHON_STACK PIP_UPDATE
|
||||||
export PY37 PY36 PY35 PY27 PY34
|
export PY37 PY36 PY35 PY27 PY34
|
||||||
@@ -155,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
|
||||||
@@ -239,17 +259,8 @@ mtime "python.install.time" "${start}"
|
|||||||
# shellcheck source=bin/steps/pipenv
|
# shellcheck source=bin/steps/pipenv
|
||||||
source "$BIN_DIR/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.
|
# If no requirements.txt file given, assume `setup.py develop` is intended.
|
||||||
# This allows for people to ship a setup.py application to Heroku
|
# 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
|
if [ ! -f requirements.txt ] && [ ! -f Pipfile ]; then
|
||||||
echo "-e ." > requirements.txt
|
echo "-e ." > requirements.txt
|
||||||
|
|||||||
+17
-7
@@ -1,11 +1,21 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
DEFAULT_PYTHON_VERSION="python-3.6.9"
|
DEFAULT_PYTHON_VERSION="python-3.6.11"
|
||||||
LATEST_38="python-3.8.0"
|
LATEST_38="python-3.8.4"
|
||||||
LATEST_37="python-3.7.5"
|
LATEST_37="python-3.7.8"
|
||||||
LATEST_36="python-3.6.9"
|
LATEST_36="python-3.6.11"
|
||||||
LATEST_35="python-3.5.7"
|
LATEST_35="python-3.5.9"
|
||||||
LATEST_34="python-3.4.10"
|
LATEST_34="python-3.4.10"
|
||||||
LATEST_27="python-2.7.17"
|
LATEST_27="python-2.7.18"
|
||||||
|
PYPY_36="pypy3.6-7.3.1"
|
||||||
|
PYPY_27="pypy2.7-7.3.1"
|
||||||
|
|
||||||
export DEFAULT_PYTHON_VERSION LATEST_38 LATEST_37 LATEST_36 LATEST_35 LATEST_34 LATEST_27
|
export DEFAULT_PYTHON_VERSION \
|
||||||
|
LATEST_38 \
|
||||||
|
LATEST_37 \
|
||||||
|
LATEST_36 \
|
||||||
|
LATEST_35 \
|
||||||
|
LATEST_34 \
|
||||||
|
LATEST_27 \
|
||||||
|
PYPY_36 \
|
||||||
|
PYPY_27
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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,9 +38,16 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
|
|||||||
mcount "failure.none-version"
|
mcount "failure.none-version"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -qi '^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/download/#supported-versions"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
|
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
/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]}"
|
PIP_STATUS="${PIPESTATUS[0]}"
|
||||||
set -e
|
set -e
|
||||||
@@ -52,12 +59,9 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Smart Requirements handling
|
|
||||||
cp requirements.txt .heroku/python/requirements-declared.txt
|
cp requirements.txt .heroku/python/requirements-declared.txt
|
||||||
/app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
|
/app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
|
||||||
|
|
||||||
echo
|
|
||||||
|
|
||||||
# Install test dependencies, for CI.
|
# Install test dependencies, for CI.
|
||||||
if [ "$INSTALL_TEST" ]; then
|
if [ "$INSTALL_TEST" ]; then
|
||||||
if [[ -f "$1/requirements-test.txt" ]]; then
|
if [[ -f "$1/requirements-test.txt" ]]; then
|
||||||
|
|||||||
+7
-7
@@ -60,10 +60,16 @@ if [ ! "$SKIP_PIPENV_INSTALL" ]; then
|
|||||||
# avoid this eager behavior.
|
# avoid this eager behavior.
|
||||||
/app/.heroku/python/bin/pip install pipenv==$PIPENV_VERSION --upgrade --upgrade-strategy only-if-needed &> /dev/null
|
/app/.heroku/python/bin/pip install pipenv==$PIPENV_VERSION --upgrade --upgrade-strategy only-if-needed &> /dev/null
|
||||||
|
|
||||||
|
# Install the test dependencies, for CI.
|
||||||
|
if [ "$INSTALL_TEST" ]; then
|
||||||
|
puts-step "Installing test dependencies…"
|
||||||
|
/app/.heroku/python/bin/pipenv install --dev --system --deploy 2>&1 | cleanup | indent
|
||||||
|
|
||||||
# Install the dependencies.
|
# Install the dependencies.
|
||||||
if [[ ! -f Pipfile.lock ]]; then
|
elif [[ ! -f Pipfile.lock ]]; then
|
||||||
puts-step "Installing dependencies with Pipenv $PIPENV_VERSION…"
|
puts-step "Installing dependencies with Pipenv $PIPENV_VERSION…"
|
||||||
/app/.heroku/python/bin/pipenv install --system --skip-lock 2>&1 | indent
|
/app/.heroku/python/bin/pipenv install --system --skip-lock 2>&1 | indent
|
||||||
|
|
||||||
else
|
else
|
||||||
pipenv-to-pip Pipfile.lock > requirements.txt
|
pipenv-to-pip Pipfile.lock > requirements.txt
|
||||||
"$BIN_DIR/steps/pip-uninstall"
|
"$BIN_DIR/steps/pip-uninstall"
|
||||||
@@ -73,12 +79,6 @@ if [ ! "$SKIP_PIPENV_INSTALL" ]; then
|
|||||||
puts-step "Installing dependencies with Pipenv $PIPENV_VERSION…"
|
puts-step "Installing dependencies with Pipenv $PIPENV_VERSION…"
|
||||||
/app/.heroku/python/bin/pipenv install --system --deploy 2>&1 | indent
|
/app/.heroku/python/bin/pipenv install --system --deploy 2>&1 | indent
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install the test dependencies, for CI.
|
|
||||||
if [ "$INSTALL_TEST" ]; then
|
|
||||||
puts-step "Installing test dependencies…"
|
|
||||||
/app/.heroku/python/bin/pipenv install --dev --system --deploy 2>&1 | cleanup | indent
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
export SKIP_PIP_INSTALL=1
|
export SKIP_PIP_INSTALL=1
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ if [[ -f $BUILD_DIR/Pipfile ]]; then
|
|||||||
if [ "$PYTHON" = 3.7 ]; then
|
if [ "$PYTHON" = 3.7 ]; then
|
||||||
echo "$LATEST_37" > "$BUILD_DIR/runtime.txt"
|
echo "$LATEST_37" > "$BUILD_DIR/runtime.txt"
|
||||||
fi
|
fi
|
||||||
|
if [ "$PYTHON" = 3.8 ]; then
|
||||||
|
echo "$LATEST_38" > "$BUILD_DIR/runtime.txt"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+46
-13
@@ -9,6 +9,10 @@ VENDORED_PYTHON="${VENDOR_URL}/runtimes/$PYTHON_VERSION.tar.gz"
|
|||||||
|
|
||||||
SECURITY_UPDATE="Python has released a security update! Please consider upgrading to"
|
SECURITY_UPDATE="Python has released a security update! Please consider upgrading to"
|
||||||
|
|
||||||
|
ONLY_SUPPORTED_2_VERSION="Only the latest version of Python 2 is supported on the platform. Please consider upgrading to"
|
||||||
|
|
||||||
|
PYTHON_2_EOL_UPDATE="Python 2 has reached it's community EOL. Upgrade your Python runtime to maintain a secure application as soon as possible."
|
||||||
|
|
||||||
# check if runtime exists
|
# check if runtime exists
|
||||||
if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
|
if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
|
||||||
if [[ "$PYTHON_VERSION" == $PY38* ]]; then
|
if [[ "$PYTHON_VERSION" == $PY38* ]]; then
|
||||||
@@ -48,8 +52,26 @@ if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
|
|||||||
fi
|
fi
|
||||||
if [[ "$PYTHON_VERSION" == $PY27* ]]; then
|
if [[ "$PYTHON_VERSION" == $PY27* ]]; then
|
||||||
# security update note
|
# security update note
|
||||||
|
if [[ "$(date "+%Y")" -gt "2019" ]]; then
|
||||||
|
puts-warn "$PYTHON_2_EOL_UPDATE"
|
||||||
|
echo " Learn More: https://devcenter.heroku.com/articles/python-2-7-eol-faq"
|
||||||
|
fi
|
||||||
if [ "$PYTHON_VERSION" != "$LATEST_27" ]; then
|
if [ "$PYTHON_VERSION" != "$LATEST_27" ]; then
|
||||||
puts-warn "$SECURITY_UPDATE" "$LATEST_27"
|
puts-warn "$ONLY_SUPPORTED_2_VERSION" "$LATEST_27"
|
||||||
|
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "$PYTHON_VERSION" == $PYPY27* ]]; then
|
||||||
|
# security update note
|
||||||
|
if [ "$PYTHON_VERSION" != "$PYPY_27" ]; then
|
||||||
|
puts-warn "Could not find that Pypy version. Did you mean" "${PYPY_27}?"
|
||||||
|
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "$PYTHON_VERSION" == $PYPY36* ]]; then
|
||||||
|
# security update note
|
||||||
|
if [ "$PYTHON_VERSION" != "$PYPY_36" ]; then
|
||||||
|
puts-warn "Could not find that Pypy version. Did you mean" "${PYPY_36}?"
|
||||||
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -64,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
|
rm -fr .heroku/python-stack .heroku/python-version .heroku/python .heroku/vendor .heroku/python .heroku/python-sqlite3-version
|
||||||
fi
|
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 [ -f .heroku/python-version ]; then
|
||||||
if [ ! "$(cat .heroku/python-version)" = "$PYTHON_VERSION" ]; then
|
if [ ! "$(cat .heroku/python-version)" = "$PYTHON_VERSION" ]; then
|
||||||
puts-step "Found $(cat .heroku/python-version), removing"
|
puts-step "Found $(cat .heroku/python-version), removing"
|
||||||
@@ -81,6 +95,24 @@ if [ -f .heroku/python-version ]; then
|
|||||||
fi
|
fi
|
||||||
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"
|
||||||
|
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" &> /dev/null; then
|
||||||
|
puts-step "Requirements file has been changed, clearing cached dependencies"
|
||||||
|
# if there are any differences, clear the Python cache
|
||||||
|
# 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
|
||||||
|
unset SKIP_INSTALL
|
||||||
|
else
|
||||||
|
puts-step "No change in requirements detected, installing from cache"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! "$SKIP_INSTALL" ]; then
|
if [ ! "$SKIP_INSTALL" ]; then
|
||||||
puts-step "Installing $PYTHON_VERSION"
|
puts-step "Installing $PYTHON_VERSION"
|
||||||
@@ -106,15 +138,16 @@ fi
|
|||||||
|
|
||||||
# Heroku uses the get-pip utility maintained by the Python community to vendor Pip.
|
# Heroku uses the get-pip utility maintained by the Python community to vendor Pip.
|
||||||
# https://github.com/pypa/get-pip
|
# https://github.com/pypa/get-pip
|
||||||
GETPIP="https://lang-python.s3.amazonaws.com/etc/get-pip.py"
|
GETPIP_URL="https://lang-python.s3.amazonaws.com/etc/get-pip.py"
|
||||||
|
GETPIP_PY="${TMPDIR:-/tmp}/get-pip.py"
|
||||||
|
|
||||||
if ! curl -s "${GETPIP}" -o "$ROOT_DIR/get-pip.py" &> /dev/null; then
|
if ! curl -s "${GETPIP_URL}" -o "$GETPIP_PY" &> /dev/null; then
|
||||||
mcount "failure.python.get-pip"
|
mcount "failure.python.get-pip"
|
||||||
echo "Failed to pull down get-pip"
|
echo "Failed to pull down get-pip"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then
|
||||||
|
|
||||||
puts-step "Installing pip"
|
puts-step "Installing pip"
|
||||||
@@ -123,7 +156,7 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then
|
|||||||
rm -fr /app/.heroku/python/lib/python*/site-packages/pip-*
|
rm -fr /app/.heroku/python/lib/python*/site-packages/pip-*
|
||||||
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
|
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
|
||||||
|
|
||||||
/app/.heroku/python/bin/python "$ROOT_DIR/get-pip.py" pip=="$PIP_UPDATE" &> /dev/null
|
/app/.heroku/python/bin/python "$GETPIP_PY" pip=="$PIP_UPDATE" &> /dev/null
|
||||||
/app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-39.0.1-py2.py3-none-any.whl" &> /dev/null
|
/app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-39.0.1-py2.py3-none-any.whl" &> /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+10
-26
@@ -3,21 +3,8 @@
|
|||||||
# shellcheck source=bin/utils
|
# shellcheck source=bin/utils
|
||||||
source "$BIN_DIR/utils"
|
source "$BIN_DIR/utils"
|
||||||
|
|
||||||
sqlite3_version() {
|
|
||||||
if [ "$STACK" = "cedar-14" ]; then
|
|
||||||
SQLITE3_VERSION="3.8.2-1ubuntu2.2"
|
|
||||||
elif [ "$STACK" = "heroku-16" ]; then
|
|
||||||
SQLITE3_VERSION="3.11.0-1ubuntu1.2"
|
|
||||||
else
|
|
||||||
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')}
|
|
||||||
fi
|
|
||||||
|
|
||||||
export SQLITE3_VERSION
|
|
||||||
}
|
|
||||||
|
|
||||||
sqlite3_install() {
|
sqlite3_install() {
|
||||||
HEROKU_PYTHON_DIR="$1"
|
HEROKU_PYTHON_DIR="$1"
|
||||||
SQLITE3_VERSION="$2"
|
|
||||||
HEADERS_ONLY="$3"
|
HEADERS_ONLY="$3"
|
||||||
|
|
||||||
mkdir -p "$HEROKU_PYTHON_DIR"
|
mkdir -p "$HEROKU_PYTHON_DIR"
|
||||||
@@ -35,9 +22,9 @@ sqlite3_install() {
|
|||||||
|
|
||||||
apt-get $APT_OPTIONS update > /dev/null 2>&1
|
apt-get $APT_OPTIONS update > /dev/null 2>&1
|
||||||
if [ -z "$HEADERS_ONLY" ]; then
|
if [ -z "$HEADERS_ONLY" ]; then
|
||||||
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION" sqlite3="$SQLITE3_VERSION" > /dev/null 2>&1
|
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev sqlite3 > /dev/null 2>&1
|
||||||
else
|
else
|
||||||
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION"
|
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev
|
||||||
fi
|
fi
|
||||||
|
|
||||||
find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \;
|
find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \;
|
||||||
@@ -70,7 +57,6 @@ sqlite3_install() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buildpack_sqlite3_install() {
|
buildpack_sqlite3_install() {
|
||||||
sqlite3_version
|
|
||||||
HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python"
|
HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python"
|
||||||
|
|
||||||
SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version"
|
SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version"
|
||||||
@@ -78,16 +64,14 @@ buildpack_sqlite3_install() {
|
|||||||
INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE")
|
INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# python version check
|
puts-step "Installing SQLite3"
|
||||||
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
|
if sqlite3_install "$BUILD_DIR/.heroku/python" ; then
|
||||||
mkdir -p "$CACHE_DIR/.heroku/"
|
mcount "success.python.sqlite3"
|
||||||
echo "$SQLITE3_VERSION" > "$CACHE_DIR/.heroku/python-sqlite3-version"
|
else
|
||||||
fi
|
echo "Sqlite3 failed to install."
|
||||||
|
mcount "failure.python.sqlite3"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$CACHE_DIR/.heroku/"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ ENV WORKSPACE_DIR="/app/builds" \
|
|||||||
DEBIAN_FRONTEND=noninteractive \
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
STACK="cedar-14"
|
STACK="cedar-14"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y python-pip && rm -rf /var/lib/apt/lists/*
|
RUN apt-get update && apt-get install -y python-pip libsqlite3-dev realpath && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY requirements.txt /app/
|
COPY requirements.txt /app/
|
||||||
RUN pip install -r /app/requirements.txt
|
RUN pip install -r /app/requirements.txt
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ ENV WORKSPACE_DIR="/app/builds" \
|
|||||||
DEBIAN_FRONTEND=noninteractive \
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
STACK="heroku-16"
|
STACK="heroku-16"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y python-pip && rm -rf /var/lib/apt/lists/*
|
RUN apt-get update && apt-get install -y python-pip libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY requirements.txt /app/
|
COPY requirements.txt /app/
|
||||||
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
|
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM heroku/heroku:18-build.v16
|
FROM heroku/heroku:18-build
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
ENV WORKSPACE_DIR="/app/builds" \
|
ENV WORKSPACE_DIR="/app/builds" \
|
||||||
@@ -7,7 +7,7 @@ ENV WORKSPACE_DIR="/app/builds" \
|
|||||||
DEBIAN_FRONTEND=noninteractive \
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
STACK="heroku-18"
|
STACK="heroku-18"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install --no-install-recommends -y python-pip-whl=9.0.1-2 python-pip=9.0.1-2 python-setuptools python-wheel && rm -rf /var/lib/apt/lists/*
|
RUN apt-get update && apt-get install --no-install-recommends -y python-pip-whl=9.0.1-2 python-pip=9.0.1-2 python-setuptools python-wheel libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY requirements.txt /app/
|
COPY requirements.txt /app/
|
||||||
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
|
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
|
||||||
|
|||||||
Vendored
-28
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Build Path: /app/.heroku/vendor/
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
|
||||||
|
|
||||||
# Skip the build for heroku-16.
|
|
||||||
if [[ $S3_PREFIX == "heroku-16" ]]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Use new path, containing autoconf.
|
|
||||||
export PATH="/app/.heroku/python/bin/:$PATH"
|
|
||||||
hash -r
|
|
||||||
|
|
||||||
|
|
||||||
echo "Building libffi…"
|
|
||||||
|
|
||||||
SOURCE_TARBALL='ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz'
|
|
||||||
|
|
||||||
curl -L $SOURCE_TARBALL | tar x
|
|
||||||
|
|
||||||
cd libffi-3.1
|
|
||||||
./configure --prefix=$OUT_PREFIX --disable-static &&
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
cd ..
|
|
||||||
Vendored
+3
-3
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
# Skip the build for heroku-16.
|
if [[ $S3_PREFIX != "cedar-14" ]]; then
|
||||||
if [[ $S3_PREFIX == "heroku-16" ]]; then
|
echo "libmemcached only needs to be built for cedar-14, since newer stacks include it in the base image"
|
||||||
exit 0
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# fail hard
|
# fail hard
|
||||||
|
|||||||
Executable
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# fail hard
|
||||||
|
set -o pipefail
|
||||||
|
# fail harder
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
dep_formula=${0#$WORKSPACE_DIR/} # this is the original script, e.g. pypy-5.3.1
|
||||||
|
dep_name=$(basename $BASH_SOURCE) # this is us
|
||||||
|
dep_version=${dep_formula##*"/${dep_name}-"} # "subtract" our name from full version name
|
||||||
|
dep_package=${dep_name}-v${dep_version} # it's always "pypy2-…"
|
||||||
|
dep_dirname=${dep_package}-linux64
|
||||||
|
dep_archive_name=${dep_dirname}.tar.bz2
|
||||||
|
dep_url=https://bitbucket.org/pypy/pypy/downloads/${dep_archive_name}
|
||||||
|
|
||||||
|
echo "Building PyPy…"
|
||||||
|
echo "${dep_url}"
|
||||||
|
|
||||||
|
curl -L "${dep_url}" | tar jx -C "${OUT_PREFIX}" --strip-components 1 # extract to $OUT_PREFIX, drop the first directory level, which is the archive name
|
||||||
|
|
||||||
|
ln "$OUT_PREFIX/bin/pypy" "$OUT_PREFIX/bin/python"
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/pypy2.7
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/pypy2.7
|
||||||
Executable
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# fail hard
|
||||||
|
set -o pipefail
|
||||||
|
# fail harder
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
dep_formula=${0#$WORKSPACE_DIR/} # this is the original script, e.g. pypy-5.3.1
|
||||||
|
dep_name=$(basename $BASH_SOURCE) # this is us
|
||||||
|
dep_version=${dep_formula##*"/${dep_name}-"} # "subtract" our name from full version name
|
||||||
|
dep_package=${dep_name}${dep_version_prefix:-}-v${dep_version}${dep_version_suffix:-}
|
||||||
|
dep_dirname=${dep_package}-linux64
|
||||||
|
dep_archive_name=${dep_dirname}.tar.bz2
|
||||||
|
dep_url=https://bitbucket.org/pypy/pypy/downloads/${dep_archive_name}
|
||||||
|
|
||||||
|
echo "Building PyPy3…"
|
||||||
|
echo "${dep_url}"
|
||||||
|
|
||||||
|
curl -L "${dep_url}" | tar jx -C "${OUT_PREFIX}" --strip-components 1 # extract to $OUT_PREFIX, drop the first directory level, which is the archive name
|
||||||
|
|
||||||
|
ln "$OUT_PREFIX/bin/pypy3" "$OUT_PREFIX/bin/python"
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/pypy3.6
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/pypy3.6
|
||||||
@@ -1,15 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.10/Python-2.7.10.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.10 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.11/Python-2.7.11.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.11 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.12/Python-2.7.12.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.12 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|||||||
@@ -1,19 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.13/Python-2.7.13.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.13 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --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 '{}' +
|
|
||||||
|
|||||||
@@ -1,19 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.14/Python-2.7.14.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.14 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --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 '{}' +
|
|
||||||
|
|||||||
@@ -1,27 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
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'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.15 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --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 '{}' +
|
|
||||||
|
|||||||
@@ -1,27 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
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.16/Python-2.7.16.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.16 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --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 '{}' +
|
|
||||||
|
|||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/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/2.7.18/Python-2.7.18.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.18 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --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 '{}' +
|
||||||
@@ -1,15 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python2
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.9/Python-2.7.9.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-2.7.9 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
@@ -1,18 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.5.2/Python-3.5.2.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.5.2 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
# ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
|
|||||||
@@ -1,18 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.5.3/Python-3.5.3.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.5.3 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
# ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
|
|||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.5.6/Python-3.5.6.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.5.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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.5.7/Python-3.5.7.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.5.7 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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
@@ -1,18 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.0/Python-3.6.0.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.0 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
|
|||||||
@@ -1,18 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.1/Python-3.6.1.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.1 src
|
|
||||||
cd src
|
|
||||||
|
|
||||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
|
|||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
@@ -1,21 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.2/Python-3.6.2.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.2 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
|
|
||||||
|
|||||||
@@ -1,21 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.3/Python-3.6.3.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.3 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
|
|
||||||
|
|||||||
@@ -1,21 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.4/Python-3.6.4.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.4 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
|
|
||||||
|
|||||||
@@ -1,21 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
|
|
||||||
echo "Building Python…"
|
|
||||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.5/Python-3.6.5.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.5 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
|
|
||||||
|
|||||||
@@ -1,29 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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
|
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.7/Python-3.6.7.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.7 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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.8/Python-3.6.8.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.6.8 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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
source $(dirname $0)/python3
|
source $(dirname $0)/python3
|
||||||
|
|||||||
@@ -1,29 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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
|
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.1/Python-3.7.1.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.7.1 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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.2/Python-3.7.2.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.7.2 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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
source $(dirname $0)/python3
|
||||||
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.3/Python-3.7.3.tgz'
|
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
|
||||||
mv Python-3.7.3 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 '{}' +
|
|
||||||
|
|
||||||
# Remove spare /
|
|
||||||
LOCATION=${OUT_PREFIX%?}
|
|
||||||
|
|
||||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build Path: /app/.heroku/python/
|
# Build Path: /app/.heroku/python/
|
||||||
# Build Deps: libraries/sqlite
|
|
||||||
|
|
||||||
source $(dirname $0)/python3
|
source $(dirname $0)/python3
|
||||||
|
|||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
source $(dirname $0)/python3
|
||||||
Regular → Executable
+6
-8
@@ -12,14 +12,7 @@ python_version=${BASE^} # this gives us only the filename with version number
|
|||||||
version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X
|
version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X
|
||||||
dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz
|
dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz
|
||||||
|
|
||||||
# shellcheck source=bin/utils
|
echo "Building ${python_version}..."
|
||||||
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 3..."
|
|
||||||
echo "Pulling from source: ${dep_url}"
|
echo "Pulling from source: ${dep_url}"
|
||||||
|
|
||||||
curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}"
|
curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}"
|
||||||
@@ -33,3 +26,8 @@ make install
|
|||||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||||
# https://github.com/docker-library/python
|
# https://github.com/docker-library/python
|
||||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||||
|
|
||||||
|
# Create links to SQLITE headers so Python can call them at runtime
|
||||||
|
mkdir -p ${OUT_PREFIX}/include ${OUT_PREFIX}/lib/x86_64-linux-gnu
|
||||||
|
cp /usr/include/sqlite3*.h ${OUT_PREFIX}/include
|
||||||
|
ln -fs $(realpath /usr/lib/x86_64-linux-gnu/libsqlite3.so) ${OUT_PREFIX}/lib/x86_64-linux-gnu/libsqlite3.so
|
||||||
|
|||||||
@@ -16,17 +16,9 @@ python_version=${BASE^} # this gives us only the filename with version number
|
|||||||
version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X
|
version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X
|
||||||
dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz
|
dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz
|
||||||
|
|
||||||
# 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 3..."
|
echo "Building Python 3..."
|
||||||
echo "Pulling from source: ${dep_url}"
|
echo "Pulling from source: ${dep_url}"
|
||||||
|
|
||||||
|
|
||||||
curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}"
|
curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}"
|
||||||
mv "${OUT_PREFIX}/${python_version}" src
|
mv "${OUT_PREFIX}/${python_version}" src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"python": [
|
"python": [
|
||||||
"heroku/python-getting-started"
|
"heroku/python-getting-started",
|
||||||
|
"sharpstone/python_default"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,3 +1,5 @@
|
|||||||
---
|
---
|
||||||
- - "./repos/python/python-getting-started"
|
- - "./repos/python/python-getting-started"
|
||||||
- f56b90499ec11e1c9576da2f8c7331300e189db3
|
- master
|
||||||
|
- - "./repos/python/python_default"
|
||||||
|
- ca947f69027b2a30be5d26f9a42f25e54f4d7a1a
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
docopt==0.6.2
|
docopt==0.6.2
|
||||||
bob-builder
|
bob-builder==0.0.17
|
||||||
boto==2.48.0
|
boto==2.48.0
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
require_relative '../spec_helper'
|
||||||
|
|
||||||
|
describe "Heroku CI" do
|
||||||
|
it "works" do
|
||||||
|
before_deploy = Proc.new do
|
||||||
|
File.open("app.json", "w+") do |f|
|
||||||
|
f.puts <<~EOM
|
||||||
|
{
|
||||||
|
"environments": {
|
||||||
|
"test": {
|
||||||
|
"scripts": {
|
||||||
|
"test": "nosetests"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOM
|
||||||
|
end
|
||||||
|
|
||||||
|
run!("echo nose >> requirements.txt")
|
||||||
|
end
|
||||||
|
|
||||||
|
Hatchet::Runner.new("python_default", before_deploy: before_deploy).run_ci do |test_run|
|
||||||
|
expect(test_run.output).to match("Downloading nose")
|
||||||
|
expect(test_run.output).to match("OK")
|
||||||
|
|
||||||
|
test_run.run_again
|
||||||
|
|
||||||
|
expect(test_run.output).to match("installing from cache")
|
||||||
|
expect(test_run.output).to_not match("Downloading nose")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,10 +1,72 @@
|
|||||||
require_relative '../spec_helper'
|
require_relative '../spec_helper'
|
||||||
|
|
||||||
describe "Python!!!!!!!!!!!" do
|
describe "Python" do
|
||||||
it "🐍" do
|
describe "cache" do
|
||||||
Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app|
|
it "functions correctly" do
|
||||||
expect(app.output).to match(/Installing pip/)
|
Hatchet::Runner.new("python_default").deploy do |app|
|
||||||
expect(app.run('python -V')).to match(/3.6.9/)
|
expect(app.output).to match(/Installing pip/)
|
||||||
|
|
||||||
|
expect(app.output).to_not match("Requirements file has been changed, clearing cached dependencies")
|
||||||
|
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")
|
||||||
|
|
||||||
|
# Redeploy with changed requirements file
|
||||||
|
run!(%Q{echo "" >> requirements.txt})
|
||||||
|
run!(%Q{echo "pygments" >> requirements.txt})
|
||||||
|
run!(%Q{git add . ; git commit --allow-empty -m next})
|
||||||
|
app.push!
|
||||||
|
|
||||||
|
# Check the cache to have cleared
|
||||||
|
expect(app.output).to match("Requirements file has been changed, clearing cached dependencies")
|
||||||
|
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")
|
||||||
|
|
||||||
|
# With no changes on redeploy, the cache should be present
|
||||||
|
run!(%Q{git commit --allow-empty -m next})
|
||||||
|
app.push!
|
||||||
|
|
||||||
|
expect(app.output).to match("No change in requirements detected, installing from cache")
|
||||||
|
expect(app.output).to_not match("Requirements file has been changed, clearing cached dependencies")
|
||||||
|
expect(app.output).to_not match("No dependencies found, preparing to install")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "python versions" do
|
||||||
|
let(:stack) { ENV["HEROKU_TEST_STACK"] || DEFAULT_STACK }
|
||||||
|
it "works with 3.7.6" do
|
||||||
|
version = "3.7.6"
|
||||||
|
before_deploy = -> { run!(%Q{echo "python-#{version}" >> runtime.txt}) }
|
||||||
|
Hatchet::Runner.new("python_default", before_deploy: before_deploy, stack: stack).deploy do |app|
|
||||||
|
expect(app.run('python -V')).to match(version)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "works with 3.8.2" do
|
||||||
|
version = "3.8.2"
|
||||||
|
before_deploy = -> { run!(%Q{echo "python-#{version}" >> runtime.txt}) }
|
||||||
|
Hatchet::Runner.new("python_default", before_deploy: before_deploy, stack: stack).deploy do |app|
|
||||||
|
expect(app.run('python -V')).to match(version)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "fails with a bad version" do
|
||||||
|
version = "3.8.2.lol"
|
||||||
|
before_deploy = -> { run!(%Q{echo "python-#{version}" >> runtime.txt}) }
|
||||||
|
Hatchet::Runner.new("python_default", before_deploy: before_deploy, stack: stack, allow_failure: true).deploy do |app|
|
||||||
|
expect(app.output).to match("not available for this stack")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "getting started app has no relative paths" do
|
||||||
|
buildpacks = [
|
||||||
|
:default,
|
||||||
|
"https://github.com/sharpstone/force_absolute_paths_buildpack"
|
||||||
|
]
|
||||||
|
Hatchet::Runner.new("python-getting-started", buildpacks: buildpacks).deploy do |app|
|
||||||
|
# Deploy works
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+7
-6
@@ -1,4 +1,4 @@
|
|||||||
ENV['HATCHET_BUILDPACK_BASE'] = 'https://github.com/' + ENV['TRAVIS_REPO_SLUG'] + '.git'
|
ENV['HATCHET_BUILDPACK_BASE'] = 'https://github.com/heroku/heroku-buildpack-python.git'
|
||||||
|
|
||||||
require 'rspec/core'
|
require 'rspec/core'
|
||||||
require 'rspec/retry'
|
require 'rspec/retry'
|
||||||
@@ -15,9 +15,10 @@ RSpec.configure do |config|
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if ENV['TRAVIS']
|
DEFAULT_STACK = 'heroku-18'
|
||||||
# Don't execute tests against "merge" commits
|
|
||||||
exit 0 if ENV['TRAVIS_PULL_REQUEST'] != 'false' && ENV['TRAVIS_BRANCH'] == 'master'
|
|
||||||
end
|
|
||||||
|
|
||||||
DEFAULT_STACK = 'heroku-16'
|
def run!(cmd)
|
||||||
|
out = `#{cmd}`
|
||||||
|
raise "Error running command #{cmd} with output: #{out}" unless $?.success?
|
||||||
|
return out
|
||||||
|
end
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
pwned-passwords-django==1.4
|
||||||
|
Django==2.1
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
Django==1.11
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
django
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
pypy2.7-7.2.0
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
django
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
pypy3.6-7.2.0
|
||||||
Vendored
+1
-1
@@ -1 +1 @@
|
|||||||
python-2.7.17
|
python-2.7.18
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1 +1 @@
|
|||||||
python-3.4.9
|
python-3.4.10
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1 +1 @@
|
|||||||
python-3.5.6
|
python-3.5.9
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
python-3.5.3
|
python-3.5.6
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1 +1 @@
|
|||||||
python-3.8.0
|
python-3.8.2
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
requests
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
python-3.8.0
|
||||||
@@ -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
|
||||||
@@ -46,6 +54,12 @@ testPysqlite() {
|
|||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testSqliteInstall() {
|
||||||
|
compile "pythonDefault"
|
||||||
|
assertNotCaptured "Sqlite3 failed to install."
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
testCffi() {
|
testCffi() {
|
||||||
compile "cffi"
|
compile "cffi"
|
||||||
assertCaptured "cffi"
|
assertCaptured "cffi"
|
||||||
|
|||||||
+12
-1
@@ -16,7 +16,6 @@ testSmartRequirements() {
|
|||||||
assertFile "requests" ".heroku/python/requirements-declared.txt"
|
assertFile "requests" ".heroku/python/requirements-declared.txt"
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
compile "psycopg2" "$cache_dir"
|
compile "psycopg2" "$cache_dir"
|
||||||
assertCaptured "Uninstalling requests"
|
|
||||||
assertFile "psycopg2" ".heroku/python/requirements-declared.txt"
|
assertFile "psycopg2" ".heroku/python/requirements-declared.txt"
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
@@ -75,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
|
||||||
|
|
||||||
|
|||||||
+71
-22
@@ -18,6 +18,11 @@ testPython2() {
|
|||||||
echo $LATEST_27 > "runtime.txt"
|
echo $LATEST_27 > "runtime.txt"
|
||||||
compile "python2"
|
compile "python2"
|
||||||
assertCaptured $LATEST_27
|
assertCaptured $LATEST_27
|
||||||
|
if [[ $(date "+%Y") > "2019" ]]; then
|
||||||
|
assertCaptured "python-2-7-eol-faq";
|
||||||
|
else
|
||||||
|
assertNotCaptured "python-2-7-eol-faq";
|
||||||
|
fi
|
||||||
assertNotCaptured "security update"
|
assertNotCaptured "security update"
|
||||||
assertCaptured "Installing SQLite3"
|
assertCaptured "Installing SQLite3"
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
@@ -26,7 +31,12 @@ testPython2() {
|
|||||||
testPython2_warn() {
|
testPython2_warn() {
|
||||||
compile "python2_warn"
|
compile "python2_warn"
|
||||||
assertCaptured "python-2.7.15"
|
assertCaptured "python-2.7.15"
|
||||||
assertCaptured "security update!"
|
if [[ $(date "+%Y") > "2019" ]]; then
|
||||||
|
assertCaptured "python-2-7-eol-faq";
|
||||||
|
else
|
||||||
|
assertNotCaptured "python-2-7-eol-faq";
|
||||||
|
fi
|
||||||
|
assertCaptured "Only the latest version"
|
||||||
assertCaptured "Installing SQLite3"
|
assertCaptured "Installing SQLite3"
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
@@ -38,11 +48,17 @@ testPython2_fail() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testPython3_4() {
|
testPython3_4() {
|
||||||
if [[ $STACK != "cedar-14" ]]; then
|
compile "python3_4"
|
||||||
updateVersion "python3_4" $LATEST_34
|
assertCaptured $LATEST_34
|
||||||
compile "python3_4"
|
assertNotCaptured "security update"
|
||||||
assertCaptured $LATEST_34
|
# if cedar 14 and legacy binaries, fail. if cedar 14 and staging, succeed.
|
||||||
assertNotCaptured "security update"
|
if [[ ! -n $USE_STAGING_BINARIES ]] && [[ $STACK == "cedar-14" ]]; then
|
||||||
|
assertCapturedError
|
||||||
|
# if heroku 18 and legacy binaries, succeed. if heroku 18 and staging, fail.
|
||||||
|
elif [[ -n $USE_STAGING_BINARIES ]] && [[ $STACK == "heroku-18" ]]; then
|
||||||
|
assertCapturedError
|
||||||
|
else
|
||||||
|
# all else succeed
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -51,7 +67,13 @@ testPython3_4_warn() {
|
|||||||
compile "python3_4_warn"
|
compile "python3_4_warn"
|
||||||
assertCaptured "python-3.4.9"
|
assertCaptured "python-3.4.9"
|
||||||
assertCaptured "security update!"
|
assertCaptured "security update!"
|
||||||
assertCapturedSuccess
|
# if heroku 18 and legacy binaries, succeed. if heroku 18 and staging, fail.
|
||||||
|
if [[ -n $USE_STAGING_BINARIES ]] && [[ $STACK == "heroku-18" ]]; then
|
||||||
|
assertCapturedError
|
||||||
|
else
|
||||||
|
# all else succeed
|
||||||
|
assertCapturedSuccess
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
testPython3_4_fail() {
|
testPython3_4_fail() {
|
||||||
@@ -61,25 +83,18 @@ testPython3_4_fail() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testPython3_5() {
|
testPython3_5() {
|
||||||
if [[ $STACK != "cedar-14" ]]; then
|
compile "python3_5"
|
||||||
updateVersion "python3_5" $LATEST_35
|
assertCaptured $LATEST_35
|
||||||
compile "python3_5"
|
assertNotCaptured "security update"
|
||||||
assertCaptured $LATEST_35
|
assertCaptured "Installing SQLite3"
|
||||||
assertNotCaptured "security update"
|
assertCapturedSuccess
|
||||||
assertCaptured "Installing SQLite3"
|
|
||||||
assertCapturedSuccess
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
testPython3_5_warn() {
|
testPython3_5_warn() {
|
||||||
compile "python3_5_warn"
|
compile "python3_5_warn"
|
||||||
if [[ $STACK = "cedar-14" ]]; then
|
assertCaptured "python-3.5.6"
|
||||||
assertCaptured "python-3.5.3"
|
assertCaptured "security update!"
|
||||||
assertCaptured "security update!"
|
assertCapturedSuccess
|
||||||
assertCapturedError
|
|
||||||
else
|
|
||||||
assertCapturedError
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
testPython3_5_fail() {
|
testPython3_5_fail() {
|
||||||
@@ -142,6 +157,18 @@ testPython3_7_fail() {
|
|||||||
assertCapturedError
|
assertCapturedError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testPython3_7_warn() {
|
||||||
|
compile "python3_8_warn"
|
||||||
|
if [[ $STACK = "cedar-14" ]]; then
|
||||||
|
assertCapturedError
|
||||||
|
else
|
||||||
|
assertCaptured "python-3.8.0"
|
||||||
|
assertCaptured "security update!"
|
||||||
|
assertCaptured "Installing SQLite3"
|
||||||
|
assertCapturedSuccess
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
testPython3_8() {
|
testPython3_8() {
|
||||||
updateVersion "python3_8" $LATEST_38
|
updateVersion "python3_8" $LATEST_38
|
||||||
compile "python3_8"
|
compile "python3_8"
|
||||||
@@ -161,6 +188,28 @@ testPython3_8_fail() {
|
|||||||
assertCapturedError
|
assertCapturedError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testPypy3_6() {
|
||||||
|
compile "pypy3_6"
|
||||||
|
if [[ $STACK = "cedar-14" ]]; then
|
||||||
|
assertCapturedError
|
||||||
|
else
|
||||||
|
assertCaptured "Installing pypy"
|
||||||
|
assertCaptured "$PYPY_36"
|
||||||
|
assertCapturedSuccess
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
testPypy2_7() {
|
||||||
|
compile "pypy2_7"
|
||||||
|
if [[ $STACK = "cedar-14" ]]; then
|
||||||
|
assertCapturedError
|
||||||
|
else
|
||||||
|
assertCaptured "Installing pypy"
|
||||||
|
assertCaptured "$PYPY_27"
|
||||||
|
assertCapturedSuccess
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
pushd $(dirname 0) >/dev/null
|
pushd $(dirname 0) >/dev/null
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
|
||||||
|
|||||||
Vendored
+18
-3
@@ -12,9 +12,24 @@ Options:
|
|||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from docopt import docopt
|
from docopt import docopt
|
||||||
from pip.req import parse_requirements
|
|
||||||
from pip.index import PackageFinder
|
try: # pip >= 10
|
||||||
from pip._vendor.requests import session
|
from pip._internal.req import parse_requirements
|
||||||
|
from pip._internal.download import PipSession as session
|
||||||
|
|
||||||
|
def PackageFinder(find_links, index_urls, session=None):
|
||||||
|
from pip._internal.index import PackageFinder
|
||||||
|
from pip._internal.models.search_scope import SearchScope
|
||||||
|
from pip._internal.models.selection_prefs import SelectionPreferences
|
||||||
|
|
||||||
|
search_scope = SearchScope.create(find_links, index_urls)
|
||||||
|
selection_prefs = SelectionPreferences(allow_yanked=False)
|
||||||
|
return PackageFinder.create(search_scope, selection_prefs, session=session)
|
||||||
|
|
||||||
|
except ImportError: # pip <= 9.0.3
|
||||||
|
from pip.req import parse_requirements
|
||||||
|
from pip.index import PackageFinder
|
||||||
|
from pip._vendor.requests import session
|
||||||
|
|
||||||
requests = session()
|
requests = session()
|
||||||
|
|
||||||
|
|||||||
Vendored
+19
-3
@@ -10,9 +10,25 @@ Options:
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from docopt import docopt
|
from docopt import docopt
|
||||||
from pip.req import parse_requirements
|
|
||||||
from pip.index import PackageFinder
|
try: # pip >= 10
|
||||||
from pip._vendor.requests import session
|
from pip._internal.req import parse_requirements
|
||||||
|
from pip._internal.download import PipSession as session
|
||||||
|
|
||||||
|
def PackageFinder(find_links, index_urls, session=None):
|
||||||
|
from pip._internal.index import PackageFinder
|
||||||
|
from pip._internal.models.search_scope import SearchScope
|
||||||
|
from pip._internal.models.selection_prefs import SelectionPreferences
|
||||||
|
|
||||||
|
search_scope = SearchScope.create(find_links, index_urls)
|
||||||
|
selection_prefs = SelectionPreferences(allow_yanked=False)
|
||||||
|
return PackageFinder.create(search_scope, selection_prefs, session=session)
|
||||||
|
|
||||||
|
except ImportError: # pip <= 9.0.3
|
||||||
|
from pip.req import parse_requirements
|
||||||
|
from pip.index import PackageFinder
|
||||||
|
from pip._vendor.requests import session
|
||||||
|
|
||||||
|
|
||||||
requests = session()
|
requests = session()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user