you can write sh/bash commands, and it will work even on Windows, where <code>sh</code> or
<code>bash</code> are usually not available. Just remember any executable called must be
available by the OS or in PATH.</p><p>If you omit a task name, "default" will be assumed.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="supported-file-names">Supported file names<ahref="#supported-file-names"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>Task will look for the following file names, in order of priority:</p><ul><li>Taskfile.yml</li><li>Taskfile.yaml</li><li>Taskfile.dist.yml</li><li>Taskfile.dist.yaml</li></ul><p>The intention of having the <code>.dist</code> variants is to allow projects to have one
<code>.gitignore</code>).</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="running-a-taskfile-from-a-subdirectory">Running a Taskfile from a subdirectory<ahref="#running-a-taskfile-from-a-subdirectory"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>If a Taskfile cannot be found in the current working directory, it will walk up
<code><service></code> directory contains a <code>docker-compose.yml</code>, the Docker composition
will be brought up.</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="running-a-global-taskfile">Running a global Taskfile<ahref="#running-a-global-taskfile"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>If you call Task with the <code>--global</code> (alias <code>-g</code>) flag, it will look for your
home directory instead of your working directory. In short, Task will look for a
Taskfile on either <code>$HOME/Taskfile.yml</code> or <code>$HOME/Taskfile.yaml</code> paths.</p><p>This is useful to have automation that you can run from anywhere in your system!</p><divclass="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 14 16"><pathfill-rule="evenodd"d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><divclass="admonitionContent_S0QG"><p>When running your global Taskfile with <code>-g</code>, tasks will run on <code>$HOME</code> by
variables, as you can see in the <ahref="#variables">Variables</a> section.</p></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="env-files">.env files<ahref="#env-files"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>You can also ask Task to include <code>.env</code> like files by using the <code>dotenv:</code>
included Taskfiles.</p></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="including-other-taskfiles">Including other Taskfiles<ahref="#including-other-taskfiles"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>If you want to share tasks between different projects (Taskfiles), you can use
the importing mechanism to include other Taskfiles using the <code>includes</code> keyword:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">includes</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">docs</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./documentation </span><spanclass="token comment"style="color:#6B6B6B;font-style:italic"># will look for ./documentation/Taskfile.yml</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">docker</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./DockerTasks.yml</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The tasks described in the given Taskfiles will be available with the informed
<code>documentation/Taskfile.yml</code> or <code>task docker:build</code> to run the <code>build</code> task from
the <code>DockerTasks.yml</code> file.</p><p>Relative paths are resolved relative to the directory containing the including
Taskfile.</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="os-specific-taskfiles">OS-specific Taskfiles<ahref="#os-specific-taskfiles"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>With <code>version: '2'</code>, task automatically includes any <code>Taskfile_{{OS}}.yml</code> if it
exists (for example: <code>Taskfile_windows.yml</code>, <code>Taskfile_linux.yml</code> or
<code>Taskfile_darwin.yml</code>). Since this behavior was a bit too implicit, it was
removed on version 3, but you still can have a similar behavior by explicitly
importing these files:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">includes</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">build</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./Taskfile_</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">OS</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain">.yml</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="directory-of-included-taskfile">Directory of included Taskfile<ahref="#directory-of-included-taskfile"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>By default, included Taskfile's tasks are run in the current directory, even if
the Taskfile is in another directory, but you can force its tasks to run in
another directory by using this alternative syntax:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">includes</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">docs</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">taskfile</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./docs/Taskfile.yml</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">dir</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./docs</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><divclass="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 14 16"><pathfill-rule="evenodd"d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><divclass="admonitionContent_S0QG"><p>The included Taskfiles must be using the same schema version as the main
Taskfile uses.</p></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="optional-includes">Optional includes<ahref="#optional-includes"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>Includes marked as optional will allow Task to continue execution as normal if
the included file is missing.</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">includes</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tests</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">taskfile</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./tests/Taskfile.yml</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">optional</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token boolean important"style="color:#005CC5">true</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">greet</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo "This command can still be successfully executed if</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"> ./tests/Taskfile.yml does not exist"</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="internal-includes">Internal includes<ahref="#internal-includes"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>Includes marked as internal will set all the tasks of the included file to be
internal as well (see the <ahref="#internal-tasks">Internal tasks</a> section below). This
is useful when including utility tasks that are not intended to be used directly
by the user.</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">includes</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tests</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">taskfile</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./taskfiles/Utils.yml</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">internal</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token boolean important"style="color:#005CC5">true</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="vars-of-included-taskfiles">Vars of included Taskfiles<ahref="#vars-of-included-taskfiles"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>You can also specify variables when including a Taskfile. This may be useful for
having reusable Taskfile that can be tweaked or even included more than once:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">includes</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">backend</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">taskfile</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./taskfiles/Docker.yml</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">vars</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">DOCKER_IMAGE</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> backend_image</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">frontend</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">taskfile</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./taskfiles/Docker.yml</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">vars</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">DOCKER_IMAGE</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> frontend_image</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="namespace-aliases">Namespace aliases<ahref="#namespace-aliases"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>When
works in the same way as <ahref="#task-aliases">task aliases</a> and can be used together
<code>MY_VAR: '{{.MY_VAR | default "my-default-value"}}'</code>.</p></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="internal-tasks">Internal tasks<ahref="#internal-tasks"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>Internal tasks are tasks that cannot be called directly by the user. They will
<ahref="#calling-another-task">Calling Another Task</a> section below.</p></blockquote><p>You may have tasks that depend on others. Just pointing them on <code>deps</code> will make
performance.</p><divclass="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 12 16"><pathfill-rule="evenodd"d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><divclass="admonitionContent_S0QG"><p>You can also make the tasks given by the command line run in parallel by using
the <code>--parallel</code> flag (alias <code>-p</code>). Example: <code>task --parallel js css</code>.</p></div></div><p>If you want to pass information to dependencies, you can do that the same manner
<ahref="https://github.com/golang/go/blob/master/src/go/build/syslist.go"target="_blank"rel="noopener noreferrer">here</a>.</p><p>The <code>build-windows</code> task below will run only on Windows, and on any
<code>task: :task-name</code>.</p></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="prevent-unnecessary-work">Prevent unnecessary work<ahref="#prevent-unnecessary-work"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><h3class="anchor anchorWithStickyNavbar_LWe7"id="by-fingerprinting-locally-generated-files-and-their-sources">By fingerprinting locally generated files and their sources<ahref="#by-fingerprinting-locally-generated-files-and-their-sources"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>If a task generates something, you can inform Task the source and generated
compare the checksum of the source files to determine if it's necessary to run
the task. If not, it will just print a message like <code>Task "js" is up to date</code>.</p><p>If you prefer this check to be made by the modification timestamp of the files,
instead of its checksum (content), just set the <code>method</code> property to
(subdirectories will be created for each project).</p><divclass="language-bash codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token builtin class-name"style="color:#116329">export</span><spanclass="token plain"></span><spanclass="token assign-left variable"style="color:#E36209">TASK_TEMP_DIR</span><spanclass="token operator"style="color:#D73A49">=</span><spanclass="token string"style="color:#C6105F">'~/.task'</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div><divclass="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 14 16"><pathfill-rule="evenodd"d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><divclass="admonitionContent_S0QG"><p>Each task has only one checksum stored for its <code>sources</code>. If you want to
distinguish a task by any of its input variables, you can add those variables as
part of the task's label, and it will be considered a different task.</p><p>This is useful if you want to run a task once for each distinct set of inputs
until the sources actually change. For example, if the sources depend on the
value of a variable, or you if you want the task to rerun if some arguments
change even if the source has not.</p></div></div><divclass="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 12 16"><pathfill-rule="evenodd"d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><divclass="admonitionContent_S0QG"><p>The method <code>none</code> skips any validation and always run the task.</p></div></div><divclass="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 14 16"><pathfill-rule="evenodd"d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><divclass="admonitionContent_S0QG"><p>For the <code>checksum</code> (default) or <code>timestamp</code> method to work, it is only necessary
to inform the source files. When the <code>timestamp</code> method is used, the last time
of the running the task is considered as a generate.</p></div></div><h3class="anchor anchorWithStickyNavbar_LWe7"id="using-programmatic-checks-to-indicate-a-task-is-up-to-date">Using programmatic checks to indicate a task is up to date<ahref="#using-programmatic-checks-to-indicate-a-task-is-up-to-date"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h3><p>Alternatively, you can inform a sequence of tests as <code>status</code>. If no error is
returned (exit status 0), the task is considered up-to-date:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">generate-files</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> mkdir directory</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> touch directory/file1.txt</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> touch directory/file2.txt</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token comment"style="color:#6B6B6B;font-style:italic"># test existence of files</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">status</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> test </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">d directory</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> test </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">f directory/file1.txt</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> test </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">f directory/file2.txt</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,1
tasks that generate remote artifacts (Docker images, deploys, CD releases) the
checksum source and timestamps require either access to the artifact or for an
out-of-band refresh of the <code>.checksum</code> fingerprint file.</p><p>Two special variables <code>{{.CHECKSUM}}</code> and <code>{{.TIMESTAMP}}</code> are available for
interpolation within <code>status</code> commands, depending on the method assigned to
fingerprint the sources. Only <code>source</code> globs are fingerprinted.</p><p>Note that the <code>{{.TIMESTAMP}}</code> variable is a "live" Go <code>time.Time</code> struct, and
can be formatted using any of the methods that <code>time.Time</code> responds to.</p><p>See <ahref="https://golang.org/pkg/time/"target="_blank"rel="noopener noreferrer">the Go Time documentation</a> for more
information.</p><p>You can use <code>--force</code> or <code>-f</code> if you want to force a task to run even when
to take using the <code>msg</code> field.</p><p>If a task has a dependency on a sub-task with a precondition, and that
precondition is not met - the calling task will fail. Note that a task executed
with a failing precondition will not run unless <code>--force</code> is given.</p><p>Unlike <code>status</code>, which will skip a task if it is up to date and continue
executing tasks that depend on it, a <code>precondition</code> will fail a task, along with
is executed using <code>run</code>. <code>run</code> can also be set at the root of the Taskfile to
change the behavior of all the tasks unless explicitly overridden.</p><p>Supported values for <code>run</code>:</p><ul><li><code>always</code> (default) always attempt to invoke the task regardless of the number
of previous executions</li><li><code>once</code> only invoke this task once regardless of the number of references</li><li><code>when_changed</code> only invokes the task once for each unique set of variables
listed below in order of importance (i.e. most important first):</p><ul><li>Variables declared in the task definition</li><li>Variables given while calling a task from another (See
<ahref="#calling-another-task">Calling another task</a> above)</li><li>Variables of the <ahref="#including-other-taskfiles">included Taskfile</a> (when the
task is included)</li><li>Variables of the <ahref="#vars-of-included-taskfiles">inclusion of the Taskfile</a>
(when the task is included)</li><li>Global variables (those declared in the <code>vars:</code> option in the Taskfile)</li><li>Environment variables</li></ul><p>Example of sending parameters with environment variables:</p><divclass="language-bash codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">$ </span><spanclass="token assign-left variable"style="color:#E36209">TASK_VARIABLE</span><spanclass="token operator"style="color:#D73A49">=</span><spanclass="token plain">a-value task do-something</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><divclass="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><divclass="admonitionHeading_tbUL"><spanclass="admonitionIcon_kALy"><svgviewBox="0 0 12 16"><pathfill-rule="evenodd"d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><divclass="admonitionContent_S0QG"><p>A special variable <code>.TASK</code> is always available containing the task name.</p></div></div><p>Since some shells do not support the above syntax to set environment variables
(Windows) tasks also accept a similar style when not at the beginning of the
or more trailing newlines, the last newline will be trimmed.</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">build</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> go build </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">ldflags="</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">X main.Version=</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">.GIT_COMMIT</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain">" main.go</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">vars</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">GIT_COMMIT</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">sh</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> git log </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">n 1 </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">format=%h</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This works for all types of variables.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="forwarding-cli-arguments-to-commands">Forwarding CLI arguments to commands<ahref="#forwa
<code>.CLI_ARGS</code> variable. This is useful to forward arguments to another command.</p><p>The below example will run <code>yarn install</code>.</p><divclass="language-bash codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">$ task </span><spanclass="token function"style="color:#8250DF">yarn</span><spanclass="token plain"> -- </span><spanclass="token function"style="color:#8250DF">install</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">yarn</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> yarn </span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">.CLI_ARGS</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="doing-task-cleanup-with-defer">Doing task cleanup with <code>defer</code><ahref="#doing-task-cleanup-with-defer"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>With the <code>defer</code> keyword, it's pos
task finishes. The difference with just putting it as the last command is that
this command will run even when the task fails.</p><p>In the example below, <code>rm -rf tmpdir/</code> will run even if the third command fails:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">default</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> mkdir </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">p tmpdir/</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">defer</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> rm </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">rf tmpdir/</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo 'Do work on tmpdir/'</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you want to move the cleanup command into another task, that is possible as
commands are executed in the reverse order if you schedule multiple of them.</p></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="gos-template-engine">Go's template engine<ahref="#gos-template-engine"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>Task parse commands as <ahref="https://golang.org/pkg/text/template/"target="_blank"rel="noopener noreferrer">Go's template engine</a> before executing them.
Variables are accessible through dot syntax (<code>.VARNAME</code>).</p><p>All functions by the Go's
<ahref="https://go-task.github.io/slim-sprig/"target="_blank"rel="noopener noreferrer">slim-sprig lib</a> are available. The
following example gets the current date in a given format:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">print-date</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo </span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">now </span><spanclass="token punctuation"style="color:#393A34">|</span><spanclass="token plain"> date "2006</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">01</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">02"</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Task also adds the following functions:</p><ul><li><code>OS</code>: Returns the operating system. Possible values are "windows", "linux",
"darwin" (macOS) and "freebsd".</li><li><code>ARCH</code>: return the architecture Task was compiled to: "386", "amd64", "arm" or
"s390x".</li><li><code>splitLines</code>: Splits Unix (\n) and Windows (\r\n) styled newlines.</li><li><code>catLines</code>: Replaces Unix (\n) and Windows (\r\n) styled newlines with a
space.</li><li><code>toSlash</code>: Does nothing on Unix, but on Windows converts a string from <code>\</code>
converts a string from <code>/</code> path format to <code>\</code>.</li><li><code>exeExt</code>: Returns the right executable extension for the current OS (<code>".exe"</code>
for Windows, <code>""</code> for others).</li><li><code>shellQuote</code>: Quotes a string to make it safe for use in shell scripts. Task
uses <ahref="https://pkg.go.dev/mvdan.cc/sh/v3@v3.4.0/syntax#Quote"target="_blank"rel="noopener noreferrer">this Go function</a>
for this. The Bash dialect is assumed.</li><li><code>splitArgs</code>: Splits a string as if it were a command's arguments. Task uses
<ahref="https://pkg.go.dev/mvdan.cc/sh/v3@v3.4.0/shell#Fields"target="_blank"rel="noopener noreferrer">this Go function</a></li></ul><p>Example:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">print-os</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo '</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">OS</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">ARCH</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain">'</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo '</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">if eq OS "windows"</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain">windows</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">command</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">else</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain">unix</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">command</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token punctuation"style="color:#393A34">{</span><spanclass="token plain">end</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token punctuation"style="color:#393A34">}</span><spanclass="token plain">'</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token comment"style="color:#6B6B6B;font-style:italic"># This will be path/to/file on Unix but path\to\file on Wi
following Taskfile:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">build</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">desc</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> Build the go binary.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> go build </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">v </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">i main.go</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">test</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">desc</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> Run all the go tests.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> go test </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">race ./</span><spanclass="token punctuation"style="color:#393A34">...</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">js</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></sp
Taskfile:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">release</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">deps</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">[</span><spanclass="token plain">build</span><spanclass="token punctuation"style="color:#393A34">]</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">summary</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">|</span><spanclass="token scalar string"style="color:#C6105F"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token scalar string"style="color:#C6105F"> Release your project to github</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"> It will build your project before starting the release.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"> Please make sure that you have set GITHUB_TOKEN before starting.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> your</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">release</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">tool</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">build</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"
have a summary or a description, a warning is printed.</p><p>Please note: <em>showing the summary will not execute the command</em>.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="task-aliases">Task aliases<ahref="#task-aliases"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>Aliases are alternative names for tasks. They can be used to make it easier and
commands that would be run without executing them. This is useful for debugging
your Taskfiles.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="ignore-errors">Ignore errors<ahref="#ignore-errors"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>You have the option to ignore errors during command execution. Given the
following Taskfile:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">echo</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> exit 1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo "Hello World"</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Task will abort the execution after running <code>exit 1</code> because the status code <code>1</code>
stands for <code>EXIT_FAILURE</code>. However, it is possible to continue with execution
using <code>ignore_error</code>:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">echo</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">cmd</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> exit 1</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">ignore_error</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token boolean important"style="color:#005CC5">true</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain"> echo "Hello World"</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><code>ignore_error</code> can also be set for a task, which means errors will be suppressed
for all commands. Nevertheless, keep in mind that this option will not propagate
to other tasks called either by <code>deps</code> or <code>cmds</code>!</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="output-syntax">Output syntax<ahref="#output-syntax"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>By default, Task just redirects the STDOUT and STDERR of the running commands to
the shell in real-time. This is good for having live feedback for logging
options you can choose:</p><ul><li><code>interleaved</code> (default)</li><li><code>group</code></li><li><code>prefixed</code></li></ul><p>To choose another one, just set it to root in the Taskfile:</p><divclass="language-yaml codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#22863A">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'3'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">output</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#C6105F">'group'</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#22863A">tasks</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token comment"style="color:#6B6B6B;font-style:italic"># ...</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgclass="copyButtonIcon_y97N"viewBox="0 0 24 24"><pathd="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgclass="copyButtonSuccessIcon_LjdS"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>group</code> output will print the entire output of a command once after it
an issue about it.</p><h2class="anchor anchorWithStickyNavbar_LWe7"id="short-task-syntax">Short task syntax<ahref="#short-task-syntax"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>Starting on Task v3, you can now write tasks with a shorter syntax if they have
<ahref="https://github.com/mvdan/sh"target="_blank"rel="noopener noreferrer">shell interpreter library</a> that Task uses.</p></div></div><h2class="anchor anchorWithStickyNavbar_LWe7"id="watch-tasks">Watch tasks<ahref="#watch-tasks"class="hash-link"aria-label="Direct link to heading"title="Direct link to heading"></a></h2><p>With the flags <code>--watch</code> or <code>-w</code> task will watch for file changes and run the
task again. This requires the <code>sources</code> attribute to be given, so task knows
which files to watch.</p><p>The default watch interval is 5 seconds, but it's possible to change it by
either setting <code>interval: '500ms'</code> in the root of the Taskfile passing it as an
argument like <code>--interval=500ms</code>.</p></div></article><navclass="pagination-nav docusaurus-mt-lg"aria-label="Docs pages navigation"><aclass="pagination-nav__link pagination-nav__link--prev"href="/installation/"><divclass="pagination-nav__sublabel">Previous</div><divclass="pagination-nav__label">Installation</div></a><aclass="pagination-nav__link pagination-nav__link--next"href="/api/"><divclass="pagination-nav__sublabel">Next</div><divclass="pagination-nav__label">API Reference</div></a></nav></div></div><divclass="col col--3"><divclass="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ulclass="table-of-contents table-of-contents__left-border"><li><ahref="#getting-started"class="table-of-contents__link toc-highlight">Getting started</a></li><li><ahref="#supported-file-names"class="table-of-contents__link toc-highlight">Supported file names</a><ul><li><ahref="#running-a-taskfile-from-a-subdirectory"class="table-of-contents__link toc-highlight">Running a Taskfile from a subdirectory</a></li><li><ahref="#running-a-global-taskfile"class="table-of-contents__link toc-highlight">Running a global Taskfile</a></li></ul></li><li><ahref="#environment-variables"class="table-of-contents__link toc-highlight">Environment variables</a><ul><li><ahref="#task"class="table-of-contents__link toc-highlight">Task</a></li><li><ahref="#env-files"class="table-of-contents__link toc-highlight">.env files</a></li></ul></li><li><ahref="#including-other-taskfiles"class="table-of-contents__link toc-highlight">Including other Taskfiles</a><ul><li><ahref="#os-specific-taskfiles"class="table-of-contents__link toc-highlight">OS-specific Taskfiles</a></li><li><ahref="#directory-of-included-taskfile"class="table-of-contents__link toc-highlight">Directory of included Taskfile</a></li><li><ahref="#optional-includes"class="table-of-contents__link toc-highlight">Optional includes</a></li><li><ahref="#internal-includes"class="table-of-contents__link toc-highlight">Internal includes</a></li><li><ahref="#vars-of-included-taskfiles"class="table-of-contents__link toc-highlight">Vars of included Taskfiles</a></li><li><ahref="#namespace-aliases"class="table-of-contents__link toc-highlight">Namespace aliases</a></li></ul></li><li><ahref="#internal-tasks"class="table-of-contents__link toc-highlight">Internal tasks</a></li><li><ahref="#task-directory"class="table-of-contents__link toc-highlight">Task directory</a></li><li><ahref="#task-dependencies"class="table-of-contents__link toc-highlight">Task dependencies</a></li><li><ahref="#platform-specific-tasks-and-commands"class="table-of-contents__link toc-highlight">Platform specific tasks and commands</a></li><li><ahref="#calling-another-task"class="table-of-contents__link toc-highlight">Calling another task</a></li><li><ahref="#prevent-unnecessary-work"class="table-of-contents__link toc-highlight">Prevent unnecessary work</a><ul><li><ahref="#by-fingerprinting-locally-generated-files-and-their-sources"class="table-of-contents__link toc-highlight">By fingerprinting locally generated files and their sources</a></li><li><ahref="#using-programmatic-checks-to-indicate-a-task-is-up-to-date"class="table-of-contents__link toc-highlight">Using programmatic checks to indicate a task is up to date</a></li><li><ahref="#using-programmatic-checks-to-cancel-the-execution-of-a-task-and-its-dependencies"class="table-of-contents__link toc-highlight">Using programmatic checks to cancel the execution of a task and its dependencies</a></li><li><ahref="#limiting-when-tasks-run"class="table-of-contents__link toc-highlight">Limiting when tasks run</a></li></ul></li><li><ahref="#variables"class="table-of-contents__link toc-highlight">Variables</a><ul><li><ahref="#dynamic-variables"class="table-of-contents__link toc-highlight">Dynamic variables</a></li></ul></li><li><ahref="#forwarding-cli-arguments-to-commands"class="table-of-contents__link toc-highlight">Forwarding CLI arguments to commands</a></li><li><ahref="#doing-task-cleanup-with-defer"class="table-of-c