Mise - Task Configuration
Mise - 任务配置
Defining and managing tasks in Mise for build automation, testing, and development workflows.
在Mise中定义和管理任务,用于构建自动化、测试和开发工作流。
Basic Task Definition
基本任务定义
Simple TOML Tasks
简单TOML任务
[tasks.build]
description = "Build the project"
run = "cargo build --release"
[tasks.test]
description = "Run all tests"
run = "cargo test"
[tasks.lint]
description = "Run linter"
run = "cargo clippy -- -D warnings"
[tasks.build]
description = "Build the project"
run = "cargo build --release"
[tasks.test]
description = "Run all tests"
run = "cargo test"
[tasks.lint]
description = "Run linter"
run = "cargo clippy -- -D warnings"
mise run build
mise build # Shorthand if no command conflicts
mise run build
mise build # Shorthand if no command conflicts
Run multiple tasks
Run multiple tasks
List available tasks
List available tasks
Show task details
Show task details
Sequential Dependencies
顺序依赖
toml
[tasks.deploy]
description = "Deploy the application"
depends = ["build", "test"]
run = "./deploy.sh"
toml
[tasks.deploy]
description = "Deploy the application"
depends = ["build", "test"]
run = "./deploy.sh"
Parallel Dependencies
并行依赖
toml
[tasks.ci]
description = "Run CI checks"
depends = ["lint", "test", "security-scan"]
run = "echo 'All checks passed'"
Mise automatically runs dependencies in parallel when possible.
toml
[tasks.ci]
description = "Run CI checks"
depends = ["lint", "test", "security-scan"]
run = "echo 'All checks passed'"
Mise会在可能的情况下自动并行运行依赖任务。
Creating File Tasks
创建文件任务
Create task directory
Create task directory
Create executable task file
Create executable task file
cat > .mise/tasks/deploy <<'EOF'
#!/usr/bin/env bash
cat > .mise/tasks/deploy <<'EOF'
#!/usr/bin/env bash
mise description="Deploy the application"
mise description="Deploy the application"
mise depends=["build", "test"]
mise depends=["build", "test"]
echo "Deploying..."
./scripts/deploy.sh
EOF
chmod +x .mise/tasks/deploy
echo "Deploying..."
./scripts/deploy.sh
EOF
chmod +x .mise/tasks/deploy
File Task Metadata
文件任务元数据
mise description="Task description"
mise description="Task description"
mise depends=["dependency1", "dependency2"]
mise depends=["dependency1", "dependency2"]
mise sources=["src/**/*.rs"]
mise sources=["src/**/*.rs"]
mise outputs=["target/release/app"]
mise outputs=["target/release/app"]
Task implementation
Task implementation
Advanced Task Configuration
高级任务配置
toml
[tasks.test]
description = "Run tests with optional filter"
run = '''
if [ -n "$1" ]; then
cargo test "$1"
else
cargo test
fi
'''
toml
[tasks.test]
description = "Run tests with optional filter"
run = '''
if [ -n "$1" ]; then
cargo test "$1"
else
cargo test
fi
'''
Run all tests
Run all tests
Run specific test
Run specific test
Environment Variables in Tasks
任务中的环境变量
toml
[tasks.build]
description = "Build with specific configuration"
env = { RUST_ENV = "production", OPTIMIZATION = "3" }
run = "cargo build --release"
[tasks.dev]
description = "Start development server"
env = { NODE_ENV = "development", PORT = "3000" }
run = "npm run dev"
toml
[tasks.build]
description = "Build with specific configuration"
env = { RUST_ENV = "production", OPTIMIZATION = "3" }
run = "cargo build --release"
[tasks.dev]
description = "Start development server"
env = { NODE_ENV = "development", PORT = "3000" }
run = "npm run dev"
toml
[tasks.b]
alias = "build"
[tasks.t]
alias = "test"
[tasks.d]
alias = "dev"
toml
[tasks.b]
alias = "build"
[tasks.t]
alias = "test"
[tasks.d]
alias = "dev"
mise b # Runs build
mise t # Runs test
mise b # Runs build
mise t # Runs test
toml
[tasks.watch]
description = "Watch and rebuild on changes"
run = "cargo watch -x build"
[tasks."test:watch"]
description = "Watch and run tests"
run = "cargo watch -x test"
toml
[tasks.watch]
description = "Watch and rebuild on changes"
run = "cargo watch -x build"
[tasks."test:watch"]
description = "Watch and run tests"
run = "cargo watch -x test"
Built-in watch with mise
Built-in watch with mise
Monorepo Task Patterns
单体仓库任务模式
Root mise.toml
Root mise.toml
[tasks.build-all]
description = "Build all packages"
depends = ["pkg-a:build", "pkg-b:build", "pkg-c:build"]
run = "echo 'All packages built'"
[tasks."pkg-a:build"]
description = "Build package A"
run = "cd packages/pkg-a && cargo build"
[tasks."pkg-b:build"]
description = "Build package B"
run = "cd packages/pkg-b && cargo build"
[tasks.build-all]
description = "Build all packages"
depends = ["pkg-a:build", "pkg-b:build", "pkg-c:build"]
run = "echo 'All packages built'"
[tasks."pkg-a:build"]
description = "Build package A"
run = "cd packages/pkg-a && cargo build"
[tasks."pkg-b:build"]
description = "Build package B"
run = "cd packages/pkg-b && cargo build"
packages/pkg-a/mise.toml
packages/pkg-a/mise.toml
[tasks.build]
description = "Build package A"
run = "cargo build"
[tasks.test]
description = "Test package A"
depends = ["build"]
run = "cargo test"
[tasks.build]
description = "Build package A"
run = "cargo build"
[tasks.test]
description = "Test package A"
depends = ["build"]
run = "cargo test"
Validate Task Configuration
验证任务配置
Validate all tasks
Validate all tasks
Check specific task
Check specific task
Common Validation Errors
常见验证错误
Error: Missing required fields
Error: Missing required fields
[tasks.broken]
run = "echo test" # Missing description
[tasks.broken]
run = "echo test" # Missing description
Error: Invalid dependency
Error: Invalid dependency
[tasks.deploy]
description = "Deploy"
depends = ["nonexistent-task"]
run = "./deploy.sh"
[tasks.deploy]
description = "Deploy"
depends = ["nonexistent-task"]
run = "./deploy.sh"
Error: Circular dependency
Error: Circular dependency
[tasks.a]
description = "Task A"
depends = ["b"]
run = "echo a"
[tasks.b]
description = "Task B"
depends = ["a"] # Circular!
run = "echo b"
[tasks.a]
description = "Task A"
depends = ["b"]
run = "echo a"
[tasks.b]
description = "Task B"
depends = ["a"] # Circular!
run = "echo b"
Organize Tasks by Purpose
按用途组织任务
[tasks.build]
description = "Build production binary"
run = "cargo build --release"
[tasks."build:debug"]
description = "Build debug binary"
run = "cargo build"
[tasks.build]
description = "Build production binary"
run = "cargo build --release"
[tasks."build:debug"]
description = "Build debug binary"
run = "cargo build"
[tasks.test]
description = "Run all tests"
run = "cargo test"
[tasks."test:unit"]
description = "Run unit tests only"
run = "cargo test --lib"
[tasks."test:integration"]
description = "Run integration tests"
run = "cargo test --test '*'"
[tasks.test]
description = "Run all tests"
run = "cargo test"
[tasks."test:unit"]
description = "Run unit tests only"
run = "cargo test --lib"
[tasks."test:integration"]
description = "Run integration tests"
run = "cargo test --test '*'"
Development tasks
Development tasks
[tasks.dev]
description = "Start development server"
run = "cargo run"
[tasks.watch]
description = "Watch and rebuild"
run = "cargo watch -x run"
[tasks.dev]
description = "Start development server"
run = "cargo run"
[tasks.watch]
description = "Watch and rebuild"
run = "cargo watch -x run"
Use Descriptive Names
使用描述性名称
Good: Clear, descriptive names
Good: Clear, descriptive names
[tasks."test:integration:api"]
description = "Run API integration tests"
run = "pytest tests/integration/api"
[tasks."test:integration:api"]
description = "Run API integration tests"
run = "pytest tests/integration/api"
Avoid: Vague names
Avoid: Vague names
[tasks.t1]
description = "Some test"
run = "pytest"
[tasks.t1]
description = "Some test"
run = "pytest"
Leverage Dependencies
利用依赖关系
Good: Explicit dependencies
Good: Explicit dependencies
[tasks.deploy]
description = "Deploy to production"
depends = ["lint", "test", "build"]
run = "./scripts/deploy.sh"
[tasks.deploy]
description = "Deploy to production"
depends = ["lint", "test", "build"]
run = "./scripts/deploy.sh"
Avoid: Manual sequencing in run command
Avoid: Manual sequencing in run command
[tasks.deploy]
description = "Deploy to production"
run = '''
cargo clippy
cargo test
cargo build --release
./scripts/deploy.sh
'''
[tasks.deploy]
description = "Deploy to production"
run = '''
cargo clippy
cargo test
cargo build --release
./scripts/deploy.sh
'''
Use Environment Variables
使用环境变量
Access mise environment variables
Access mise environment variables
[tasks.info]
description = "Show task info"
run = '''
echo "Task: $MISE_TASK_NAME"
echo "Project root: $MISE_PROJECT_ROOT"
echo "Config root: $MISE_CONFIG_ROOT"
'''
[tasks.info]
description = "Show task info"
run = '''
echo "Task: $MISE_TASK_NAME"
echo "Project root: $MISE_PROJECT_ROOT"
echo "Config root: $MISE_CONFIG_ROOT"
'''
toml
[tasks.build]
description = "Build with pre/post hooks"
depends = ["pre-build"]
run = "cargo build"
[tasks.pre-build]
description = "Run before build"
run = "echo 'Preparing build...'"
[tasks.post-build]
description = "Run after build"
run = "echo 'Build complete!'"
[tasks."build:full"]
description = "Build with all hooks"
depends = ["pre-build", "build", "post-build"]
run = "echo 'Full build pipeline complete'"
toml
[tasks.build]
description = "Build with pre/post hooks"
depends = ["pre-build"]
run = "cargo build"
[tasks.pre-build]
description = "Run before build"
run = "echo 'Preparing build...'"
[tasks.post-build]
description = "Run after build"
run = "echo 'Build complete!'"
[tasks."build:full"]
description = "Build with all hooks"
depends = ["pre-build", "build", "post-build"]
run = "echo 'Full build pipeline complete'"
Conditional Execution
条件执行
toml
[tasks.deploy]
description = "Deploy only if tests pass"
run = '''
if mise test; then
./scripts/deploy.sh
else
echo "Tests failed, deployment cancelled"
exit 1
fi
'''
toml
[tasks.deploy]
description = "Deploy only if tests pass"
run = '''
if mise test; then
./scripts/deploy.sh
else
echo "Tests failed, deployment cancelled"
exit 1
fi
'''
toml
[tasks.build]
description = "Multi-stage build"
depends = ["compile", "optimize", "package"]
run = "echo 'Build complete'"
[tasks.compile]
description = "Compile source"
run = "cargo build --release"
[tasks.optimize]
description = "Optimize binary"
depends = ["compile"]
run = "strip target/release/app"
[tasks.package]
description = "Create package"
depends = ["optimize"]
run = "tar -czf app.tar.gz target/release/app"
toml
[tasks.build]
description = "Multi-stage build"
depends = ["compile", "optimize", "package"]
run = "echo 'Build complete'"
[tasks.compile]
description = "Compile source"
run = "cargo build --release"
[tasks.optimize]
description = "Optimize binary"
depends = ["compile"]
run = "strip target/release/app"
[tasks.package]
description = "Create package"
depends = ["optimize"]
run = "tar -czf app.tar.gz target/release/app"
Don't Hardcode Paths
不要硬编码路径
Bad: Hardcoded absolute paths
Bad: Hardcoded absolute paths
[tasks.build]
description = "Build"
run = "cd /Users/me/project && cargo build"
[tasks.build]
description = "Build"
run = "cd /Users/me/project && cargo build"
Good: Use relative paths and environment variables
Good: Use relative paths and environment variables
[tasks.build]
description = "Build"
run = "cd $MISE_PROJECT_ROOT && cargo build"
[tasks.build]
description = "Build"
run = "cd $MISE_PROJECT_ROOT && cargo build"
Don't Duplicate Logic
不要重复逻辑
Bad: Duplicated test logic
Bad: Duplicated test logic
[tasks."test:unit"]
run = "cargo test --lib"
[tasks."test:integration"]
run = "cargo test --test '*'"
[tasks."test:all"]
run = "cargo test --lib && cargo test --test '*'"
[tasks."test:unit"]
run = "cargo test --lib"
[tasks."test:integration"]
run = "cargo test --test '*'"
[tasks."test:all"]
run = "cargo test --lib && cargo test --test '*'"
Good: Use dependencies
Good: Use dependencies
[tasks."test:all"]
depends = ["test:unit", "test:integration"]
run = "echo 'All tests complete'"
[tasks."test:all"]
depends = ["test:unit", "test:integration"]
run = "echo 'All tests complete'"
Don't Ignore Exit Codes
不要忽略退出码
Bad: Swallowing errors
Bad: Swallowing errors
[tasks.ci]
run = '''
cargo clippy || true
cargo test || true
echo "CI complete"
'''
[tasks.ci]
run = '''
cargo clippy || true
cargo test || true
echo "CI complete"
'''
Good: Fail fast
Good: Fail fast
[tasks.ci]
depends = ["lint", "test"]
run = "echo 'CI checks passed'"
[tasks.ci]
depends = ["lint", "test"]
run = "echo 'CI checks passed'"
- tool-management: Managing tool versions with Mise
- environment-management: Environment variables and configuration
- 工具管理: 使用Mise管理工具版本
- 环境管理: 环境变量与配置