Dockerfile generator for jvagent applications
Project description
jvdeploy
A standalone Dockerfile generator and deployment tool for jvagent applications. This tool discovers action dependencies from info.yaml files, generates production-ready Dockerfiles with optimized layer caching, and deploys applications to AWS Lambda and Kubernetes.
Overview
jvdeploy is a Python CLI tool that automates Dockerfile generation and deployment for jvagent applications. It:
- Validates jvagent application structure (requires
app.yaml) - Discovers pip dependencies from all action
info.yamlfiles - Generates Dockerfiles with separate RUN commands per action for optimal layer caching
- Extends a customizable base Dockerfile template
- Deploys applications to AWS Lambda with ECR, IAM, and API Gateway integration
- Supports Kubernetes deployment (coming soon)
Installation
From Source
cd jvdeploy
pip install -e .
With Deployment Features
cd jvdeploy
pip install -e ".[deploy]"
For Development
cd jvdeploy
pip install -e ".[dev]"
Usage
Dockerfile Generation
Generate Dockerfiles using the generate command or the legacy direct invocation:
# Generate Dockerfile in current directory
cd my-jvagent-app
jvdeploy generate
# Or using legacy syntax
jvdeploy
# Generate Dockerfile for specific app
jvdeploy generate /path/to/my-app
# With absolute path
jvdeploy generate ~/projects/my-jvagent-app
Deployment
Deploy jvagent applications to AWS Lambda or Kubernetes:
# Initialize deployment configuration
jvdeploy init --lambda
# Deploy to AWS Lambda
export JVAGENT_ADMIN_PASSWORD="your-secure-password"
jvdeploy deploy lambda --all
# Check deployment status
jvdeploy status lambda
# View logs
jvdeploy logs lambda --follow
# Destroy deployment
jvdeploy destroy lambda --yes
For complete deployment documentation, see DEPLOY_README.md.
Quick Deployment Example
# 1. Initialize configuration
cd my-jvagent-app
jvdeploy init --lambda
# 2. Edit deploy.yaml with your settings
vim deploy.yaml
# 3. Set required environment variables
export JVAGENT_ADMIN_PASSWORD="your-password"
# 4. Deploy (dry-run first to test)
jvdeploy deploy lambda --all --dry-run
# 5. Actual deployment
jvdeploy deploy lambda --all
# 6. Check the deployment
jvdeploy status lambda
# 7. View your API URL in the output!
How It Works
1. App Validation
- Validates that
app.yamlexists in the app root directory - Ensures the directory is a valid jvagent application
2. Dependency Discovery
- Scans
agents/{namespace}/{agent_name}/actions/directory structure - For each action, reads
info.yamlfile - Extracts
package.dependencies.piplist from each action - Deduplicates dependencies per action
3. Dockerfile Generation
- Loads base Dockerfile template (
Dockerfile.base) - Generates separate RUN commands per action for pip dependencies
- Replaces
{{ACTION_DEPENDENCIES}}placeholder in base template - Writes
Dockerfileto the app directory
Generated Dockerfile Structure
The generated Dockerfile includes:
- Base image and environment setup (from
Dockerfile.base) - Action-specific pip dependencies (one RUN command per action)
- Optimized layer caching for faster rebuilds
Example output:
FROM registry.v75inc.dev/jvagent/jvagent-base:latest
WORKDIR /var/task
COPY . /var/task/
# Action-specific pip dependencies
# Dependencies for myorg/my_action
RUN /opt/venv/bin/pip install --no-cache-dir openai>=1.0.0 httpx>=0.24.0
# Dependencies for myorg/another_action
RUN /opt/venv/bin/pip install --no-cache-dir requests>=2.31.0 pydantic>=2.0.0
Action Dependency Discovery
The bundler discovers dependencies by:
- Scanning
agents/directory for all agents - For each agent, scanning
actions/{namespace}/{action_name}/directories - Reading
info.yamlfrom each action directory - Extracting
package.dependencies.piplist
Example info.yaml structure:
package:
name: jvagent/my_action
dependencies:
pip:
- openai>=1.0.0
- httpx>=0.24.0
Base Template
The base Dockerfile template (Dockerfile.base) is included in the package and can be customized. The template must include the {{ACTION_DEPENDENCIES}} placeholder where action dependencies will be inserted.
Default Dockerfile.base:
FROM registry.v75inc.dev/jvagent/jvagent-base:latest
WORKDIR /var/task
COPY . /var/task/
# {{ACTION_DEPENDENCIES}}
Customization
You can customize the base template by:
- Copying
Dockerfile.basefrom the package to your project - Modifying it to suit your needs
- Keeping the
{{ACTION_DEPENDENCIES}}placeholder where you want dependencies inserted
Project Structure
jvdeploy/
├── jvdeploy/
│ ├── __init__.py # Package initialization
│ ├── cli.py # CLI entry point
│ ├── bundler.py # Main Bundler class
│ ├── dockerfile_generator.py # Dockerfile generation logic
│ └── Dockerfile.base # Base Dockerfile template
├── tests/
│ ├── __init__.py
│ ├── conftest.py # pytest fixtures
│ ├── test_bundler.py # Bundler tests
│ └── test_dockerfile_generator.py # Generator tests
├── README.md
├── setup.py
└── pyproject.toml
Development
Running Tests
pytest
Running Tests with Coverage
pytest --cov=jvdeploy --cov-report=html
Code Formatting
black jvdeploy tests
Linting
ruff check jvdeploy tests
Type Checking
mypy jvdeploy
API Usage
You can also use jvdeploy as a Python library:
from jvdeploy import Bundler
# Create bundler instance
bundler = Bundler(app_root="/path/to/jvagent_app")
# Generate Dockerfile
success = bundler.generate_dockerfile()
if success:
print("Dockerfile generated successfully!")
else:
print("Dockerfile generation failed")
Requirements
Core Requirements
- Python >= 3.8
- PyYAML >= 6.0.0
Deployment Requirements (optional)
- boto3 >= 1.28.0 (for AWS Lambda deployment)
- jinja2 >= 3.1.0 (for Kubernetes templates)
Install deployment dependencies with:
pip install jvdeploy[deploy]
Features
Dockerfile Generation
- ✅ Automatic dependency discovery from action info.yaml files
- ✅ Optimized Docker layer caching
- ✅ Customizable base template
- ✅ Action-specific dependency isolation
AWS Lambda Deployment
- ✅ ECR repository management
- ✅ IAM role creation and management
- ✅ Lambda function deployment from containers
- ✅ API Gateway (HTTP API) integration
- ✅ Environment variable configuration
- ✅ VPC and EFS support
- ✅ CloudWatch Logs integration
- ✅ Dry-run mode for testing
- ✅ Deployment status checking
- ✅ Log streaming and viewing
Kubernetes Deployment (Coming Soon)
- 🚧 Jinja2 manifest templates
- 🚧 kubectl integration
- 🚧 Service, Deployment, ConfigMap support
- 🚧 Ingress configuration
- 🚧 Persistent storage support
Documentation
- Deployment Guide - Complete guide for deploying applications
- Implementation Summary - Technical implementation details
- Deployment Specification - Complete technical specification
- Quick Reference - Command cheat sheet
License
MIT License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Related Projects
Support
For issues and questions, please open an issue on the GitHub repository.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jvdeploy-0.1.2.tar.gz.
File metadata
- Download URL: jvdeploy-0.1.2.tar.gz
- Upload date:
- Size: 43.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f589d9f16e40437de839e289bd9c507000152bc3d4c2b71790450456178f501
|
|
| MD5 |
7ccf34fa873e1664f6d99aeffa6bf7ee
|
|
| BLAKE2b-256 |
59b1ee070adf2eb86df9e0850c2569c5a101d64c9a88648abb4d7fdbe5225b2f
|
File details
Details for the file jvdeploy-0.1.2-py3-none-any.whl.
File metadata
- Download URL: jvdeploy-0.1.2-py3-none-any.whl
- Upload date:
- Size: 36.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
364e2099f77ef64ac23902b5cbcffd1b446f47a7bfb8196da4ed21e255098761
|
|
| MD5 |
8e84c7c63755ef8be04f4a8ffed8ef83
|
|
| BLAKE2b-256 |
d89718677327ce1ad22767b0c1458317b566a2bbfeff64af09abb8d219d92798
|