DocsAWS 101Blog
← Back to Blog

v1.3.19 — S3 vhost on custom MINISTACK_HOST, Glue LocationUri, ruff on PRs

April 29, 2026 · v1.3.19

1.3.19 closes a regression introduced by the broader vhost matching that landed in 1.3.17, plus a Glue spec-compliance bug and a CI gap. Quick patch on the way to 1.3.20.

1. S3 against a custom MINISTACK_HOST returned NoSuchBucket

1.3.17's _extract_s3_vhost_bucket intentionally accepted any tail so virtual-hosted-style S3 routing would work against a Docker Compose service name (bucket.ministack:4566) without configuration. The matcher was too permissive: any dotted hostname was treated as virtual-hosted, with the first label extracted as the bucket. A request to http://aws.private:4566 was misrouted as a vhost request for a bucket named aws.

The matcher now checks the tail against MINISTACK_HOST and recognises all 18 documented AWS S3 virtual-hosted patterns:

Bare hostnames, IPv4 addresses, and localhost are correctly treated as path-style. Reported by @dsrosario. The new TestS3VhostGetPutObject integration suite (added by @mgius-ae) exercises both addressing styles end-to-end including max-length dotted bucket names.

2. Glue GetDatabase returned LocationUri: "" when not set

AWS specifies a minimum length of 1 for LocationUri, so the empty-string default violated the spec — clients deserializing the field with strict validation rejected the response. GetDatabase now returns null when the field was omitted on CreateDatabase. Contributed by @dcrn.

3. Ruff lint not running on pull requests

The CI workflow trigger was missing the pull_request event — lint only ran on pushes to master. PRs could land with style regressions that only surfaced post-merge. Trigger fixed.

Upgrade

# Regular image (Alpine)
docker pull ministackorg/ministack:1.3.19

# Full image (Debian + DuckDB + psycopg2 + pymysql)
docker pull ministackorg/ministack:1.3.19-full

# pip
pip install -U ministack

Full changelog: CHANGELOG.md.

Shipped by the MiniStack community. GitHub · r/ministack