heroku / buildpacks-python

Heroku's Cloud Native Buildpack for Python applications.
BSD 3-Clause "New" or "Revised" License
26 stars 2 forks source link

Update to libcnb 0.21, Buildpack API 0.10 and switch from stacks to targets #197

Closed edmorley closed 4 months ago

edmorley commented 4 months ago

A libcnb.rs release supports a single Buildpack API version, so whenever we update to a libcnb release that now implements a newer Buildpack API version, we must switch to that version in the buildpack at the same time.

This change updates the buildpack to libcnb 0.21.0, which requires both a switch to Buildpack API 0.10, a switch from stacks to targets, and also some adjustments for layer API changes.

As part of the switch from stacks to targets, the buildpack now consumes the Python runtime from the new S3 location/filenames (that use distro name/version in the URL instead of stack ID), which were added in: https://github.com/heroku/heroku-buildpack-python/pull/1567

The new archives also now use Zstandard (aka zstd) for compression instead of gzip, which results in a faster download due to the smaller archive size (for example, the Ubuntu 22.04 Python 3.12.3 AMD64 archive was 26% smaller) as well as faster decompression. This required switching from the flate2 crate to the zstd crate.

A side-effect of switching to the new S3 files is that the archives for Python 3.7 are no longer available, since I intentionally did not build them given that Python 3.7 is EOL. As such, this change also drops support for Python 3.7 (something that the classic buildpack has already done, and would have been done here already if it were not for being blocked on #8).

The switch to targets unblocks Heroku-24/multi-architecture support, which will be handled in a later PR.

Closes #192. Closes #194. GUS-W-15261168.