{"id":29150021,"url":"https://github.com/zemerik/task-runner","last_synced_at":"2026-01-25T05:01:40.547Z","repository":{"id":302012481,"uuid":"1010902297","full_name":"Zemerik/Task-Runner","owner":"Zemerik","description":"A fast and flexible CLI task runner for managing development workflows","archived":false,"fork":false,"pushed_at":"2026-01-18T12:17:05.000Z","size":77,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T18:57:37.678Z","etag":null,"topics":["automation","build-tool","cli","development","task-runner","workflow"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@zemerik/task-runner","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zemerik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-30T02:33:49.000Z","updated_at":"2026-01-18T12:15:25.000Z","dependencies_parsed_at":"2025-08-24T14:37:28.997Z","dependency_job_id":"bee1e60e-8edd-48b9-9922-546f48ca2f1f","html_url":"https://github.com/Zemerik/Task-Runner","commit_stats":null,"previous_names":["zemerik/task-runner"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Zemerik/Task-Runner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zemerik%2FTask-Runner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zemerik%2FTask-Runner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zemerik%2FTask-Runner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zemerik%2FTask-Runner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zemerik","download_url":"https://codeload.github.com/Zemerik/Task-Runner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zemerik%2FTask-Runner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28744419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T02:46:29.005Z","status":"ssl_error","status_checked_at":"2026-01-25T02:44:29.968Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","build-tool","cli","development","task-runner","workflow"],"created_at":"2025-06-30T23:09:17.685Z","updated_at":"2026-01-25T05:01:40.541Z","avatar_url":"https://github.com/Zemerik.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Task Runner\n\nA fast and flexible CLI task runner for managing development workflows. Built in Rust for maximum performance and reliability.\n\n## Features\n\n- ⚡ **Fast Execution** - Built in Rust for optimal performance\n- 🔄 **Parallel \u0026 Sequential** - Run tasks in parallel or sequentially\n- 📋 **Dependency Management** - Automatic dependency resolution\n- 🎨 **Rich Output** - Beautiful, colored terminal output with progress indicators\n- 📁 **Multiple Formats** - Support for JSON, YAML, and TOML configuration\n- 🔧 **Environment Variables** - Per-task and global environment configuration with variable expansion\n- 🔄 **Variable Expansion** - Use `${VAR}` or `$VAR` syntax in commands and paths\n- ⏱️ **Timeout Support** - Set timeouts for long-running tasks\n- 🛡️ **Error Handling** - Robust error handling with continue-on-error options\n\n## Installation\n\n### From NPM (Recommended)\n\n```bash\nnpm install -g task-runner\n```\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/Zemerik/task-runner.git\ncd task-runner\n\n# Build and install\ncargo build --release\ncargo install --path .\n```\n\n## Quick Start\n\n1. **Create a configuration file** (`task-runner.json`):\n\n```json\n{\n  \"env\": {\n    \"NODE_ENV\": \"development\"\n  },\n  \"tasks\": {\n    \"dev\": {\n      \"description\": \"Start development environment\",\n      \"commands\": [\n        \"npm run build:watch\",\n        \"npm run server:dev\",\n        \"npm run test:watch\"\n      ],\n      \"parallel\": true\n    },\n    \"build\": {\n      \"description\": \"Build for production\",\n      \"dependencies\": [\"clean\"],\n      \"commands\": [\n        \"npm run compile\",\n        \"npm run bundle\",\n        \"npm run optimize\"\n      ]\n    },\n    \"deploy\": {\n      \"description\": \"Deploy to production\",\n      \"dependencies\": [\"build\", \"test\"],\n      \"commands\": [\n        \"npm run deploy:staging\",\n        \"npm run health-check\",\n        \"npm run deploy:prod\"\n      ],\n      \"env\": {\n        \"NODE_ENV\": \"production\"\n      }\n    }\n  }\n}\n```\n\n2. **Run tasks**:\n\n```bash\n# List available tasks\ntask-runner list\n\n# Run a single task\ntask-runner run build\n\n# Run multiple tasks in parallel\ntask-runner run dev --parallel\n\n# Run with dependencies\ntask-runner run deploy\n```\n\n## Configuration\n\nTask Runner supports multiple configuration file formats:\n\n- `task-runner.json` (JSON)\n- `task-runner.yaml` or `task-runner.yml` (YAML)\n- `task-runner.toml` (TOML)\n\n### Configuration Structure\n\n```json\n{\n  \"env\": {\n    \"GLOBAL_VAR\": \"value\"\n  },\n  \"default_timeout\": 300,\n  \"default_working_dir\": \"./src\",\n  \"tasks\": {\n    \"task-name\": {\n      \"description\": \"Task description\",\n      \"commands\": [\"command1\", \"command2\"],\n      \"dependencies\": [\"other-task\"],\n      \"env\": {\n        \"TASK_VAR\": \"value\"\n      },\n      \"parallel\": false,\n      \"sequential\": true,\n      \"working_dir\": \"./custom/path\",\n      \"timeout\": 60,\n      \"continue_on_error\": false,\n      \"hidden\": false\n    }\n  }\n}\n```\n\n### Environment Variable Expansion\n\nTask Runner supports environment variable expansion in command strings and working directory paths. You can use either `${VAR}` or `$VAR` syntax:\n\n```json\n{\n  \"env\": {\n    \"NODE_ENV\": \"production\",\n    \"PORT\": \"3000\",\n    \"BUILD_DIR\": \"./dist\"\n  },\n  \"tasks\": {\n    \"build\": {\n      \"commands\": [\n        \"npm run build -- --out-dir ${BUILD_DIR}\",\n        \"echo Server will run on port $PORT\"\n      ],\n      \"working_dir\": \"${BUILD_DIR}/src\"\n    }\n  }\n}\n```\n\nEnvironment variables are expanded in the following order:\n1. System environment variables\n2. Global `env` from configuration\n3. Task-specific `env` (task env overrides global env)\n\nVariables are expanded in:\n- Command strings\n- Working directory paths (`working_dir` and `default_working_dir`)\n\n### Task Properties\n\n| Property | Type | Description |\n|----------|------|-------------|\n| `description` | string | Human-readable task description |\n| `commands` | string[] | Commands to execute (supports `${VAR}` and `$VAR` expansion) |\n| `dependencies` | string[] | Tasks that must run before this task |\n| `env` | object | Environment variables for this task |\n| `parallel` | boolean | Run commands in parallel |\n| `sequential` | boolean | Run commands sequentially |\n| `working_dir` | string | Working directory for task execution (supports variable expansion) |\n| `timeout` | number | Timeout in seconds |\n| `continue_on_error` | boolean | Continue if commands fail |\n| `hidden` | boolean | Hide from task list |\n\n## Usage\n\n### Commands\n\n#### List Tasks\n\n```bash\n# List all tasks\ntask-runner list\n\n# List with details\ntask-runner list --details\n```\n\n#### Run Tasks\n\n```bash\n# Run a single task\ntask-runner run build\n\n# Run multiple tasks\ntask-runner run build test deploy\n\n# Run in parallel\ntask-runner run build test --parallel\n\n# Run sequentially\ntask-runner run build test --sequential\n\n# Continue on error\ntask-runner run build test --continue-on-error\n```\n\n#### Task Information\n\n```bash\n# Show task details\ntask-runner info build\n```\n\n#### Validate Configuration\n\n```bash\n# Validate config file\ntask-runner validate\n```\n\n### Options\n\n| Option | Description |\n|--------|-------------|\n| `--config, -c` | Specify configuration file path |\n| `--verbose, -v` | Enable verbose output |\n| `--env, -e` | Set environment for task execution |\n\n## Examples\n\n### Frontend Development Workflow\n\n```json\n{\n  \"tasks\": {\n    \"dev\": {\n      \"description\": \"Start development server\",\n      \"commands\": [\n        \"npm run dev\",\n        \"npm run storybook\"\n      ],\n      \"parallel\": true\n    },\n    \"build\": {\n      \"description\": \"Build for production\",\n      \"dependencies\": [\"clean\"],\n      \"commands\": [\n        \"npm run build\",\n        \"npm run test:ci\"\n      ]\n    },\n    \"deploy\": {\n      \"description\": \"Deploy to staging\",\n      \"dependencies\": [\"build\"],\n      \"commands\": [\n        \"npm run deploy:staging\"\n      ]\n    }\n  }\n}\n```\n\n### Full-Stack Development\n\n```yaml\nenv:\n  NODE_ENV: development\n  DATABASE_URL: postgresql://localhost/dev\n\ntasks:\n  backend:\n    description: Start backend server\n    commands:\n      - \"cargo run\"\n      - \"cargo test --watch\"\n    parallel: true\n    working_dir: \"./backend\"\n    \n  frontend:\n    description: Start frontend development\n    commands:\n      - \"npm run dev\"\n      - \"npm run test:watch\"\n    parallel: true\n    working_dir: \"./frontend\"\n    \n  dev:\n    description: Start full development environment\n    dependencies: [\"backend\", \"frontend\"]\n    commands: []\n    \n  test:\n    description: Run all tests\n    commands:\n      - \"cargo test\"\n      - \"npm run test\"\n    working_dir: \".\"\n```\n\n## Error Handling\n\nTask Runner provides comprehensive error handling:\n\n- **Task not found**: Clear error message with available tasks\n- **Circular dependencies**: Detection and reporting of dependency cycles\n- **Command failures**: Detailed error output with exit codes\n- **Configuration errors**: Validation with helpful error messages\n\n## Performance\n\nBuilt in Rust, Task Runner is designed for speed:\n\n- **Fast startup**: Minimal overhead for task execution\n- **Efficient parallelization**: Optimal use of system resources\n- **Memory efficient**: Low memory footprint even with many tasks\n- **Cross-platform**: Native binaries for Windows, macOS, and Linux\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests\n5. Submit a pull request\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Support\n\n- 📖 [Documentation](https://github.com/Zemerik/task-runner#readme)\n- 🐛 [Issues](https://github.com/Zemerik/task-runner/issues)\n- 💬 [Discussions](https://github.com/Zemerik/task-runner/discussions)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzemerik%2Ftask-runner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzemerik%2Ftask-runner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzemerik%2Ftask-runner/lists"}