Files
attune/docs/QUICKREF-dev-packs.md

178 lines
3.5 KiB
Markdown

# Quick Reference: Development Packs
## Setup (One Time)
```bash
# Directory is already created, just start Docker
docker compose up -d
```
## Create a Pack
```bash
./scripts/dev-pack.sh create my-pack
```
Creates:
- `packs.dev/my-pack/pack.yaml`
- `packs.dev/my-pack/actions/example.sh`
- Example action YAML
- README
## List Packs
```bash
./scripts/dev-pack.sh list
```
## Validate Pack
```bash
./scripts/dev-pack.sh validate my-pack
```
Checks:
- ✓ pack.yaml exists
- ✓ Action scripts exist and are executable
- ✓ Entry points match
## Register Pack in Attune
```bash
# Get token first
export ATTUNE_TOKEN=$(attune auth login test@attune.local --password TestPass123!)
# Register pack
curl -X POST http://localhost:8080/api/v1/packs \
-H "Authorization: Bearer $ATTUNE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"ref": "my-pack",
"label": "My Pack",
"version": "1.0.0",
"enabled": true
}'
```
## Execute Action
```bash
curl -X POST http://localhost:8080/api/v1/executions \
-H "Authorization: Bearer $ATTUNE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "my-pack.example",
"parameters": {
"message": "Hello!"
}
}'
```
## Directory Layout
```
packs.dev/
├── examples/ # Example packs (in git)
│ ├── basic-pack/ # Shell action example
│ └── python-pack/ # Python action example
└── my-pack/ # Your packs (not in git)
├── pack.yaml
├── actions/
├── triggers/
├── sensors/
└── workflows/
```
## File Locations in Docker
- **Core pack**: `/opt/attune/packs` (read-only)
- **Dev packs**: `/opt/attune/packs.dev` (read-write)
## Development Workflow
1. Create pack: `./scripts/dev-pack.sh create my-pack`
2. Edit files: `vim packs.dev/my-pack/actions/my_action.sh`
3. Validate: `./scripts/dev-pack.sh validate my-pack`
4. Register: See "Register Pack" above
5. Test: Execute action via API
6. Iterate: Changes are immediately visible!
## Action Script Template
```bash
#!/bin/bash
set -e
# Get parameters from environment
PARAM="${ATTUNE_ACTION_param:-default}"
# Validate
if [ -z "$PARAM" ]; then
echo '{"error": "param required"}' >&2
exit 1
fi
# Do work
result=$(echo "Processed: $PARAM")
# Return JSON
echo "{\"result\": \"$result\"}"
```
## Common Commands
```bash
# List all packs
./scripts/dev-pack.sh list
# Validate pack structure
./scripts/dev-pack.sh validate my-pack
# View pack in container
docker exec attune-api ls -la /opt/attune/packs.dev/
# Check worker logs
docker logs -f attune-worker-shell
# Sync workflows after changes
curl -X POST http://localhost:8080/api/v1/packs/my-pack/workflows/sync \
-H "Authorization: Bearer $ATTUNE_TOKEN"
# Clean up dev packs
./scripts/dev-pack.sh clean
```
## Troubleshooting
### "Pack not found"
```bash
# Check if registered
curl http://localhost:8080/api/v1/packs/my-pack \
-H "Authorization: Bearer $ATTUNE_TOKEN"
# Check if files exist in container
docker exec attune-api ls /opt/attune/packs.dev/my-pack/
```
### "Entry point not found"
```bash
# Make script executable
chmod +x packs.dev/my-pack/actions/*.sh
# Verify in container
docker exec attune-worker-shell ls -la /opt/attune/packs.dev/my-pack/actions/
```
### Changes not reflected
```bash
# For action scripts: should be immediate
# For action YAML: re-register pack
# For workflows: run sync endpoint
```
## See Also
- [Full Documentation](development/packs-dev-directory.md)
- [Pack Structure](packs/pack-structure.md)
- [Examples](../packs.dev/examples/)