You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add support for S3-backed Docker build layer caching using BuildKit's
type=s3 cache backend. This enables faster Docker builds by caching
intermediate layers in S3.
Configuration via environment variables:
- LEEWAY_DOCKER_S3_CACHE_BUCKET: S3 bucket name (required)
- LEEWAY_DOCKER_S3_CACHE_REGION: AWS region (required)
- LEEWAY_DOCKER_S3_CACHE_PREFIX: Optional prefix for cache keys
- LEEWAY_DOCKER_S3_CACHE_MODE: Cache mode (min/max, default: max)
- LEEWAY_DOCKER_S3_CACHE_ENDPOINT: Custom S3 endpoint
Also adds corresponding CLI flags for all options.
When S3 cache is enabled, leeway automatically uses docker buildx build
with --cache-from and --cache-to flags.
Co-authored-by: Ona <no-reply@ona.com>
Copy file name to clipboardExpand all lines: README.md
+33Lines changed: 33 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -209,6 +209,39 @@ E.g. `component/nested:docker` becomes `COMPONENT_NESTED__DOCKER`.
209
209
210
210
See `leeway build --help` for more details.
211
211
212
+
#### S3 Docker Build Cache
213
+
214
+
Leeway supports S3-backed Docker build layer caching using BuildKit's `type=s3` cache backend. This can significantly speed up Docker builds by caching intermediate layers in S3.
export LEEWAY_DOCKER_S3_CACHE_MODE=max # optional: 'min' or 'max' (default: max)
222
+
export LEEWAY_DOCKER_S3_CACHE_ENDPOINT=https://... # optional: for S3-compatible storage
223
+
```
224
+
225
+
**Configuration via CLI flags:**
226
+
```bash
227
+
leeway build \
228
+
--docker-s3-cache-bucket=my-cache-bucket \
229
+
--docker-s3-cache-region=us-east-1 \
230
+
--docker-s3-cache-prefix=docker-cache/ \
231
+
:my-docker-package
232
+
```
233
+
234
+
**Requirements:**
235
+
- Docker Buildx (automatically used when S3 cache is configured)
236
+
- AWS credentials configured (via environment variables, IAM role, or AWS config file)
237
+
- S3 bucket with appropriate permissions
238
+
239
+
**Cache modes:**
240
+
- `max`: Cache all layers including intermediate layers (better cache hit rate, more storage)
241
+
- `min`: Cache only the final layer (less storage, fewer cache hits)
242
+
243
+
When S3 cache is enabled, leeway automatically switches to `docker buildx build` with `--cache-from` and `--cache-to` flags pointing to the configured S3 bucket.
cmd.Flags().Bool("report-github", os.Getenv("GITHUB_OUTPUT") !="", "Report package build success/failure to GitHub Actions using the GITHUB_OUTPUT environment variable")
242
242
cmd.Flags().Bool("fixed-build-dir", true, "Use a fixed build directory for each package, instead of based on the package version, to better utilize caches based on absolute paths (defaults to true)")
243
243
cmd.Flags().Bool("docker-export-to-cache", false, "Export Docker images to cache instead of pushing directly (enables SLSA L3 compliance)")
244
+
245
+
// Docker S3 build cache flags
246
+
cmd.Flags().String("docker-s3-cache-bucket", os.Getenv(leeway.EnvvarDockerS3CacheBucket), "S3 bucket for Docker build layer caching (defaults to $LEEWAY_DOCKER_S3_CACHE_BUCKET)")
247
+
cmd.Flags().String("docker-s3-cache-region", os.Getenv(leeway.EnvvarDockerS3CacheRegion), "AWS region for Docker S3 cache bucket (defaults to $LEEWAY_DOCKER_S3_CACHE_REGION)")
248
+
cmd.Flags().String("docker-s3-cache-prefix", os.Getenv(leeway.EnvvarDockerS3CachePrefix), "Prefix for Docker S3 cache keys (defaults to $LEEWAY_DOCKER_S3_CACHE_PREFIX)")
249
+
cmd.Flags().String("docker-s3-cache-mode", os.Getenv(leeway.EnvvarDockerS3CacheMode), "Docker S3 cache mode: 'min' or 'max' (defaults to 'max')")
0 commit comments