Compare commits

..

612 Commits

Author SHA1 Message Date
Ed Morley 181e3395f9 Release v172 (#995) 2020-07-17 12:03:37 +01:00
Denis Cornehl 013ba6b1d9 Add support for Python 3.8.4 (#993) 2020-07-17 10:19:21 +01:00
Ed Morley bce5bf4869 Release v171 (#991) 2020-07-07 19:20:13 +01:00
Denis Cornehl 0fdb62faa9 Add support for Python 3.6.11 and 3.7.8 (#988) 2020-07-07 18:39:44 +01:00
dependabot[bot] 42507a3f9a Bump rake from 12.3.1 to 12.3.3 (#981)
Bumps [rake](https://github.com/ruby/rake) from 12.3.1 to 12.3.3.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v12.3.1...v12.3.3)
2020-05-27 14:14:43 +01:00
dependabot[bot] f89ee6750e Bump activesupport from 6.0.2.2 to 6.0.3.1 (#980)
Bumps [activesupport](https://github.com/rails/rails) from 6.0.2.2 to 6.0.3.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v6.0.3.1/activesupport/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v6.0.2.2...v6.0.3.1)
2020-05-27 13:42:59 +01:00
Ed Morley 122722f89e v170 (#978) 2020-05-19 15:33:30 +01:00
Ed Morley 8cb379f83b Add support for latest CPython and PyPy versions (#977)
Adds support for:
* CPython 2.7.18, 3.5.9, 3.7.7 and 3.8.3
* PyPy 2.7 and 3.6, version 7.3.1

The binaries will need generating and uploading before CI will pass.

Note: Whilst the build script for CPython 3.8.3 did already exist in the
repository, it appears to have been accidentally created in #920, which
predated the existence of that version of Python - so the binaries do
not exist on S3.

The Heroku-18 Docker image tag has also been unpinned, since the new
libssl version is now available at runtime in all environments, so we
don't need to force building against the older version of the headers.

Fixes W-7582174.
2020-05-19 14:16:59 +01:00
Richard Schneeman d3a60b21fe [changelog skip] Fix PR edit check (#974)
Previously when a PR title was edited, the "check for changelog" script would not fire. This means if someone edited it to add a "[changelog skip]" that the check would still show to be failing. This PR adds additional triggers for the check so that when the PR is edited, the check will re-run.
2020-05-12 09:57:33 -05:00
Richard Schneeman 7e80ea8fbe Update heroku hatchet so master can be specified (#970)
- https://github.com/heroku/hatchet/pull/80
- https://github.com/heroku/heroku-buildpack-python/pull/969#issuecomment-620057594
2020-04-27 15:55:16 -05:00
Joe Kutner c78ffd5ac4 Prevent Hatchet on forked PRs [changelog skip] (#966)
* Update travis conditional for hatchet to check for HEROKU_API_ env vars
[changelog skip]

* remove check to skip hatchet in travis in favor of better travis config
2020-04-27 09:15:38 -05:00
Richard Schneeman a06b536109 Add Hatchet Regression Tests (#969)
I went through all the tests in the Ruby buildpack and cataloged what I think can be generalized between languages to prevent regressions. This PR add tests for these cases:

* Test CI deploys run tests and use the cache [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/f488bd53c7ff0b78e17c2405166cbd4a3af75ee2/spec/hatchet/ci_spec.rb#L36)]
* Test cache for regular deploys is used on repeated deploys (This was already tested on the Python buildpack, I moved it) [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/e34c583c139911d059f5627bb25125707288f053/spec/hatchet/stack_spec.rb#L21-L25)]
    * Test modifying a requirement clears the cache appropriately (This was already tested on the Python buildpack, I moved it)
* Test deploying the getting started guide works [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/424a7245e2da86845a20d58a9482bcf2a00c3a8f/spec/hatchet/getting_started_spec.rb#L5)]
* Test that all paths set by the buildpack are absolute instead of relative [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/249d3c1a4e97068f8fd016f10fa0839709d95658/spec/hatchet/rails5_spec.rb#L68])
* Test upgrading stack invalidates the cache [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/f488bd53c7ff0b78e17c2405166cbd4a3af75ee2/spec/hatchet/stack_spec.rb#L3)]
* Test that builds fail when a bad version is specified [[reference test](https://github.com/heroku/heroku-buildpack-ruby/blob/249d3c1a4e97068f8fd016f10fa0839709d95658/spec/hatchet/ruby_spec.rb#L5)]


In addition to that I've also got a CNB test with `pack-build` with the getting started app, but since python isn't `cnb` capable yet I didn't add one.
2020-04-27 08:26:42 -05:00
Ed Morley dd646998d3 Fix changelog after rebase (#967)
The merge of #910 added three lines to the changelog rather than just one:
https://github.com/heroku/heroku-buildpack-python/commit/932cd257c98e9f56e878134f84a09d7d972bc46e

The original commit before rebase, was:
https://github.com/heroku/heroku-buildpack-python/pull/910/commits/d57d26b2e0348199228312950e55b42bc9de8147

I've also clarified the wording of it and the other unreleased change,
to reduce the chance for confusion as to what's changed, when customers
debug issues.
2020-04-24 10:32:38 +01:00
Ed Morley 484bd44a1e Remove unused libffi build script (#965)
The compile-time cryptography step that used to use the libffi archives
on S3 was removed in 2018:
https://github.com/heroku/heroku-buildpack-python/commit/c373e80c1285260e5adcbc855f54bbeb6999005c

...since the `cryptography` Python package now ships wheels.

The script is also incorrect, since similar to #964 it only skips builds
for Heroku-16, whereas all stacks since Cedar-14 include libffi-dev in
the build image, so don't need it built/uploaded for later vendoring.

Refs W-7485877.
2020-04-24 09:26:03 +01:00
Thomas Mollard 932cd257c9 fix runtime.txt generation when using pipenv (#910)
Co-authored-by: Casey <caseylfaist@gmail.com>
Co-authored-by: Joe Kutner <jpkutner@gmail.com>
2020-04-23 21:30:04 -05:00
Ed Morley 989351467f Prevent building libmemcached on stacks that don't vendor it (#964)
The `libmemcached` package is available in the base stack image for all
stacks newer than `cedar-14`, so at buildpack compile time the vendor
step is skipped for those stacks:
https://github.com/heroku/heroku-buildpack-python/blob/106f2997fa124852a2a35ee8bfa604ad20c47988/bin/steps/pylibmc#L12-L15

As such, it is not necessary to run the libmemcached bob-builder formula
on newer stacks. The conditional has been updated so it correctly handles
heroku-18 and also the upcoming heroku-20.

An exit code of 1 has been used, otherwise `bob upload` will build and
then upload a zero byte archive to S3, which will go unused.

(This is in comparison to bob formulas that are nested, where an exit
code of 0 is actually desirable, since it allows skipping steps.)

Refs W-7485877.

Co-authored-by: Joe Kutner <jpkutner@gmail.com>
2020-04-23 21:23:38 -05:00
Ed Morley d68a7c594c Remove unused Pipfile and Pipfile.lock (#960)
These aren't referenced anywhere in the repository, and contain older
versions of the dependencies than are declared in `requirements.txt`
(which itself is used).

Co-authored-by: Joe Kutner <jpkutner@gmail.com>
2020-04-23 20:40:35 -05:00
Joe Kutner 97f783ce96 Update travis config [changelog skip] (#963)
* Update travis config to only setup hatchet when running hatchet [changelog skip]

Fix a bug in the hatchet tests, and allow previous builds to finish before running the next test

* Add logging when skipping hatchet tests

Only skip hatchet tests on a forked PR

* Build on Travis only for master branch

* Upgrade from trusty to bionic on Travis
2020-04-23 19:55:05 -05:00
Joe Kutner 106f2997fa Add support for Python 3.8 latest version (#955)
* Add support for Python 3.8 latest version

If the pip lock file only specifies `3.8` and no bug fix version, it should use Python LATEST_38.

* Update CHANGELOG.md

* Update changelog

Co-authored-by: Johannes Hoppe <info@johanneshoppe.com>
Co-authored-by: Casey <caseylfaist@gmail.com>
2020-04-23 08:11:53 -05:00
Joe Kutner 373a656272 Update changelog for version 169 (#957) 2020-04-22 16:32:08 -05:00
Joe Kutner 0abc749aff Add a Hatchet test for python 3.8.2 (#956)
* Add a Hatchet test for python 3.8.2

* update changelog

* Update test to match build output

* Fix formatting and a syntax error in tests

* Fix syntax error in hatchet spec
2020-04-22 10:38:16 -05:00
Joe Kutner 60614232da Set Codeowners to languages (#953)
* Set languages as codeowners

* Update changelog
2020-04-21 17:39:56 -05:00
Joe Kutner edb7004a28 Update hatchet tests to support latest version of Python (#952)
* Update hatchet tests to support latest version of Python

* Empty commit to trigger CI
2020-04-21 16:42:56 -05:00
Casey ea350a6694 Bugfix: Caching on subsequent redeploys (#948)
* Don't clear the cache on first app deploy

* Add output for debugging cache behavior

* Debug output of changes, clean up whitespace

* Update hatchet to use latest getting started guide

* Clean up caching output logs

This output was confusing and unhelptul to most users

* Changelog

* Test if we need these lines

* dang fi

* Remove unnecessary code

* Remove confusing output of change

* Update log output

* Update test to match new expected log output

* Update changelog
2020-04-21 15:41:57 -05:00
Casey 027d49eb58 Merge pull request #946 from heroku/releaseprep/168
Release prep: changelog update
2020-04-06 15:22:48 -04:00
Casey 49597f22ca Merge branch 'master' into releaseprep/168 2020-04-06 15:03:32 -04:00
Casey Faist 4bb8f59f2c Prep release changelog update 2020-04-06 13:58:51 -04:00
Casey d4b6b0190d Merge pull request #930 from heroku/kgrinberg/master
Fix old Django version detection
2020-04-06 13:47:51 -04:00
Casey 2c2cbc4653 Merge branch 'master' into kgrinberg/master 2020-04-06 13:23:29 -04:00
Casey d0629cd6ef Merge pull request #895 from heroku/geos-deprecation
Geos deprecation
2020-04-06 13:19:31 -04:00
Casey 398a0fb202 Merge branch 'master' into kgrinberg/master 2020-04-02 15:48:21 -04:00
Casey 5bf80a2270 Merge branch 'master' into geos-deprecation 2020-04-02 15:47:01 -04:00
Casey 61609930c1 Merge pull request #945 from heroku/changelog/bump
More recent changelog update
2020-04-02 15:45:56 -04:00
Casey Faist 0fa27b7b0d More recent changelog update 2020-04-02 13:22:55 -04:00
Casey cc247753e5 Merge branch 'master' into kgrinberg/master 2020-04-02 12:55:25 -04:00
Casey 4da1ca71b5 Merge pull request #940 from heroku/barbeque/patch-1
Barbeque/patch 1
2020-04-02 12:54:34 -04:00
Casey 3d70b2e9ff Merge branch 'master' into barbeque/patch-1 2020-04-02 12:10:22 -04:00
Casey 87e9fb2ccc Merge pull request #944 from heroku/buildlog/fix-cache-output
Remove confusing diff output for cache check
2020-04-02 12:08:49 -04:00
Casey Faist 0d61f83269 Update changelog 2020-04-02 12:08:11 -04:00
Casey Faist e12ad47397 Add missing dev/null for diff output 2020-04-02 11:01:44 -04:00
Casey 307cb13159 Merge branch 'master' into geos-deprecation 2020-03-30 10:08:56 -04:00
Casey 156da405e0 Merge branch 'master' into barbeque/patch-1 2020-03-27 14:55:50 -04:00
Casey ea90db6d13 Add Buildpack-Maintainers as code owners (#938) 2020-03-27 14:47:52 -04:00
Casey Faist 56f7ccc511 Changelog update 2020-03-27 12:50:45 -04:00
Casey a2c72f77f9 Merge branch 'master' into patch-1 2020-03-27 12:49:08 -04:00
Casey 93a5144033 Merge branch 'master' into kgrinberg/master 2020-03-26 19:10:52 -04:00
Casey ac76968c90 Merge branch 'master' into geos-deprecation 2020-03-26 18:44:45 -04:00
Casey 446410f883 Merge pull request #925 from heroku/reproduce/cache-busting
Fix cache clear on redeploy
2020-03-26 18:25:17 -04:00
Casey Faist abd9ffdbff Missed bash linting check 2020-03-26 17:46:54 -04:00
Casey Faist 408a081a08 Remove faulty test, use Hatchet instead 2020-03-26 16:48:37 -04:00
Casey Faist 01b0c1b0db no longer reference unused build var on travis 2020-03-26 12:40:53 -04:00
Casey Faist 2e5fe9f286 Clean up white space 2020-03-26 11:35:26 -04:00
Casey Faist 6b9ffb92d9 Don't update to use pip cache, yet
Also fix whitespace
2020-03-26 11:34:32 -04:00
Casey Faist bf1563eaa0 clean up commented code 2020-03-26 11:32:18 -04:00
Casey Faist dcb04b96c3 clean up todos and commented code 2020-03-26 11:26:03 -04:00
Casey Faist ab79d077da gitignore the scratch shunit test 2020-03-26 11:24:42 -04:00
mike 2b3a90ec0c PR feedback 2020-03-25 20:20:27 -06:00
Casey Faist 48a368ac71 Add test for expected behavior 2020-03-24 14:48:17 -04:00
Casey Faist 3d31167511 Clear test out of helper test stub 2020-03-24 13:43:18 -04:00
Casey Faist 0c2b954a6d Update Changelog 2020-03-24 13:43:18 -04:00
Casey Faist b65f0cfce3 Add Readme to document install steps 2020-03-24 13:43:18 -04:00
Casey Faist a1ef075b53 Add Hatchet test 2020-03-24 13:43:18 -04:00
Casey Faist dee86babe1 Don't skip install if clearing cache 2020-03-24 13:43:18 -04:00
Casey Faist 6a02499140 Update caching logic so new apps don't get logs
actually add changes

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

Wrong diff check - inverted

Remove uninstall step

Whitespace is hard
2020-03-24 13:43:18 -04:00
Casey Faist f7c422e07d test clear cache and cache requirements.txt 2020-03-24 13:43:18 -04:00
Casey Faist cc6a03aa54 Test result of using pip cache on Heroku 2020-03-24 13:43:18 -04:00
Casey Faist 56ecd1aef7 add quick test case 2020-03-24 13:43:18 -04:00
Casey 4d2e74b411 Merge branch 'master' into patch-1 2020-03-18 10:39:50 -04:00
Casey d8b37dcaf8 Merge branch 'master' into geos-deprecation 2020-03-18 10:29:39 -04:00
Casey Faist a98a87e1bc Remove the lines that bust the cache when we detect that sqlite has changed 2020-03-12 14:20:49 -07:00
Casey Faist 8c9521d806 Create failcase for deploying the same code twice 2020-03-12 13:47:29 -07:00
Kevin Grinberg 312b9ca6de Fix old Django version detection 2020-03-09 11:43:59 -04:00
Casey a9e5c60106 Merge pull request #922 from heroku/django/warn
Warn about EOL for Django release
2020-03-05 12:33:32 -08:00
Casey Faist 1df55a6c3c and add a changelog 2020-03-04 16:03:10 -08:00
Casey Faist a51e4f8660 warn about EOL for Django release 2020-03-04 15:58:27 -08:00
Casey 46281960c7 Merge pull request #911 from heroku/https-instead-of-ftp
Use GitHub HTTPS instead of sourceware FTP
2020-03-03 15:04:28 -07:00
Casey Faist a19d4950a9 changelog update and typo fix 2020-03-03 12:31:58 -08:00
Casey 753134a2fa Merge branch 'master' into https-instead-of-ftp 2020-03-03 13:26:03 -07:00
Casey 998a15395b Merge pull request #920 from heroku/python/382
Build and release Python 3.8.2
2020-02-27 17:56:29 -05:00
Casey Faist e68f556e63 Build and release Python 3.8.2 2020-02-27 15:26:33 -07:00
Casey ef333c516b Merge pull request #919 from heroku/upgrade-to-pip-20
Upgrade to pip 20
2020-02-19 15:10:26 -05:00
Casey Faist 552f0f77d5 Changelog! 2020-02-19 13:59:25 -05:00
Casey Faist 583b9cfd95 Merge branch 'master' into upgrade-to-pip-19 2020-02-19 12:08:12 -05:00
Casey c182bacdf2 Merge pull request #918 from heroku/hatchet/update-default-python-check
Bump to match the default version
2020-02-19 11:22:58 -05:00
Casey Faist ca9b6de50f Update changelog to pass check 2020-02-19 09:37:41 -05:00
Casey Faist 5910581665 Bump to match the default version 2020-02-19 09:26:29 -05:00
Casey c1f6862110 Merge pull request #917 from heroku/get-pip-tmpdir
Download get-pip.py to tmpdir instead of root dir
2020-02-19 09:24:06 -05:00
Joe Kutner 520c240edd Download get-pip.py to tmpdir instead of root dir 2020-02-16 09:27:07 -06:00
Casey Faist 61341d17b8 Update to newly released 20.0.2 2020-02-12 14:45:51 -05:00
Casey Faist acfc7240f8 Merge branch 'master' into upgrade-to-pip-19 2020-02-11 11:47:21 -05:00
Casey e32aaf9d00 Merge pull request #912 from heroku/python-version-updates
Python version updates
2019-12-23 13:39:10 -05:00
Casey Faist ec57979bf8 comply with shellcheck, use -gt instead 2019-12-23 13:14:06 -05:00
Casey Faist 0057d19082 Typo in bash if-else block 2019-12-23 12:28:31 -05:00
Casey Faist 0419921227 bash is not python, so use bash block closers 2019-12-23 10:56:14 -05:00
Casey Faist 7d743e7998 Don't test for pypy on cedar 14 2019-12-23 09:57:07 -05:00
Casey Faist 2942fc8e4a Correct Changelog 2019-12-23 01:28:06 -05:00
Casey Faist 0e1ac6217b correct test expectations 2019-12-23 01:22:30 -05:00
Casey Faist 848c846a3d Add tests for beta Pypy support 2019-12-23 00:17:22 -05:00
Casey Faist 179f345f5b add beta Pypy support 2019-12-23 00:16:20 -05:00
Casey Faist 6fc11b8370 add up-to-date Pypy runtimes 2019-12-23 00:15:44 -05:00
Casey Faist f189df5415 Warn about EOL on Python 2 install 2019-12-23 00:13:54 -05:00
Casey Faist 8253ffa354 Default version updates 2019-12-23 00:10:39 -05:00
Casey Faist 514c494891 Add new Python runtimes 2019-12-23 00:08:04 -05:00
Casey Faist 9a9e972db0 Changelog update 2019-12-23 00:06:28 -05:00
Camille Baldock 9ff9466fd5 Use GitHub HTTPS instead of sourceware FTP 2019-12-20 12:21:52 -08:00
Casey 1750242ccd Merge pull request #908 from heroku/changelog/162
Update changelog post-release
2019-12-06 12:38:00 -05:00
Casey Faist 50460beb95 Update changelog 2019-12-06 10:13:45 -05:00
Casey 4e8831a3a3 Merge branch 'master' into geos-deprecation 2019-12-06 10:11:47 -05:00
Casey 69c17b343a Merge pull request #907 from heroku/refactor-sqlite
Bug fix: fragile sqlite install
2019-12-06 09:43:23 -05:00
Casey Faist f31e9fa835 Correct failing smart requirement steps 2019-12-06 09:20:28 -05:00
Casey Faist 5788ff57cd changelog 2019-12-05 11:59:13 -05:00
Casey Faist f0f3463658 remove typo 2019-12-05 11:54:58 -05:00
Casey Faist ffc7683c05 remove broken pin from sqlite install 2019-12-05 11:17:58 -05:00
Casey 3a6f7f849b Merge pull request #904 from heroku/sqlite-quickfix
Sqlite quickfix
2019-12-02 16:57:01 -05:00
Casey Faist 475af5a1f8 test that sqlite installs properly 2019-12-02 15:57:05 -05:00
Casey Faist d166ee88d7 add tracking for sqlite install success or failure 2019-12-02 15:22:03 -05:00
Casey Faist ba55465a2b Version bump sqlite 2019-12-02 15:16:31 -05:00
Mike c402d37451 Update README python versions to match docs 2019-12-02 10:06:54 -07:00
Claudio Jolowicz 8eb2954e92 Pin to pip 9.0.2 for pipenv users only
This addresses an issue raised by @CaseyFeist during code review:

  Updating pip for pipenv users or requiring them to update without a
  heads up won't be a good experience (our version is old enough that
  they'll need to uninstall and reinstall pipenv locally to successfully
  update). If you can refactor this to stay pinned to current version for
  pipenv users only, I should be able to accept this (and the related
  project updates).

  https://github.com/heroku/heroku-buildpack-python/pull/833#issuecomment-537758441
2019-11-24 15:43:13 +01:00
Claudio Jolowicz 468d27ab98 Adapt pip-pop to changes in pip >= 10
The pip-diff and pip-grep tools from the vendorized `pip-pop` package
import internal modules from pip. In pip >= 10, internal modules were
moved under `pip._internal`, breaking the imports. Use `try...except
ImportError` to handle both import paths.

Also, the interface of the `PackageFinder` class from one of these
modules changed. Provide a wrapper function to allow creating objects of
this type using the old interface.
2019-11-24 15:43:13 +01:00
Claudio Jolowicz 515a222cc4 Upgrade to pip 19.1.1 for Python 3.4 projects
Python 3.4 support was dropped in pip >= 19.2. For projects still on
this Python version, use pip 19.1.1 instead of pip 19.2.1.
2019-11-24 15:43:13 +01:00
Claudio Jolowicz 53c4674ecd Upgrade to pip 19.2.3
Bump PIP_UPDATE from 9.0.2 to 19.2.3. This variable is used in bin/steps/python
to determine which pip version to install or upgrade to.
2019-11-24 15:43:13 +01:00
Casey 93a620e6ed Merge pull request #881 from heroku/python-versions/2716-279
Python formula updates: 2.7.16-2.7.9
2019-10-30 09:20:09 -07:00
Casey a7a257e099 Merge pull request #880 from heroku/python-versions/py2-base
SQLITE: Py2 base formula update
2019-10-30 09:19:58 -07:00
Casey 40e91a9755 Merge pull request #879 from heroku/python-versions/35
Python formula updates: 3.5.7-3.5.0
2019-10-30 09:19:48 -07:00
Casey 7686370d81 Merge pull request #878 from heroku/python-versions/373-370
Python formula updates: 3.7.3-3.7.0
2019-10-30 09:19:27 -07:00
Casey 2d6990425e Merge pull request #876 from heroku/python-versions/368-360
Python formula updates: 3.6.8-3.6.0
2019-10-30 09:16:54 -07:00
Casey b5b640ab00 Merge branch 'master' into python-versions/368-360 2019-10-30 08:03:06 -07:00
Casey dfe28cbe28 Merge pull request #872 from heroku/python-versions/369-374
Python formula updates: 3.6.9 and 3.7.4
2019-10-30 08:02:40 -07:00
Casey 8fc94c0868 Merge branch 'master' into python-versions/369-374 2019-10-29 15:59:55 -07:00
Casey 86fc9f156b Merge pull request #870 from heroku/py3-formula-update
SQLITE: Py3 formula update
2019-10-29 15:59:32 -07:00
Casey Faist 2a4f0a66c3 changelog 2019-10-29 15:15:46 -07:00
Casey Faist 87ba8b499a Update python 2 formulas 2019-10-29 15:12:04 -07:00
Casey Faist f03b7ed048 update Changelog 2019-10-29 15:06:41 -07:00
Casey Faist bf1b1dc3f8 update base Python 2 formula 2019-10-29 15:06:17 -07:00
Casey Faist a421ea93e3 update changelog 2019-10-29 14:59:48 -07:00
Casey Faist 3c40bf8bea update 3.5 formulas 2019-10-29 14:54:36 -07:00
Casey Faist f28465bec7 update changelog 2019-10-29 14:46:29 -07:00
Casey Faist fade163df8 update Changelog 2019-10-29 14:45:58 -07:00
Casey Faist 13fad186ff changelog update 2019-10-29 14:39:54 -07:00
Casey Faist c12f395c9a update all 3.6 formulas to load python3 base 2019-10-29 14:39:26 -07:00
Casey Faist 43c54abf0e update changelog 2019-10-29 14:36:46 -07:00
Casey Faist 151df58e86 don't use vendored sqlite from s3 in formulas 2019-10-29 14:35:36 -07:00
Casey Faist 1c87fd3d6e correct changelog 2019-10-29 14:17:46 -07:00
Casey Faist 50cdf10a36 move libsqlite-dev install back to dockerfile 2019-10-29 14:14:20 -07:00
Casey Faist 0be5993e32 update changelog 2019-10-29 14:14:20 -07:00
Casey Faist 3f9a80ad24 don't check stack defensively as its not forwards compatible 2019-10-29 14:14:20 -07:00
Casey Faist 14c15f4dd8 create symlinks for python3 formula to sqlite 2019-10-29 14:14:20 -07:00
Casey Faist 9bd5fa7c7f replace formula sqlite install 2019-10-29 14:14:20 -07:00
Casey 89885a4472 Merge pull request #860 from heroku/test-staged-binaries
Test staged binaries
2019-10-29 08:33:27 -07:00
Casey Faist 3c193bd475 update 3.4 warn test 2019-10-29 07:42:50 -07:00
Casey Faist a7f62496b1 correct python35 tests 2019-10-28 15:16:14 -07:00
Casey Faist f1b0f8c154 correct the pass/fail metric for python 34 2019-10-24 12:48:04 -07:00
Casey 563a9c9187 Merge branch 'master' into geos-deprecation 2019-10-24 12:06:08 -07:00
Casey Faist f90dfbc12e update 3.4 tests to fail on heroku 18 2019-10-24 09:40:31 -07:00
Casey Faist 9ca0c4eb84 check for 3.5 on all stacks 2019-10-24 09:36:29 -07:00
Casey Faist dc694d4712 test for 3.5 warn should pass when using staged binaries 2019-10-24 08:52:33 -07:00
Casey b4b94abea0 Merge branch 'master' into test-staged-binaries 2019-10-24 07:06:00 -07:00
Casey 0c66cea063 Merge pull request #896 from heroku/v160-changelog
160 release changelog note
2019-10-23 15:56:10 -07:00
Casey Faist 48f6e20fc5 160 release changelog note 2019-10-23 14:30:05 -07:00
Casey b1e3256128 Merge branch 'master' into geos-deprecation 2019-10-23 14:24:04 -07:00
Casey 7ceb774c63 Merge pull request #894 from heroku/undo-revert
Reapply pipenv-ci bugfix
2019-10-23 12:57:27 -07:00
Casey ac93a57492 Merge branch 'master' into geos-deprecation 2019-10-23 11:42:41 -07:00
Casey Faist 5828fbfe7d check for whole deprecation message 2019-10-23 11:42:01 -07:00
Casey f43caaadc3 Merge branch 'master' into undo-revert 2019-10-23 11:40:04 -07:00
Casey bb31a012fd Merge pull request #893 from heroku/changelog-fix
Release 159 changelog update
2019-10-23 10:55:13 -07:00
Casey Faist b7d8aa4d7d update changelog 2019-10-22 12:59:18 -07:00
Kevin Brolly a6510f0f77 Added a deprecation warning when using BUILD_WITH_GEO_LIBRARIES or installing pygdal 2019-10-22 12:38:43 -07:00
Casey Faist 9ab6a56cba reapply bugfix in preparation for tomorrow's release 2019-10-22 11:29:58 -07:00
Alexandre Paroissien ab89e49235 Fix pipenv install twice in CI 2019-10-22 11:28:08 -07:00
Casey Faist 5293169aa8 update Readme to reflect 2.7 2019-10-22 09:59:02 -07:00
Casey Faist 3698cb5715 update changelog with latest python 2.7 release 2019-10-22 09:56:01 -07:00
Casey c126f6239d Merge pull request #891 from heroku/python-27-update
Python 2.7.17
2019-10-22 08:04:26 -07:00
Casey e821501114 Merge branch 'master' into test-staged-binaries 2019-10-21 19:16:54 -07:00
Casey Faist 7f639739e3 add new 2.7.17 formula 2019-10-21 17:06:32 -07:00
Casey Faist 4328847f1e update tests and default 2.7 2019-10-21 17:04:23 -07:00
Casey Faist c79e6f02ad update changelog 2019-10-21 17:03:56 -07:00
Casey 1d938c35f8 Merge pull request #890 from heroku/release-cleanup
Release 158 Changelog update
2019-10-21 17:00:58 -07:00
Casey Faist 99a2a55f6a update changelog 2019-10-21 14:19:53 -07:00
Casey 79dbd79b13 Merge pull request #885 from heroku/new-pythons
Python 3.7.5 and 3.8.0
2019-10-21 13:01:22 -07:00
Casey 0b4a2d664b Merge branch 'master' into new-pythons 2019-10-21 11:57:35 -07:00
Casey 3726d3b473 Merge pull request #887 from heroku/deprecated-pythons-test
Test fixture update
2019-10-21 11:57:08 -07:00
Casey 9b72199cdf Merge branch 'master' into new-pythons 2019-10-21 10:57:49 -07:00
Casey 22e6239222 Merge branch 'master' into deprecated-pythons-test 2019-10-21 10:56:23 -07:00
Casey 39e4e85747 Merge pull request #886 from heroku/we-are-the-walrus
We Are The Walrus (Python 3.8 Support)
2019-10-21 10:55:46 -07:00
Casey 05612fa1eb Merge branch 'master' into deprecated-pythons-test 2019-10-21 10:54:59 -07:00
Casey fb1ca18e90 Merge branch 'master' into new-pythons 2019-10-18 10:00:01 -07:00
Casey 0207d8aff0 Merge branch 'master' into we-are-the-walrus 2019-10-18 09:59:29 -07:00
Casey 6bf3a75da2 Merge pull request #888 from heroku/temporary-revert
Temporary revert
2019-10-18 09:58:55 -07:00
Casey Faist 011f1e7e60 wardn case should succeed on all stacks 2019-10-18 09:57:09 -07:00
Casey Faist 0b804b186c correct the capture version too 2019-10-18 08:53:40 -07:00
Casey Faist ec56074c18 CHANGELOG 2019-10-17 16:49:31 -07:00
Casey Faist 34508bfc35 Temporarily Revert "Fix pipenv install twice in CI"
This reverts commit c410fd36a6.

This is a temporary revert in order to release new python binaries first
and then roll this change out in a separate release. This keeps releases
smaller and better organized in case we need to roll back.
2019-10-17 16:44:58 -07:00
Casey Faist af1ef93311 CHANGELOG CHANGELOG CHANGELOG 2019-10-17 16:35:57 -07:00
Casey Faist 0fc7b6c186 bump the warning version to an available version 2019-10-17 16:34:44 -07:00
Casey Faist 33cd4a5fe1 remove copy-paste typo 2019-10-17 16:09:27 -07:00
Casey Faist 7ff7fa4462 add 3.8 tests 2019-10-17 15:01:32 -07:00
Casey Faist 9a830367fe add 3.8 support 2019-10-17 14:59:26 -07:00
Casey Faist 521ed3ff60 create and stage new python runtimes 2019-10-17 14:07:09 -07:00
Casey Faist 03c12e8081 update to use staging binaries env var 2019-10-14 12:29:12 -07:00
Casey de18566b47 Merge branch 'master' into test-staged-binaries 2019-10-14 12:26:32 -07:00
Casey a165486180 Merge pull request #882 from heroku/confirm-binary-url
Staging binary controller env var
2019-10-14 12:26:10 -07:00
Casey Faist d7327b8d13 CHANGELOG 2019-10-14 11:24:45 -07:00
Casey Faist 47c6dbab32 add var to handle staged binaries 2019-10-14 11:15:06 -07:00
Casey 939594ecf4 Merge branch 'master' into test-staged-binaries 2019-10-12 14:17:15 -07:00
Casey 23adcc42c4 Merge pull request #877 from heroku/test-pysqlite
Add pysqlite test
2019-10-12 14:12:56 -07:00
Casey cc2d1ad17f Merge branch 'master' into test-pysqlite 2019-10-10 13:09:56 -07:00
Casey Faist 91a0be91e1 Changelog Changelog Changelog 2019-10-10 13:08:27 -07:00
Casey Faist 4a4a6a1df0 add pysqlite test for python 2.7.16 2019-10-10 13:05:45 -07:00
Casey b30838072f Merge pull request #871 from heroku/update-sqlite-tests
Update tests to capture Sqlite install
2019-10-10 11:50:00 -07:00
Casey Faist 950572132c remove test for sqlite on older versions of python 3.4 2019-10-09 13:57:06 -07:00
Casey fe5da9a0a6 Merge branch 'master' into update-sqlite-tests 2019-10-09 13:35:28 -07:00
David Zülke 4eed56e2e5 Merge pull request #874 from heroku/revert-868-app-dir-fix
Revert "Refactor: $BUILD_DIR" (from PR #868), closes #873
2019-10-09 16:12:03 +02:00
David Zülke 00d44d2e34 Revert "Refactor: $BUILD_DIR" 2019-10-09 15:28:31 +02:00
Casey Faist 0c78978e90 don't check python 3.4 2019-10-08 14:57:15 -07:00
Casey Faist d0fd9ad58a Changelog update 2019-10-08 14:10:51 -07:00
Casey Faist 24e0858902 add sqlite tests 2019-10-08 14:08:04 -07:00
Casey d54da94d47 Merge branch 'master' into test-staged-binaries 2019-10-08 12:25:06 -07:00
Casey 1721fa3703 Merge pull request #868 from heroku/app-dir-fix
Refactor: $BUILD_DIR
2019-10-08 12:20:02 -07:00
Casey 970b6c1e4b Merge branch 'master' into app-dir-fix 2019-10-08 11:10:48 -07:00
Casey 89145ef839 Merge pull request #866 from heroku/correct-changelog
update changelog to match current tags
2019-10-08 11:10:23 -07:00
Casey Faist ce6657d5fe use correct override var BUILDPACK_VENDOR_URL instead of vendor_url 2019-10-08 09:54:17 -07:00
Casey Faist cacd163958 update Changelog 2019-10-07 18:06:49 -07:00
Casey Faist cd4601a707 add double-quotes to comply with shellcheck 2019-10-07 18:05:34 -07:00
Duane Hutchins 05e29c74bc Changed hardcoded /app into $BUILD_DIR 2019-10-07 16:41:07 -07:00
Casey dbfdb5a356 Merge branch 'master' into correct-changelog 2019-10-07 18:09:19 -04:00
Casey 8512fcb811 Merge pull request #861 from heroku/fix-pipenv-install-twice-ci
Fix pipenv install twice with CI
2019-10-07 18:07:38 -04:00
Casey 6b328504de Merge branch 'master' into fix-pipenv-install-twice-ci 2019-10-07 17:21:54 -04:00
Casey Faist b4553d4bee update changelog to match tags 2019-10-07 14:11:35 -07:00
Casey af860be62a Merge pull request #864 from heroku/schneems/check-changelog-fix-escaping
[changelog skip] Fix Escaping in Changelog Script
2019-10-02 19:42:51 -07:00
Casey 2be890d2e8 Merge branch 'master' into schneems/check-changelog-fix-escaping 2019-10-02 19:01:17 -07:00
Casey e936ff00c3 Merge branch 'master' into fix-pipenv-install-twice-ci 2019-10-02 18:18:33 -07:00
schneems 3096299184 [changelog skip] Fix Escaping in Changelog Script
The previous PR had a bug where the REGEX for grep was not properly escaped. This PR fixes that issue.
2019-10-01 10:28:18 -05:00
Casey ffc7359b19 Merge pull request #862 from heroku/pin-dockerfile
Pin docker build env
2019-10-01 07:35:32 -07:00
Casey Faist 7a313c53a5 update changelog 2019-10-01 06:43:37 -07:00
Casey Faist 98df315cfa pin docker build env 2019-10-01 06:37:03 -07:00
Casey Faist 74bc1d4049 pass vendor url to docker container 2019-09-30 15:22:29 -07:00
Casey df18c0485d Merge branch 'master' into fix-pipenv-install-twice-ci 2019-09-30 14:05:27 -07:00
Casey Faist 629ab233bf add changelog 2019-09-30 13:36:19 -07:00
Casey c4b4bfaa3c Merge branch 'master' into test-staged-binaries 2019-09-30 13:20:22 -07:00
Casey fe6a81d513 Merge pull request #859 from heroku/dockerfile-update
Unpin Heroku 18 dockerfile dependencies
2019-09-30 13:20:00 -07:00
Casey Faist 7c82017a0e run each matrix item twice, with VENDOR_URL update 2019-09-30 13:19:38 -07:00
Casey 75ce3f537d Merge branch 'master' into dockerfile-update 2019-09-30 12:05:41 -07:00
Casey a51d5f2976 Merge pull request #855 from heroku/fix-mcount-typo
Fix mcount typo
2019-09-30 12:05:06 -07:00
Casey Faist 6a8aa1e2b0 update travis matrix to change vendor url 2019-09-30 11:15:09 -07:00
Casey Faist 35873ee517 update Changelog 2019-09-30 11:14:36 -07:00
Casey Faist b2b12d0355 add changelog update 2019-09-30 11:01:49 -07:00
Casey Faist 15ecb76950 revert pin bionic packages for heroku-18 2019-09-30 11:00:27 -07:00
Casey adba08788c Merge branch 'master' into fix-mcount-typo 2019-09-30 10:13:21 -07:00
Casey e3d6bc8436 Merge pull request #857 from heroku/schneems/check-changelog
[changelog skip] Ensure PRs include a Changelog entry
2019-09-27 17:41:49 -07:00
Casey Faist 6e4b43fa1d add changelog update to retrigger tests 2019-09-27 14:09:30 -07:00
schneems 3fef7caf50 [changelog skip] Ensure PRs include a Changelog entry
The goal of this PR is to add a github action that checks for the presence of a changelog entry.

It is better to add entries as a PR is merged instead of having to remember what was merged and generate a changelog at release time.

By automating this check, it's one less thing the maintainer has to remember, and it's one less thing a change might be blocked on i.e. "Looks good, but please add a changelog entry".

Let me know if you have any questions and Happy Friday!
2019-09-27 16:09:19 -05:00
Claudio Jolowicz 0c701de466 Fix typo in command to log pip-diff failure
The pip-diff tool from vendor/pip-pop is used to determine stale
requirements. When pip-diff encounters an unexpected failure, a count is
logged using mcount from heroku/buildpack-stdlib.

Due to a typo, mount(8) was invoked instead of mcount, with an invalid
argument.
2019-09-25 09:48:10 +02:00
Alexandre Paroissien c410fd36a6 Fix pipenv install twice in CI 2019-09-24 15:03:40 +07:00
Casey ff42f318a0 Merge pull request #848 from heroku/cleanup-output
download get-pip silently
2019-09-12 16:17:11 -07:00
Casey 09b5fe4881 Merge branch 'master' into cleanup-output 2019-09-12 15:36:12 -07:00
Casey 7a431ee717 Merge pull request #847 from heroku/codeinteger-6-readme
Update README.md
2019-09-12 15:12:30 -07:00
Casey Faist a80f2be020 download get-pip silently 2019-09-12 14:31:09 -07:00
Casey 15289a94f1 Merge branch 'master' into codeinteger-6-readme 2019-09-12 14:28:16 -07:00
Casey a013e54769 Merge pull request #846 from heroku/patch-1
Patch 1 from PiDelport
2019-09-12 14:28:06 -07:00
codeinteger6 bf8f9419ec Update README.md 2019-09-12 13:39:50 -07:00
Casey 3346bbc324 Merge branch 'master' into patch-1 2019-09-12 13:31:09 -07:00
Casey ebfe4946df Merge pull request #844 from heroku/post-release-changelog
New Release: Changelog update
2019-09-12 11:25:52 -07:00
Casey Faist 0bfd1bd51f Merge branch 'patch-1' of https://github.com/PiDelport/heroku-buildpack-python into patch-1 2019-09-12 11:18:01 -07:00
Pi Delport b1b3ab1c92 (Typo: requriements -> requirements) 2019-09-12 11:13:03 -07:00
Casey dfb8185a63 Merge branch 'master' into patch-1 2019-09-12 11:13:03 -07:00
Casey Faist 1c5e876e3d post release changelog update 2019-09-12 10:06:59 -07:00
Casey 149c046f5f Merge pull request #843 from heroku/hatchet/test-updates
Hatchet/test updates
2019-09-12 09:32:29 -07:00
Casey Faist fc4cbf272a steal Ruby's Master heading for pre-release changelog documentation 2019-09-12 08:54:16 -07:00
Casey Faist 61ead23f7f bump hatchet default python 2019-09-12 08:44:10 -07:00
Casey Faist f3738a0e70 update changelog 2019-09-12 08:43:35 -07:00
Casey 1e92f31436 Merge pull request #841 from heroku/v-156
Release the snakes! (Python 3.7.4 and 3.6.9)
2019-09-11 19:07:54 -07:00
Casey Faist c969fa0d36 update default pythons 2019-09-11 17:39:38 -07:00
Casey Faist 1851bbf285 update changelog 2019-09-11 17:39:38 -07:00
Casey a41fd78f72 Merge pull request #840 from heroku/remove-get-pip
Move get-pip utility to s3
2019-09-11 17:33:45 -07:00
Casey Faist 56322381f0 Revert "update get-pip to look for sha"
This reverts commit a2f3ff7a35.
2019-09-11 16:59:20 -07:00
Casey Faist dc878449ee Revert "update default_pythons to include sha version"
This reverts commit 204a6215b2.
2019-09-11 16:59:11 -07:00
Casey Faist 204a6215b2 update default_pythons to include sha version 2019-09-11 16:37:26 -07:00
Casey Faist a2f3ff7a35 update get-pip to look for sha 2019-09-11 16:36:48 -07:00
Casey Faist c3328f57dd correct cedar-14 ref in Makefile 2019-09-11 14:04:35 -07:00
Casey Faist 5df70ce26c remove get-pip from repo 2019-09-11 13:37:18 -07:00
Casey Faist 44fe0fe3fd move get-pip to s3 2019-09-11 13:37:18 -07:00
Casey b8d1035231 Merge pull request #799 from heroku/build-cleanup
Build cleanup
2019-09-11 13:34:56 -07:00
Casey Faist 006ea77641 address issues found in review 2019-09-11 11:57:31 -07:00
Casey Faist a239fde78c clarify naming for travis docker tags and correct typo 2019-09-10 18:50:50 -07:00
Casey Faist 783c2e2329 ensure and add comments to base python formulas 2019-09-10 18:35:54 -07:00
Casey Faist 06694bba18 simplify pr for review, pull out staged binaries tooling 2019-09-10 18:29:04 -07:00
Casey Faist 158a3e28a8 update travis to match dockerfile locations 2019-09-10 18:26:14 -07:00
Casey Faist 9031333ef4 change travis to bionic 2019-09-10 18:20:25 -07:00
Casey Faist b6e2739fb5 add Cedar 14 environment back for tests and binaries 2019-09-10 18:20:25 -07:00
Casey Faist a8da6e4ed5 add cedar-14 back in after clarification on support policy
Heroku will continue to build binaries as long as stacks receive updates,
even after EOL
2019-09-10 18:20:25 -07:00
Casey Faist 707ed848bb fix typo in compile 2019-09-10 18:20:25 -07:00
Casey Faist 385296c270 Add support for testing binaries in staging/ on S3
This will allow for faster and more transparent deploys for Python and
other built dependencies.
2019-09-10 18:20:25 -07:00
Casey Faist 12279e69d5 Clean up comments from python3 2019-09-10 18:20:25 -07:00
Casey Faist b5fa65d96c update Makefile to match new directory structure 2019-09-10 18:20:25 -07:00
Casey Faist a724dfc62e Add new formula for python3 and latest 3.6 and 3.7 patches 2019-09-10 18:20:25 -07:00
Casey Faist aecdeddc32 clean up rebase 2019-09-10 18:20:25 -07:00
Casey Faist f3af6aa4a2 add python3 formula 2019-09-10 18:20:25 -07:00
Casey Faist 6bc4d42774 first try for python-3.6.9 2019-09-10 18:20:25 -07:00
Casey Faist e1d0fcae0e remove Cedar from binary docs 2019-09-10 18:20:25 -07:00
David Zuelke 8f1b24f64e expose $STACK env to each image so it can be used in formulae 2019-09-10 18:20:25 -07:00
David Zuelke 97e3366409 move Dockerfiles to central location, add all stacks, update README 2019-09-10 18:20:25 -07:00
David Zuelke 4f8bb77b13 expose $STACK env to each image so it can be used in formulae 2019-09-10 18:20:25 -07:00
David Zuelke a771b7bf94 move Dockerfiles to central location, add all stacks, update README 2019-09-10 18:20:25 -07:00
David Zuelke b52fac4d32 reuse logic in runtimes/pypy3 formulae 2019-09-10 18:20:25 -07:00
David Zuelke e28c1012b7 reuse logic in runtimes/pypy formulae 2019-09-10 18:20:25 -07:00
Casey 05b7ceb82c Merge pull request #839 from heroku/test-breakout
Test breakout
2019-09-10 18:19:12 -07:00
Casey Faist a379779d43 add missing --tag option 2019-09-10 17:52:54 -07:00
Casey Faist de1696bb02 split out build and run script steps 2019-09-10 17:33:44 -07:00
Casey Faist 77b012dd6f add tags to docker scripts to pass images to test run cases 2019-09-10 17:22:53 -07:00
Casey Faist 3d65278d61 add multiple script steps to trigger matrix across docker files 2019-09-10 17:13:41 -07:00
Casey Faist 59544ee799 use keyword dockerfile to trigger matrix 2019-09-10 17:05:07 -07:00
Casey Faist 34a631021c update test runs to matrix 2019-09-10 16:36:13 -07:00
Casey Faist 6a4ab8646a add ci nodes to test run 2019-09-10 16:04:11 -07:00
Casey Faist 7d8ea3d266 add stack value back in 2019-09-10 15:32:59 -07:00
Casey Faist 0161b80a2b correct hatchet setup 2019-09-10 15:15:29 -07:00
Casey Faist 7eac72199e parallel test runs per stack 2019-09-10 15:09:43 -07:00
Casey Faist df779aaa9a reorganize tests to stage per stack 2019-09-10 14:56:08 -07:00
Casey Faist bbdbebbc87 shell command only needed when using make, remove 2019-09-10 13:50:09 -07:00
Casey Faist 32cf8a8681 fix dockerfile location typo 2019-09-10 13:44:22 -07:00
Casey Faist 1479ab375e ensure tabs are spaces 2019-09-10 13:33:55 -07:00
Casey Faist 8366d66f54 add pre-commit-hook for travis file 2019-09-10 12:16:11 -07:00
Casey Faist b156f237a2 breakout jobs 2019-09-10 12:08:31 -07:00
Casey Faist 0ffbf60882 split out tests to avoid timeouts 2019-09-10 11:53:33 -07:00
Casey c458743a2a Merge pull request #836 from heroku/pin-docker18
pin package versions for python-pip to bionic-security
2019-08-28 17:15:16 -07:00
Casey Faist 0ff53eb59b pin package versions for python-pip to bionic-security
so that we do not get an update of libssl to 1.1.1, since the stack is still on 1.1.0
2019-08-28 15:15:17 -07:00
Casey 96ffc147d4 Merge pull request #831 from heroku/remove-cedar-tests
Remove cedar tests
2019-08-21 16:20:22 -07:00
Casey Faist 4063e9d22e remove cedar 14 make test command, as cedar is deprecated 2019-08-21 15:45:18 -07:00
Casey Faist 751413168b remove cedar 14 travis tests 2019-08-21 15:44:46 -07:00
Casey 527ea604c8 Merge pull request #829 from josegonzalez/heroku-18-build
feat: add docs and make target for heroku-18 bob builds
2019-08-21 15:41:30 -07:00
Jose Diaz-Gonzalez 302c2f0432 feat: add docs and make target for heroku-18 bob builds 2019-08-15 17:36:40 -04:00
David Zülke 14c7e26f7a Merge pull request #827 from heroku/fix-python-3-5-7
Fix Python 3.5.7
2019-07-17 21:55:48 +02:00
David Zuelke 58e664a9e3 avoid service restart prompt during Dockerfile builds
https://unix.stackexchange.com/questions/146283/how-to-prevent-prompt-that-ask-to-restart-services-when-installing-libpq-dev
2019-07-17 02:22:10 +02:00
David Zuelke e965516197 fix python 3.5.7 formula actually building 3.7.2 2019-07-17 01:55:46 +02:00
David Zuelke 8775cb821c CHANGELOG for v153 2019-07-17 01:43:54 +02:00
Casey 9dcabe24a5 Merge pull request #826 from heroku/hotfix-sqlite3-heroku-16
HOTFIX heroku-16 builds with sqlite3
2019-06-21 10:43:28 -07:00
David Zuelke 38f9a41a54 HOTFIX heroku-16 builds with sqlite3
upstream version has changed to 3.11.0-1ubuntu1.2, but local package version is still on 3.11.0-1ubuntu1.1, so the download fails otherwise
2019-06-21 19:17:22 +02:00
Pi Delport 3880b1affa (Typo: requriements -> requirements) 2019-06-06 21:53:26 +02:00
Casey 53e33bdf91 Merge pull request #814 from heroku/v-152
Python 3.7.3 release
2019-04-04 15:41:29 -07:00
Casey Faist 5337dd592b remove test case for deprecated pythons on deprecated stack 2019-04-04 14:04:10 -07:00
Casey Faist de8ae808d9 changelog date corrected 2019-04-04 13:26:55 -07:00
Casey Faist 2a7e85be85 update CHANGELOG 2019-04-03 15:32:26 -07:00
Casey Faist 7654d13f8b fix test blindspot 2019-04-03 15:28:35 -07:00
Casey Faist 9d3639685a add new python and update default 2019-04-03 09:12:44 -07:00
Casey 76bb572a4d Release prep 151 (#813)
* new runtimes

* update default latest
2019-03-21 10:54:12 -07:00
Casey 8db4a79392 changelog 150 update (#810) 2019-03-14 11:40:14 -07:00
Casey 21430070ad Python release prep (#809)
* new recipe for new runtime

* add new runtime formula

* add test updates for new runtime release

* wrangle tests into submission

* update tests to use default_pythons

* delete commented code
2019-03-13 12:25:03 -07:00
Casey 20bbb3f54d changelog update for v149 (#806) 2019-03-11 11:51:07 -07:00
Casey bebc0cf439 Python 2.7.16 (#808)
* new recipe for new runtime

* add new runtime formula

* wrangle tests into submission
2019-03-11 13:22:29 -04:00
David Zülke c361c2ffc4 HOTFIX for cedar-14 python builds (#805) 2019-03-04 14:46:33 -08:00
Casey 13d2a58add update changelog (#803) 2019-02-21 15:24:08 -08:00
Casey 49e9147439 track usage of older feature steps (#802)
* track usage of older feature steps

* remove typo whitespace

* make buildvars consistently cased
2019-02-21 14:06:20 -08:00
Casey 3c0146c0b9 Merge pull request #797 from heroku/v-147
V 147
2019-02-12 13:01:43 -06:00
Casey Faist 53c7d61291 correct date mixup + update changelog 2019-02-07 12:35:25 -05:00
Casey Faist 797652a75d new runtimes and travis test updates 2019-01-31 14:46:42 -05:00
Casey Faist d7351513c7 changelog and test update 2018-12-12 17:26:28 -05:00
Casey fe029af603 Merge pull request #785 from heroku/update-readme
Update readme
2018-12-12 10:20:01 -05:00
Casey dd8fe58de1 Merge pull request #784 from heroku/update-changelog
update changelog
2018-12-12 10:19:24 -05:00
Casey Faist a979d57a20 update readme 2018-11-15 17:41:01 -06:00
Casey Faist 3cb8db7e2e update release date 2018-11-15 17:31:29 -06:00
Casey Faist 16cce92342 update changelog 2018-11-15 16:59:51 -06:00
Casey b85fe3614c Merge pull request #783 from heroku/document-tests
Document tests
2018-11-15 12:41:15 -06:00
Hunter Loftis b024e644d1 Merge branch 'master' of github.com:heroku/heroku-buildpack-python into document-tests 2018-11-15 12:45:28 -05:00
Casey 41e0f64252 Merge pull request #782 from heroku/next-release
Test updates
2018-11-15 11:06:27 -06:00
Hunter Loftis 3a0d4c18bf add heroku-18 to test targets and document running tests 2018-11-15 11:57:44 -05:00
Casey Faist b3988a565a remove template runtimes to cut down on scope creep 2018-11-15 10:39:19 -06:00
Casey Faist 0437a6e84f update latest python 2 in pipenv-version step 2018-11-15 09:37:43 -06:00
Casey Faist 88a5ba5d39 add test for 2.7 pipenv install 2018-11-15 09:09:51 -06:00
Casey Faist 3434972e32 update hatchet expected version 2018-11-15 08:57:57 -06:00
Casey Faist 1dfef44085 update default in pipenv test 2018-11-14 17:36:59 -06:00
Casey Faist 2ffb10da34 update latest vars in compile 2018-11-14 16:57:02 -06:00
Casey Faist 23999846ad update 3.7 tests typo 2018-11-14 16:41:38 -06:00
Casey Faist 8d1ebf7288 bump default 3.6 version 2018-11-14 16:24:46 -06:00
Casey Faist f2165aaac6 update test fixtures for new python runtimes 2018-11-13 16:11:14 -06:00
Casey Faist 05492e132a add next runtimes 2018-11-13 15:34:07 -06:00
Casey 62eaae35a4 Merge pull request #781 from heroku/update-hatchet-setup
Update to reflect Hatchet updates
2018-11-13 14:36:24 -06:00
Duane Hutchins 2f32c5418d Updated HATCHET_BUILDPACK_BASE to use TRAVIS_REPO_SLUG 2018-11-13 13:58:23 -06:00
Casey Faist 12e3a7f3e7 add HATCHET_DEPLOY_STRATEGY env var 2018-11-13 13:48:38 -06:00
Casey Faist e7da63f722 update to newer hatchet integration 2018-11-13 13:05:31 -06:00
Casey a6452a1ce4 Merge pull request #772 from heroku/v-145
V 145
2018-11-12 18:49:06 -06:00
Casey Faist 0b554f660f update tests for missed stack issues 2018-11-12 17:27:07 -06:00
Casey Faist 7b9e82175e add warning detection and per-stack checks 2018-11-12 17:10:30 -06:00
Casey Faist 73d37cbac6 update changelog 2018-11-11 17:52:16 -06:00
Casey Faist 9e1df4bbb5 specify python 2.7 2018-11-11 17:24:42 -06:00
Casey Faist 0be9d48013 add missing vars for python step 2018-11-11 16:51:29 -06:00
Casey Faist 4750639a0d add python 3.4 detection 2018-11-11 16:38:12 -06:00
Casey Faist 3de5b43447 add bash pre-commit hook and correct shellcheck warnings 2018-11-11 16:36:16 -06:00
Casey Faist c3845fff9a use text variable as variable in puts-warn 2018-11-11 15:43:21 -06:00
Casey Faist f3ef152624 update tests to pass, add 3.4 2018-11-11 15:34:49 -06:00
Jose Diaz-Gonzalez ef1f7f6924 fix: drop broken version check
Due to how the version checks work - via sorting, not actual comparison - this previously resulted in _always_ installing sqlite3, even though it was already bundled for lower versions of python. The second version check also encompasses 3.7.0+, so there is no need to respecify the check.
2018-11-08 16:14:05 -06:00
Casey Faist 25818765ee update changelog 2018-11-08 15:54:45 -06:00
Casey Faist 0a169e76a4 fix extra slash in python install location 2018-11-08 13:54:44 -06:00
Casey Faist 2f430abf07 adjust sqlcheck 2018-11-08 13:54:44 -06:00
Casey Faist 07241cd751 add tests for new runtimes 2018-11-08 13:54:44 -06:00
Casey Faist ae4713efd8 add new runtimes and test repos 2018-11-08 13:54:44 -06:00
Casey 402cd8253e Merge pull request #777 from heroku/use-heroku-bob
update bob dependency to point to internal bob-builder fork
2018-11-08 13:54:03 -06:00
Casey aa593f127b delete tester runtime.txt
Added this for local testing because bob requires 2.7, should not be merged to master
2018-11-08 10:23:23 -06:00
Casey Faist 67badb1829 use released bob package 2018-11-08 09:23:05 -06:00
Casey Faist defa85c355 delete me later 2018-11-07 11:18:26 -06:00
Casey Faist ec364be161 remove comment 2018-11-06 17:47:38 -06:00
Casey Faist 7b4d6b5587 update bob dependency to point to internal bob-builder fork 2018-11-06 17:41:10 -06:00
Casey e094c5469d Merge pull request #769 from heroku/pip-pipenv-pin
Pin pip version used by pipenv
2018-10-11 14:50:52 -05:00
Casey Faist a7a5971372 changelog update 2018-10-10 09:23:54 -05:00
Casey Faist 45b78ab587 pin pip version used by pipenv 2018-10-09 14:46:49 -05:00
Casey 63e84aceb1 Merge pull request #760 from heroku/add-airflow-110-support
Add Apache Airflow 1.10 Support
2018-10-08 16:01:45 -05:00
Casey Faist eee8dd9a9e need to pass env var as export in test 2018-10-05 13:48:22 -05:00
Casey Faist 00e12b8ec2 add test/run case 2018-10-05 13:35:42 -05:00
Casey Faist b56b063dd5 add SLUGIFY_USES_TEXT_UNIDECODE support 2018-10-05 11:49:01 -05:00
Casey d3180d3245 Merge pull request #759 from heroku/update-travis
Update travis setup for Hatchet
2018-10-04 19:28:04 -05:00
Casey Faist 4778b1cb9d add sudo to travis install 2018-10-04 17:33:40 -05:00
Casey Faist 50a3d2d13e add shebang and update file permissions 2018-10-04 17:33:28 -05:00
Casey Faist 8c36a3a263 move heroku install to before_install 2018-10-04 17:33:16 -05:00
Casey Faist 882f54128b rememer to remove toolbelt 2018-10-04 17:33:08 -05:00
Casey Faist 576def4cde fix travis dependency blocker 2018-10-04 17:32:58 -05:00
Casey Faist 1be32ff09a add more unblocking setup 2018-10-04 17:32:35 -05:00
Casey 9c2bbd109f Merge pull request #741 from heroku/fix-python-check
Fix Python 3.6 message when using Python 3.7
2018-09-05 16:54:26 -04:00
Casey Faist e5d9ed259b changelog update 2018-09-05 16:24:02 -04:00
Casey Faist 285ca2b73d reword warning, add doc link 2018-09-05 16:21:42 -04:00
Casey Faist 5e4667686a add case for older python 3 install attempts 2018-09-05 16:21:42 -04:00
Casey Faist f9621add42 Update indentation levels and messaging
Fix indentation levels

more helpful messages about supported versions
2018-09-05 16:21:42 -04:00
Casey 567cf2c388 Merge pull request #742 from heroku/hatchet/yay
Hatchet/yay
2018-09-05 16:18:25 -04:00
Casey Faist c61e61c153 add missing newline 2018-09-05 15:53:42 -04:00
Casey Faist 3835aca004 use bundle syntax to rspec 2018-09-04 11:26:13 -04:00
Casey Faist 3733383ad6 add Rakefile 2018-09-04 11:26:13 -04:00
Casey Faist b53d211d01 add rake to gemfile 2018-09-04 11:26:13 -04:00
Casey Faist e5830fd50d correct travisyaml indenting 2018-09-04 11:26:13 -04:00
Casey Faist 2efe514b14 setup travis rspecting 2018-09-04 11:26:13 -04:00
schneems d442562352 Add retry gem 2018-09-04 11:26:13 -04:00
schneems ce14e1edf8 Integration tests with Hatchet 2018-09-04 11:26:13 -04:00
Casey 39d2cd6de8 Merge pull request #746 from heroku/changelog-dates
Start adding dates to changelog entries
2018-09-04 11:21:37 -04:00
Jeremy Morrell e42b725211 Start adding dates to changelog entries
It's occasionally useful to see at a glance when releases were pushed to understand what release might have caused a customer's issues. This back-fills dates for the last few months of releases and sets a precedent that can be followed in the future.
2018-09-04 10:02:34 -04:00
Casey d9456b6d90 Merge pull request #745 from heroku/fix-27-tests
update buildpack tests to expect success for all 2.7.15 builds
2018-09-04 09:58:07 -04:00
Casey Faist 61591594a2 typo fix 2018-08-24 18:19:07 -04:00
Casey Faist 13bca29e13 update tests to expect success for all 2.7.15 builds 2018-08-24 18:12:28 -04:00
Casey 95779d6711 Merge pull request #744 from edmorley/add-pr-template
Add a Pull Request template
2018-08-22 15:50:36 -04:00
Ed Morley 166b8be2c5 Add a Pull Request template
To try and help prevent the notification noise from PRs being opened
against upstream by mistake.
2018-08-22 18:29:03 +01:00
Casey 583c1ab160 Merge pull request #736 from heroku/v-138
v 138 changelog
2018-08-01 16:49:37 -05:00
Casey Faist c7f5532854 v 138 changelog 2018-08-01 16:04:24 -05:00
Terence Lee 0fe4f91395 Merge pull request #713 from hone/sqlite3
Update SQLite3
2018-07-26 17:21:08 -05:00
Terence Lee 221722fb27 setup libsqlite3-dev and sqlite3 binary to match stack's libsqlite3-0
With inspiration from @KevinBrolly, this patch uses the stack image
SQLite3 package but also still providing the dev headers and binary that
users may still be using today. The benefit is that we won't need to
rebuild all the python binaries for this to take affect. We can just
stop shipping SQLite3 from future binaries. In addition, we don't need
to worry about what version and when to update SQLite3 and maintaining
the packages ourselves.

This also includes updates to Python 2.7.15 and Python 3.6.6 so they can
rebuilt with the stack image dev headers instead of building our own
vendored SQLite3.
2018-07-26 16:49:23 -05:00
Terence Lee e82f1e4d1e add Python version operators 2018-07-26 16:32:04 -05:00
Terence Lee f7e5930047 Merge pull request #733 from heroku/v137
v137 changelog
2018-07-17 14:02:40 -05:00
Terence Lee f51dfb5eb4 v137 changelog 2018-07-17 12:51:36 -05:00
Ian Stapleton Cordasco 06b7f97eff Merge pull request #729 from heroku/bug/728
Prevent Python 3.7 from being unsupported
2018-07-10 08:09:39 -05:00
Ian Stapleton Cordasco 74873b5b71 Merge branch 'master' into bug/728 2018-07-10 07:53:39 -05:00
Ian Stapleton Cordasco 731876d6e8 Be clearer in our warnings about which Py3 we mean 2018-07-10 07:38:31 -05:00
Ian Stapleton Cordasco a775b06d2f Merge pull request #731 from heroku/heroku-18-ci
Add heroku-18 to our Travis CI config
2018-07-10 07:31:44 -05:00
Ian Stapleton Cordasco 2d290e94e9 Add heroku-18 to our Travis CI config
- Add stage to Travis CI config and update tests.sh script to recognize
  it

- Update tests to assert there is no Python 2 on Heroku-18

- Update nltk fixture to use Python 3.6 so we can test it on all stacks

Closes gh-730
2018-07-09 11:51:03 -05:00
Ian Stapleton Cordasco 179e6287b1 Prevent Python 3.7 from being unsupported
Python 3.7.0 is supported but not preferred given how new it is. As a
result, we don't want it to be the default, but we also don't want users
to be confused when upgrading to it.

Closes gh-728
2018-07-06 09:11:26 -05:00
Ian Stapleton Cordasco 18945ff1a9 Merge pull request #724 from heroku/publish-automation
Steal the java buildpack's release script
2018-07-06 08:34:12 -05:00
Ian Stapleton Cordasco 2e630ab55c Steal the java buildpack's release script
This will make releasing new versions easier for us.

Closes gh-723
2018-06-28 12:33:54 -05:00
Ian Stapleton Cordasco 83d5d6caa9 Merge pull request #722 from heroku/python-3.7-and-3.6.6
Build Python 3.6.6 and 3.7.0
2018-06-28 11:09:23 -05:00
Ian Stapleton Cordasco abade31848 Update defaults for Python 3 apps on Heroku
Also update our documentation and CHANGELOG for this version of the
buildpack.
2018-06-28 10:57:13 -05:00
Ian Stapleton Cordasco 9a3c1fab04 Build Python 3.6.6 and 3.7.0
Add runtime build recipes for our newly released versions

Closes gh-720
Closes gh-721
2018-06-28 08:33:50 -05:00
Ian Stapleton Cordasco d18f1fedd8 Merge pull request #710 from KevinBrolly/master
Updated README for python 3.6.5 and CHANGELOG for v135
2018-06-12 08:19:20 -05:00
Kevin Brolly d9a963c8b2 Updated README for python 3.6.5 and CHANGELOG for v135 2018-06-08 12:14:55 -07:00
Ian Stapleton Cordasco dbeca147d2 Merge pull request #701 from allyjweir/bump-pipenv-version
Bump pipenv version
2018-05-29 07:11:12 -05:00
Ian Stapleton Cordasco ca41bc87d3 Merge branch 'master' into bump-pipenv-version 2018-05-25 12:56:58 -05:00
Ian Stapleton Cordasco e717d0a60b Merge pull request #703 from heroku/fix-new-shellcheck-warnings
Fix new shellcheck warnings breaking periodic CI
2018-05-25 12:56:43 -05:00
Ian Stapleton Cordasco f0081e6faf Fix new shellcheck warnings breaking periodic CI
New warnings were found in our periodic (CRON) CI jobs.

Fixes https://travis-ci.org/heroku/heroku-buildpack-python/jobs/383404864
2018-05-25 12:16:47 -05:00
Ally Weir 57ec0c38ae Fix shellcheck linting issues 2018-05-24 14:38:14 +01:00
Ally Weir f1e1df2fa1 Bump pipenv version 2018-05-24 11:37:01 +01:00
Ian Stapleton Cordasco b0f49570d4 Merge pull request #699 from heroku/reenable-shellcheck
Let's test re-enabling shellcheck in CI
2018-05-18 08:39:52 -05:00
Ian Stapleton Cordasco f072b73093 Fix-up SC2219 errors in our shell scripts
Caught these with the re-added shellcheck linting.
2018-05-10 08:32:24 -05:00
Ian Stapleton Cordasco f174d03f7d Let's test re-enabling shellcheck in CI
shellcheck is a truly valuable utility. Unfortunately installing the
packages from debian-sid introduces a conflict. Let's try another
suggestion from: https://github.com/koalaman/shellcheck/wiki/TravisCI

Refs
https://github.com/heroku/heroku-buildpack-python/commit/a0275888a26b8f0132c7bb9fe3bf194b5c4fab1f
2018-05-10 08:16:36 -05:00
Pradeep Damodara af7332b5b2 Update pipenv-to-pip to read lockfiles properly
Use the appropriate encoding to read a Pipfile.lock so we can
properly load the data.

Closes #678
2018-05-07 14:47:45 -05:00
kennethreitz 6e89f2cc96 buildpack.toml
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-05-02 12:37:07 -04:00
kennethreitz a8fdd1e532 Python 3.6.5 (#695)
* 3.6.5

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* fix tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-05-02 09:35:32 -04:00
kennethreitz 6a96169466 Merge branch 'master' of github.com:heroku/heroku-buildpack-python 2018-05-02 07:18:24 -04:00
kennethreitz 22174d6232 fix tests
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-05-02 07:10:22 -04:00
kennethreitz 539bf80bfe Update compile 2018-05-02 07:05:31 -04:00
kennethreitz 14a6c862c8 lots of comments
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-05-02 06:58:48 -04:00
kennethreitz 3d8f6de92e update latest version of python
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-05-01 11:28:42 -04:00
kennethreitz debee377b8 changelog entry
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-05-01 11:26:50 -04:00
kennethreitz c1bb04e013 Update README.md 2018-05-01 10:28:28 -04:00
Ian Stapleton Cordasco 3c64697472 Add Python 2.7.15 to the list of runtimes (#692)
* Add Python 2.7.15 to the list of runtimes

Closes #691

* Update the default Python 2 to 2.7.15 everywhere
2018-05-01 10:27:32 -04:00
Terence Lee df6c8c78af only need to build libmemcache dev for cedar-14 (#690) 2018-05-01 09:17:18 -04:00
kennethreitz 6bcbf19bb0 test git egg installation (#666)
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-04-26 09:16:11 -04:00
kennethreitz dd0aee7b06 update metrics 2018-04-20 10:16:27 -04:00
Josh Friend 23827b59c8 Add CPython 3.6.5 (#676)
fixes #674
2018-04-18 09:10:33 -04:00
kennethreitz 41e3fee30c changelog
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-04-17 16:51:09 -04:00
kennethreitz a0275888a2 Pip frozen version (#683)
* freeze pip version, upon installation

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* use PIP_UPDATE environment variable

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* disable shell checking (for now)

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* --disable-pip-version-check

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-04-17 16:50:01 -04:00
kennethreitz 9eddeaeef9 codeowners (#668)
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-21 09:52:09 -04:00
kennethreitz 4d8c7a4639 improve pip installation
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-20 13:21:46 -04:00
kennethreitz 23400d7862 update pip installation method, to include setuptools 2018-03-20 13:20:49 -04:00
kennethreitz 1534bc3d76 fix bug with pip
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-20 06:53:37 -04:00
kennethreitz 34fccf64a4 9.0.2
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-20 06:38:27 -04:00
kennethreitz a75e4fdf2d pip
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 11:02:14 -04:00
kennethreitz f0201c3e38 9.0.2
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 11:00:16 -04:00
kennethreitz 877aa79e19 cleanup pip upgrade step
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 10:56:59 -04:00
kennethreitz 730c4b314b changelog
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 10:54:28 -04:00
kennethreitz d0ed320447 don't upgrade pip
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 10:53:57 -04:00
kennethreitz 18965ac04c upgrade pip
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 07:18:15 -04:00
kennethreitz 2f160c5652 changelog
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 07:16:58 -04:00
kennethreitz 5b64b73c0b pipenv
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-19 07:16:21 -04:00
Yury V. Zaytsev c732097d17 Output pipenv version in steps (#662)
* Since pipenv is being pinned now, output pinned version in steps

Signed-off-by: Yury V. Zaytsev <yury.zaytsev@moneymeets.com>

* Update README.md example output to match new reality

Signed-off-by: Yury V. Zaytsev <yury.zaytsev@moneymeets.com>

* Update pipenv
2018-03-19 07:15:37 -04:00
kennethreitz 00947abe7a collectstatic metrics (#660) 2018-03-14 13:06:56 -04:00
kennethreitz d0c98aa577 Update pipenv 2018-03-14 06:57:52 -04:00
kennethreitz 894083bfe5 Update CHANGELOG.md 2018-03-14 06:56:50 -04:00
kennethreitz ce30ca052e pin to pipenv==11.6.1 2018-03-14 06:56:14 -04:00
kennethreitz f9e54dc3f6 don't skip Pipenv installation if there are git deps (#656) 2018-03-13 22:02:29 -04:00
kennethreitz 7d975e74a9 default to user python path for collectstatic runs (#655)
* default to user python path for collectstatic runs

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* bugfixes

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* fix

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-13 20:59:11 -04:00
kennethreitz 5f8360cba8 Metrics (#657)
* metrics

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* using pipenv anyway

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* instrument bad failures

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* if not

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-13 20:56:40 -04:00
kennethreitz 091656088d bugfixes
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 11:14:46 -05:00
kennethreitz 05e3d8ccce fix mercurial step
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 11:08:13 -05:00
kennethreitz 2f18118cd3 no longer check cryptogrpahy step
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 11:00:37 -05:00
kennethreitz 920fefce57 source pipenv step
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:58:38 -05:00
kennethreitz fd53d4e1b0 also skip pip install
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:57:31 -05:00
kennethreitz 329cd6eb7b don't print extra information
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:56:49 -05:00
kennethreitz b6f042b118 fix the problem
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:54:58 -05:00
kennethreitz 7cbca2f5c5 always use pipenv if it's there
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:54:09 -05:00
kennethreitz fe302d8724 don't expect there to be a requirements.txt
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:51:48 -05:00
kennethreitz 0f0ddd52ea don't suppress error messages
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:50:03 -05:00
kennethreitz a334672a1a reorder things
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:48:22 -05:00
kennethreitz 7b26f0df44 set -e
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-07 10:38:56 -05:00
kennethreitz 96df073bdf cleanup
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-06 16:06:12 -05:00
kennethreitz cbf074a856 Merge branch 'master' of github.com:heroku/heroku-buildpack-python 2018-03-06 16:05:34 -05:00
kennethreitz c373e80c12 remove cryptogrpahy step, as they ship wheels now
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-06 16:05:19 -05:00
kennethreitz 714826eea2 Update CHANGELOG.md 2018-03-06 15:55:03 -05:00
kennethreitz 41b342e03b Update CHANGELOG.md 2018-03-06 15:54:41 -05:00
kennethreitz 45ceb2f451 Update CHANGELOG.md 2018-03-06 15:54:06 -05:00
kennethreitz 3511cae1bb Update CHANGELOG.md 2018-03-06 15:53:41 -05:00
kennethreitz ce5ff2384f fix changelog
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-06 15:52:19 -05:00
kennethreitz 97ac451a80 Pipenv uninstall, and other improvements (#650) 2018-03-06 15:44:50 -05:00
kennethreitz 06fa6d23ba Update README.md (#649) 2018-03-02 18:56:06 -05:00
kennethreitz df083fd3b8 Update pipenv-python-version to latest python 3.6 (#644)
* Update pipenv-python-version

* use latest versions in pipenv script

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* Update pipenv-python-version

* 3.6.4

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2018-03-02 18:38:21 -05:00
jxltom 2e1638a1b0 Fix PYTHONPATH is not set when running collectstatic (#637)
* Fix PYTHONPATH is not set when running collectstatic

* update changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* Update CHANGELOG.md
2018-03-02 09:04:00 -05:00
Jose Diaz-Gonzalez e15f68944a feat: allow stack url overrides using BUILDPACK_VENDOR_URL env var (#643)
This is useful if you'd like to customize python binaries without forking the entire buildpack.

Similar functionality was implemented in https://github.com/heroku/heroku-buildpack-ruby/pull/238
2018-03-02 07:15:23 -05:00
Eugene Pakhomov 9468ec2630 Add support for PIP_EXTRA_INDEX_URL (#639)
* Add support for PIP_EXTRA_INDEX_URL

* Add support for PIP_EXTRA_INDEX_URL for Pipenv
2018-02-17 05:58:40 -06:00
Swen Kooij c4ec6d3370 Account for the root not being /app (#638) 2018-02-16 09:30:22 -06:00
kennethreitz 1ed0a96b09 Update README.md (#642) 2018-02-15 18:03:28 -06:00
kennethreitz 500daaf6fc Pipenv development dependencies (ci) (#633)
* initial stab at pipenv --dev support

* test installation output

* locale fix

* refactor

* fix typo

* fix typo

* ellipsis

* polish
2018-01-16 13:36:01 -05:00
kennethreitz 4a1fcafecc Changelog Updates (#630)
* changelog notice

* v123

* v123
2018-01-15 12:09:38 -05:00
kennethreitz 23ee27792a Update python.gunicorn.sh (#628) 2018-01-10 12:21:39 -05:00
kennethreitz de680016c9 latest python version (3.6.4) (#496)
Update buildpack to latest version of Python.
2018-01-08 12:20:55 -05:00
Josh Friend 646466c4dd Add CPython 3.6.4 (#495) 2018-01-02 08:22:37 -05:00
kennethreitz a2c3aaf817 Mcount pipenv and pip (#492)
* mcount pipenv

* more mcount for pip

* shellcheck compliance

* fix typo

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-12-18 12:49:11 -05:00
Robin Richtsfeld 88d6c93955 Fix some Bash issues (#491) 2017-12-15 09:19:03 -05:00
kennethreitz b261158bf2 Make gunicorn default access log to stdout (#490)
* make gunicorn default access log to stdout

* Update python.gunicorn.sh
2017-12-13 13:12:26 -05:00
kennethreitz 009d0ddbae update changelog (#486)
* fixed the bug for pypy-5.8.0

* changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* python 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* pipfile > requirements.txt

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* check for python_full_version too

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* warn when using an older version of python

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* requirements for anaconda buildpack

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* remove hashes for conda buildpack

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* improvements to pipenv python version detection

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* echo not puts

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* learn more

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* there we go

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* unsupported

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* consistiency

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* be more specific

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* capitalize Pipfile.lock

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* attempt to force color

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* interactive

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* interactive

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* diagnose

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try without -l

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* confirmed env working

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* just -c

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* use latest, to debug

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* no more bash

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try …

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* don't use the git version of pipenv

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* next version

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* comment out force color bits

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* readme

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* more tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* more tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* ellipsis

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* Merge branch 'master' of github.com:heroku/heroku-buildpack-python

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-11-22 05:44:24 -05:00
Josh Friend 17dd42113f Update default python to 3.6.3 (#480) 2017-11-21 19:11:45 -05:00
Johannes Hoppe f767a73515 Fix #398 -- Set explict GDAL and GEOS location (#478)
Set GDAL and GEOS library locaiton explicitly in environment
variables:

*   GDAL_LIBRARY_PATH "/app/.heroku/vendor/lib/libgdal.so"
*   GEOS_LIBRARY_PATH "/app/.heroku/vendor/lib/libgeos_c.so"

Django has to settings with the same name. The setup now works as
described here:
https://devcenter.heroku.com/articles/postgis#geodjango-setup
2017-11-15 16:57:39 -05:00
Josh Friend 2608bf43dd Add CPython 3.6.3 (#479) 2017-11-14 12:24:30 -05:00
kennethreitz 25c5762cb9 pipenv --deploy (#476)
* fixed the bug for pypy-5.8.0

* changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* python 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* pipfile > requirements.txt

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* check for python_full_version too

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* warn when using an older version of python

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* requirements for anaconda buildpack

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* remove hashes for conda buildpack

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* improvements to pipenv python version detection

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* echo not puts

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* learn more

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* there we go

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* unsupported

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* consistiency

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* be more specific

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* capitalize Pipfile.lock

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* attempt to force color

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* interactive

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* interactive

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* diagnose

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try without -l

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* confirmed env working

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* just -c

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* use latest, to debug

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* no more bash

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try …

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* don't use the git version of pipenv

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* next version

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* comment out force color bits

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* readme

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* more tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* more tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* ellipsis

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* pipenv --deploy

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* full version lockfile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-09-26 17:41:51 -04:00
kennethreitz ff223597f3 Upgrades 🔝 (#475)
* fixed the bug for pypy-5.8.0

* changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* python 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* pipfile > requirements.txt

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* check for python_full_version too

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* warn when using an older version of python

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* requirements for anaconda buildpack

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* remove hashes for conda buildpack

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* improvements to pipenv python version detection

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* echo not puts

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* learn more

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* there we go

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* cleanups

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* unsupported

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* consistiency

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* be more specific

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* capitalize Pipfile.lock

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* attempt to force color

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try this

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* interactive

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* interactive

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* diagnose

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try without -l

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* confirmed env working

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* just -c

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* use latest, to debug

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* no more bash

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try …

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* don't use the git version of pipenv

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* next version

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* 2.7.14

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* comment out force color bits

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* readme

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* more tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* more tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* ellipsis

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-09-26 11:42:14 -04:00
kennethreitz 50950c59df Pipenv improvements (#474)
* improvements to pipenv

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* capitalize

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-09-24 23:18:22 -04:00
Johannes Hoppe 9817eb149e Update gdal to version 2.2.1 (#452) 2017-09-08 12:36:53 -04:00
Johannes Hoppe a703d2febe Update proj.4 to version 4.9.3 (#451) 2017-09-08 12:28:05 -04:00
Johannes Hoppe e304405410 Update geos to version 3.6.2 (#450) 2017-09-08 12:20:14 -04:00
kennethreitz 17f992a106 Improvements (#471)
* only do this on heroku-16

* history

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* code comment

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-09-08 12:02:03 -04:00
kennethreitz 24895082d3 update the changelog (#470) 2017-09-08 11:56:35 -04:00
Zach McCormick 002780c2d9 Adding step to copy libjasper to vendor lib directory so that libgdal will load (#449) 2017-09-08 11:43:28 -04:00
Ed Morley df7f8f3507 Skip vendoring libffi/libmemcached on Heroku-16 (#465)
* Add a test for the cryptography (cffi) compile step

Since it's currently untested.

* Skip vendoring libffi/libmemcached on Heroku-16

Unlike for Cedar-14, Heroku-16 comes with these packages pre-installed:
https://github.com/heroku/stack-images/blob/5a341970cfc1f201014262ad64c3b3e47514f663/heroku-16/installed-packages.txt#L111
https://github.com/heroku/stack-images/blob/5a341970cfc1f201014262ad64c3b3e47514f663/heroku-16/installed-packages.txt#L172

As such the build scripts had already been made a no-op on Heroku-16:
https://github.com/heroku/heroku-buildpack-python/blob/fedae5ceda5a42f594012f911c3808dd5dc6fd9e/builds/libraries/vendor/libffi#L6-L9
https://github.com/heroku/heroku-buildpack-python/blob/fedae5ceda5a42f594012f911c3808dd5dc6fd9e/builds/libraries/vendor/libmemcache#L6-L9

...meaning the Heroku-16 archives for them on S3 contain zero files.

However until now, the buildpack was still unnecessarily downloading
and extracting these empty archives - and not just on the first compile
(like on cedar-14), but every compile since the directory check will
never succeed.
2017-09-08 11:27:46 -04:00
Ed Morley 312a468cce Correct changelog entries for v108, v109 and v110 (#469)
Found by diffing the published buildpack archives and looking at the
git log to see what changed. It looks like the v108 entry was
accidentally added in #405, when the release being published there
was actually v107. The setuptools update mentioned there never
happened, since the `SETUPTOOLS_VERSION` variable was found to be
unused and instead removed.
2017-09-06 12:35:17 -04:00
kennethreitz d4b8c2aeda Undo sub_env for pip install, it was a terrible idea (#467)
* fixed the bug for pypy-5.8.0

* update changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* blacklist for old apps

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* only blacklist pythonhome/path

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* updated changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* be more agressive with blacklisting

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* sub_env was a terrible idea

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* changelog update

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-09-05 11:11:59 -04:00
kennethreitz f86e8079b6 Blacklist for old apps (#466)
* fixed the bug for pypy-5.8.0

* update changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* blacklist for old apps

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* only blacklist pythonhome/path

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* updated changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-09-05 10:44:08 -04:00
kennethreitz 36c6f5e388 Update README.md (#464) 2017-09-05 10:02:19 -04:00
kennethreitz 91a65b2984 Update README.md (#463) 2017-09-05 09:59:35 -04:00
kennethreitz 3010070d55 Update README.md (#462)
* Update README.md

* Update README.md

* Update README.md
2017-09-05 09:58:32 -04:00
Ed Morley fedae5ceda Tests: Make assertCaptured test failures easier to debug (#461)
Previously the contents of the file being searched was not output,
making it hard to know how to fix a test so that it would pass.

Before:
```
$ make test-heroku-16
...
testCffi
ASSERT:Expected </tmp/shunit.ayVGAO/tmp/output.6gMs/stdout> to contain <ZZZZZZZ>
testPylibmc
```

After:
```
$ make test-heroku-16
...
testCffi
ASSERT:Expected </tmp/shunit.FXWeuI/tmp/output.7Vfx/stdout> to contain <ZZZZZZZ>
 !     Warning: Your application is missing a Procfile. This file tells Heroku how to run your application.
 !     Learn more: https://devcenter.heroku.com/articles/procfile
-----> Installing python-3.6.2
-----> Installing pip
-----> Installing requirements with pip
       Collecting cffi (from -r /tmp/testBoLG0/requirements.txt (line 1))
         Downloading cffi-1.10.0-cp36-cp36m-manylinux1_x86_64.whl (406kB)
       Collecting pycparser (from cffi->-r /tmp/testBoLG0/requirements.txt (line 1))
         Downloading pycparser-2.18.tar.gz (245kB)
       Installing collected packages: pycparser, cffi
         Running setup.py install for pycparser: started
           Running setup.py install for pycparser: finished with status 'done'
       Successfully installed cffi-1.10.0 pycparser-2.18

testPylibmc
```
2017-09-05 09:43:17 -04:00
Ed Morley 4212e06309 NLTK support: Fix passing of multiple corpora identifiers (#460)
* NLTK support: Update test to use multiple corpora

So that the incorrect handling of multiple IDs seen in #444 would
have been caught.

Also switches to some of the smaller corpora, to reduce time spent
downloading during tests (see sizes on http://www.nltk.org/nltk_data/).

* NLTK support: Fix passing of multiple corpora identifiers

As part of fixing the shellcheck warnigns in #438, double quotes had
been placed around `$nltk_packages` passed to the `nltk.downloader`,
which causes multiple identifiers to be treated as though it were just
one identifier that contains spaces.

The docs for the shellcheck warning in question recommend using arrays
if the intended behaviour really is to split on spaces:
https://github.com/koalaman/shellcheck/wiki/SC2086#exceptions

As such, `readarray` has been used, which is present in bash >=4.
The `[*]` array form is used in the log message, to prevent shellcheck
warning SC2145, whereas `[@]` is used when passed to `nltk.downloader`
to ensure the array elements are unpacked as required.

Note: Both before and after this fix, using anything but unix line
endings in `nltk.txt` will also cause breakage.
2017-09-05 09:32:04 -04:00
kennethreitz fd360bda14 Update local commits (#459)
* fixed the bug for pypy-5.8.0

* update changelog

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-31 13:41:45 -04:00
kennethreitz 4723abb896 Pipenv Updates (#458)
* fixed the bug for pypy-5.8.0

* update pipenv support

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-31 13:18:26 -04:00
kennethreitz 155b5eecb9 Grep bug fix (#456)
* fixed the bug for pypy-5.8.0

* changelog entry

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* use std-lib sub-env

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* let's see if this cleans things up

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* try v7 of stdlib

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* use new sub_env

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* set_env

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* set_default_env

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* v8 of stdlib

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* v112

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* oops (merge bug)

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* final merge error resolve

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* final final fix for merge conflict

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-28 13:41:32 -04:00
kennethreitz 845635d667 Changelog (#454)
* fixed the bug for pypy-5.8.0

* changelog entry

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-24 17:28:25 -04:00
Samuel Spencer 0c26eae214 Allow environment variables during pip install, fixes #416 (#417)
* Allow environment variables during pip install, fixes #416

* shift sub-env command, fix typo

* bash check thingy fixed
2017-08-12 02:55:15 -04:00
Jeremy Morrell 325a3165e4 Remove leading zeros from WEB_CONCURRENCY (#446)
* Remove leading zeros from `WEB_CONCURRENCY`

* fix DYNO_RAM (from node buildpack)

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-10 14:42:45 -04:00
Ed Morley bf378916af Speed up the multi-stage Travis run (#443)
Reduces the impact on Travis runtime caused by #438, by:
* Making the shellcheck job run on the container infra (`sudo: false`)
  which has faster boot times.
* Running the heroku-16 and cedar-14 stack tests in parallel, since
  previously they were separate stages (which are run in series by
  design).

Reduces Travis end-to-end time from ~10 minutes to ~6 minutes.
2017-08-10 14:29:15 -04:00
Ed Morley c029e44dc8 Improve UX when clearing cache due to the stack changing (#442)
* Test that the cache is invalidated when the stack changes

* Improve UX when clearing cache due to the stack changing

Now outputs a message informing that the cache was cleared, and
clears the cache first to avoid a redundant message about removing
an old Python version.
2017-08-07 21:23:23 -04:00
kennethreitz f74d4db8c5 Shellcheck Compliance (#438)
* fixed the bug for pypy-5.8.0

* enable shellcheck in makefile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* make compile script shellcheck compatible

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* let's see what this says

* fix pip installation

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck detect script

* shellcheck release

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck test-compile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck warnings/utils

* updated makefile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck collectstatic

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck cryptography

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck eggpath fixes

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck gdal

* shellcheck goes-libs

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck mercurial

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* nltk shellcheck

* shellcheck pip-install

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck pip-uninstall

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck pipenv

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck pylibmc

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* shellcheck python

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* update makefile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* final update to makefile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* fix tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* actually fix the tests

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* update pipenv-python-version

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* requested fixes

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* update spellcheck sources

* attempted fix for shell globbing

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* further attempted fix

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* switch nltk styling

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* no more need for temp app for installing pip

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* attempt at staged build for shellcheck

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* attempted fix of travis file

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* reorder travis file

* add shellcheck to install

* make things clearer in travis file

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* better travis file

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* attempt at better travis file

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* better travis file

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-03 17:36:23 -04:00
kennethreitz 2512694df9 Geos tests (#437)
* fixed the bug for pypy-5.8.0

* cleanup makefile

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* allow builds to happen when capitalization is used

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* restore behavior

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

* make makefile default to heroku-16

* test geos libraries

Signed-off-by: Kenneth Reitz <me@kennethreitz.org>
2017-08-02 19:59:44 -04:00
Johannes Hoppe f289984061 Update GDAL version to 1.11.5 (#432)
* Update GDAL version to 1.11.5

Update GDAL to latest bugfix release, see
http://trac.osgeo.org/gdal/wiki/Release/1.11.5-News

* Use pushd and popd in favor of cd
2017-08-01 14:33:23 -04:00
kennethreitz 1d37749ec1 fixed the bug for pypy-5.8.0 (#431) 2017-07-31 19:27:48 -04:00
Josh Friend da13bf1f3d Add pypy2-5.8.0 (#430) 2017-07-31 18:46:43 -04:00
Ed Morley 78767e7199 Exclude Python's test suite from generated Python archives (#425)
This copies the official Docker Python images approach of stripping
the Python test suite after building from source.

For Python 3.6.2 this reduces the output from 184MB to 121MB and
removes the following directories:
```
.heroku/python/lib/python3.6/tkinter/test
.heroku/python/lib/python3.6/ctypes/test
.heroku/python/lib/python3.6/unittest/test
.heroku/python/lib/python3.6/distutils/tests
.heroku/python/lib/python3.6/sqlite3/test
.heroku/python/lib/python3.6/lib2to3/tests
.heroku/python/lib/python3.6/test
```

For Python 2.7.13 this reduces the output from 127MB to 91MB and
removes the following directories:
```
.heroku/python/lib/python2.7/ctypes/test
.heroku/python/lib/python2.7/unittest/test
.heroku/python/lib/python2.7/distutils/tests
.heroku/python/lib/python2.7/bsddb/test
.heroku/python/lib/python2.7/lib-tk/test
.heroku/python/lib/python2.7/sqlite3/test
.heroku/python/lib/python2.7/lib2to3/tests
.heroku/python/lib/python2.7/json/tests
.heroku/python/lib/python2.7/email/test
.heroku/python/lib/python2.7/test
```

Fixes #424.
2017-07-17 13:00:47 -04:00
kennethreitz 194932889d Python 3.6.2 (#423)
* pypy3-5.8.0

* updated cpython to 3.6.2

* update README to reflect new Python version
2017-07-17 12:35:26 -04:00
Josh Friend 4293ec5564 Add CPython 3.6.2 (#422) 2017-07-17 11:48:05 -04:00
kennethreitz 57baab9f68 Update README.md (#415) 2017-06-20 10:43:51 -07:00
kennethreitz a7c20eea42 Python 3 default for buildpack (#409)
* update default python to 3.6.1

* v110

* nltk python2
2017-06-20 09:14:01 -07:00
kennethreitz 0a4cc2c476 pypy3-5.8.0 (#414) 2017-06-15 15:54:40 -04:00
Ed Morley cbb718bb8b Fix pip uninstall by moving it prior to pip install (#413)
The pip-uninstall step stopped working when it was moved to after
the pip-install step in f27a84e.

This regression was temporarily fixed by part of #397, however that
PR was reverted in #404.

Adds a test to hopefully catch any future regressions :-)

Fixes #393.
2017-06-14 17:15:52 -04:00
kennethreitz db95cdd3f3 new pylibmc test (#408) 2017-06-05 13:47:48 -04:00
kennethreitz 04f3ddbc86 updates (#407)
* silently use sp-grep

* history

* update license
2017-06-05 13:34:15 -04:00
kennethreitz f06f5676e8 silently use sp-grep (#406) 2017-06-05 13:31:57 -04:00
kennethreitz c8c8995d70 Next version (#405)
* python 3.5.3

* v108

* new setuptools version

* removed unneeded variable
2017-06-03 17:51:44 -04:00
kennethreitz 4ee3baaded Revert "Don't install packages that could mess packaging up" (#404)
* Revert "Fix pyyaml (#402)"

This reverts commit ff94908505.

* Revert "Don't install packages that could mess packaging up (#397)"

This reverts commit 5496c02f9f.
2017-06-03 17:36:19 -04:00
kennethreitz ff94908505 Fix pyyaml (#402)
* Revert "use pkg_resources to check for distributions (#395)"

This reverts commit 9b185f99d5.

* use sp-grep for django detection

* sp-grep

* fix setuptools script
2017-06-02 15:23:05 -04:00
kennethreitz 5496c02f9f Don't install packages that could mess packaging up (#397)
* updated changelog

* remove setuptools sanity check

* update changelog

* pip-clean

* changelog note

* refactor codebase to improve package name detection

* fix version string

* cleanup

* add messaging, improve execution

* do uninstall first
2017-05-30 20:03:57 -04:00
Ed Morley 8d6d14b671 Update to bob-builder v0.0.13 (#399)
The recent fixes on bob-builder master have now been released.
2017-05-30 19:50:05 -04:00
kennethreitz 98dc586a99 Setuptools (#396)
* updated changelog

* remove setuptools sanity check
2017-05-30 11:36:10 -04:00
David Lord 9b185f99d5 use pkg_resources to check for distributions (#395)
more accurate than parsing requirements.txt
fixes #359
2017-05-30 11:05:33 -04:00
kennethreitz e8a79bbda5 fix for heroku ci (#392)
* attempted fix

* added a comment

* fixes

* improved changelog
2017-05-26 07:22:52 -07:00
Ed Morley e621ff4d5e Improve the workflow for generating binaries for Heroku-16 (#387)
* Updates bob-builder to a version that clears out the previous
  build directory, which prevents the stale files seen in #379.
* Adds a `buildenv-heroku-16` Make command to simplify the
  building and use of the Heroku-16 binary build environment.
* Sets `S3_BUCKET` and `S3_PREFIX` in the Docker image, to save
  having to do so manually each time.
* Removes the duplication of the bob-builder dependency between
  `Dockerfile` and `requirements.txt`.
* Disables the pip version check during Docker build, to avoid the
  noisy stderr warning about Ubuntu 16.04 pip being older (v8.1.1).
* Adds a `.dockerignore` to speed up the Docker build, by reducing
  the build context transferred to the daemon from 60MB to 2MB.
* Applies some Dockerfile best practices like disabling/removing
  cached files (since layer invalidation makes caching pointless).
2017-05-25 11:55:57 -07:00
Ed Morley 7a579e4eb7 Make assertCapturedSuccess display stdout if stderr was empty (#390)
In cases where there is no stderr there was previously no output,
which made it hard to find the cause. The assertion messages have
also been adjusted to remove the repetition (shunit2 already outputs
expected vs actual itself).

Before:
```
testPipenv
ASSERT:Expected captured exit code to be 0; was <2> expected:<0> but was:<2>
testPipenvVersion
```

After:
```
testPipenv
ASSERT:Captured exit code - expected:<0> but was:<2>
 !     Warning: Your application is missing a Procfile. This file tells Heroku how to run your application.
 !     Learn more: https://devcenter.heroku.com/articles/procfile
-----> Installing python-2.7.13
-----> Installing pip
-----> Generating 'requirements.txt' with pipenv

testPipenvVersion
```

Fixes #389.
2017-05-25 11:46:09 -07:00
kennethreitz a1ed1d7b42 Faster pipenv (#385)
* skip pip install for pipenv

* better

* improvements

* indent

* chmod +x

* export

* skip uninstall too

* pip freeze

* Revert "skip uninstall too"

This reverts commit faac96f62004f78c3d27a92cd865954fc7a3a53d.

* better comments

* redirect stderr to stdout
2017-05-25 10:55:01 -07:00
kennethreitz 9157111d44 Update README.md (#384) 2017-05-11 15:02:16 -04:00
Kaelan Thijs Fouwels 48f67ac5a6 Add runtime for python3 version of pypy 3.7.1 (#383) 2017-05-11 12:57:47 -04:00
kennethreitz f6d63ea53d chmod formula (#382) 2017-05-11 12:42:47 -04:00
Josh Friend 668219ae59 Add PyPy-5.7.1 (#370) 2017-05-11 12:10:13 -04:00
Ed Morley 18c404f72d Restore the build cache prior to running bin/pre_compile (#372)
So that any changes made to `.heroku/` within pre_compile (such as
installing additional libraries required for the later pip install) are
not clobbered by the cache being copied over afterwards.

Fixes #320.
2017-05-05 15:54:59 -04:00
kennethreitz 84f2fb5396 update python.gunicorn.sh to WEB_CONCURRENCY.sh (#373)
* update python.gunicorn.sh to WEB_CONCURRENCY.sh

* don't remove WEB_CONCURRENCY for prefixed 0s

* split gunicorn functionality into its own file

* cleanup comments

* fix var ordering

* add retry to curl

* use proper url for buildpack stdlib
2017-05-05 14:28:00 -04:00
kennethreitz d39b8c19b2 basics of metrics (#374)
* basics of metrics

* pin to stdlib v2

* measure python installation size

* lots of additional metrics

* add old output methods

* $

* empty commit
2017-05-03 14:15:03 -04:00
kennethreitz 9a24c9d17d don't unset DYNO (we're running on Heroku) (#371)
* don't unset DYNO (we're running on Heroku)

Fixes #280

* blacklist STACK env var for subshells
2017-04-25 10:27:57 -04:00
kennethreitz 29abb059b6 Merge branch 'master' of github.com:heroku/heroku-buildpack-python 2017-03-23 18:22:15 -04:00
kennethreitz eb056bc58d python-3.6.1 2017-03-23 18:22:07 -04:00
kennethreitz 70a152bd46 oops 2017-03-23 18:19:45 -04:00
kennethreitz 0b580d997e python 3.6.1 2017-03-23 18:16:40 -04:00
kennethreitz 9f63582a23 new pypy 2017-03-23 16:12:53 -04:00
kennethreitz 5f33811357 link needed 2017-03-23 16:05:42 -04:00
kennethreitz 3bd0a0e7cc no longer needed 2017-03-23 16:03:00 -04:00
kennethreitz b7c3cdb607 pypy-5.7.0 2017-03-23 15:57:32 -04:00
227 changed files with 3744 additions and 20808 deletions
+1
View File
@@ -0,0 +1 @@
.git/
+1
View File
@@ -0,0 +1 @@
* @heroku/languages
+8
View File
@@ -0,0 +1,8 @@
<!-- Hi and welcome to the Heroku Python buildpack repository!
If you meant to open a PR against a fork instead of upstream, please adjust the base branch:
https://help.github.com/articles/changing-the-base-branch-of-a-pull-request/
Otherwise thank you in advance for your Pull Request - just remember to
include as much information as possible to help the reviewers :-)
-->
+14
View File
@@ -0,0 +1,14 @@
name: Check Changelog
on:
pull_request:
types: [opened, reopened, edited, synchronize]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Check that CHANGELOG is touched
run: |
cat $GITHUB_EVENT_PATH | jq .pull_request.title | grep -i '\[\(\(changelog skip\)\|\(ci skip\)\)\]' || git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md
+11
View File
@@ -1,3 +1,14 @@
*.pyc
site
.DS_Store
/.envrc
repos/*
#Venv
buildpack/*
builds/dockerenv.staging*
builds/dockerenv.production
test/scratch
+7
View File
@@ -0,0 +1,7 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
+42 -7
View File
@@ -1,9 +1,44 @@
language: bash
language: ruby
dist: bionic
sudo: required
services:
- docker
# install: docker pull heroku/cedar:14
script: ./tests.sh
branches:
only:
- master
rvm:
- 2.6.6
before_script:
- gem install bundler -v 1.16.2
script:
- docker build --pull --tag travis-build-cedar-14 --file $(pwd)/builds/cedar-14.Dockerfile .
- docker run --rm -e "STACK=cedar-14" travis-build-cedar-14 bash $TESTFOLDER
- docker build --pull --tag travis-build-heroku-16 --file $(pwd)/builds/heroku-16.Dockerfile .
- docker run --rm -e "STACK=heroku-16" travis-build-heroku-16 bash $TESTFOLDER
- docker build --pull --tag travis-build-heroku-18 --file $(pwd)/builds/heroku-18.Dockerfile .
- docker run --rm -e "STACK=heroku-18" travis-build-heroku-18 bash $TESTFOLDER
jobs:
include:
- stage: Bash linting (shellcheck)
sudo: false
script: make check
- stage: Hatchet Integration
if: env(TRAVIS_PULL_REQUEST_SLUG) = env(TRAVIS_REPO_SLUG)
name: Run Hatchet
script:
- bundle exec hatchet ci:setup
- PARALLEL_SPLIT_TEST_PROCESSES=11 bundle exec parallel_split_test spec/hatchet/
env:
- STACK=heroku-16
- STACK=cedar-14
matrix:
- TESTFOLDER=test/run-deps
- TESTFOLDER=test/run-versions
- TESTFOLDER=test/run-features
global:
- HATCHET_RETRIES=3
- IS_RUNNING_ON_CI=true
- HATCHET_APP_LIMIT=80
- HATCHET_DEPLOY_STRATEGY=git
- secure: yjtlPE5FbVxTKnjUy/tZUBgSEf4qADD3QOxtgziuid73S0U/1IEXlMGFULsQzIjtlHKmHeywZqpVVEpthIH4RuT7uoX1Pb7SSM/g0T8fT3VoEFbFK1uYl0oZQbUS4Klxv9tPiumj8if3m6ULEGIz1X0wZcMOC0tMLwVCnwmap0E=
- secure: ZeFTHWwnpIKE9nAqs88ocmiQh7bKce84lilGm5J23nf3N6V4wNyLwqlkvsM008WGBCaOg9AUx7ZunasT0ANsR5gLP3eV2UUg7ILdRgV2Gy13eNRFheC4PHdN92RqQ3aKoqlIv2K999xlhVjod0NzhkQQXB6PddfQINbuU7ks6As=
+338
View File
@@ -1,5 +1,343 @@
# Python Buildpack Changelog
# Master
# 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)
- Python 3.7.5 and 3.8.0 now available on Heroku 18 and 16.
- Add support for Python 3.8 branch
- Sqlite3 Update:
- Test Improvements
- Add support for staging binary testing
# 157 (2019-09-18)
- Typo fixes
# 156 (2019-09-12)
- Python 3.6.9 and 3.7.4 now available.
- Move get-pip utility to S3
- Build utility and documentation updates
- Bump Hatchet tests to point at new default python version.
# 155 (2019-08-22)
add docs and make target for heroku-18 bob builds
# 154 (2019-07-17)
Fix python 3.5.7 formula actually building 3.7.2
# 153 (2019-06-21)
Hotfix for broken heroku-16 deploys
# 152 (2019-04-04)
Python 3.7.3 now available.
# 151 (2019-03-21)
Python 3.5.7 and 3.4.10 now available on all Heroku stacks.
# 150 (2019-03-13)
Python 2.7.16 now available on all Heroku stacks.
# 149 (2019-03-04)
Hotfix for broken Cedar 14 deploys
# 148 (2019-02-21)
No user facing changes, improving internal metrics
# 147 (2019-02-07)
Python 3.7.2 and 3.6.8 now available on all Heroku stacks.
# 146 (2018-11-11)
Python 3.7.1, 3.6.7, 3.5.6 and 3.4.9 now available on all Heroku stacks.
# 145 (2018-11-08)
Testing and tooling expanded to better support new runtimes
# 144 (2018-10-10)
Switch to cautious upgrade for Pipenv install to ensure the pinned pip version
is used with Pipenv
# 143 (2018-10-09)
Add support for detecting SLUGIFY_USES_TEXT_UNIDECODE, which is required to
install Apache Airflow version 1.10 or higher.
# 142 (2018-10-08)
Improvements to Python install messaging
# 139, 140, 141
No user-facing changes, documenting for version clarity
# 138 (2018-08-01)
Use stack image SQLite3 instead of vendoring
# 137 (2018-07-17)
Prevent 3.7.0 from appearing as unsupported in buildpack messaging.
# 136 (2018-06-28)
Upgrade to 3.6.6 and support 3.7.0 on all runtimes.
# 135 (2018-05-29)
Upgrade Pipenv to v2018.5.18.
# 134 (2018-05-02)
Default to 3.6.5, bugfixes.
# 133
Fixes for Pip 10 release.
# 132
Improve pip installation, with the release of v9.0.2.
# 131
Fix bug with pip.
# 130
Better upgrade strategy for pip.
# 129
Don't upgrade pip (from v128).
# 128
Upgrade pip, pin to Pipenv v11.8.2.
# 127
Pin to Pipenv v11.7.1.
# 126
Bugfixes.
# 125
Bugfixes.
# 124
Update buildpack to automatically install `[dev-packages]` during Heroku CI Pipenv builds.
- Skip installs if Pipfile.lock hasn't changed, and uninstall stale dependencies with Pipenv.
- Set `PYTHONPATH` during collectstatic runs.
- No longer warn if there is no `Procfile`.
- Update Pipenv's "3.6" runtime specifier to point to "3.6.4".
# 123
Update gunicorn `init.d` script to allow overrides.
# 122
Update default Python to v3.6.4.
# 121
Update default Python to v3.6.3.
# 120
Use `$ pipenv --deploy`.
# 119
Improvements to Pipenv support, warning on unsupported Python versions.
- We now warn when a user is not using latest 2.x or 3.x Python.
- Heroku now supports `[requires]` `python_full_version` in addition to `python_version`.
# 118
Improvements to Pipenv support.
# 117
Bug fix.
# 116
Vendoring improvements.
- Geos libraries should work on Heroku-16 now.
- The libffi/libmemcached vendoring step is now skipped on Heroku-16 (since they are installed in the base image).
# 115
Revert a pull request.
- No longer using `sub_env` for `pip install` step.
# 114
- Bugfixes.
Blacklisting `PYTHONHOME` and `PYTHONPATH` for older apps. Upgrades to nltk support.
# 113
Updates to Pipenv support.
# 112
Bugfix.
- Fixed grep output bug.
# 111
Linting, bugfixes.
# 110
Update default Python to 3.6.2.
# 109
Update Default Python to 3.6.1, bugfixes.
- Fixed automatic pip uninstall of dependencies removed from requirements.txt.
# 108
Fix output for collectstatic step.
# 107
Bugfix for C dependency installation.
# 106
Don't install packages that could mess up packaging.
- The Python buildpack will automatically remove `six`, `pyparsing`, `appdirs`,
`setuptools`, and `distribute` from a `requirements.txt` file now, as these
packages are provided by the Python buildpack.
# 105
Improvements to output messaging.
# 104
General improvements.
- Fix for Heroku CI.
- Use `pkg_resources` to check if a distribution is installed instead of
parsing `requirements.txt`. ([#395][395])
[395]: https://github.com/heroku/heroku-buildpack-python/pull/395
## 103
Bug fixes and improvements.
- Fix for Pipenv.
- Fix for Heroku CI.
- Improve handling of WEB_CONCURRENCY when using multiple buildpacks.
- Adjust environment variables set during the build to more closely match those in the dyno environment (DYNO is now available, STACK is not).
- Restore the build cache prior to running bin/pre_compile.
## 102
Buildpack code cleanup.
-11
View File
@@ -1,11 +0,0 @@
FROM heroku/heroku:16-build
WORKDIR /app
ENV WORKSPACE_DIR=/app/builds
RUN apt-get update && apt-get install -y python-pip
# Install bob-builder application
RUN pip install bob-builder==0.0.5
COPY . /app
+8
View File
@@ -0,0 +1,8 @@
source "https://rubygems.org"
gem "rspec"
gem "heroku_hatchet"
gem "rspec-retry"
gem "rake"
gem "parallel_split_test"
+78
View File
@@ -0,0 +1,78 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (6.0.3.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
concurrent-ruby (1.1.6)
diff-lcs (1.3)
erubis (2.7.0)
excon (0.73.0)
heroics (0.0.25)
erubis (~> 2.0)
excon
moneta
multi_json (>= 1.9.2)
heroku_hatchet (5.0.3)
excon (~> 0)
minitest-retry (~> 0.1.9)
platform-api (~> 2)
repl_runner (~> 0.0.3)
rrrretry (~> 1)
thor (~> 0)
threaded (~> 0)
i18n (1.8.2)
concurrent-ruby (~> 1.0)
minitest (5.14.1)
minitest-retry (0.1.9)
minitest (>= 5.0)
moneta (1.0.0)
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)
heroics (~> 0.0.25)
moneta (~> 1.0.0)
rake (12.3.3)
repl_runner (0.0.3)
activesupport
rrrretry (1.0.0)
rspec (3.8.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-core (3.8.0)
rspec-support (~> 3.8.0)
rspec-expectations (3.8.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-retry (0.6.1)
rspec-core (> 3.3)
rspec-support (3.8.0)
thor (0.20.3)
thread_safe (0.3.6)
threaded (0.0.4)
tzinfo (1.2.7)
thread_safe (~> 0.1)
zeitwerk (2.3.0)
PLATFORMS
ruby
DEPENDENCIES
heroku_hatchet
parallel_split_test
rake
rspec
rspec-retry
BUNDLED WITH
2.1.4
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License:
Copyright (C) 2016 Heroku, Inc.
Copyright (C) 2017 Heroku, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+40 -4
View File
@@ -1,19 +1,55 @@
# These targets are not files
.PHONY: tests
test: test-cedar-14
test: test-heroku-18 test-heroku-16 test-cedar-14
check:
@shellcheck -x bin/compile bin/detect bin/release bin/test-compile bin/utils bin/warnings bin/default_pythons
@shellcheck -x bin/steps/collectstatic bin/steps/eggpath-fix bin/steps/eggpath-fix2 bin/steps/gdal bin/steps/geo-libs bin/steps/mercurial bin/steps/nltk bin/steps/pip-install bin/steps/pip-uninstall bin/steps/pipenv bin/steps/pipenv-python-version bin/steps/pylibmc bin/steps/python
@shellcheck -x bin/steps/hooks/*
test-cedar-14:
@echo "Running tests in docker (cedar-14)..."
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=cedar-14" heroku/cedar:14 bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run;'
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=cedar-14" heroku/cedar:14 bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run-deps; test/run-features; test/run-versions;'
@echo ""
test-heroku-16:
@echo "Running tests in docker (heroku-16)..."
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=heroku-16" heroku/heroku:16-build bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run;'
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=heroku-16" heroku/heroku:16-build bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run-deps; test/run-features; test/run-versions;'
@echo ""
test-heroku-18:
@echo "Running tests in docker (heroku-18)..."
@docker run -v $(shell pwd):/buildpack:ro --rm -it -e "STACK=heroku-18" heroku/heroku:18-build bash -c 'cp -r /buildpack /buildpack_test; cd /buildpack_test/; test/run-deps; test/run-features; test/run-versions;'
@echo ""
buildenv-heroku-16:
@echo "Creating build environment (heroku-16)..."
@echo
@docker build --pull -f $(shell pwd)/builds/heroku-16.Dockerfile -t python-buildenv-heroku-16 .
@echo
@echo "Usage..."
@echo
@echo " $$ export AWS_ACCESS_KEY_ID=foo AWS_SECRET_ACCESS_KEY=bar # Optional unless deploying"
@echo " $$ bob build runtimes/python-2.7.13"
@echo " $$ bob deploy runtimes/python-2.7.13"
@echo
@docker run -it --rm python-buildenv-heroku-16
buildenv-heroku-18:
@echo "Creating build environment (heroku-18)..."
@echo
@docker build --pull -f $(shell pwd)/builds/heroku-18.Dockerfile -t python-buildenv-heroku-18 .
@echo
@echo "Usage..."
@echo
@echo " $$ export AWS_ACCESS_KEY_ID=foo AWS_SECRET_ACCESS_KEY=bar # Optional unless deploying"
@echo " $$ bob build runtimes/python-2.7.13"
@echo " $$ bob deploy runtimes/python-2.7.13"
@echo
@docker run -it --rm python-buildenv-heroku-18
tools:
git clone https://github.com/kennethreitz/pip-pop.git
mv pip-pop/bin/* vendor/pip-pop/
rm -fr pip-pop
rm -fr pip-pop
+63 -29
View File
@@ -4,38 +4,55 @@
[![Build Status](https://travis-ci.org/heroku/heroku-buildpack-python.svg?branch=master)](https://travis-ci.org/heroku/heroku-buildpack-python)
This is the official [Heroku buildpack](https://devcenter.heroku.com/articles/buildpacks) for Python apps, powered by [pip](https://pip.pypa.io/) and other excellent software.
This is the official [Heroku buildpack](https://devcenter.heroku.com/articles/buildpacks) for Python apps.
Recommended web frameworks include **Django** and **Flask**. The recommended webserver is **Gunicorn**. There are no restrictions around what software can be used (as long as it's pip-installable). Web processes must bind to `$PORT`, and only the HTTP protocol is permitted for incoming connections.
Recommended web frameworks include **Django** and **Flask**, among others. The recommended webserver is **Gunicorn**. There are no restrictions around what software can be used (as long as it's pip-installable). Web processes must bind to `$PORT`, and only the HTTP protocol is permitted for incoming connections.
Some Python packages with obscure C dependencies (e.g. scipy) are [not compatible](https://devcenter.heroku.com/articles/python-c-deps).
Python packages with C dependencies that are not [available on the stack image](https://devcenter.heroku.com/articles/stack-packages) are generally not supported, unless `manylinux` wheels are provided by the package maintainers (common). For recommended solutions, check out [this article](https://devcenter.heroku.com/articles/python-c-deps) for more information.
See it in Action
----------------
```
$ ls
my-application requirements.txt runtime.txt
Deploying a Python application couldn't be easier:
$ git push heroku master
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 276 bytes | 276.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-3.7.4
remote: -----> Installing pip
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: Collecting flask (from -r /tmp/build_c2c067ef79ff14c9bf1aed6796f9ed1f/requirements.txt (line 1))
remote: Downloading ...
remote: Installing collected packages: Werkzeug, click, MarkupSafe, Jinja2, itsdangerous, flask
remote: Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote:
```
$ ls
Procfile requirements.txt web.py
A `requirements.txt` must be present at the root of your application's repository to deploy.
$ heroku create --buildpack heroku/python
To specify your python version, you also need a `runtime.txt` file - unless you are using the default Python runtime version.
$ git push heroku master
...
-----> Python app detected
-----> Installing python-2.7.13
$ pip install -r requirements.txt
Collecting requests (from -r requirements.txt (line 1))
Downloading requests-2.12.4-py2.py3-none-any.whl (576KB)
Installing collected packages: requests
Successfully installed requests-2.12.4
-----> Discovering process types
Procfile declares types -> (none)
Current default Python Runtime: Python 3.6.9
A `requirements.txt` file must be present at the root of your application's repository.
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`.
You can also specify the latest production release of this buildpack for upcoming builds of an existing application:
Specify a Buildpack Version
---------------------------
You can specify the latest production release of this buildpack for upcoming builds of an existing application:
$ heroku buildpacks:set heroku/python
@@ -43,14 +60,31 @@ You can also specify the latest production release of this buildpack for upcomin
Specify a Python Runtime
------------------------
Specific versions of the Python runtime can be specified with a `runtime.txt` file:
Supported runtime options include:
$ cat runtime.txt
python-3.6.0
- `python-3.8.4`
- `python-3.7.8`
- `python-3.6.11`
- `python-2.7.18`
Runtime options include:
## Tests
- `python-2.7.13`
- `python-3.6.0`
- `pypy-5.6.0` (unsupported, experimental)
- `pypy3-5.5.0` (unsupported, experimental)
The buildpack tests use [Docker](https://www.docker.com/) to simulate
Heroku's [stack images.](https://devcenter.heroku.com/articles/stack)
To run the test suite:
```
make test
```
Or to test in a particular stack:
```
make test-heroku-18
make test-heroku-16
```
The tests are run via the vendored
[shunit2](https://github.com/kward/shunit2)
test framework.
+1
View File
@@ -0,0 +1 @@
require 'hatchet/tasks'
+292 -113
View File
@@ -15,207 +15,386 @@
# Fail fast and fail hard.
set -eo pipefail
# Boostrap the Buildpack Standard Library.
export BPLOG_PREFIX="buildpack.python"
export BUILDPACK_LOG_FILE=${BUILDPACK_LOG_FILE:-/dev/null}
[ "$BUILDPACK_XTRACE" ] && set -o xtrace
# Prepend proper path for virtualenv hackery. This will be deprecated soon.
# Prepend proper path for old-school virtualenv hackery.
# This may not be neccessary.
export PATH=:/usr/local/bin:$PATH
# Paths.
BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
ROOT_DIR=$(dirname $BIN_DIR)
# Setup Path variables, for later use in the Buildpack.
BIN_DIR=$(cd "$(dirname "$0")"; pwd) # absolute path
ROOT_DIR=$(dirname "$BIN_DIR")
BUILD_DIR=$1
CACHE_DIR=$2
ENV_DIR=$3
# Python defaults
DEFAULT_PYTHON_VERSION="python-2.7.13"
DEFAULT_PYTHON_STACK="cedar-14"
PYTHON_EXE="/app/.heroku/python/bin/python"
PIP_VERSION="9.0.1"
SETUPTOOLS_VERSION="32.1.0"
# Export Path variables, for use in sub-scripts.
export BUILD_DIR CACHE_DIR ENV_DIR
# Common Problem Warnings
export WARNINGS_LOG=$(mktemp)
# Set the Buildpack's internet target for downloading Python distributions.
# The user can provide BUILDPACK_VENDOR_URL to specify a custom target.
# Note: this is designed for non-Heroku use, as it does not use the user-provided
# environment variable mechanism (the ENV_DIR).
VENDOR_URL="https://lang-python.s3.amazonaws.com/$STACK"
if [[ -n ${BUILDPACK_VENDOR_URL:-} ]]; then
VENDOR_URL="$BUILDPACK_VENDOR_URL"
elif [[ -n ${USE_STAGING_BINARIES} ]]; then
VENDOR_URL="$USE_STAGING_BINARIES/$STACK"
fi
export VENDOR_URL
# Default Python Versions
# shellcheck source=bin/default_pythons
source "$BIN_DIR/default_pythons"
# Supported Python Branches
PY38="python-3.8"
PY37="python-3.7"
PY36="python-3.6"
PY35="python-3.5"
PY34="python-3.4"
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)?
DEFAULT_PYTHON_STACK="cedar-14"
# If pip doesn't match this version (the version we install), run the installer.
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 PY37 PY36 PY35 PY27 PY34
# Common Problem Warnings:
# This section creates a temporary file in which to stick the output of `pip install`.
# The `warnings` subscript then greps through this for common problems and guides
# the user towards resolution of known issues.
WARNINGS_LOG=$(mktemp)
export WARNINGS_LOG
export RECOMMENDED_PYTHON_VERSION=$DEFAULT_PYTHON_VERSION
# Setup vendored tools and pip-pop (pip-diff)
# The buildpack ships with a few executable tools (e.g. pip-grep, etc).
# This installs them into the path, so we can execute them directly.
export PATH=$PATH:$ROOT_DIR/vendor/:$ROOT_DIR/vendor/pip-pop
# Support Anvil Build_IDs
# Set environment variables if they weren't set by the platform.
# Note: this is legacy, for a deprecated build system known as Anvil.
# This can likely be removed, with caution.
[ ! "$SLUG_ID" ] && SLUG_ID="defaultslug"
[ ! "$REQUEST_ID" ] && REQUEST_ID=$SLUG_ID
[ ! "$STACK" ] && STACK=$DEFAULT_PYTHON_STACK
# Sanitizing environment variables.
# Sanitize externally-provided environment variables:
# The following environment variables are either problematic or simply unneccessary
# for the buildpack to have knowledge of, so we unset them, to keep the environment
# as clean and pristine as possible.
unset GIT_DIR PYTHONHOME PYTHONPATH
unset RECEIVE_DATA RUN_KEY BUILD_INFO DEPLOY LOG_TOKEN DYNO
unset RECEIVE_DATA RUN_KEY BUILD_INFO DEPLOY LOG_TOKEN
unset CYTOKINE_LOG_FILE GEM_PATH
# Syntax sugar.
source $BIN_DIR/utils
# Import the utils script, which contains helper functions used throughout the buildpack.
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
# Import collection of warnings.
source $BIN_DIR/warnings
# Import the warnings script, which contains the `pip install` user warning mechanisms
# (mentioned and explained above)
# shellcheck source=bin/warnings
source "$BIN_DIR/warnings"
# we need to put a bunch of symlinks in there later
# Make the directory in which we will create symlinks from the temporary build directory
# to `/app`.
# Symlinks are required, since Python is not a portable installation.
# More on this topic later.
mkdir -p /app/.heroku
# Set up outputs under new context
# This buildpack programatically generates (or simply copies) a number of files for
# buildpack machinery: an export script, and a number of `.profile.d` scripts. This
# section declares the locations of those files and targets.
PROFILE_PATH="$BUILD_DIR/.profile.d/python.sh"
EXPORT_PATH="$BIN_DIR/../export"
GUNICORN_PROFILE_PATH="$BUILD_DIR/.profile.d/python.gunicorn.sh"
WEB_CONCURRENCY_PROFILE_PATH="$BUILD_DIR/.profile.d/WEB_CONCURRENCY.sh"
# We'll need to send these statics to other scripts we `source`.
export BUILD_DIR CACHE_DIR BIN_DIR PROFILE_PATH EXPORT_PATH
# Prepend proper environment variables for Python use.
# Python Environment Variables
# Set Python-specific environment variables, for running Python within the buildpack.
# Notes on each variable included.
# PATH is relatively obvious, we need to be able to execute 'python'.
export PATH=/app/.heroku/python/bin:/app/.heroku/vendor/bin:$PATH
# Tell Python to not buffer it's stdin/stdout.
export PYTHONUNBUFFERED=1
# Set the locale to a well-known and expected standard.
export LANG=en_US.UTF-8
# `~/.heroku/vendor` is an place where the buildpack may stick pre-build binaries for known
# C dependencies (e.g. libmemcached on cedar-14). This section configures Python (GCC, more specifically)
# and pip to automatically include these paths when building binaries.
export C_INCLUDE_PATH=/app/.heroku/vendor/include:/app/.heroku/python/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:/app/.heroku/python/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config:$PKG_CONFIG_PATH
# The Application Code
# --------------------
# Switch to the repo's context.
cd $BUILD_DIR
cd "$BUILD_DIR"
# Warn for lack of Procfile.
if [[ ! -f Procfile ]]; then
puts-warn 'Warning: Your application is missing a Procfile. This file tells Heroku how to run your application.'
puts-warn 'Learn more: https://devcenter.heroku.com/articles/procfile'
fi
# The Cache
# ---------
# Experimental pre_compile hook.
source $BIN_DIR/steps/hooks/pre_compile
# The workflow for the Python Buildpack's cache is as follows:
#
# - `~/.heroku/{known-paths}` are copied from the cache into the slug.
# - The build is executed, modifying `~/.heroku/{known-paths}`.
# - Once the build is complete, `~/.heroku/{known-paths}` is copied back into the cache.
# Sticky runtimes.
if [ -f $CACHE_DIR/.heroku/python-version ]; then
DEFAULT_PYTHON_VERSION=$(cat $CACHE_DIR/.heroku/python-version)
fi
# Stack fallback for non-declared caches.
if [ -f $CACHE_DIR/.heroku/python-stack ]; then
CACHED_PYTHON_STACK=$(cat $CACHE_DIR/.heroku/python-stack)
else
CACHED_PYTHON_STACK=$STACK
fi
# Pipenv Python version support.
source $BIN_DIR/steps/pipenv-python-version
# If no runtime given, assume default version.
if [ ! -f runtime.txt ]; then
echo $DEFAULT_PYTHON_VERSION > runtime.txt
fi
# Prepare the cache.
mkdir -p $CACHE_DIR
# Create the cache directory, if it doesn't exist.
mkdir -p "$CACHE_DIR/.heroku"
# Restore old artifacts from the cache.
mkdir -p .heroku
cp -R $CACHE_DIR/.heroku/python .heroku/ &> /dev/null || true
cp -R $CACHE_DIR/.heroku/python-stack .heroku/ &> /dev/null || true
cp -R $CACHE_DIR/.heroku/python-version .heroku/ &> /dev/null || true
cp -R $CACHE_DIR/.heroku/vendor .heroku/ &> /dev/null || true
if [[ -d $CACHE_DIR/.heroku/src ]]; then
cp -R $CACHE_DIR/.heroku/src .heroku/ &> /dev/null || true
# The Python installation.
cp -R "$CACHE_DIR/.heroku/python" .heroku/ &> /dev/null || true
# A plain text file which contains the current stack being used (used for cache busting).
cp -R "$CACHE_DIR/.heroku/python-stack" .heroku/ &> /dev/null || true
# A plain text file which contains the current python version being used (used for cache busting).
cp -R "$CACHE_DIR/.heroku/python-version" .heroku/ &> /dev/null || true
# A plain text file which contains the current sqlite3 version being used (used for cache busting).
cp -R "$CACHE_DIR/.heroku/python-sqlite3-version" .heroku/ &> /dev/null || true
# Any pre-compiled binaries, provided by the buildpack.
cp -R "$CACHE_DIR/.heroku/vendor" .heroku/ &> /dev/null || true
# "editable" installations of code repositories, via pip or pipenv.
if [[ -d "$CACHE_DIR/.heroku/src" ]]; then
cp -R "$CACHE_DIR/.heroku/src" .heroku/ &> /dev/null || true
fi
# The pre_compile hook. Customers rely on this. Don't remove it.
# This part of the code is used to allow users to customize their build experience
# without forking the buildpack by providing a `bin/pre_compile` script, which gets
# run inline with the buildpack automatically.
mkdir -p $(dirname $PROFILE_PATH)
# shellcheck source=bin/steps/hooks/pre_compile
source "$BIN_DIR/steps/hooks/pre_compile"
# Sticky runtimes. If there was a previous build, and it used a given version of Python,
# continue to use that version of Python in perpituity (warnings will be raised if
# they are outofdate).
if [ -f "$CACHE_DIR/.heroku/python-version" ]; then
DEFAULT_PYTHON_VERSION=$(cat "$CACHE_DIR/.heroku/python-version")
fi
# We didn't always record the stack version. This code is in place because of that.
if [ -f "$CACHE_DIR/.heroku/python-stack" ]; then
CACHED_PYTHON_STACK=$(cat "$CACHE_DIR/.heroku/python-stack")
else
CACHED_PYTHON_STACK=$STACK
fi
export CACHED_PYTHON_STACK
# Pipenv Python version support.
# Detect the version of Python requested from a Pipfile (e.g. python_version or python_full_version).
# Convert it to a runtime.txt file.
# shellcheck source=bin/steps/pipenv-python-version
source "$BIN_DIR/steps/pipenv-python-version"
# If no runtime was provided by the user, assume the default Python runtime version.
if [ ! -f runtime.txt ]; then
echo "$DEFAULT_PYTHON_VERSION" > runtime.txt
fi
# Create the directory for .profile.d, if it doesn't exist.
mkdir -p "$(dirname "$PROFILE_PATH")"
# Create the directory for editable source code installation, if it doesn't exist.
mkdir -p /app/.heroku/src
# On Heroku CI, builds happen in `/app`. Otherwise, on the Heroku platform,
# they occur in a temp directory. Beacuse Python is not portable, we must create
# symlinks to emulate that we are operating in `/app` during the build process.
# This is (hopefully obviously) because apps end up running from `/app` in production.
if [[ $BUILD_DIR != '/app' ]]; then
# python expects to reside in /app, so set up symlinks
# we will not remove these later so subsequent buildpacks can still invoke it
ln -nsf $BUILD_DIR/.heroku/python /app/.heroku/python
ln -nsf $BUILD_DIR/.heroku/vendor /app/.heroku/vendor
ln -nsf "$BUILD_DIR/.heroku/python" /app/.heroku/python
ln -nsf "$BUILD_DIR/.heroku/vendor" /app/.heroku/vendor
# Note: .heroku/src is copied in later.
fi
# Install Python.
source $BIN_DIR/steps/python
# Download / Install Python, from pre-build binaries available on Amazon S3.
# This step also bootstraps pip / setuptools.
(( start=$(nowms) ))
# shellcheck source=bin/steps/python
source "$BIN_DIR/steps/python"
mtime "python.install.time" "${start}"
# Sanity check for setuptools/distribute.
source $BIN_DIR/steps/setuptools
# Pipenv support.
source $BIN_DIR/steps/pipenv
# Install Pipenv dependencies, if a Pipfile was provided.
# shellcheck source=bin/steps/pipenv
source "$BIN_DIR/steps/pipenv"
# If no requirements.txt file given, assume `setup.py develop` is intended.
# This allows for people to ship a setup.py application to Heroku
if [ ! -f requirements.txt ] && [ ! -f Pipfile ]; then
echo "-e ." > requirements.txt
fi
# Fix egg-links.
source $BIN_DIR/steps/eggpath-fix
# Because we're installing things into a different path than we're running them (temp dir vs app dir),
# We must re-write all of Python's eggpath links to target the proper directory.
# shellcheck source=bin/steps/eggpath-fix
source "$BIN_DIR/steps/eggpath-fix"
# Mercurial support.
source $BIN_DIR/steps/mercurial
# If a customer appears to be using mercurial for dependency resolution, we install it first.
# Note: this only applies to pip, not pipenv. This can likely be removed, over time. Measure it first.
# shellcheck source=bin/steps/mercurial
source "$BIN_DIR/steps/mercurial"
# Pylibmc support.
source $BIN_DIR/steps/pylibmc
# On cedar-14, libmemcached was not available. The buildpack provides its own version, instead.
# shellcheck source=bin/steps/pylibmc
source "$BIN_DIR/steps/pylibmc"
# Libffi support.
source $BIN_DIR/steps/cryptography
# Support for Geo libraries.
sub-env $BIN_DIR/steps/geo-libs
# Support for Geo libraries. This is deprecated functionality, only functional on cedar-14.
# It is undocumented.
# shellcheck source=bin/steps/geo-libs
sub_env "$BIN_DIR/steps/geo-libs"
# GDAL support.
source $BIN_DIR/steps/gdal
# This is part of the Geo support.
# shellcheck source=bin/steps/gdal
source "$BIN_DIR/steps/gdal"
# Install dependencies with Pip (where the magic happens).
source $BIN_DIR/steps/pip-install
# SQLite3 support.
# This sets up and installs sqlite3 dev headers and the sqlite3 binary but not the
# libsqlite3-0 library since that exists on the stack image.
# Note: This only applies to Python 2.7.15+ and Python 3.6.6+
(( start=$(nowms) ))
# shellcheck source=bin/steps/sqlite3
source "$BIN_DIR/steps/sqlite3"
buildpack_sqlite3_install
mtime "sqlite3.install.time" "${start}"
# Uninstall removed dependencies with Pip.
source $BIN_DIR/steps/pip-uninstall
# pip install
# -----------
# Install dependencies with pip (where the magic happens).
(( start=$(nowms) ))
# shellcheck source=bin/steps/pip-install
source "$BIN_DIR/steps/pip-install"
mtime "pip.install.time" "${start}"
# Support for NLTK corpora.
sub-env $BIN_DIR/steps/nltk
# Note: this may only work on Python 2.7. I don't think many customers use this functionality,
# and it should probably be undocumented.
# (there's an import error on 3.6 that should hopefully be fixed upstream at some point)
(( start=$(nowms) ))
sub_env "$BIN_DIR/steps/nltk"
mtime "nltk.download.time" "${start}"
# Support for editable installations. Here, we are copying pipcreated src directory,
# and copying it into the proper place (the logical place to do this was early, but it must be done here).
# In CI, $BUILD_DIR is /app.
if [[ ! "$BUILD_DIR" == "/app" ]]; then
rm -fr "$BUILD_DIR/.heroku/src"
deep-cp /app/.heroku/src "$BUILD_DIR/.heroku/src"
fi
# Support for pip install -e.
rm -fr $BUILD_DIR/.heroku/src
deep-cp /app/.heroku/src $BUILD_DIR/.heroku/src
# Django collectstatic support.
sub-env $BIN_DIR/steps/collectstatic
# The buildpack automatically runs collectstatic for Django applications.
# This is the cause for the majority of build failures on the Python platform.
# These failures are intentional — if collectstatic (which can be tricky, at times) fails,
# your build fails.
(( start=$(nowms) ))
sub_env "$BIN_DIR/steps/collectstatic"
mtime "collectstatic.time" "${start}"
# Create .profile script for application runtime environment variables.
set-env PATH '$HOME/.heroku/python/bin:$PATH'
set-env PYTHONUNBUFFERED true
set-env PYTHONHOME /app/.heroku/python
set-env LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH'
set-env LD_LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH'
set-default-env LANG en_US.UTF-8
set-default-env PYTHONHASHSEED random
set-default-env PYTHONPATH /app/
# Progamatically create .profile.d script for application runtime environment variables.
# Set the PATH to include Python / pip / pipenv / etc.
set_env PATH "\$HOME/.heroku/python/bin:\$PATH"
# Tell Python to run in unbuffered mode.
set_env PYTHONUNBUFFERED true
# Tell Python where it lives.
set_env PYTHONHOME "\$HOME/.heroku/python"
# Set variables for C libraries.
set_env LIBRARY_PATH "\$HOME/.heroku/vendor/lib:\$HOME/.heroku/python/lib:\$LIBRARY_PATH"
set_env LD_LIBRARY_PATH "\$HOME/.heroku/vendor/lib:\$HOME/.heroku/python/lib:\$LD_LIBRARY_PATH"
# Locale.
set_default_env LANG en_US.UTF-8
# The Python hash seed is set to random.
set_default_env PYTHONHASHSEED random
# Tell Python to look for Python modules in the /app dir. Don't change this.
set_default_env PYTHONPATH "\$HOME"
# Python expects to be in /app, if at runtime, it is not, set
# up symlinks… this can occur when the subdir buildpack is used.
cat <<EOT >> "$PROFILE_PATH"
if [[ \$HOME != "/app" ]]; then
mkdir -p /app/.heroku
ln -nsf "\$HOME/.heroku/python" /app/.heroku/python
ln -nsf "\$HOME/.heroku/vendor" /app/.heroku/vendor
fi
EOT
# Install sane-default script for $WEB_CONCURRENCY and $FORWARDED_ALLOW_IPS.
cp $ROOT_DIR/vendor/python.gunicorn.sh $GUNICORN_PROFILE_PATH
cp "$ROOT_DIR/vendor/WEB_CONCURRENCY.sh" "$WEB_CONCURRENCY_PROFILE_PATH"
cp "$ROOT_DIR/vendor/python.gunicorn.sh" "$GUNICORN_PROFILE_PATH"
# Experimental post_compile hook.
source $BIN_DIR/steps/hooks/post_compile
# Experimental post_compile hook. Don't remove this.
# shellcheck source=bin/steps/hooks/post_compile
source "$BIN_DIR/steps/hooks/post_compile"
# Fix egg-links, again.
source $BIN_DIR/steps/eggpath-fix2
# shellcheck source=bin/steps/eggpath-fix2
source "$BIN_DIR/steps/eggpath-fix2"
# Store new artifacts in cache.
# Store new artifacts in the cache.
rm -rf "$CACHE_DIR/.heroku/python"
rm -rf "$CACHE_DIR/.heroku/python-version"
rm -rf "$CACHE_DIR/.heroku/python-stack"
rm -rf "$CACHE_DIR/.heroku/vendor"
rm -rf "$CACHE_DIR/.heroku/src"
rm -rf $CACHE_DIR/.heroku/python
rm -rf $CACHE_DIR/.heroku/python-version
rm -rf $CACHE_DIR/.heroku/python-stack
rm -rf $CACHE_DIR/.heroku/vendor
rm -rf $CACHE_DIR/.heroku/src
mkdir -p $CACHE_DIR/.heroku
cp -R .heroku/python $CACHE_DIR/.heroku/
cp -R .heroku/python-version $CACHE_DIR/.heroku/
cp -R .heroku/python-stack $CACHE_DIR/.heroku/ &> /dev/null || true
cp -R .heroku/vendor $CACHE_DIR/.heroku/ &> /dev/null || true
mkdir -p "$CACHE_DIR/.heroku"
cp -R .heroku/python "$CACHE_DIR/.heroku/"
cp -R .heroku/python-version "$CACHE_DIR/.heroku/"
cp -R .heroku/python-stack "$CACHE_DIR/.heroku/" &> /dev/null || true
cp -R .heroku/vendor "$CACHE_DIR/.heroku/" &> /dev/null || true
if [[ -d .heroku/src ]]; then
cp -R .heroku/src $CACHE_DIR/.heroku/ &> /dev/null || true
cp -R .heroku/src "$CACHE_DIR/.heroku/" &> /dev/null || true
fi
# Measure the size of the Python installation.
# shellcheck disable=SC2119
mmeasure 'python.size' "$(measure-size)"
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
DEFAULT_PYTHON_VERSION="python-3.6.11"
LATEST_38="python-3.8.4"
LATEST_37="python-3.7.8"
LATEST_36="python-3.6.11"
LATEST_35="python-3.5.9"
LATEST_34="python-3.4.10"
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 \
PYPY_36 \
PYPY_27
+1 -1
View File
@@ -15,7 +15,7 @@
BUILD_DIR=$1
# Exit early if app is clearly not Python.
if [ ! -f $BUILD_DIR/requirements.txt ] && [ ! -f $BUILD_DIR/setup.py ] && [ ! -f $BUILD_DIR/Pipfile ]; then
if [ ! -f "$BUILD_DIR/requirements.txt" ] && [ ! -f "$BUILD_DIR/setup.py" ] && [ ! -f "$BUILD_DIR/Pipfile" ]; then
exit 1
fi
+1 -2
View File
@@ -1,10 +1,9 @@
#!/usr/bin/env bash
# bin/release <build-dir>
BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
BUILD_DIR=$1
MANAGE_FILE=$(cd $BUILD_DIR && find . -maxdepth 3 -type f -name 'manage.py' | head -1)
MANAGE_FILE=$(cd "$BUILD_DIR" && find . -maxdepth 3 -type f -name 'manage.py' | head -1)
MANAGE_FILE=${MANAGE_FILE:2}
cat <<EOF
+28
View File
@@ -0,0 +1,28 @@
# Python Buildpack Install Steps
TODO: Add context on Python install steps, such as why symlinking vs copying
## Installing the Pip tool
The Python Buildpack uses a tool called `get-pip` to install the pip tool. This
is done in the `python` script.
This is in part because Python historically did not come with pip by default.
## Installing Python packages using Pip
### Convention: Use `python` process to invoke Pip
We don't use this convention (yet) but this is an upcoming change being considered.
This is a bigger concern on Windows than it is in Linux environments, but an
emerging convention in the Python community is to invoke pip using:
```
python3 -m pip [options]
```
Invoking pip this way ensures correct location - python knows where these
packages are stored because it put them there (defaults to Python's pathing info).
All normal command line options are available using this method.
+28 -5
View File
@@ -10,7 +10,8 @@
# - $DISABLE_COLLECTSTATIC: disables this functionality.
# - $DEBUG_COLLECTSTATIC: upon failure, print out environment variables.
source $BIN_DIR/utils
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
# Location of 'manage.py', if it exists.
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' -printf '%d\t%P\n' | sort -nk1 | cut -f2 | head -1)
@@ -20,22 +21,44 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath}
[ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1
# Ensure that Django is explicitly specified in requirements.txt
pip-grep -s requirements.txt django Django && DJANGO_INSTALLED=1
sp-grep -s django && DJANGO_INSTALLED=1
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
set +e
puts-cmd "python $MANAGE_FILE collectstatic --noinput"
puts-step "$ python $MANAGE_FILE collectstatic --noinput"
# Run collectstatic, cleanup some of the noisy output.
python $MANAGE_FILE collectstatic --noinput --traceback 2>&1 | sed '/^Post-processed/d;/^Copying/d;/^$/d' | indent
PYTHONPATH=${PYTHONPATH:-.}
export PYTHONPATH
# Create a temporary file for collecting the collectstaic logs.
COLLECTSTATIC_LOG=$(mktemp)
python "$MANAGE_FILE" collectstatic --noinput --traceback 2>&1 | tee "$COLLECTSTATIC_LOG" | sed '/^Post-processed/d;/^Copying/d;/^$/d' | indent
COLLECTSTATIC_STATUS="${PIPESTATUS[0]}"
set -e
# Display a warning if collectstatic failed.
[ $COLLECTSTATIC_STATUS -ne 0 ] && {
[ "$COLLECTSTATIC_STATUS" -ne 0 ] && {
if grep -q 'SyntaxError' "$COLLECTSTATIC_LOG"; then
mcount "failure.collectstatic.syntax-error"
elif grep -q 'ImproperlyConfigured' "$COLLECTSTATIC_LOG"; then
mcount "failure.collectstatic.improper-configuration"
elif grep -q 'The CSS file' "$COLLECTSTATIC_LOG"; then
mcount "failure.collectstatic.fancy-references"
elif grep -q 'OSError' "$COLLECTSTATIC_LOG"; then
mcount "failure.collectstatic.missing-file"
else
mcount "failure.collectstatic.other"
fi
echo
echo " ! Error while running '$ python $MANAGE_FILE collectstatic --noinput'."
-31
View File
@@ -1,31 +0,0 @@
#!/usr/bin/env bash
# This script serves as the Cryptography build step of the
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
# compiler.
#
# A [buildpack](https://devcenter.heroku.com/articles/buildpacks) is an
# adapter between a Python application and Heroku's runtime.
#
# This script is invoked by [`bin/compile`](/).
# The location of the pre-compiled libffi binary.
VENDORED_LIBFFI="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/libffi.tar.gz"
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
# Syntax sugar.
source $BIN_DIR/utils
# If a package using cffi exists within requirements, use vendored libffi.
if (pip-grep -s requirements.txt argon2-cffi bcrypt cffi cryptography django[argon2] Django[argon2] django[bcrypt] Django[bcrypt] PyNaCl pyOpenSSL PyOpenSSL requests[security] misaka &> /dev/null) then
if [ ! -d ".heroku/vendor/lib/libffi-3.1" ]; then
echo "-----> Noticed cffi. Bootstrapping libffi."
mkdir -p .heroku/vendor
# Download and extract libffi into target vendor directory.
curl $VENDORED_LIBFFI -s | tar zxv -C .heroku/vendor &> /dev/null
fi
export LIBFFI=$(pwd)/vendor
fi
+2
View File
@@ -1,3 +1,5 @@
#!/usr/bin/env bash
set +e
# delete any existing egg links, to uninstall exisisting installations.
find .heroku/python/lib/python*/site-packages/ -name "*.egg-link" -delete 2> /dev/null
+1
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env bash
set +e
# rewrite build dir in egg links to /app so things are found at runtime
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
+11 -5
View File
@@ -10,23 +10,29 @@
# This script is invoked by [`bin/compile`](/).
# The location of the pre-compiled cryptography binary.
VENDORED_GDAL="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/gdal.tar.gz"
VENDORED_GDAL="${VENDOR_URL}/libraries/vendor/gdal.tar.gz"
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
# Syntax sugar.
source $BIN_DIR/utils
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
# If GDAL exists within requirements, use vendored gdal.
if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) 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."
mkdir -p .heroku/vendor
# Download and extract cryptography into target vendor directory.
curl $VENDORED_GDAL -s | tar zxv -C .heroku/vendor &> /dev/null
curl "$VENDORED_GDAL" -s | tar zxv -C .heroku/vendor &> /dev/null
mcount "steps.vendor.gdal"
fi
export GDAL=$(pwd)/vendor
GDAL=$(pwd)/vendor
export GDAL
fi
+28 -9
View File
@@ -10,27 +10,46 @@
# This script is invoked by [`bin/compile`](/).
# The location of the pre-compiled cryptography binary.
VENDORED_GDAL="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/gdal.tar.gz"
VENDORED_GEOS="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/geos.tar.gz"
VENDORED_PROJ="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/proj.tar.gz"
VENDORED_GDAL="${VENDOR_URL}/libraries/vendor/gdal.tar.gz"
VENDORED_GEOS="${VENDOR_URL}/libraries/vendor/geos.tar.gz"
VENDORED_PROJ="${VENDOR_URL}/libraries/vendor/proj.tar.gz"
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
# Syntax sugar.
source $BIN_DIR/utils
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
# If GDAL exists within requirements, use vendored gdal.
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
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
echo "-----> Bootstrapping gdal, geos, proj."
mkdir -p .heroku/vendor
# Download and extract cryptography into target vendor directory.
curl $VENDORED_GDAL -s | tar zxv -C .heroku/vendor &> /dev/null
curl $VENDORED_GEOS -s | tar zxv -C .heroku/vendor &> /dev/null
curl $VENDORED_PROJ -s | tar zxv -C .heroku/vendor &> /dev/null
curl "$VENDORED_GDAL" -s | tar zxv -C .heroku/vendor &> /dev/null
curl "$VENDORED_GEOS" -s | tar zxv -C .heroku/vendor &> /dev/null
curl "$VENDORED_PROJ" -s | tar zxv -C .heroku/vendor &> /dev/null
mcount "steps.vendor.geo_libs"
# Copy libjasper from build image to slug.
if [[ "$STACK" == "heroku-16" ]]; then
cp /usr/lib/x86_64-linux-gnu/libjasper.so* ".heroku/vendor/lib/."
mcount "steps.vendor.libjasper"
fi
fi
export GDAL=$(pwd)/vendor
GDAL=$(pwd)/vendor
export GDAL
# set path for post_compile hooks
export GDAL_LIBRARY_PATH="$BUILD_DIR/.heroku/vendor/lib/libgdal.so"
export GEOS_LIBRARY_PATH="$BUILD_DIR/.heroku/vendor/lib/libgeos_c.so"
# set path for runtime environmeht
set_env GDAL_LIBRARY_PATH "/app/.heroku/vendor/lib/libgdal.so"
set_env GEOS_LIBRARY_PATH "/app/.heroku/vendor/lib/libgeos_c.so"
fi
+1 -1
View File
@@ -3,5 +3,5 @@
if [ -f bin/post_compile ]; then
echo "-----> Running post-compile hook"
chmod +x bin/post_compile
sub-env bin/post_compile
sub_env bin/post_compile
fi
+1 -1
View File
@@ -3,5 +3,5 @@
if [ -f bin/pre_compile ]; then
echo "-----> Running pre-compile hook"
chmod +x bin/pre_compile
sub-env bin/pre_compile
sub_env bin/pre_compile
fi
+7 -2
View File
@@ -1,4 +1,9 @@
#!/usr/bin/env bash
# Install Mercurial if it appears to be required.
if (grep -Fiq "hg+" requirements.txt) then
/app/.heroku/python/bin/pip install mercurial | cleanup | indent
if [[ -f "requirements.txt" ]]; then
if (grep -Fiq "hg+" requirements.txt) then
/app/.heroku/python/bin/pip install mercurial | cleanup | indent
mcount "steps.mercurial"
fi
fi
+15 -9
View File
@@ -10,21 +10,27 @@
# This script is invoked by [`bin/compile`](/).
# Syntax sugar.
source $BIN_DIR/utils
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
# Check that nltk was installed by pip, otherwise obviously not needed
python -m nltk.downloader -h >/dev/null 2>&1
if [ $? -eq 0 ]; then
puts-step "Downloading NLTK corpora..."
if sp-grep -s nltk; then
puts-step "Downloading NLTK corpora…"
nltk_packages_definition="$BUILD_DIR/nltk.txt"
if [ -f "$nltk_packages_definition" ]; then
nltk_packages=$(tr "\n" " " < "$nltk_packages_definition")
puts-step "Downloading NLTK packages: $nltk_packages"
python -m nltk.downloader -d $BUILD_DIR/.heroku/python/nltk_data $nltk_packages | indent
set-env NLTK_DATA "/app/.heroku/python/nltk_data"
readarray -t nltk_packages < "$nltk_packages_definition"
puts-step "Downloading NLTK packages: ${nltk_packages[*]}"
python -m nltk.downloader -d "$BUILD_DIR/.heroku/python/nltk_data" "${nltk_packages[@]}" | indent
set_env NLTK_DATA "/app/.heroku/python/nltk_data"
mcount "buildvar.NLTK_PACKAGES_DEFINITION"
mcount "steps.nltk"
else
puts-warn "'nltk.txt' not found, not downloading any corpora"
puts-warn "Learn more: https://devcenter.heroku.com/articles/python-nltk"
fi
fi
+68 -16
View File
@@ -1,20 +1,72 @@
# Install dependencies with Pip.
puts-step "Installing requirements with pip"
#!/usr/bin/env bash
set +e
/app/.heroku/python/bin/pip install -r $BUILD_DIR/requirements.txt --exists-action=w --src=/app/.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | tee $WARNINGS_LOG | cleanup | indent
PIP_STATUS="${PIPESTATUS[0]}"
set -e
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
show-warnings
if [ ! "$SKIP_PIP_INSTALL" ]; then
if [[ ! $PIP_STATUS -eq 0 ]]; then
exit 1
# Install dependencies with Pip.
puts-step "Installing requirements with pip"
# Set Pip env vars
# This reads certain environment variables set on the Heroku app config
# and makes them accessible to the pip install process.
#
# PIP_EXTRA_INDEX_URL allows for an alternate pypi URL to be used.
if [[ -r "$ENV_DIR/PIP_EXTRA_INDEX_URL" ]]; then
PIP_EXTRA_INDEX_URL="$(cat "$ENV_DIR/PIP_EXTRA_INDEX_URL")"
export PIP_EXTRA_INDEX_URL
mcount "buildvar.PIP_EXTRA_INDEX_URL"
fi
set +e
# Set SLUGIFY_USES_TEXT_UNIDECODE, required for Airflow versions >=1.10
if [[ -r "$ENV_DIR/SLUGIFY_USES_TEXT_UNIDECODE" ]]; then
SLUGIFY_USES_TEXT_UNIDECODE="$(cat "$ENV_DIR/SLUGIFY_USES_TEXT_UNIDECODE")"
export SLUGIFY_USES_TEXT_UNIDECODE
mcount "buildvar.SLUGIFY_USES_TEXT_UNIDECODE"
fi
set +e
# Measure that we're using pip.
mcount "tool.pip"
# Count expected build failures.
if grep -q '==0.0.0' requirements.txt; then
mcount "failure.none-version"
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
exit 1
fi
/app/.heroku/python/bin/pip install -r "$BUILD_DIR/requirements.txt" --exists-action=w --src=/app/.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | tee "$WARNINGS_LOG" | cleanup | indent
PIP_STATUS="${PIPESTATUS[0]}"
set -e
show-warnings
if [[ ! $PIP_STATUS -eq 0 ]]; then
mcount "failure.pip-install"
exit 1
fi
cp requirements.txt .heroku/python/requirements-declared.txt
/app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
# Install test dependencies, for CI.
if [ "$INSTALL_TEST" ]; then
if [[ -f "$1/requirements-test.txt" ]]; then
puts-step "Installing test dependencies…"
/app/.heroku/python/bin/pip install -r "$1/requirements-test.txt" --exists-action=w --src=./.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | cleanup | indent
fi
fi
fi
# Smart Requirements handling
cp requirements.txt .heroku/python/requirements-declared.txt
/app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
echo
+18 -8
View File
@@ -1,18 +1,28 @@
#!/usr/bin/env bash
set +e
# Install dependencies with Pip.
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
if [[ -f .heroku/python/requirements-declared.txt ]]; then
if [ ! "$SKIP_PIP_INSTALL" ]; then
cp .heroku/python/requirements-declared.txt requirements-declared.txt
if [[ -f .heroku/python/requirements-declared.txt ]]; then
pip-diff --stale requirements-declared.txt requirements.txt --exclude setuptools pip wheel > .heroku/python/requirements-stale.txt
cp .heroku/python/requirements-declared.txt requirements-declared.txt
rm -fr requirements-declared.txt
if [[ -s .heroku/python/requirements-stale.txt ]]; then
puts-step "Uninstalling stale dependencies"
/app/.heroku/python/bin/pip uninstall -r .heroku/python/requirements-stale.txt -y --exists-action=w | cleanup | indent
if ! pip-diff --stale requirements-declared.txt requirements.txt --exclude setuptools pip wheel > .heroku/python/requirements-stale.txt; then
mcount "failure.bad-requirements"
fi
rm -fr requirements-declared.txt
if [[ -s .heroku/python/requirements-stale.txt ]]; then
puts-step "Uninstalling stale dependencies"
/app/.heroku/python/bin/pip uninstall -r .heroku/python/requirements-stale.txt -y --exists-action=w --disable-pip-version-check | cleanup | indent
fi
fi
fi
fi
set -e
Regular → Executable
+83 -7
View File
@@ -1,10 +1,86 @@
# Pipenv support (Generate requriements.txt with pipenv).
if [[ -f Pipfile ]]; then
if [[ ! -f requirements.txt ]]; then
puts-step "Generating 'requirements.txt' with pipenv"
#!/usr/bin/env bash
/app/.heroku/python/bin/pip install pipenv --upgrade &> /dev/null
# export CLINT_FORCE_COLOR=1
# export PIPENV_FORCE_COLOR=1
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
set -e
/app/.heroku/python/bin/pipenv lock --requirements --no-hashes > $BUILD_DIR/requirements.txt 2> /dev/null
if [[ -f Pipfile.lock ]]; then
if [[ -f .heroku/python/Pipfile.lock.sha256 ]]; then
if [[ $(openssl dgst -sha256 Pipfile.lock) == $(cat .heroku/python/Pipfile.lock.sha256) ]]; then
# Measure that we're using Pipenv.
mcount "tool.pipenv"
# Don't skip installation of there are git deps.
if ! grep -q 'git' Pipfile.lock; then
echo "Skipping installation, as Pipfile.lock hasn't changed since last deploy." | indent
mcount "tool.pipenv"
export SKIP_PIPENV_INSTALL=1
export SKIP_PIP_INSTALL=1
fi
fi
fi
fi
fi
if [ ! "$SKIP_PIPENV_INSTALL" ]; then
# Pipenv support (Generate requirements.txt with pipenv).
if [[ -f Pipfile ]]; then
# Measure that we're using Pipenv.
mcount "tool.pipenv"
# Skip pip install, later.
export SKIP_PIP_INSTALL=1
# Set Pip env vars
# This reads certain environment variables set on the Heroku app config
# and makes them accessible to the pip install process.
#
# PIP_EXTRA_INDEX_URL allows for an alternate pypi URL to be used.
if [[ -r "$ENV_DIR/PIP_EXTRA_INDEX_URL" ]]; then
PIP_EXTRA_INDEX_URL="$(cat "$ENV_DIR/PIP_EXTRA_INDEX_URL")"
export PIP_EXTRA_INDEX_URL
mcount "buildvar.PIP_EXTRA_INDEX_URL"
fi
# Set SLUGIFY_USES_TEXT_UNIDECODE, required for Airflow versions >=1.10
if [[ -r "$ENV_DIR/SLUGIFY_USES_TEXT_UNIDECODE" ]]; then
SLUGIFY_USES_TEXT_UNIDECODE="$(cat "$ENV_DIR/SLUGIFY_USES_TEXT_UNIDECODE")"
export SLUGIFY_USES_TEXT_UNIDECODE
mcount "buildvar.SLUGIFY_USES_TEXT_UNIDECODE"
fi
export PIPENV_VERSION="2018.5.18"
# Install pipenv.
# Due to weird old pip behavior and pipenv behavior, pipenv upgrades pip
# to latest if only --upgrade is specified. Specify upgrade strategy to
# avoid this eager behavior.
/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.
elif [[ ! -f Pipfile.lock ]]; then
puts-step "Installing dependencies with Pipenv $PIPENV_VERSION…"
/app/.heroku/python/bin/pipenv install --system --skip-lock 2>&1 | indent
else
pipenv-to-pip Pipfile.lock > requirements.txt
"$BIN_DIR/steps/pip-uninstall"
cp requirements.txt .heroku/python/requirements-declared.txt
openssl dgst -sha256 Pipfile.lock > .heroku/python/Pipfile.lock.sha256
puts-step "Installing dependencies with Pipenv $PIPENV_VERSION…"
/app/.heroku/python/bin/pipenv install --system --deploy 2>&1 | indent
fi
fi
else
export SKIP_PIP_INSTALL=1
pipenv-to-pip Pipfile.lock > requirements.txt
fi
+24 -9
View File
@@ -1,23 +1,38 @@
#!/usr/bin/env bash
# Detect Python-version with Pipenv.
if [[ -f $BUILD_DIR/Pipfile.lock ]]; then
if [[ -f $BUILD_DIR/Pipfile ]]; then
if [[ ! -f $BUILD_DIR/runtime.txt ]]; then
if [[ ! -f $BUILD_DIR/Pipfile.lock ]]; then
puts-warn "No 'pipfile.lock' found! We recommend you commit this into your repository."
puts-warn "No 'Pipfile.lock' found! We recommend you commit this into your repository."
fi
if [[ -f $BUILD_DIR/Pipfile.lock ]]; then
set +e
PYTHON=$(cat $BUILD_DIR/Pipfile.lock | jq '._meta.requires.python_version' -r)
PYTHON=$(jq -r '._meta.requires.python_full_version' "$BUILD_DIR/Pipfile.lock")
if [[ "$PYTHON" != "null" ]]; then
echo "python-$PYTHON" > "$BUILD_DIR/runtime.txt"
fi
set -e
if [ "$PYTHON" = 2.7 ]; then
echo "python-2.7.13" > $BUILD_DIR/runtime.txt
fi
if [ "$PYTHON" = 3.6 ]; then
echo "python-3.6.0" > $BUILD_DIR/runtime.txt
if [[ "$PYTHON" == "null" ]]; then
PYTHON=$(jq -r '._meta.requires.python_version' "$BUILD_DIR/Pipfile.lock")
if [ "$PYTHON" = 2.7 ]; then
echo "$LATEST_27" > "$BUILD_DIR/runtime.txt"
fi
if [ "$PYTHON" = 3.6 ]; then
echo "$LATEST_36" > "$BUILD_DIR/runtime.txt"
fi
if [ "$PYTHON" = 3.7 ]; then
echo "$LATEST_37" > "$BUILD_DIR/runtime.txt"
fi
if [ "$PYTHON" = 3.8 ]; then
echo "$LATEST_38" > "$BUILD_DIR/runtime.txt"
fi
fi
fi
fi
fi
+12 -5
View File
@@ -9,12 +9,17 @@
#
# This script is invoked by [`bin/compile`](/).
if [[ "$STACK" != "cedar-14" ]]; then
# libmemcached is pre-installed in the stack image so there is no need to vendor it.
return 0
fi
# The location of the pre-compiled libmemcached binary.
VENDORED_MEMCACHED="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/libmemcache.tar.gz"
VENDORED_MEMCACHED="${VENDOR_URL}/libraries/vendor/libmemcache.tar.gz"
# Syntax sugar.
source $BIN_DIR/utils
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
# If pylibmc exists within requirements, use vendored libmemcached.
if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
@@ -23,8 +28,10 @@ if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
mkdir -p .heroku/vendor
# Download and extract libmemcached into target vendor directory.
curl $VENDORED_MEMCACHED -s | tar zxv -C .heroku/vendor &> /dev/null
curl "$VENDORED_MEMCACHED" -s | tar zxv -C .heroku/vendor &> /dev/null
mcount "steps.vendor.pylibmc"
fi
export LIBMEMCACHED=$(pwd)/vendor
LIBMEMCACHED=$(pwd)/vendor
export LIBMEMCACHED
fi
+122 -18
View File
@@ -1,10 +1,93 @@
#!/usr/bin/env bash
set +e
runtime-fixer runtime.txt
PYTHON_VERSION=$(cat runtime.txt)
# Install Python.
# The location of the pre-compiled python binary.
VENDORED_PYTHON="${VENDOR_URL}/runtimes/$PYTHON_VERSION.tar.gz"
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
if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
if [[ "$PYTHON_VERSION" == $PY38* ]]; then
# do things to alert the user of security release available
if [ "$PYTHON_VERSION" != "$LATEST_38" ]; then
puts-warn "$SECURITY_UPDATE" "$LATEST_38"
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
fi
if [[ "$PYTHON_VERSION" == $PY37* ]]; then
# do things to alert the user of security release available
if [ "$PYTHON_VERSION" != "$LATEST_37" ]; then
puts-warn "$SECURITY_UPDATE" "$LATEST_37"
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
fi
if [[ "$PYTHON_VERSION" == $PY36* ]]; then
# security update note
if [ "$PYTHON_VERSION" != "$LATEST_36" ]; then
puts-warn "$SECURITY_UPDATE" "$LATEST_36"
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
fi
if [[ "$PYTHON_VERSION" == $PY35* ]]; then
# security update note
if [ "$PYTHON_VERSION" != "$LATEST_35" ]; then
puts-warn "$SECURITY_UPDATE" "$LATEST_35"
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
fi
if [[ "$PYTHON_VERSION" == $PY34* ]]; then
# security update note
if [ "$PYTHON_VERSION" != "$LATEST_34" ]; then
puts-warn "$SECURITY_UPDATE" "$LATEST_34"
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
fi
fi
if [[ "$PYTHON_VERSION" == $PY27* ]]; then
# 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
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"
fi
fi
else
puts-warn "Requested runtime ($PYTHON_VERSION) is not available for this stack ($STACK)."
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
exit 1
fi
if [[ "$STACK" != "$CACHED_PYTHON_STACK" ]]; then
puts-step "Stack has changed from $CACHED_PYTHON_STACK to $STACK, clearing cache"
rm -fr .heroku/python-stack .heroku/python-version .heroku/python .heroku/vendor .heroku/python .heroku/python-sqlite3-version
fi
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"
rm -fr .heroku/python
else
@@ -12,48 +95,69 @@ if [ -f .heroku/python-version ]; then
fi
fi
if [ ! $STACK = $CACHED_PYTHON_STACK ]; then
rm -fr .heroku/python .heroku/python-stack .heroku/vendor
# 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
puts-step "Installing $PYTHON_VERSION"
# Prepare destination directory.
mkdir -p .heroku/python
curl https://lang-python.s3.amazonaws.com/$STACK/runtimes/$PYTHON_VERSION.tar.gz -s | tar zxv -C .heroku/python &> /dev/null
if [[ $? != 0 ]] ; then
mcount "version.python.$PYTHON_VERSION"
if ! curl "${VENDORED_PYTHON}" -s | tar zxv -C .heroku/python &> /dev/null; then
puts-warn "Requested runtime ($PYTHON_VERSION) is not available for this stack ($STACK)."
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
exit 1
fi
# Record for future reference.
echo $PYTHON_VERSION > .heroku/python-version
echo $STACK > .heroku/python-stack
echo "$PYTHON_VERSION" > .heroku/python-version
echo "$STACK" > .heroku/python-stack
FRESH_PYTHON=true
hash -r
fi
# If Pip isn't up to date:
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
WORKING_DIR=$(pwd)
# Heroku uses the get-pip utility maintained by the Python community to vendor Pip.
# https://github.com/pypa/get-pip
GETPIP_URL="https://lang-python.s3.amazonaws.com/etc/get-pip.py"
GETPIP_PY="${TMPDIR:-/tmp}/get-pip.py"
TMPTARDIR=$(mktemp -d)
trap "rm -rf $TMPTARDIR" RETURN
if ! curl -s "${GETPIP_URL}" -o "$GETPIP_PY" &> /dev/null; then
mcount "failure.python.get-pip"
echo "Failed to pull down get-pip"
exit 1
fi
# If a new Python has been installed or Pip isn't up to date:
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then
puts-step "Installing pip"
# Remove old installations.
rm -fr /app/.heroku/python/lib/python2.7/site-packages/pip-*
rm -fr /app/.heroku/python/lib/python2.7/site-packages/setuptools-*
/app/.heroku/python/bin/python $ROOT_DIR/vendor/get-pip.py &> /dev/null
rm -fr /app/.heroku/python/lib/python*/site-packages/pip-*
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
/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
fi
set -e
-11
View File
@@ -1,11 +0,0 @@
#!/usr/bin/env bash
# Syntax sugar.
source $BIN_DIR/utils
if (pip-grep -s requirements.txt setuptools distribute &> /dev/null) then
puts-warn 'The package setuptools/distribute is listed in requirements.txt.'
puts-warn 'Please remove to ensure expected behavior. '
fi
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
sqlite3_install() {
HEROKU_PYTHON_DIR="$1"
HEADERS_ONLY="$3"
mkdir -p "$HEROKU_PYTHON_DIR"
APT_CACHE_DIR="$HEROKU_PYTHON_DIR/apt/cache"
APT_STATE_DIR="$HEROKU_PYTHON_DIR/apt/state"
mkdir -p "$APT_CACHE_DIR/archives/partial"
mkdir -p "$APT_STATE_DIR/lists/partial"
APT_OPTIONS="-o debug::nolocking=true"
APT_OPTIONS="$APT_OPTIONS -o dir::cache=$APT_CACHE_DIR"
APT_OPTIONS="$APT_OPTIONS -o dir::state=$APT_STATE_DIR"
APT_OPTIONS="$APT_OPTIONS -o dir::etc::sourcelist=/etc/apt/sources.list"
apt-get $APT_OPTIONS update > /dev/null 2>&1
if [ -z "$HEADERS_ONLY" ]; then
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev sqlite3 > /dev/null 2>&1
else
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev
fi
find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \;
mkdir -p "$HEROKU_PYTHON_DIR/include"
mkdir -p "$HEROKU_PYTHON_DIR/lib"
# remove old sqlite3 libraries/binaries
find "$HEROKU_PYTHON_DIR/include/" -name "sqlite3*.h" -exec rm -f {} \;
find "$HEROKU_PYTHON_DIR/lib/" -name "libsqlite3.*" -exec rm -f {} \;
rm -f "$HEROKU_PYTHON_DIR/lib/pkgconfig/sqlite3.pc"
rm -f "$HEROKU_PYTHON_DIR/bin/sqlite3"
# copy over sqlite3 headers & bins and setup linking against the stack image library
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/include/"* "$HEROKU_PYTHON_DIR/include/"
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu"/libsqlite3.*a "$HEROKU_PYTHON_DIR/lib/"
mkdir -p "$HEROKU_PYTHON_DIR/lib/pkgconfig"
# set the right prefix/lib directories
sed -e 's/prefix=\/usr/prefix=\/app\/.heroku\/python/' -e 's/\/x86_64-linux-gnu//' "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu/pkgconfig/sqlite3.pc" > "$HEROKU_PYTHON_DIR/lib/pkgconfig/sqlite3.pc"
# need to point the libsqlite3.so to the stack image library for /usr/bin/ld -lsqlite3
SQLITE3_LIBFILE="/usr/lib/x86_64-linux-gnu/$(readlink -n "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu/libsqlite3.so")"
ln -s "$SQLITE3_LIBFILE" "$HEROKU_PYTHON_DIR/lib/libsqlite3.so"
if [ -z "$HEADERS_ONLY" ]; then
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/bin"/* "$HEROKU_PYTHON_DIR/bin/"
fi
# cleanup
rm -rf "$HEROKU_PYTHON_DIR/sqlite3/"
rm -rf "$HEROKU_PYTHON_DIR/apt/"
}
buildpack_sqlite3_install() {
HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python"
SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version"
if [ -f "$SQLITE3_VERSION_FILE" ]; then
INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE")
fi
puts-step "Installing SQLite3"
if sqlite3_install "$BUILD_DIR/.heroku/python" ; then
mcount "success.python.sqlite3"
else
echo "Sqlite3 failed to install."
mcount "failure.python.sqlite3"
fi
mkdir -p "$CACHE_DIR/.heroku/"
}
+8 -6
View File
@@ -1,11 +1,13 @@
#!/usr/bin/env bash
# Syntax sugar.
BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
source $BIN_DIR/utils
BIN_DIR=$(cd "$(dirname "$0")" || return; pwd) # absolute path
DISABLE_COLLECTSTATIC=1 "$(dirname ${0:-})/compile" "$1" "$2" "$3"
# shellcheck source=bin/utils
source "$BIN_DIR/utils"
if [[ -f "$1/requirements-test.txt" ]]; then
/app/.heroku/python/bin/pip install -r "$1/requirements-test.txt" --exists-action=w --src=./.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | cleanup | indent
fi
# Locale support for Pipenv.
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
DISABLE_COLLECTSTATIC=1 INSTALL_TEST=1 "$(dirname "${0:-}")/compile" "$1" "$2" "$3"
+49 -62
View File
@@ -1,6 +1,15 @@
#!/usr/bin/env bash
shopt -s extglob
shopt -s nullglob
if [ $(uname) == Darwin ]; then
# The standard library.
if [[ ! -f /tmp/stdlib.sh ]]; then
curl --retry 3 -s https://lang-common.s3.amazonaws.com/buildpack-stdlib/v8/stdlib.sh > /tmp/stdlib.sh
fi
# shellcheck source=/dev/null
source /tmp/stdlib.sh
if [ "$(uname)" == Darwin ]; then
sed() { command sed -l "$@"; }
else
sed() { command sed -u "$@"; }
@@ -11,46 +20,20 @@ indent() {
sed "s/^/ /"
}
# Clean up pip output
cleanup() {
sed -e 's/\.\.\.\+/.../g' | sed -e '/already satisfied/Id' | sed -e '/No files were found to uninstall/Id' | sed -e '/Overwriting/Id' | sed -e '/python executable/Id' | sed -e '/no previously-included files/Id'
}
# Buildpack Indented line.
puts-line() {
echo " $@"
}
# Buildpack Steps.
puts-step() {
echo "-----> $@"
echo "-----> $*"
}
# Buildpack Warnings.
puts-warn() {
echo " ! $@"
}
# Buildpack Commands.
puts-cmd() {
echo " $ $@"
}
# Usage: $ set-env key value
set-env() {
echo "export $1=$2" >> $PROFILE_PATH
echo "export $1=$2" >> $EXPORT_PATH
}
# Usage: $ set-default-env key value
set-default-env() {
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
echo "export $1=\${$1:-$2}" >> $EXPORT_PATH
}
# Usage: $ un-set-env key
un-set-env() {
echo "unset $1" >> $PROFILE_PATH
echo " ! $*"
}
# Does some serious copying.
@@ -69,42 +52,46 @@ deep-cp() {
)
}
# Does some serious moving.
deep-mv() {
deep-cp "$1" "$2"
deep-rm "$1"
# Measure the size of the Python installation.
measure-size() {
echo "$(du -s .heroku/python 2>/dev/null || echo 0) | awk '{print $1}')"
}
# Does some serious deleting.
deep-rm() {
# subshell to avoid surprising caller with shopts.
(
shopt -s dotglob
rm -rf "$1"/!(.curlrc|.netrc|tmp|.|..)
)
# Python version operator >
version_gt() {
test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1";
}
# Python verison operator >=
version_gte() {
if [ "$1" == "$2" ]; then
return 0
fi
sub-env() {
WHITELIST=${2:-''}
BLACKLIST=${3:-'^(GIT_DIR|PYTHONHOME|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$'}
# Python-specific variables.
export PYHONHOME=$BUILD_DIR/.heroku/python
export PYTHONPATH=$BUILD_DIR/
(
if [ -d "$ENV_DIR" ]; then
for e in $(ls $ENV_DIR); do
echo "$e" | grep -E "$WHITELIST" | grep -qvE "$BLACKLIST" &&
export "$e=$(cat $ENV_DIR/$e)"
:
done
fi
$1
)
version_gt "$1" "$2"
}
# Check if Python 2
python2_check() {
VERSION="$1"
version_gte "$VERSION" "python-2.7.0" && version_gt "python-3.0.0" "$VERSION"
}
# Check if Python 3
python3_check() {
VERSION="$1"
version_gte "$VERSION" "python-3.0.0" && version_gt "python-4.0.0" "$VERSION"
}
# Check if Python version needs to install SQLite3
python_sqlite3_check() {
VERSION="$1"
MIN_PYTHON_3="python-3.5.6"
MIN_PYTHON_2="python-2.7.15"
( python2_check "$VERSION" && version_gte "$VERSION" "$MIN_PYTHON_2" ) \
|| ( python3_check "$VERSION" && version_gte "$VERSION" "$MIN_PYTHON_3" )
}
+17
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env bash
shopt -s extglob
old-platform() {
@@ -7,6 +8,7 @@ old-platform() {
puts-warn "This caused the security warning you saw above during the 'pip install' step."
puts-warn "We recommend '$RECOMMENDED_PYTHON_VERSION', which you can specify in a 'runtime.txt' file."
puts-warn " -- Much Love, Heroku."
mcount 'warnings.python.old'
fi
}
@@ -16,6 +18,7 @@ pylibmc-missing() {
puts-warn "Hello! There was a problem with your build related to libmemcache."
puts-warn "The Python library 'pylibmc' must be explicitly specified in 'requirements.txt' in order to build correctly."
puts-warn "Once you do that, everything should work as expected. -- Much Love, Heroku."
mcount 'warnings.libmemcache'
fi
}
@@ -27,6 +30,7 @@ scipy-included() {
puts-warn "There is, however, a buildpack available that makes it possible to use it on Heroku."
puts-warn "You can learn more here: https://devcenter.heroku.com/articles/python-c-deps"
puts-warn "Sorry for the inconvenience. -- Much Love, Heroku."
mcount 'warnings.scipy'
fi
}
@@ -37,6 +41,18 @@ distribute-included() {
puts-warn "This library is automatically installed by Heroku and shouldn't be in"
puts-warn "Your requirements.txt file. This can cause unexpected behavior."
puts-warn " -- Much Love, Heroku."
mcount 'warnings.distribute'
fi
}
six-included() {
if grep -qi 'Running setup.py install for six' "$WARNINGS_LOG"; then
echo
puts-warn "Hello! Your requirements.txt file contains the six package."
puts-warn "This library is automatically installed by Heroku and shouldn't be in"
puts-warn "Your requirements.txt file. This can cause unexpected behavior."
puts-warn " -- Much Love, Heroku."
mcount 'warnings.six'
fi
}
@@ -45,5 +61,6 @@ show-warnings() {
pylibmc-missing
scipy-included
distribute-included
six-included
}
+13
View File
@@ -0,0 +1,13 @@
[buildpack]
name = "Python"
[publish.Ignore]
files = [
"test/",
".gitignore",
".dockerignore",
".github/",
"Dockerfile",
"Pipfile",
"Pipfile.lock"
]
+45 -19
View File
@@ -1,31 +1,57 @@
# Python Buildpack Binaries
## Building the Docker Images
To get started with it, create an app on Heroku inside a clone of this repository, and set your S3 config vars:
**After every change to your formulae, perform the following** from the root of the Git repository (not from `builds/`) to rebuild the images for each stack:
$ heroku create --buildpack https://github.com/heroku/heroku-buildpack-python#not-heroku
$ heroku config:set WORKSPACE_DIR=builds
$ heroku config:set AWS_ACCESS_KEY_ID=<your_aws_key>
$ heroku config:set AWS_SECRET_ACCESS_KEY=<your_aws_secret>
$ heroku config:set S3_BUCKET=<your_s3_bucket_name>
$ docker build --pull --tag heroku-python-build-cedar-14 --file $(pwd)/builds/cedar-14.Dockerfile .
$ docker build --pull --tag heroku-python-build-heroku-16 --file $(pwd)/builds/heroku-16.Dockerfile .
$ docker build --pull --tag heroku-python-build-heroku-18 --file $(pwd)/builds/heroku-18.Dockerfile .
## Using the Image
Then, shell into an instance and run a build by giving the name of the formula inside `builds`:
You can e.g. `bash` into each of the images you built using their tag:
$ heroku run bash
Running `bash` attached to terminal... up, run.6880
~ $ bob build runtimes/python-2.7.6
docker run --rm -ti heroku-python-build-cedar-14 bash
docker run --rm -ti heroku-python-build-heroku-16 bash
docker run --rm -ti heroku-python-build-heroku-18 bash
Fetching dependencies... found 2:
- libraries/sqlite
You then have a shell where you can run `bob build`, `bob deploy`, and so forth. You can of course also invoke these programs directly with `docker run`:
Building formula runtimes/python-2.7.6:
=== Building Python 2.7.6
Fetching Python v2.7.6 source...
Compiling...
docker run --rm -ti heroku-python-build-heroku-18 bob build runtimes/python-2.7.15
If this works, run `bob deploy` instead of `bob build` to have the result uploaded to S3 for you.
In order to `bob deploy`, AWS credentials must be set up, as well as name and prefix of your custom S3 bucket (unless you're deploying to the Heroku production buckets that are pre-defined in each `Dockerfile`); see next section for details.
To speed things up drastically, it'll usually be a good idea to `heroku run bash --size PX` instead.
## Configuration
Enjoy :)
File `dockerenv.default` contains a list of required env vars; most of these have default values defined in `Dockerfile`. You can copy this file to a location outside the buildpack and modify it with the values you desire and pass its location with `--env-file`, or pass the env vars to `docker run` using `--env`.
Out of the box, each `Dockerfile` has the correct values predefined for `S3_BUCKET`, `S3_PREFIX`, and `S3_REGION`. If you're building your own packages, you'll likely want to change `S3_BUCKET` and `S3_PREFIX` to match your info. Instead of setting `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` into that file, you may also pass them to `docker run` through the environment, or explicitly using `--env`, in order to prevent accidental commits of credentials.
### Passing AWS credentials to the container
If you want to deploy packages and thus need to pass `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`, you can either pass them explicitly, through your environment, or through an env file.
#### Passing credentials explicitly
docker run --rm -ti -e AWS_ACCESS_KEY_ID=... -e AWS_SECRET_ACCESS_KEY=... heroku-python-build-heroku-18 bash
#### Passing credentials through the environment
The two environment variables `AWS_ACCESS_KEY_ID`and `AWS_SECRET_ACCESS_KEY` are defined in `builds/dockerenv.default`, without values. This will cause Docker to "forward" values for these variables from the current environment, so you can pass them in:
AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... docker run --rm -ti --env-file=builds/dockerenv.default heroku-python-build-heroku-18 bash
or
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
docker run --rm -ti --env-file=builds/dockerenv.default heroku-python-build-heroku-18 bash
#### Passing credentials through a separate env file
This method is the easiest for users who want to build packages in their own S3 bucket, as they will have to adjust the `S3_BUCKET` and `S3_PREFIX` environment variable values anyway from their default values.
For this method, it is important to keep the credentials file in a location outside the buildpack, so that your credentials aren't accidentally committed. Copy `builds/dockerenv.default` **to a safe location outside the buildpack directory**, and insert your values for `AWS_ACCESS_KEY_ID`and `AWS_SECRET_ACCESS_KEY`.
docker run --rm -ti --env-file=../SOMEPATHOUTSIDE/s3.env heroku-python-build-heroku-18 bash
+15
View File
@@ -0,0 +1,15 @@
FROM heroku/cedar:14
WORKDIR /app
ENV WORKSPACE_DIR="/app/builds" \
S3_BUCKET="lang-python" \
S3_PREFIX="cedar-14/" \
DEBIAN_FRONTEND=noninteractive \
STACK="cedar-14"
RUN apt-get update && apt-get install -y python-pip libsqlite3-dev realpath && rm -rf /var/lib/apt/lists/*
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app
+5
View File
@@ -0,0 +1,5 @@
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
S3_BUCKET
S3_PREFIX
S3_REGION
+15
View File
@@ -0,0 +1,15 @@
FROM heroku/heroku:16-build
WORKDIR /app
ENV WORKSPACE_DIR="/app/builds" \
S3_BUCKET="lang-python" \
S3_PREFIX="heroku-16/" \
DEBIAN_FRONTEND=noninteractive \
STACK="heroku-16"
RUN apt-get update && apt-get install -y python-pip libsqlite3-dev && rm -rf /var/lib/apt/lists/*
COPY requirements.txt /app/
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
COPY . /app
+15
View File
@@ -0,0 +1,15 @@
FROM heroku/heroku:18-build
WORKDIR /app
ENV WORKSPACE_DIR="/app/builds" \
S3_BUCKET="lang-python" \
S3_PREFIX="heroku-18/" \
DEBIAN_FRONTEND=noninteractive \
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 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
COPY requirements.txt /app/
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
COPY . /app
+1 -1
View File
@@ -3,7 +3,7 @@
OUT_PREFIX=$1
echo "Building SQLite..."
echo "Building SQLite"
SOURCE_TARBALL='https://www.sqlite.org/sqlite-autoconf-3070900.tar.gz'
+5 -4
View File
@@ -8,16 +8,17 @@ export PATH="/app/.heroku/python/bin/:$PATH"
hash -r
echo "Building gdal..."
echo "Building gdal"
SOURCE_TARBALL='http://download.osgeo.org/gdal/1.11.1/gdal-1.11.1.tar.gz'
VERSION="2.2.1"
SOURCE_TARBALL="http://download.osgeo.org/gdal/${VERSION}/gdal-${VERSION}.tar.gz"
curl -L $SOURCE_TARBALL | tar zx
cd gdal-1.11.1
pushd "gdal-${VERSION}"
./configure --prefix=$OUT_PREFIX --enable-static=no &&
make
make install
# Cleanup
cd ..
popd
+6 -4
View File
@@ -8,16 +8,18 @@ export PATH="/app/.heroku/python/bin/:$PATH"
hash -r
echo "Building geos..."
echo "Building geos"
SOURCE_TARBALL='http://download.osgeo.org/geos/geos-3.4.3.tar.bz2'
VERSION=3.6.2
SOURCE_TARBALL="http://download.osgeo.org/geos/geos-${VERSION}.tar.bz2"
curl -L $SOURCE_TARBALL | tar xj
cd geos-3.4.3
pushd "geos-${VERSION}"
./configure --prefix=$OUT_PREFIX --enable-static=no &&
make
make install
# Cleanup
cd ..
popd
-28
View File
@@ -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 ..
+5 -5
View File
@@ -3,9 +3,9 @@
OUT_PREFIX=$1
# Skip the build for heroku-16.
if [[ $S3_PREFIX == "heroku-16" ]]; then
exit 0
if [[ $S3_PREFIX != "cedar-14" ]]; then
echo "libmemcached only needs to be built for cedar-14, since newer stacks include it in the base image"
exit 1
fi
# fail hard
@@ -20,7 +20,7 @@ dep_archive_name=${dep_dirname}.tar.gz
dep_url=https://launchpad.net/libmemcached/1.0/${dep_version}/+download/${dep_archive_name}
# SASL Support.
echo "-----> Building cyrus-sasl 2.1.26..."
echo "-----> Building cyrus-sasl 2.1.26"
curl -LO ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-2.1.26.tar.gz
# FTP doesn't play well with piping into tar xz
@@ -33,7 +33,7 @@ make -s -j 9
make install -s
popd
echo "-----> Building libmemcached ${dep_version}..."
echo "-----> Building libmemcached ${dep_version}"
curl -L ${dep_url} | tar xz
pushd ${dep_dirname}
+6 -5
View File
@@ -8,16 +8,17 @@ export PATH="/app/.heroku/python/bin/:$PATH"
hash -r
echo "Building gdal..."
echo "Building gdal"
SOURCE_TARBALL='http://download.osgeo.org/proj/proj-4.8.0.tar.gz'
VERSION=4.9.3
SOURCE_TARBALL="http://download.osgeo.org/proj/proj-${VERSION}.tar.gz"
curl -L $SOURCE_TARBALL | tar zx
cd proj-4.8.0
./configure --prefix=$OUT_PREFIX --enable-static=no &&
pushd "proj-${VERSION}"
./configure --prefix=$OUT_PREFIX --enable-static=no
make
make install
# Cleanup
cd ..
popd
+22
View File
@@ -0,0 +1,22 @@
#!/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}2-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…"
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"
+1 -10
View File
@@ -2,13 +2,4 @@
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
OUT_PREFIX=$1
echo "Building PyPy..."
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.3.1-linux64.tar.bz2'
curl -L $SOURCE_TARBALL | tar jx
cp -R pypy2-v5.3.1-linux64/* $OUT_PREFIX
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
source $(dirname $0)/pypy
+1 -10
View File
@@ -2,13 +2,4 @@
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
OUT_PREFIX=$1
echo "Building PyPy..."
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.6.0-linux64.tar.bz2'
curl -L $SOURCE_TARBALL | tar jx
cp -R pypy2-v5.6.0-linux64/* $OUT_PREFIX
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
source $(dirname $0)/pypy
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
source $(dirname $0)/pypy
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
source $(dirname $0)/pypy
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
source $(dirname $0)/pypy
+23
View File
@@ -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"
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/pypy2.7
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/pypy2.7
+22
View File
@@ -0,0 +1,22 @@
#!/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…"
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"
+1 -10
View File
@@ -2,13 +2,4 @@
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
OUT_PREFIX=$1
echo "Building PyPy..."
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-linux64.tar.bz2'
curl -L $SOURCE_TARBALL | tar jx
cp -R pypy3-2.4.0-linux64/* $OUT_PREFIX
ln $OUT_PREFIX/bin/pypy3 $OUT_PREFIX/bin/python
source $(dirname $0)/pypy3
+4 -10
View File
@@ -2,13 +2,7 @@
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
OUT_PREFIX=$1
echo "Building PyPy..."
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy3.3-v5.5.0-alpha-linux64.tar.bz2'
curl -L $SOURCE_TARBALL | tar jx
cp -R pypy3-v5.5.0-linux64/* $OUT_PREFIX
ln $OUT_PREFIX/bin/pypy3 $OUT_PREFIX/bin/python
# version pypy3-5.5.0 is really called pypy3.3-v5.5.0-alpha
dep_version_prefix=".3"
dep_version_suffix="-alpha"
source $(dirname $0)/pypy3
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
source $(dirname $0)/pypy3
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
source $(dirname $0)/pypy3
+23
View File
@@ -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"
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/pypy3.6
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/pypy3.6
+1 -12
View File
@@ -1,15 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
OUT_PREFIX=$1
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
source $(dirname $0)/python2
+1 -12
View File
@@ -1,15 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
OUT_PREFIX=$1
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
source $(dirname $0)/python2
+1 -12
View File
@@ -1,15 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
OUT_PREFIX=$1
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
source $(dirname $0)/python2
+1 -12
View File
@@ -1,15 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
OUT_PREFIX=$1
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
source $(dirname $0)/python2
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python2
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python2
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python2
+27
View File
@@ -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.17/Python-2.7.17.tgz'
curl -L $SOURCE_TARBALL | tar xz
mv Python-2.7.17 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 '{}' +
+27
View File
@@ -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 -12
View File
@@ -1,15 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
# Build Deps: libraries/sqlite
OUT_PREFIX=$1
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
source $(dirname $0)/python2
+32
View File
@@ -0,0 +1,32 @@
#!/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/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
+32
View File
@@ -0,0 +1,32 @@
#!/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/3.4.9/Python-3.4.9.tgz'
curl -L $SOURCE_TARBALL | tar xz
mv Python-3.4.9 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
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+1 -15
View File
@@ -1,18 +1,4 @@
#!/usr/bin/env bash
# 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
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+1 -15
View File
@@ -1,18 +1,4 @@
#!/usr/bin/env bash
# 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
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build Path: /app/.heroku/python/
source $(dirname $0)/python3

Some files were not shown because too many files have changed in this diff Show More