This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Wave is a containers provisioning service that allows building container images on-demand and acts as a proxy for container registries. It's built with Java/Groovy using the Micronaut framework and follows a microservices architecture.
- Run development server:
./run.sh(runs with continuous compilation and file watching) - Build project:
./gradlew assembleormake compile - Run tests:
./gradlew testormake check - Run specific test:
./gradlew test --tests 'TestClassName' - Build container image:
./gradlew jibDockerBuildormake image - Generate code coverage:
./gradlew jacocoTestReport(runs automatically after tests)
Wave requires several environment variables for registry authentication:
DOCKER_USER/DOCKER_PATfor Docker HubQUAY_USER/QUAY_PATfor Quay.ioAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYfor AWS ECRAZURECR_USER/AZURECR_PATfor Azure Container RegistryWAVE_AWS_JUMP_ROLE_ARN/WAVE_AWS_JUMP_EXTERNAL_IDfor cross-account IAM role chaining
- ContainerBuildService: Manages container image building (Docker/Kubernetes strategies)
- ContainerMirrorService: Handles container mirroring operations
- ContainerScanService: Security vulnerability scanning
- RegistryProxyService: Acts as proxy between clients and registries
- BlobCacheService: Caches container layers and artifacts
- JobManager: Handles async job processing and queuing
- ContainerController: Main API for container provisioning (
/container-token) - BuildController: Container build operations
- ScanController: Security scanning endpoints
- RegistryProxyController: Registry proxy functionality
- Uses PostgreSQL with Micronaut Data JDBC
- Redis for caching and distributed state
- Object storage (AWS S3) for blob/artifact storage
- Kubernetes for production container builds
- Main config:
src/main/resources/application.yml - Environment-specific configs in
src/main/resources/application-*.yml - Uses Micronaut's configuration system with property injection
- Framework: Micronaut 4.10.6 with Netty runtime
- Language: Groovy with Java 21+
- Build Tool: Gradle with custom conventions
- Container: JIB for multi-platform builds (AMD64/ARM64)
- Database: PostgreSQL with HikariCP connection pooling
- Cache: Redis with Jedis client
- Testing: Spock 2 framework
- Metrics: Micrometer with Prometheus
- Security: JWT authentication for Tower integration
- The codebase uses custom Gradle conventions defined in
buildSrc/ - Container images are built using Amazon Corretto 25 with jemalloc
- The service requires Kubernetes cluster for production builds
- Rate limiting is implemented using Spillway library
- All async operations use Reactor pattern with Micronaut Reactor
- Update the
VERSIONfile with a semantic version - Update the `changelog.txt file with changes against previous release
- Commit VERSION and changelog.txt file adding the tag
[release]in the commit comment first line. - Git push to upstream master branch.