feat(storage): adjust S3 driver to S06 narrowed interface (Step 16)

Adjusts the Container Registry S3 v2 driver to S06's narrowed StorageDriver interface and wires it to the Step 15 conformance suite (S06 Step 16).

Scope

  • Promote internal/storage/_imported/driver/s3-aws/v2internal/storage/driver/s3/, and remove the promoted/superseded source from _imported/.
  • Adapt to the narrowed interface (offset-based Writer, Exists, non-recursive Delete, metadata on PutContent/Move) and AR observability/lint conventions.
  • The driver is config-agnostic: New(params DriverParameters, logger) takes a driver-owned params struct with already-resolved credentials (and an optional Transport test seam) and does no secret or config I/O. The composition root maps config.S3Config (+ secret-provider-resolved credentials) onto DriverParameters in a later wiring step; tests build it from env.
  • FileWriter buffer-flush failures surface as *storage.PartialFlushError (terminal G1a/G1b), exercised via a flushFail gofail seam in the test:storage-failpoints job.
  • New() rejects a non-positive max_requests_per_second (a zero-rate throttler would stall every request).
  • config bounds-checks storage.s3.chunk_size against the driver's own s3.MinChunkSize / s3.MaxChunkSize (single source of truth).

Tests / CI

  • Conformance suite via an S3 factory + AC#7/#9/#11 tests (//go:build integration), configured from ARTIFACT_REGISTRY_TEST_S3_* env (creds via the AWS_* default chain).
  • test:integration:s3-seaweedfs and test:integration:s3-seaweedfs run conformance + AC suites against a SeaweedFS+GarageFS service container on every MR touching the driver.

Follow-ups (later steps)

  • Real-AWS auth-mode matrix on the default branch; local mise task for the SeaweedFS conformance run.
  • Composition-root credential wiring (config.S3ConfigDriverParameters via the LabKit v2 secret provider).

Related to #161 (closed)

🤖 Generated with Claude Code

Edited by Pawel Rozlach

Merge request reports

Loading
Loading