Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,9 @@ mise run lint:md:fix # Lint Markdown with auto-fix
mise run lint:manifests # Validate JSON manifests (marketplace, plugin, MCP)
mise run lint:cross-refs # Validate cross-references between manifests
mise run lint # All linters
mise run test # Run unit tests (pytest for Python; npm/jest when a package.json defines tests)
mise run security # All security scans (Bandit, SemGrep, Gitleaks, Checkov, Grype)
mise run build # Full build: lint + fmt:check + security
mise run build # Full build: lint + fmt:check + validate + test + security
```

See `mise.toml` for the full task list and tool versions.
Expand Down
26 changes: 25 additions & 1 deletion mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,29 @@ run = [
description = "Scaffold a new skill directory"
run = "uv run tools/init-skill.py"

# =========
# TESTING
# =========

[tasks."test:python"]
description = "Run Python unit tests with pytest (ephemeral, no repo dependency)"
# `uv run --with pytest` installs pytest into a cached, throwaway env for this
# run only — nothing is added to the repo's declared deps. pytest handles
# discovery/parametrize/fixtures natively. Exit code 5 = "no tests collected",
# which we treat as success so the build never breaks when tests are absent.
run = "uv run --with pytest pytest tools plugins || [ $? -eq 5 ]"

[tasks."test:node"]
description = "Run Node (JS/TS) unit tests when a package.json defines them"
run = "if [ -f package.json ] && grep -q '\"test\"' package.json; then npm test; else echo 'no package.json test script; skipping'; fi"

[tasks.test]
description = "Run unit tests across languages"
run = [
{ task = "test:python" },
{ task = "test:node" },
]

# =========
# SECURITY
# =========
Expand Down Expand Up @@ -167,10 +190,11 @@ run = [
# ===============

[tasks.build]
description = "Complete build: lint, format, validate, security scans"
description = "Complete build: lint, format, validate, test, security scans"
run = [
{ task = "lint" },
{ task = "fmt:check" },
{ task = "validate" },
{ task = "test" },
{ task = "security"}
]