builder / Taskfile.yml
Claude
feat(builder): add HTMX dashboard, hivemind integration, and robust enum parsing
8029b17
version: '3'
vars:
REGISTRY: '{{.REGISTRY | default "ghcr.io"}}'
IMAGE_NAME: '{{.IMAGE_NAME | default "hf-builder"}}'
tasks:
default:
desc: Show available tasks
cmds:
- task --list
# Development
dev:
desc: Run builder locally for development
env:
FLASK_DEBUG: "1"
LOG_FORMAT: text
cmds:
- python app.py
dev:watch:
desc: Run with auto-reload on file changes
deps: [check:deps]
cmds:
- watchmedo auto-restart --patterns="*.py" --recursive -- python app.py
# Testing
test:
desc: Run all tests
cmds:
- pytest tests/ -v
test:unit:
desc: Run unit tests only
cmds:
- pytest tests/unit/ -v
test:integration:
desc: Run integration tests (requires Docker)
cmds:
- pytest tests/integration/ -v
lint:
desc: Run linting
cmds:
- ruff check .
- ruff format --check .
lint:fix:
desc: Fix linting issues
cmds:
- ruff check --fix .
- ruff format .
# Docker
docker:build:
desc: Build Docker image locally
cmds:
- docker build -t {{.IMAGE_NAME}}:local .
docker:run:
desc: Run Docker image locally
deps: [docker:build]
env:
REGISTRY_URL: '{{.REGISTRY}}'
cmds:
- |
docker run --rm -it \
-p 7860:7860 \
-e REGISTRY_URL=$REGISTRY_URL \
-e REGISTRY_USER=$REGISTRY_USER \
-e REGISTRY_PASSWORD=$REGISTRY_PASSWORD \
{{.IMAGE_NAME}}:local
# Deployment
deploy:hf:
desc: Deploy to HuggingFace Space
vars:
SPACE: '{{.SPACE | default "drengskapur/hf-builder"}}'
cmds:
- echo "Deploying to {{.SPACE}}..."
- git push hf main
# Hivemind Integration
hivemind:register:
desc: Register this builder with hivemind controller
vars:
CONTROLLER_URL: '{{.CONTROLLER_URL | default "http://localhost:7860"}}'
BUILDER_ID: '{{.BUILDER_ID | default "builder-1"}}'
cmds:
- |
curl -X POST {{.CONTROLLER_URL}}/api/register \
-H "Content-Type: application/json" \
-d '{"worker_id": "{{.BUILDER_ID}}", "name": "Builder {{.BUILDER_ID}}", "capabilities": ["build"]}'
hivemind:heartbeat:
desc: Send heartbeat to hivemind controller
vars:
CONTROLLER_URL: '{{.CONTROLLER_URL | default "http://localhost:7860"}}'
BUILDER_ID: '{{.BUILDER_ID | default "builder-1"}}'
cmds:
- |
curl -X POST {{.CONTROLLER_URL}}/api/heartbeat \
-H "Content-Type: application/json" \
-d '{"worker_id": "{{.BUILDER_ID}}", "status": "idle"}'
# Health checks
health:
desc: Check builder health
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
cmds:
- curl -s {{.URL}}/health | jq .
status:
desc: Get builder status
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
cmds:
- curl -s {{.URL}}/api/status | jq .
metrics:
desc: Get Prometheus metrics
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
cmds:
- curl -s {{.URL}}/api/metrics
history:
desc: Get build history
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
cmds:
- curl -s {{.URL}}/api/history | jq .
logs:
desc: Get recent logs
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
cmds:
- curl -s {{.URL}}/api/logs | jq -r '.logs[]'
# Build triggers
build:
desc: Trigger a build via API
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
requires:
vars: [REPO_URL, IMAGE]
cmds:
- |
curl -X POST {{.URL}}/api/build \
-H "Content-Type: application/json" \
-d '{
"repo_url": "{{.REPO_URL}}",
"image_name": "{{.IMAGE}}",
"branch": "{{.BRANCH | default "main"}}",
"tags": ["{{.TAG | default "latest"}}"]
}'
build:cancel:
desc: Cancel a running build
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
requires:
vars: [BUILD_ID]
cmds:
- curl -X POST {{.URL}}/api/build/{{.BUILD_ID}}/cancel
# Webhook testing
webhook:test:
desc: Send a test webhook
vars:
URL: '{{.URL | default "http://localhost:7860"}}'
requires:
vars: [REPO_URL, IMAGE]
cmds:
- |
curl -X POST {{.URL}}/webhook/test \
-H "Content-Type: application/json" \
-d '{
"repo_url": "{{.REPO_URL}}",
"image_name": "{{.IMAGE}}",
"branch": "{{.BRANCH | default "main"}}"
}'
# Dependency management
deps:
desc: Install dependencies
cmds:
- pip install -r requirements.txt
deps:dev:
desc: Install dev dependencies
cmds:
- pip install -r requirements.txt pytest ruff watchdog
check:deps:
desc: Check if dependencies are installed
cmds:
- python -c "import flask; import git; import requests"
silent: true
# Cleanup
clean:
desc: Clean up temporary files
cmds:
- rm -rf __pycache__ .pytest_cache .ruff_cache
- find . -name "*.pyc" -delete