ref:main
chore(deps): Elixir 1.20 / OTP 29 readiness — fix warnings, re-pin deps, ex_aws→Req #41
merged
cole.christensen@gmail.com wants to merge
chore/elixir-1.20-deps-upgrade
into main
No CI
Makes the library clean and current under Elixir 1.20 / Erlang 29, and unblocks Anvil’s toolchain upgrade (Anvil consumes this lib).
Changes
- Fix all 22 bitstring
size(^var)pin warnings — Elixir 1.20 requires the pin operator on outer variables used insidebinary-size()within a match. Acrosspkt_line,pack/{reader,index,delta},lfs/store/s3,protocol/receive_pack. Literals (binary-size(4),binary-size(20)) and@trailer_sizeleft untouched. upload_pack.sanitize_error/1: drop the unreachable atom/tuple/catch-all clauses (the 1.20 type checker proves all callers pass a binary; the file already had@dialyzer nowarnacknowledging they were dead) and the now-moot suppression. A non-binary reason would nowFunctionClauseErrorloudly here.- Re-pin all deps to latest: ex_aws 2.7, telemetry 1.4, bandit 1.11, plug 1.19, ex_doc 0.40, credo 1.7.18 (1.7.16 crashed under Elixir 1.20), stream_data 1.3. Elixir requirement →
~> 1.20. - Switch ex_aws’s HTTP client from hackney to its
Reqadapter; drop the hackney dependency. hackney 4.x broke ex_aws’s bundled hackney adapter (CaseClauseErroron the response shape) — the:s3conformance tests caught it against MinIO.Reqis modern/maintained and verified.http_clientis set inconfig/config.exsfor this lib’s own dev/test only (a dependency’s config isn’t loaded by consumers — apps set their own:ex_aws, :http_client).
Verification
mix compile --warnings-as-errors— cleanmix format --check-formatted— cleanmix dialyzer— 0 errorsmix test --include s3— 1024 passed (incl. the:s3ex_aws→Req→S3 conformance tests against a live MinIO)
Note: credo isn’t in this repo’s CI gate (compile-WAE + format + dialyzer + test); pre-existing credo --strict style suggestions are out of scope here.
🤖 Generated with Claude Code
Created Jun 03, 2026 at 23:22 UTC
| Merged Jun 04, 2026 at 01:25 UTC
by
cole.christensen@gmail.com