Skip to main content

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.yaml files
  • 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.yaml exists 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.yaml file
  • Extracts package.dependencies.pip list 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 Dockerfile to 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:

  1. Scanning agents/ directory for all agents
  2. For each agent, scanning actions/{namespace}/{action_name}/ directories
  3. Reading info.yaml from each action directory
  4. Extracting package.dependencies.pip list

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:

  1. Copying Dockerfile.base from the package to your project
  2. Modifying it to suit your needs
  3. 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

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

jvdeploy-0.1.4.tar.gz (43.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jvdeploy-0.1.4-py3-none-any.whl (37.1 kB view details)

Uploaded Python 3

File details

Details for the file jvdeploy-0.1.4.tar.gz.

File metadata

  • Download URL: jvdeploy-0.1.4.tar.gz
  • Upload date:
  • Size: 43.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for jvdeploy-0.1.4.tar.gz
Algorithm Hash digest
SHA256 2cc4a4a70c8b76bc0a4668138b6e952fb0b66aecc3bb9c7b0890b26dab600d7d
MD5 268587c90ef23819d98ed88cbd6152c5
BLAKE2b-256 99d54e50026c2fd1da365f730102c3ab9d33328b12d02c866e355e13a3fc7fab

See more details on using hashes here.

File details

Details for the file jvdeploy-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: jvdeploy-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 37.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for jvdeploy-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 7ffafd8b977099f2bc6ea5d0cf8db1fcbb079cdef55c489d233e2f568573d68f
MD5 f7e74a25f3280578f6e6dd4a44fff6f4
BLAKE2b-256 89b2fb16a2ba0814b56f3e28193f330125651933a68745f594bd584e67a4c647

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page