Files
hatchet/Taskfile.yaml
matt 43e7466d0f Feat: Durable Execution Revamp (#2954)
* Feat: Durable Execution Revamp

---------

Co-authored-by: Gabe Ruttner <gabriel.ruttner@gmail.com>
2026-03-16 11:24:29 -04:00

304 lines
8.9 KiB
YAML

version: "3"
tasks:
setup:
cmds:
- task: install-dependencies
- task: set-env-db
- task: migrate
- task: generate-local-encryption-keys
- task: generate-docs
- task: set-env-all
- task: seed-dev
set-env-db:
cmds:
- |
cat > .env <<EOF
DATABASE_URL='postgresql://hatchet:hatchet@127.0.0.1:5431/hatchet'
EOF
set-env-all:
cmds:
- |
randstring() { openssl rand -base64 69 | tr -d "\n" | tr -d "=+/" | cut -c1-$1; }
cat > .env <<EOF
DATABASE_URL='postgresql://hatchet:hatchet@127.0.0.1:5431/hatchet'
SERVER_ENCRYPTION_MASTER_KEYSET_FILE=./hack/dev/encryption-keys/master.key
SERVER_ENCRYPTION_JWT_PRIVATE_KEYSET_FILE=./hack/dev/encryption-keys/private_ec256.key
SERVER_ENCRYPTION_JWT_PUBLIC_KEYSET_FILE=./hack/dev/encryption-keys/public_ec256.key
SERVER_PORT=8080
SERVER_URL=http://localhost:8080
SERVER_AUTH_COOKIE_SECRETS="$(randstring 16) $(randstring 16)"
SERVER_AUTH_COOKIE_DOMAIN=app.dev.hatchet-tools.com
SERVER_AUTH_COOKIE_INSECURE=true
SERVER_AUTH_SET_EMAIL_VERIFIED=true
SERVER_MSGQUEUE_KIND=rabbitmq
SERVER_MSGQUEUE_RABBITMQ_URL=amqp://user:password@127.0.0.1:5672/
SERVER_ADDITIONAL_LOGGERS_QUEUE_LEVEL=warn
SERVER_ADDITIONAL_LOGGERS_QUEUE_FORMAT=console
SERVER_ADDITIONAL_LOGGERS_PGXSTATS_LEVEL=error
SERVER_ADDITIONAL_LOGGERS_PGXSTATS_FORMAT=console
SERVER_LOGGER_LEVEL=warn
SERVER_LOGGER_FORMAT=console
DATABASE_LOGGER_LEVEL=warn
DATABASE_LOGGER_FORMAT=console
SERVER_GRPC_BROADCAST_ADDRESS=127.0.0.1:7070
SERVER_GRPC_INSECURE=true
SERVER_INTERNAL_CLIENT_BASE_STRATEGY=none
SERVER_INTERNAL_CLIENT_BASE_INHERIT_BASE=false
EOF
fmt-go:
cmd: gofmt -s -w .
fmt-app:
dir: frontend/app
cmd: pnpm run prettier:fix && pnpm run prettier:check
fmt-docs:
dir: frontend/docs
cmd: pnpm run prettier:fix && pnpm run prettier:check
sync-agent-instructions:
desc: Sync agent-instructions MDX files into hatchet-cli skill-assets references
cmds:
- |
src="frontend/docs/pages/agent-instructions"
dest="cmd/hatchet-cli/cli/skill-assets/hatchet-cli/references"
for f in "$src"/*.mdx; do
name=$(basename "$f" .mdx)
cp "$f" "$dest/$name.md"
done
pre:
aliases: [fmt]
cmds:
- task: sync-agent-instructions
- task: fmt-go
- task: fmt-app
- task: fmt-docs
- task: pre-commit-run
start-db:
cmds:
- docker compose up -d
stop-db:
cmds:
- docker compose down {{.CLI_ARGS}}
recreate-db-from-scratch:
cmds:
- docker compose down -v
- docker compose up -d
- task: setup
- task: init-dev-env
set-etc-hosts:
cmds:
- sudo bash ./hack/dev/manage-hosts.sh add 127.0.0.1 app.dev.hatchet-tools.com
empty-migration:
cmds:
- goose -dir cmd/hatchet-migrate/migrate/migrations/ create {{.CLI_ARGS | default "empty_migration"}} sql
migrate:
cmds:
- task: generate-sqlc
- task: goose-migrate
goose-migrate:
cmds:
- bash ./hack/dev/migrate.sh
migrate-down:
desc: "Migrate down to a specific version. Usage: task migrate-down -- 20260223180620 (for v1.0.82)"
dotenv: [.env]
cmds:
- |
if [ -z "{{.CLI_ARGS}}" ]; then
echo "Usage: task migrate-down -- <version>"
echo "Example: task migrate-down -- 20260223180620 # v1.0.82"
exit 1
fi
go run ./cmd/hatchet-migrate --down {{.CLI_ARGS}}
seed-dev:
dotenv: [.env]
cmds:
- SEED_DEVELOPMENT=true go run ./cmd/hatchet-admin seed
seed-cypress:
dotenv: [.env]
cmds:
- SEED_DEVELOPMENT=true go run ./cmd/hatchet-admin seed-cypress
start-dev:
deps:
- task: goose-migrate
- task: start-db
- task: start-api
- task: start-engine
- task: start-frontend
start-dev-tmux:
cmds:
- bash ./hack/dev/start-dev-tmux.sh
start-api:
cmds:
- bash ./hack/dev/start-api.sh
start-api-ci:
cmds:
- bash ./hack/ci/start-api.sh
start-engine:
cmds:
- bash ./hack/dev/start-engine.sh
start-engine-ci:
cmds:
- bash ./hack/ci/start-engine.sh
start-frontend:
cmds:
- bash ./hack/dev/start-frontend.sh
write-e2e-env:
cmds:
- bash ./hack/ci/write-e2e-env.sh
e2e-frontend:
desc: Run Cypress E2E for frontend/app against a locally started API stack (CI-friendly).
cmds:
- bash ./hack/ci/e2e-frontend.sh
start-lite:
cmds:
- bash ./hack/dev/start-lite.sh
start-ngrok:
cmds:
- ngrok http 8080
generate-all:
aliases: [generate]
cmds:
- task: install-dependencies
- task: generate-api
- task: generate-proto
- task: generate-sqlc
- task: generate-docs
- task: pre-commit-run
install-dependencies:
deps: [venv]
cmds:
- go mod download
- cd frontend/app/ && pnpm install
- cd frontend/docs/ && pnpm install
- source .venv/bin/activate && pip install pre-commit
generate-api:
cmds:
- task: generate-api-server
- task: generate-api-client
generate-docs:
deps: [venv]
dir: frontend/snippets
cmds:
- "source {{.ROOT_DIR}}/.venv/bin/activate && python generate.py"
- task: fmt
- task: sync-agent-instructions
generate-certs:
cmds:
- bash ./hack/dev/generate-x509-certs.sh ./hack/dev/certs
generate-local-encryption-keys:
cmds:
- bash ./hack/dev/generate-local-encryption-keys.sh ./hack/dev/encryption-keys
init-dev-env:
dotenv: [.env]
cmds:
- bash ./hack/dev/init-dev-token-and-env.sh
generate-dev-api-token:
cmds:
- bash ./hack/dev/generate-dev-api-token.sh
generate-api-server:
cmds:
- bash ./hack/oas/generate-server.sh
silent: true
generate-api-client:
cmds:
- bash ./hack/oas/generate-clients.sh
silent: true
generate-proto:
cmds:
- bash ./hack/proto/proto.sh
generate-proto-python:
dir: ./python-sdk
cmds:
- sh ./generate.sh
generate-sqlc:
cmds:
- go run github.com/sqlc-dev/sqlc/cmd/sqlc@v1.29.0 generate --file pkg/repository/sqlcv1/sqlc.yaml
lint:
cmds:
- task: lint-go
- task: lint-go-guides
- task: lint-python-guides
- task: lint-typescript-guides
- task: lint-ruby-guides
- task: lint-app
- task: lint-docs
lint-go:
cmd: golangci-lint run ./... --config .golangci.yml
lint-go-guides:
dir: sdks/guides/go
cmd: golangci-lint run ./... --config .golangci.yml
lint-python-guides:
dir: sdks/guides/python
cmd: poetry run ruff check .
lint-typescript-guides:
dir: sdks/guides/typescript
cmd: pnpm install && pnpm run lint:check
lint-ruby-guides:
dir: sdks/guides/ruby
cmd: bundle install && bundle exec rubocop
lint-app:
dir: frontend/app
cmd: pnpm run lint:check
lint-docs:
dir: frontend/docs
cmd: npm run lint:check
kill-apis:
cmds:
- ps -A | grep 'cmd/hatchet-api' | grep -v grep | awk '{print $1}' | xargs kill -9 $1
- ps -A | grep 'exe/hatchet-api' | grep -v grep | awk '{print $1}' | xargs kill -9 $1
kill-engines:
cmds:
- ps -A | grep 'cmd/hatchet-engine' | grep -v grep | awk '{print $1}' | xargs kill -9 $1
- ps -A | grep 'exe/hatchet-engine' | grep -v grep | awk '{print $1}' | xargs kill -9 $1
copy-ca-to-sdks:
cmds:
- mkdir -p ./python-sdk/certs/ && cp ./hack/dev/certs/ca.cert ./python-sdk/certs/
venv:
status: [test -d .venv]
cmd: python3 -m venv .venv
pre-commit-install:
deps: [venv]
cmd: source .venv/bin/activate && pip install pre-commit && pre-commit install
pre-commit-run:
deps: [venv]
cmd: "source .venv/bin/activate && pre-commit run --all-files || pre-commit run --all-files"
docs:
cmds:
- |
# Create a trap to kill the watcher when the task exits
trap 'kill $(jobs -p) 2>/dev/null' EXIT
npx chokidar "sdks/**/*.{py,ts,go}" --ignore "**/node_modules/**" --ignore "**/.git/**" --ignore "**/dist/**" --ignore "**/build/**" --initial -c "echo 'TODO: Add a task to generate and sync the docs'" &
cd frontend/docs/ && pnpm run taskfile-dev
pytest:
dir: ./sdks/python
vars:
WORKERS: '{{.WORKERS | default "auto"}}'
RETRIES: '{{.RETRIES | default "3"}}'
EXTRA_ARGS: '{{.EXTRA_ARGS | default ""}}'
cmds:
- poetry run pytest -n auto --retries 3 --retry-delay 5
start-telemetry:
cmds:
- docker compose -f docker-compose.infra.yml up -d
test:
cmds:
- go test -count=1 $(go list ./... | grep -v "quickstart") -v -failfast
test-integration:
deps:
- start-db
- goose-migrate
- generate-local-encryption-keys
cmds:
- defer:
task: stop-db
- go test -count=1 -tags integration $(go list ./... | grep -v "quickstart") -v -failfast