{"id":18069045,"url":"https://github.com/ckylinmc/run.v","last_synced_at":"2026-02-11T13:31:27.563Z","repository":{"id":258538044,"uuid":"848659562","full_name":"CKylinMC/run.v","owner":"CKylinMC","description":"A simple task runner for Windows written in V.","archived":false,"fork":false,"pushed_at":"2024-08-30T08:08:32.000Z","size":18,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-27T19:11:35.204Z","etag":null,"topics":["task-runner","vlang","windows"],"latest_commit_sha":null,"homepage":"","language":"V","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/CKylinMC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-28T07:01:28.000Z","updated_at":"2024-12-03T16:16:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"24e8d3d1-7c42-4aea-a150-3a3741e3d6fe","html_url":"https://github.com/CKylinMC/run.v","commit_stats":null,"previous_names":["ckylinmc/run.v"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/CKylinMC/run.v","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CKylinMC%2Frun.v","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CKylinMC%2Frun.v/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CKylinMC%2Frun.v/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CKylinMC%2Frun.v/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CKylinMC","download_url":"https://codeload.github.com/CKylinMC/run.v/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CKylinMC%2Frun.v/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29333483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T12:42:24.625Z","status":"ssl_error","status_checked_at":"2026-02-11T12:41:23.344Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["task-runner","vlang","windows"],"created_at":"2024-10-31T08:08:44.175Z","updated_at":"2026-02-11T13:31:27.538Z","avatar_url":"https://github.com/CKylinMC.png","language":"V","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RUN!!\n\nA simple task runner for Windows, inspired by Makefile.\n\nThis tool used to be a part of cmand (aka. `cmand task [taskname]`), and now fully rewrited in V.\n\n\n## Installation\n\n1. Download binary from release page.\n2. Put any folder which in your system PATH variable.\n3. Done.\n\n## Usage\n\n`run` does not have any configuration file or subcommands, just a few flags.\n\n* `-c/--create` Create/override a new task file.\n* `-?/--usage` Check help messages for a task if it have.\n* `-a/--run-all` Run multiple tasks in one time.\n\nAnd due to it's built on top of the cli.v module, it also have:\n\n* `help/-help` Show help message.\n* `version/-version` Show version information.\n* `man/-man` Output usages in UNIX manual format.\n\nIn common, you command should be like:\n\n```\nrun [flags] [taskname]\n```\n\nsuch as:\n\n* `run -c` Create a new task file.\n* `run -? sometask` Check help messages for a task.\n* `run -a task1 task2 task3` Run multiple tasks in one time.\n\n### `.cmandtask` file\n\nWhen you use `run -c` or `run --create`, it will create a special file in current folder named `.cmandtask`, it's a task file that could be parsed by `run`.\n\n`.cmandtask` file have two parts: `meta` zone and `tasks` zone.\n\n#### Basic syntax\n\nIn file `.cmandtask`, any property will be defined in the format of `#key value`, some of them support multiple lines and you could write them like pair of `#keybegin` + blabla + `#keyend`.\n\nAll named section will be marked as `:sectionname` in the file. All properties defined after this section will be treated as the properties of this section.\n\nAll lines that starts with `//` and not in lone-line marks will be treated as comments.\n\nAll remaining lines will be content of its section.\n\n#### `meta` Zone\n\nOn the top of the taskfile, it will define some special flags:\n\n```\n#version 2\n#desc testfile contents\n#bannerbegin\nBANNER!!!!\n#bannerend\n#helpbegin\nsome custom help text here\n#helpend\n```\n\nAll supported properties for meta:\n\n* `#version` The version of the task file, currently only support `2`. **That's the only required meta property in section `meta`**\n* `#desc` The description of the task file.\n* `#banner` or pair of `#bannerbegin` and `#bannerend` The banner text that will be shown when you run any command inside a taskfile.\n* `help` or pair of `#helpbegin` and `#helpend` The help message overrides for your taskfile.\n* `autorun` The task name that will be executed when you run the taskfile without any task name. `New in v0.1.1`\n  * Or, if you have any task named as `default`, it also works when you not using `autorun`.\n\n#### `tasks` Zone\n\nAfter the zone `meta`, you could define your tasks in the `tasks` zone:\n\n```\n:taskApre\n@echo off\necho taskApre\n\n:taskApost\n@echo off\necho taskApost\n\n:taskA\n#name Task A!\n#desc A simple task!\n#helpbegin\nhelp here\n#helpend\n#pre taskApre\n#post taskApost\n#acceptparams true\n#runmode default\n#if-file-exists .cmandtask\n@echo off\necho taskA\n```\n\nAll tasks could be marked as `:taskname`, and all properties defined after this section will be treated as the properties of this task before next task section.\n\nAll supported properties for task:\n\n* `name` Display name of this task\n* `desc` Description of this task\n* `help` Help message of this task (Also `#helpbegin` and `#helpend`)\n* `pre` Pre-task name, will be executed before current task\n* `post` Post-task name, will be executed after current task\n* `runmode` Run mode, accept `shell`(default) or `tempfile`(create a temp file and run in current folder)\n* `launcher` Specify how to run this task, default by using platform-specify shell, you can define custom executable or command here. `New in v0.1.1`\n  * Use `$cmd` to represent the command or the tempfile to be executed, or it will be appended to the end of the command.\n* `ext` Specify the file extension of the tempfile, default is `.cmd` for Windows and `.sh` for other platforms. Only works when `runmode` is `tempfile`. `New in v0.1.1`\n* `env` Specify the environment variables for this task. `New in v0.1.1`\n  * This property could be defined multiple times.\n  * This property using special syntax: `env:KEY VALUE`.\n  * It will cast to platform-specific env-setting command added before the command.\n    * Windows:\n      * `set KEY=VALUE \u0026 set KEY=VALUE \u0026 ... \u0026 $cmd`\n    * Other:\n      * `KEY=VALUE KEY=VALUE ... $cmd`\n\nSometimes you want your task only executed when some conditions are met, you could use `if-*` properties to define them:\n\n* `if-exists [path]` Task will only be executed when the path exists\n* `if-not-exists [path]` Task will only be executed when the path not exists\n* `if-file-exists [path]` Task will only be executed when the file at the specified path exists.\n* `if-file-not-exists [path]` Task will only be executed when the file at the specified path does not exist.\n* `if-env-exists [variable]` Task will only be executed when the environment variable with the specified name exists.\n* `if-env-not-exists [variable]` Task will only be executed when the environment variable with the specified name does not exist.\n* `if-env-equals [variable=value]` Task will only be executed when the value of the environment variable with the specified name is equal to the specified value.\n* `if-env-not-equals [variable=value]` Task will only be executed when the value of the environment variable with the specified name is not equal to the specified value.\n* `if-folder-exists [path]` Task will only be executed when the folder at the specified path exists.\n* `if-folder-not-exists [path]` Task will only be executed when the folder at the specified path does not exist.\n* `if-os-is` Task will only be executed when the operating system is the specified value. Supported values are `windows`, `linux`, `macos` or other. `New in v0.1.1`\n  * Check out [user_os possible values in vlang official repo](https://github.com/vlang/v/blob/01fd719116f84ae22ee570188df6a26464b8268f/vlib/os/os.v#L406-L457).\n* `if-os-not-is` Task will only be executed when the operating system is not the specified value. Values are the same as `if-os-is`. `New in v0.1.1`\n\nThen any text not in the properties will be treated as the command to be executed. You can also quote your command in `#cmdbegin` and `#cmdend`, it also works.\n\n### Example\n\nHere is an example of a `.cmandtask` file:\n\n```\n#version 2\n#desc testfile contents\n#bannerbegin\nBANNER!!!!\n#bannerend\n#helpbegin\ntaskA - Entry of tasks\n\nYou can run taskA directlly.\n#helpend\n\n:taskApre\n@echo off\necho taskApre\n\n:taskApost\n@echo off\necho taskApost\n\n:taskA\n#name Task A!\n#desc A simple task!\n#helpbegin\nEntry of the tasks\n#helpend\n#pre taskApre\n#post taskApost\n#acceptparams true\n#runmode default\n#if-file-exists .cmandtask\n@echo off\necho taskA\n```\n\nAnd you got:\n```\n\u003erun taskA\n====================\nBANNER!!!!\n====================\n\nEvaluating conditions for task: Task A!\nRunning task: Task A!\nExecuting pre-task: Task A!\nRunning task: taskApre\nExecuting task: taskApre\nmode: tempfile\ntaskApre\nTask exited with code: 0\nTask taskApre finished in 62.000ms\nExecuting task: Task A!\nmode: shell\nTask exited with code: 0\nExecuting post-task: Task A!\nRunning task: taskApost\nExecuting task: taskApost\nmode: tempfile\ntaskApost\nTask exited with code: 0\nTask taskApost finished in 35.000ms\nTask Task A! finished in 129.000ms\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fckylinmc%2Frun.v","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fckylinmc%2Frun.v","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fckylinmc%2Frun.v/lists"}