add readme

This commit is contained in:
pratik
2025-10-20 13:34:33 -05:00
parent 0e9bdfa3cc
commit d81e80f273

191
README.md Normal file
View File

@@ -0,0 +1,191 @@
# CF Deployer - Cloud Foundry Deployment Service
A Spring Boot application that provides a REST API for deploying Java applications to Cloud Foundry/Tanzu environments.
## Prerequisites
- Java 21
- Gradle 8.14
## Build and Run
### Build the application
```bash
./gradlew clean build
```
### Run the application
```bash
./gradlew bootRun
```
Or run the JAR directly:
```bash
java -jar build/libs/cf-uploader-1.0.0.jar
```
The application will start on `http://localhost:8080`
## API Endpoint
### Deploy Application to Cloud Foundry
**Endpoint:** `POST /api/cf/deploy`
**Content-Type:** `multipart/form-data`
**Request Parts:**
- `request` (JSON string): Deployment configuration
- `jarFile` (file): The Java application JAR file
- `manifest` (file): Cloud Foundry manifest.yml file
### Sample cURL Request
```bash
curl -X POST http://localhost:8080/api/cf/deploy \
-F 'request={
"apiEndpoint": "https://api.cf.example.com",
"username": "your-username",
"password": "your-password",
"organization": "your-org",
"space": "your-space",
"appName": "my-app",
"skipSslValidation": false
}' \
-F 'jarFile=@/path/to/your/application.jar' \
-F 'manifest=@/path/to/manifest.yml'
```
### Sample Request with Skip SSL Validation
```bash
curl -X POST http://localhost:8080/api/cf/deploy \
-F 'request={
"apiEndpoint": "https://api.sys.tanzu.example.com",
"username": "admin",
"password": "admin123",
"organization": "development",
"space": "dev",
"appName": "sample-app",
"skipSslValidation": true
}' \
-F 'jarFile=@./sample-app.jar' \
-F 'manifest=@./manifest.yml'
```
### Sample Manifest File (manifest.yml)
```yaml
---
applications:
- name: sample-app
memory: 1G
instances: 2
path: sample-app.jar
buildpacks:
- java_buildpack
env:
SPRING_PROFILES_ACTIVE: production
```
## Request Parameters
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `apiEndpoint` | String | Yes | Cloud Foundry API endpoint URL |
| `username` | String | Yes | CF username |
| `password` | String | Yes | CF password |
| `organization` | String | Yes | Target CF organization |
| `space` | String | Yes | Target CF space |
| `appName` | String | Yes | Application name |
| `skipSslValidation` | Boolean | Yes | Skip SSL certificate validation |
## Response Format
### Success Response
```json
{
"success": true,
"message": "Application deployed successfully",
"deploymentId": "123e4567-e89b-12d3-a456-426614174000",
"output": "CF CLI output logs...",
"error": null
}
```
### Error Response
```json
{
"success": false,
"message": "Application deployment failed",
"deploymentId": "123e4567-e89b-12d3-a456-426614174000",
"output": "CF CLI output logs...",
"error": "Error details..."
}
```
## Configuration
Application settings can be configured in `src/main/resources/application.properties`:
```properties
# Server port
server.port=8080
# Max file size (default: 500MB)
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
# CF CLI timeout in seconds (default: 600)
cf.cli.timeout=600
# Optional: Custom CF CLI path (if not using bundled binaries)
cf.cli.path=
```
## Features
- RESTful API for CF deployments
- Automatic CF CLI binary management (Linux, macOS, Windows)
- Secure password handling (masked in logs)
- Configurable timeout for long-running deployments
- Comprehensive error handling
- Multipart file upload support up to 500MB
- Automatic cleanup of temporary files
## Error Handling
The API handles various error scenarios:
- **400 Bad Request**: Invalid request parameters or file validation errors
- **413 Payload Too Large**: Files exceed 500MB limit
- **500 Internal Server Error**: Deployment failures or unexpected errors
## Development
### Project Structure
```
src/main/java/com/cfdeployer/
├── controller/ # REST controllers
├── service/ # Business logic
├── model/ # DTOs
└── exception/ # Exception handlers
src/main/resources/
├── application.properties
└── cf-cli/ # CF CLI binaries (auto-downloaded)
```
### Build with Custom CF CLI Version
Edit `build.gradle` to change the CF CLI version:
```groovy
def cfCliVersion = '8.7.10' // Change this version
```
## License
This project is licensed under the MIT License.