178 lines
3.5 KiB
Markdown
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/)
|