{"id":17382130,"url":"https://github.com/heinthanth/xuerun","last_synced_at":"2026-05-02T09:32:55.071Z","repository":{"id":70859962,"uuid":"476223141","full_name":"heinthanth/xuerun","owner":"heinthanth","description":"Just a make-like task runner but with more power!","archived":false,"fork":false,"pushed_at":"2022-05-16T04:26:20.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-01T23:14:26.440Z","etag":null,"topics":["coffeescript","deno","make","task-runner"],"latest_commit_sha":null,"homepage":"","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/heinthanth.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":"2022-03-31T08:44:49.000Z","updated_at":"2022-03-31T08:50:12.000Z","dependencies_parsed_at":"2023-04-12T22:36:44.536Z","dependency_job_id":null,"html_url":"https://github.com/heinthanth/xuerun","commit_stats":{"total_commits":15,"total_committers":1,"mean_commits":15.0,"dds":0.0,"last_synced_commit":"ad81b46950e077492b6db9551aa0a4f47503d02c"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heinthanth%2Fxuerun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heinthanth%2Fxuerun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heinthanth%2Fxuerun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heinthanth%2Fxuerun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heinthanth","download_url":"https://codeload.github.com/heinthanth/xuerun/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245924323,"owners_count":20694726,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["coffeescript","deno","make","task-runner"],"created_at":"2024-10-16T07:35:35.592Z","updated_at":"2026-05-02T09:32:55.039Z","avatar_url":"https://github.com/heinthanth.png","language":"CoffeeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# XueRun ( 雪 run )\n\nJust a make-like task runner but with more power! It's written in CoffeeScript + Deno.\n\n## Downloads\n\nGo to Release page and download builds!\nAnd move it to ur path. Eg. `/usr/bin`, `/usr/local/bin`, etc. For windows, the same :P.\n\n## Configurations\n\nGeneral usage is:\n\n```text\nxuerun [tasks]... [options]...\n```\n\nTL;DR\n\n```shell\n$ xuerun                      # will execute 'all' task if exist\n$ xuerun task-name-to-execute # will execute 'task-name-to-execute'\n$ xuerun -t some-tasks-path   # will look for task in 'some-tasks-path'\n$ xuerun -n some-task         # will print commands to run ( won't execute )\n```\n\n### Tasks Path ( `--tasks, -t` option )\n\nUnless `--tasks ( -t )` is given, XueRun will look for `tasks.xuerun`. If `tasks.xuerun` exists, XueRun will use that.\n\n```shell\n$ xuerun someName # xuerun will look for someName in tasks.xuerun\n$ xuerun -t example.xuerun someName # xuerun will look for someName in example.xuerun\n```\n\n### Task Name ( `[tasks]` )\n\nUnless task names are given, XueRun will look for a task named `all`. If `all` task exists, XueRun will execute that.\n\n```shell\n$ xuerun task-name-to-execute\n```\n\nYou can give multiple task name too.\n\n```shell\n$ xuerun taskOne taskTwo taskThree # these tasks will run in sequantial order.\n```\n\n### Recon ( `--recon, -n` option )\n\nUse `--recon ( -n )` to emulate task execution ( but won't work in some edge cases ).\n\n```shell\n$ xuerun -n some-task # xuerun will print commands instead of executing\n```\n\n### Complete Configurations Example\n\n```yaml\ndependOnMeToo:\n  description: another task\n  # cwd: /some/path/too\n  command:\n  - cmd: echo \"I can read {{ opt.release }} if 'dependOnMe' task call me\"\n    when: opt.release # if opt.release is true\n  - cmd: echo \"Since passParentOptions is true in 'dependOnMe' task\"\n    when: opt.release # if opt.release is true\n  passEnv: [ PATH ] # u need to pass env to use ur PATH. Pass true to pass all environment variables\ndependOnMe:\n  description: some task\n  # cwd: / # try change cwd and see {{ Deno.cwd() }} output!\n  shell: bash # default shell\n  dependencies:\n  - name: dependOnMeToo\n    passParentOptions: true\n  command:\n  - cmd: echo \"I can read {{ opt.FOO }}\"\n    shell: zsh # u can use another shell rather than default one\n  - cmd: echo \"Don't run me unless status is 'true'\"\n    when: opt.status == 'true'\n  - echo \"I'm a command too. In {{ Deno.cwd() }}\" # deno expressions are supported\ntaskName:\n  description: a description\n  dependencies:\n  - name: dependOnMe\n    options:\n      FOO: bar\n      status: \"{{ opt.status == 1 }}\"\n      release: \"{{ opt.release }}\" # u can use --release CLI option if passCLI is true\n  passCLI: true\n  command: echo \"this is main task\"\n```\n\nI think this example show u a lot! Have Fun xuerunning!\n\n## Some Notes\n\nHere's some notes to be considered.\n\n### Option passing\n\nIf u specified `passEnv` and `passCLI`, given env and CLI arguments will be passed to `opt` object and can be used with `{{}}`\n\n\n\n### When Option ( WARNING )\n\nThis `taskName \u003e command \u003e subcommand \u003e when` ( when ) expression is evaluated using `eval` function from javascript and can inject raw JS codes. So, use at ur own risk.\n\n```yaml\n- cmd: echo \"Don't run me unless status is 'true'\"\n  when: opt.status == 'true'\n```\n\n### JS Expression\n\nYou can use `{{ expression }}` in commands, options, etc. XueRun use `eta` to render those. string templates. Keep in mind, raw JS code can be injected too. So, use at ur own risk.\n\n```yaml\ncommand:\n- cmd: echo \"it's PATH env =\u003e {{ opt.PATH }}  and CLI release option =\u003e {{ opt.release }}\"\npassEnv: [ PATH ]\npassCLI: true\n```\n\nThen, when u run with `xuerun taskName --release`, `opt.PATH` will be replaced with ur PATH env and `opt.release` will be replaced with `true`.\n\n## How to Build\n\nFirst, clone this repo. Then, run \"tools/bootstrap.ts\"\n\n```shell\ndeno run tools/bootstrap.ts\n```\n\n## License\n\nXueRun is licensed under BSD-2-Clause. For more, see [LICENSE](LICENSE).\n ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheinthanth%2Fxuerun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheinthanth%2Fxuerun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheinthanth%2Fxuerun/lists"}