Files
cf-uploader/.claude/claude.md
2025-10-20 11:07:35 -05:00

4.0 KiB

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

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