All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to PEP 440.
- Fail when a distribution package doesn't exist.
- Allow uploading source distributions with
.tar.bz2
,.tar.xz
, and.zip
extensions.
- Require Python 3.7 or greater.
- SHA-256 checksums of packages to URLs. [@andrei-shabanski](https://github.com/andrei- shabanski)
--no-sign-request
option to disable S3 authentication. @jaustinpage- Expand glob patterns in case they were not expanded by a shell. @jaustinpage
--s3-endpoint-url
option for targeting a custom S3 endpoint.
- Terraform config for an optional DynamoDB table used for distributed locking.
--lock-indexes
option to lock index objects in S3 using said DynamoDB table.--put-root-index
option to write a root index that lists all package names.
- Set CloudFront default root object to
index.html
.
- Terraform configuration for S3 and CloudFront, including optional basic authentication using Lambda@Edge and AWS Systems Manager Parameter Store. Instructions for migrating from CloudFormation are in the README.
--s3-put-args
option for passing extra arguments to S3 PutObject calls. Example:--s3-put-args='ServerSideEncryption=aws:kms,SSEKMSKeyId=1234...'
- CLI arguments have been overhauled. See
s3pypi --help
for details. - The default behaviour for uploading index pages has changed. Previously, they would
be placed under the
<package>/index.html
key in S3, which could be changed to<package>/
using the--bare
option. This has now been reversed: the default key is<package>/
, and an option--unsafe-s3-website
was added to appendindex.html
. This new behaviour assumes that CloudFront uses the S3 REST API endpoint as its origin, not the S3 website endpoint. This allows the bucket to remain private, with CloudFront accessing it through an Origin Access Identity (OAI). The new Terraform configuration includes such an OAI by default. To keep using the old configuration, packages must be uploaded with--unsafe-s3-website --acl public-read
. This is not recommended, because the files will be publicly accessible!
- Python 2 support.
- Automatic creation of distributions. From now on, distributions must be created using a separate build command. See the README for an example.
- The
--private
option. The default ACL is nowprivate
, and you can pass a different one using the--acl
option. - CloudFormation templates (replaced by Terraform configuration).
- Jinja2 dependency.
- New
--acl
option, mutually exclusive with--private
. @marcelgwerder
- Preserve existing files of the same version in the index when uploading with
--force
. @natefoo
- Support
--dist-path
with only a wheel package present. @takacsd