| Toolchain | Version |
|---|---|
| Rust | ^1.88.0 |
| just | ^1.36.0 |
| uv | ^0.5.0 |
| Docker | - |
Get the source code
git clone https://github.com/Nugine/s3s.git
cd s3sjust devjust crawl
just codegenIt should change nothing if you are running the latest code.
Check for API breaking changes:
just semver-checksNote: This requires published crate versions on crates.io to compare against.
just docInstall s3s-fs from source
cargo install --path crates/s3s-fs --features binaryYou can also use the shortcut
just install s3s-fsOr install from crates.io
cargo install s3s-fs --features binaryRun s3s-fs with example configuration
./scripts/s3s-fs.shCredentials used in the example configuration:
Access Key: AKEXAMPLES3S
Secret Key: SKEXAMPLES3S
Then you can explore it with your favorite S3 client!
MinIO-backed E2E tests start a MinIO container. MinIO stopped publishing free
community images and removed the minio/minio Docker Hub repository, so s3s
builds the last upstream state from source and publishes it to
ghcr.io/s3s-project/minio; the pinned digest lives in
scripts/minio.env.
Install s3s-proxy
just install s3s-proxyRun the combined server and save logs
./scripts/s3s-proxy.sh | tee target/s3s-proxy.logOpen a new terminal, then run the test suite
./scripts/mint.sh | tee target/mint.logInstall s3s-proxy
just install s3s-proxyRun a minimal Ceph s3-tests run against s3s-proxy (backed by MinIO):
./scripts/e2e-s3tests.shThis script has additional prerequisites:
- Docker must be installed and a local Docker daemon running (used to start MinIO).
- Network access is required on first run so the script can clone the
ceph/s3-testsrepository.
The rclone test covers real client workflows including recursive transfers,
content verification, object listing and deletion, ranged reads,
remote-to-remote copy, and a forced multipart upload. Install s3s-fs, ensure
Docker is running, then run:
just install s3s-fs
./scripts/e2e-rclone-fs.shThe underlying runner can also validate another S3-compatible endpoint. See
tests/rclone/README.md for configuration and
coverage details.
We follow the Conventional Commits specification.