initial commit
This commit is contained in:
118
.claude/claude.md
Normal file
118
.claude/claude.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# CF Deployer Spring Boot Application - Implementation Request
|
||||
|
||||
## Overview
|
||||
Create a Spring Boot 3+ application with Gradle 8.14 that exposes a REST API endpoint for deploying Java applications to Cloud Foundry/Tanzu environments. The application itself will be deployed on Tanzu but must allow users to deploy to different Tanzu environments.
|
||||
|
||||
## Technical Requirements
|
||||
|
||||
### Build Configuration
|
||||
- **Gradle Version**: 8.14
|
||||
- **Spring Boot Version**: 3.2.0 or higher
|
||||
- **Java Version**: 17+
|
||||
- **Key Dependencies**:
|
||||
- Spring Boot Starter Web
|
||||
- Spring Boot Starter Validation
|
||||
- Apache Commons IO
|
||||
- Lombok (for clean code)
|
||||
|
||||
### Core Functionality
|
||||
1. **Endpoint**: `POST /api/cf/deploy`
|
||||
- Accepts multipart form data with three parts:
|
||||
- `request`: JSON object containing CF credentials and target info
|
||||
- `jarFile`: The fat JAR file to deploy
|
||||
- `manifest`: The manifest.yml file for CF deployment
|
||||
|
||||
2. **CF CLI Integration**:
|
||||
- Package CF CLI binary with the application JAR
|
||||
- Download CF CLI during build process (Gradle task)
|
||||
- Support Linux, macOS, and Windows
|
||||
- Execute CF commands programmatically
|
||||
|
||||
3. **Deployment Flow**:
|
||||
- Accept user credentials, API endpoint, org, space
|
||||
- Accept JAR file and manifest.yml
|
||||
- Login to CF using provided credentials
|
||||
- Push application using `cf push` command
|
||||
- Logout from CF
|
||||
- Return deployment status and output
|
||||
|
||||
### Request Model Fields
|
||||
- `apiEndpoint`: CF API URL
|
||||
- `username`: CF username
|
||||
- `password`: CF password
|
||||
- `organization`: Target CF org
|
||||
- `space`: Target CF space
|
||||
- `appName`: Application name
|
||||
- `skipSslValidation`: Boolean flag for SSL validation
|
||||
|
||||
### Response Model Fields
|
||||
- `success`: Boolean deployment status
|
||||
- `message`: Human-readable message
|
||||
- `deploymentId`: Unique deployment identifier (UUID)
|
||||
- `output`: CF CLI output
|
||||
- `error`: Error details if failed
|
||||
|
||||
## Implementation Details
|
||||
|
||||
### Required Components
|
||||
1. **Models**:
|
||||
- `CfDeployRequest` - Request DTO with validation annotations
|
||||
- `CfDeployResponse` - Response DTO with deployment details
|
||||
|
||||
2. **Service Layer**:
|
||||
- `CfCliService` - Service to handle CF CLI execution
|
||||
- Methods: `deployApplication()`, `login()`, `pushApplication()`, `logout()`
|
||||
- Use temp directories for file operations
|
||||
- Implement proper cleanup after deployment
|
||||
|
||||
3. **Controller Layer**:
|
||||
- `CfDeployController` - REST endpoint controller
|
||||
- File validation (JAR and YAML extensions)
|
||||
- Request validation using Bean Validation
|
||||
|
||||
4. **Configuration**:
|
||||
- `application.yml` - Configure multipart file size (500MB), timeouts
|
||||
- `GlobalExceptionHandler` - Handle validation and file size exceptions
|
||||
|
||||
5. **Build Configuration**:
|
||||
- Gradle task to download CF CLI during build
|
||||
- Extract and package CF CLI in application resources
|
||||
- Detect OS and download appropriate CF CLI binary
|
||||
|
||||
### Security & Best Practices
|
||||
- Clean up temporary files after deployment
|
||||
- Secure password handling (don't log passwords)
|
||||
- Command timeout configuration
|
||||
- Process output streaming
|
||||
- Proper error handling and logging
|
||||
|
||||
### Configuration Properties
|
||||
```yaml
|
||||
spring.servlet.multipart.max-file-size: 500MB
|
||||
spring.servlet.multipart.max-request-size: 500MB
|
||||
cf.cli.timeout: 600 # seconds
|
||||
cf.cli.path: # optional explicit path
|
||||
```
|
||||
|
||||
## Code Style Requirements
|
||||
- Use Lombok annotations (@Data, @Builder, @Slf4j, @RequiredArgsConstructor)
|
||||
- Follow Spring Boot best practices
|
||||
- Proper logging at INFO and DEBUG levels
|
||||
- Clean, maintainable code structure
|
||||
|
||||
## Expected Deliverables
|
||||
Provide only the essential Java classes and configuration files:
|
||||
1. `build.gradle` - with CF CLI download task and Gradle 8.14 wrapper
|
||||
2. `CfDeployRequest.java` - Request model with Lombok
|
||||
3. `CfDeployResponse.java` - Response model with Lombok
|
||||
4. `CfCliService.java` - CF CLI execution service
|
||||
5. `CfDeployController.java` - REST controller
|
||||
6. `GlobalExceptionHandler.java` - Exception handling
|
||||
7. `application.yml` - Application configuration
|
||||
|
||||
Do NOT provide:
|
||||
- Complete project structure/directory tree
|
||||
- Application main class
|
||||
- Test classes
|
||||
- Deployment manifests
|
||||
- README or documentation files
|
||||
Reference in New Issue
Block a user