taskfiles
1
总安装量
1
周安装量
#51244
全站排名
安装命令
npx skills add https://github.com/ionfury/homelab --skill taskfiles
Agent 安装分布
claude-code
1
Skill 文档
Taskfiles
Repository Structure
Taskfile.yaml # Root: includes namespaced taskfiles
.taskfiles/
âââ inventory/taskfile.yaml # inv: IPMI host management
âââ terragrunt/taskfile.yaml # tg: Infrastructure operations
âââ worktree/taskfile.yaml # wt: Git worktree management
âââ renovate/taskfile.yaml # renovate: Config validation
File Template
Always include schema and version:
---
# yaml-language-server: $schema=https://taskfile.dev/schema.json
version: "3"
vars:
MY_DIR: "{{.ROOT_DIR}}/path"
tasks:
my-task:
desc: Short description for --list output.
cmds:
- echo "hello"
Required Patterns
Include New Taskfiles
Add to root Taskfile.yaml:
includes:
namespace: .taskfiles/namespace
Wildcard Tasks
Use for parameterized operations:
plan-*:
desc: Plans a specific terragrunt stack.
vars:
STACK: "{{index .MATCH 0}}"
label: plan-{{.STACK}} # Dynamic label for output
cmds:
- terragrunt plan --working-dir {{.INFRASTRUCTURE_DIR}}/stacks/{{.STACK}}
preconditions:
- which terragrunt
- test -d "{{.INFRASTRUCTURE_DIR}}/stacks/{{.STACK}}"
Dependencies and Formatting
Run dependencies before main task:
apply-*:
deps: [use, fmt] # Run in parallel before cmds
cmds:
- terragrunt apply ...
Internal Helper Tasks
Hide implementation details:
ipmi-command:
internal: true # Hidden from --list
silent: true # Suppress command output
requires:
vars: [HOST, COMMAND] # Validate required vars
cmds:
- ipmitool ... {{.COMMAND}}
Preconditions
Validate before execution:
preconditions:
- which required-tool # Tool must exist
- test -d "{{.PATH}}" # Directory must exist
- sh: test "{{.VALUE}}" != ""
msg: "VALUE cannot be empty" # Custom error message
Source Tracking
Skip unchanged tasks:
fmt:
sources:
- "{{.DIR}}/**/*.tf"
generates:
- "{{.DIR}}/**/*.tf" # Same files = format in place
cmds:
- tofu fmt -recursive
Dynamic Variables from Files
Load from external sources:
vars:
VALID_HOSTS:
sh: "cat {{.INVENTORY_FILE}} | yq -r '.hosts | keys[]'"
For Loops
Iterate over lists:
power-status:
cmds:
- for: { var: VALID_HOSTS }
cmd: task inv:status-{{.ITEM}}
CLI Arguments
Accept user input:
new:
requires:
vars: [CLI_ARGS] # Must provide argument
vars:
NAME: "{{.CLI_ARGS}}"
cmds:
- git worktree add ... -b "{{.NAME}}"
Usage: task wt:new -- feature-branch
Style Rules
| Element | Convention | Example |
|---|---|---|
| Variables | UPPERCASE | STACK, ROOT_DIR |
| Task names | kebab-case | power-on-*, tofu-fmt |
| Templates | No spaces | {{.VAR}} not {{ .VAR }} |
| Indentation | 2 spaces | Standard YAML |
Common Operations
task --list # Show available tasks
task tg:list # List terragrunt stacks
task tg:plan-live # Plan specific stack
task inv:power-on-node41 # IPMI power control
task wt:new -- branch # Create worktree
References
- references/styleguide.md – Naming and formatting conventions
- references/schema.md – Complete property reference
- references/cli.md – CLI flags and options