|
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
| 4 | + |
| 5 | +## Project Overview |
| 6 | + |
| 7 | +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. |
| 8 | + |
| 9 | +## Key Commands |
| 10 | + |
| 11 | +### Development |
| 12 | +- **Run development server**: `./run.sh` (runs with continuous compilation and file watching) |
| 13 | +- **Build project**: `./gradlew assemble` or `make compile` |
| 14 | +- **Run tests**: `./gradlew test` or `make check` |
| 15 | +- **Run specific test**: `./gradlew test --tests 'TestClassName'` |
| 16 | +- **Build container image**: `./gradlew jibDockerBuild` or `make image` |
| 17 | +- **Generate code coverage**: `./gradlew jacocoTestReport` (runs automatically after tests) |
| 18 | + |
| 19 | +### Environment Setup |
| 20 | +Wave requires several environment variables for registry authentication: |
| 21 | +- `DOCKER_USER`/`DOCKER_PAT` for Docker Hub |
| 22 | +- `QUAY_USER`/`QUAY_PAT` for Quay.io |
| 23 | +- `AWS_ACCESS_KEY_ID`/`AWS_SECRET_ACCESS_KEY` for AWS ECR |
| 24 | +- `AZURECR_USER`/`AZURECR_PAT` for Azure Container Registry |
| 25 | + |
| 26 | +## Architecture |
| 27 | + |
| 28 | +### Core Services |
| 29 | +- **ContainerBuildService**: Manages container image building (Docker/Kubernetes strategies) |
| 30 | +- **ContainerMirrorService**: Handles container mirroring operations |
| 31 | +- **ContainerScanService**: Security vulnerability scanning |
| 32 | +- **RegistryProxyService**: Acts as proxy between clients and registries |
| 33 | +- **BlobCacheService**: Caches container layers and artifacts |
| 34 | +- **JobManager**: Handles async job processing and queuing |
| 35 | + |
| 36 | +### Key Controllers |
| 37 | +- **ContainerController**: Main API for container provisioning (`/container-token`) |
| 38 | +- **BuildController**: Container build operations |
| 39 | +- **ScanController**: Security scanning endpoints |
| 40 | +- **RegistryProxyController**: Registry proxy functionality |
| 41 | + |
| 42 | +### Storage & Persistence |
| 43 | +- Uses PostgreSQL with Micronaut Data JDBC |
| 44 | +- Redis for caching and distributed state |
| 45 | +- Object storage (AWS S3) for blob/artifact storage |
| 46 | +- Kubernetes for production container builds |
| 47 | + |
| 48 | +### Configuration |
| 49 | +- Main config: `src/main/resources/application.yml` |
| 50 | +- Environment-specific configs in `src/main/resources/application-*.yml` |
| 51 | +- Uses Micronaut's configuration system with property injection |
| 52 | + |
| 53 | +## Technology Stack |
| 54 | +- **Framework**: Micronaut 4.x with Netty runtime |
| 55 | +- **Language**: Groovy with Java 21+ |
| 56 | +- **Build Tool**: Gradle with custom conventions |
| 57 | +- **Container**: JIB for multi-platform builds (AMD64/ARM64) |
| 58 | +- **Database**: PostgreSQL with HikariCP connection pooling |
| 59 | +- **Cache**: Redis with Jedis client |
| 60 | +- **Testing**: Spock 2 framework |
| 61 | +- **Metrics**: Micrometer with Prometheus |
| 62 | +- **Security**: JWT authentication for Tower integration |
| 63 | + |
| 64 | +## Important Notes |
| 65 | +- The codebase uses custom Gradle conventions defined in `buildSrc/` |
| 66 | +- Container images are built using Amazon Corretto 25 with jemalloc |
| 67 | +- The service requires Kubernetes cluster for production builds |
| 68 | +- Rate limiting is implemented using Spillway library |
| 69 | +- All async operations use Reactor pattern with Micronaut Reactor |
| 70 | + |
| 71 | +## Release Process |
| 72 | + |
| 73 | +1. Update the `VERSION` file with a semantic version |
| 74 | +2. Update the `changelog.txt file with changes against previous release |
| 75 | +3. Commit VERSION and changelog.txt file adding the tag `[release]` in the commit comment first line. |
| 76 | +4. Git push to upstream master branch. |
0 commit comments