CI/CD Integration
CI/CD Integration
Continuous Integration
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install Composabl
run: pip install composabl
- name: Validate Simulators
run: |
for sim in simulators/*/; do
composabl sim validate "$sim"
done
- name: Run Tests
run: pytest tests/
Continuous Deployment
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install Composabl
run: pip install composabl
- name: Set Token
run: echo "${{ secrets.COMPOSABL_TOKEN }}" > ~/.composabl/token
- name: Publish Components
run: |
# Publish simulators
composabl sim publish ./simulators/reactor-sim/
# Publish skills
composabl skill publish ./skills/temperature-control/
# Publish perceptors
composabl perceptor publish ./perceptors/derivative-calc/
Scripting with CLI
#!/usr/bin/env python3
import subprocess
import json
import sys
def run_command(cmd):
"""Run CLI command and return output"""
result = subprocess.run(
cmd,
shell=True,
capture_output=True,
text=True
)
if result.returncode != 0:
print(f"Error: {result.stderr}")
sys.exit(1)
return result.stdout.strip()
# Get simulator mappings
mappings_json = run_command(
"composabl sim mappings --address localhost:1337"
)
mappings = json.loads(mappings_json)
# Extract sensor names
sensors = [
s["name"]
for s in mappings["sensor_space"]["mappings"]
]
print(f"Found sensors: {sensors}")
# Create agent dynamically
agent_code = f"""
from composabl import Agent, Sensor
agent = Agent()
agent.add_sensors([
{', '.join(f'Sensor("{s}", "", lambda obs: obs[{i}])'
for i, s in enumerate(sensors))}
])
"""
with open("dynamic_agent.py", "w") as f:
f.write(agent_code)
# Train agent
run_command("composabl agent train dynamic_agent.py")
Last updated