The <code>cmds</code> attribute should contain the commands of a task.
The example below allows compiling a Go app and uses <ahref="https://github.com/tdewolff/minify/tree/master/cmd/minify"target="_blank"rel="noopener noreferrer">Minify</a> to concat
and minify multiple CSS files into a single one.</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">assets</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:#00a4db">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"> minify </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">o public/style.css src/css</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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>Running the tasks is as simple as running:</p><divclass="language-bash codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-bash codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">task assets build</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_
interpreter. So 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_mojV"id="supported-file-names">Supported file names<aclass="hash-link"href="#supported-file-names"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
committed version (<code>.dist</code>) while still allowing individual users to override
the Taskfile by adding an additional <code>Taskfile.yml</code> (which would be on
<code>.gitignore</code>).</p><h2class="anchor anchorWithStickyNavbar_mojV"id="environment-variables">Environment variables<aclass="hash-link"href="#environment-variables"title="Direct link to heading"></a></h2><h3class="anchor anchorWithStickyNavbar_mojV"id="task">Task<aclass="hash-link"href="#task"title="Direct link to heading"></a></h3><p>You can use <code>env</code> to set custom environment variables for a specific task:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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 $GREETING</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">env</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:#00a4db">GREETING</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> Hey</span><spanclass="token punctuation"style="color:#393A34">,</span><spanclass="token plain"> there</span><spanclass="token tag"style="color:#00009f">!</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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>Additionally, you can set globally environment variables, that'll be available
just like variables, as you can see on the <ahref="#variables">Variables</a> section.</p></div></div><h3class="anchor anchorWithStickyNavbar_mojV"id="env-files">.env files<aclass="hash-link"href="#env-files"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>
the importing mechanism to include other Taskfiles using the <code>includes</code> keyword:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">docs</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./documentation </span><spanclass="token comment"style="color:#999988;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:#00a4db">docker</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./DockerTasks.yml</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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
namespace. So, you'd call <code>task docs:serve</code> to run the <code>serve</code> task from
<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><h3class="anchor anchorWithStickyNavbar_mojV"id="os-specific-taskfiles">OS-specific Taskfiles<aclass="hash-link"href="#os-specific-taskfiles"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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_mojV"id="directory-of-included-taskfile">Directory of included Taskfile<aclass="hash-link"href="#directory-of-included-taskfile"title="Direct link to heading"></a></h3><p>By default, included Taskfile's tasks are ran 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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">dir</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> ./docs</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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="admonition admonition-info alert alert--info"><divclass="admonition-heading"><h5><spanclass="admonition-icon"><svgxmlns="http://www.w3.org/2000/svg"width="14"height="16"viewBox="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</h5></div><divclass="admonition-content"><p>The included Taskfiles must be using the same schema version the main
Taskfile uses.</p></div></div><h3class="anchor anchorWithStickyNavbar_mojV"id="optional-includes">Optional includes<aclass="hash-link"href="#optional-includes"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">optional</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token boolean important"style="color:#36acaa">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:#00a4db">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:#00a4db">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:#00a4db">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 ./tests/Taskfile.yml does not exist"</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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_mojV"id="vars-of-included-taskfiles">Vars of included Taskfiles<aclass="hash-link"href="#vars-of-included-taskfiles"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">DOCKER_IMAGE</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> frontend_image</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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="admonition admonition-info alert alert--info"><divclass="admonition-heading"><h5><spanclass="admonition-icon"><svgxmlns="http://www.w3.org/2000/svg"width="14"height="16"viewBox="0 0 14 16"><pathfil
included ones! If you want a variable in an included Taskfile to be overridable
use the <ahref="https://go-task.github.io/slim-sprig/defaults.html"target="_blank"rel="noopener noreferrer">default function</a>:
<code>MY_VAR: '{{.MY_VAR | default "my-default-value"}}'</code>.</p></div></div><h2class="anchor anchorWithStickyNavbar_mojV"id="task-directory">Task directory<aclass="hash-link"href="#task-directory"title="Direct link to heading"></a></h2><p>By default, tasks will be executed in the directory where the Taskfile is
located. But you can easily make the task run in another folder informing
<code>dir</code>:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">serve</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:#00a4db">dir</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"> public/www</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">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 comment"style="color:#999988;font-style:italic"># run http server</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"> caddy</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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 the directory doesn't exist, <code>task</code> creates it.</p><h2class="anchor anchorWithStickyNavbar_mojV"id="task-dependencies">Task dependencies<aclass="hash-link"href="#task-dependencies"title="Direct link to heading"></a></h2><blockquote><p>Dependencies run in parallel, so dependencies of a task shouldn't depend one
another. If you want to force tasks to run serially take a look at the
<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 them run automatically before running the parent task:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">deps</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token punctuation"style="color:#393A34">[</span><spanclass="token plain">assets</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:#00a4db">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:#00a4db">assets</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:#00a4db">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"> minify </span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">o public/style.css src/css</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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>In the above example, <code>assets</code> will always run right before <code>build</code> if you run
performance.</p><divclass="admonition admonition-tip alert alert--success"><divclass="admonition-heading"><h5><spanclass="admonition-icon"><svgxmlns="http://www.w3.org/2000/svg"width="12"height="16"viewBox="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</h5></div><divclass="admonition-content"><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
<ahref="#including-other-taskfiles">included Taskfile</a>, add a leading <code>:</code> like this:
<code>task: :task-name</code>.</p></div></div><h2class="anchor anchorWithStickyNavbar_mojV"id="prevent-unnecessary-work">Prevent unnecessary work<aclass="hash-link"href="#prevent-unnecessary-work"title="Direct link to heading"></a></h2><h3class="anchor anchorWithStickyNavbar_mojV"id="by-fingerprinting-locally-generated-files-and-their-sources">By fingerprinting locally generated files and their sources<aclass="hash-link"href="#by-fingerprinting-locally-generated-files-and-their-sources"title="Direct link to heading"></a></h3><p>If a task generates something, you can inform Task the source and generated
inform the source files, but if you want to use the <code>timestamp</code> method, you
also need to inform the generated files with <code>generates</code>.</p></div></div><h3class="anchor anchorWithStickyNavbar_mojV"id="using-programmatic-checks-to-indicate-a-task-is-up-to-date">Using programmatic checks to indicate a task is up to date.<aclass="hash-link"href="#using-programmatic-checks-to-indicate-a-task-is-up-to-date"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#999988;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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"viewBox="0 0 24 24"><pathd="M21,7L9,19L3.5,13.5L4.9
<code>generates</code> - but for 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
up-to-date.</p><p>Also, <code>task --status [tasks]...</code> will exit with a non-zero exit code if any of
the tasks are not up-to-date.</p><h3class="anchor anchorWithStickyNavbar_mojV"id="using-programmatic-checks-to-cancel-execution-of-an-task-and-its-dependencies">Using programmatic checks to cancel execution of an task and it's dependencies<aclass="hash-link"href="#using-programmatic-checks-to-cancel-execution-of-an-task-and-its-dependencies"title="Direct link to heading"></a></h3><p>In addition to <code>status</code> checks, there are also <code>preconditions</code> checks, which are
the logical inverse of <code>status</code> checks. That is, if you need a certain set of
conditions to be <em>true</em> you can use the <code>preconditions</code> stanza.
<code>preconditions</code> are similar to <code>status</code> lines except they support <code>sh</code>
when it 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
They are listed below in order of importance (e.g. 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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-bash codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">$ </span><spanclass="token assign-left variable"style="color:#36acaa">TASK_VARIABLE</span><spanclass="token operator"style="color:#393A34">=</span><spanclass="token plain">a-value task do-something</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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="admonition admonition-tip alert alert--success"><divclass="admonition-heading"><h5><spanclass="admonition-icon"><svgxmlns="http://www.w3.org/2000/svg"width="12"height="16"viewBox="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</h5></div><divclass="admonition-content"><p>A special variable <code>.TASK</code> is always available containing the task name.</p></div></div><p>Since some shells don't support above syntax to set environment variables
(Windows) tasks also accepts a similar style when not in the beginning of
The value will be treated as a command and the output assigned. If there is one
or more trailing newlines, the last newline will be trimmed.</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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_mojV"id="forwarding-cli-arguments-to-commands">Forwarding CLI arguments to commands<aclass="hash-
special <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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-bash codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">$ task </span><spanclass="token function"style="color:#d73a49">yarn</span><spanclass="token plain"> -- </span><spanclass="token function"style="color:#d73a49">install</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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_mojV"id="doing-task-cleanup-with-defer">Doing task cleanup with <code>defer</code><aclass="hash-link"href="#doing-task-cleanup-with-defer"title="Direct link to heading"></a></h2><p>With the <code>defer</code> keyword, it's possible to schedule cleanup to be run once
the 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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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's possible as
<ahref="https://go.dev/tour/flowcontrol/13"target="_blank"rel="noopener noreferrer">Go's own <code>defer</code> work</a>, the deferred
commands are executed in the reverse order if you schedule multiple of them.</p></div></div><h2class="anchor anchorWithStickyNavbar_mojV"id="gos-template-engine">Go's template engine<aclass="hash-link"href="#gos-template-engine"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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 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>
path format to <code>/</code>.</li><li><code>fromSlash</code>: Opposite of <code>toSlash</code>. Does nothing on Unix, but on Windows
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></ul><p>Example:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#999988;font-style:italic"># This will be path/to/file on Unix but path\to\file on Windows</span><spanclass="token plain"></span><br></span><spanclass="token-line"style="
The following Taskfile:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">cmds</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain">
The following Taskfile:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#e3116c"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token scalar string"style="color:#e3116c"> 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:#00a4db">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:#00a4db">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:#00a4db">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="toke
If the task does not 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_mojV"id="overriding-task-name">Overriding task name<aclass="hash-link"href="#overriding-task-name"title="Direct link to heading"></a></h2><p>Sometimes you may want to override the task name print on summary, up-to-date
messages to STDOUT, etc. In this case you can just set <code>label:</code>, which can also
For the following Taskfile:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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 "Print something"</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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>Normally this will be print:</p><divclass="language-sh codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-sh codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">echo "Print something"</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">Print something</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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>With silent mode on, the below will be print instead:</p><divclass="language-sh codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-sh codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">Print something</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"viewBox="0 0 24 24"><pathd="M19,21H8V7
that would be run without executing them. This is useful for debugging your Taskfiles.</p><h2class="anchor anchorWithStickyNavbar_mojV"id="ignore-errors">Ignore errors<aclass="hash-link"href="#ignore-errors"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">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:#00a4db">ignore_error</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token boolean important"style="color:#36acaa">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_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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 mean errors will be suppressed
for all commands. But keep in mind this option won't propagate to other tasks
called either by <code>deps</code> or <code>cmds</code>!</p><h2class="anchor anchorWithStickyNavbar_mojV"id="output-syntax">Output syntax<aclass="hash-link"href="#output-syntax"title="Direct link to heading"></a></h2><p>By default, Task just redirect the STDOUT and STDERR of the running commands
to the shell in real time. This is good for having live feedback for log
printed by commands, but the output can become messy if you have multiple
commands running at the same time and printing lots of stuff.</p><p>To make this more customizable, there are currently three different output
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_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">output</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#999988;font-style:italic"># ...</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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
finishes, so you won't have live feedback for commands that take a long time
to run.</p><p>When using the <code>group</code> output, you can optionally provide a templated message
to print at the start and end of the group. This can be useful for instructing
CI systems to group all of the output for a given task, such as with
weirdly, specially when the <ahref="#output-syntax">output mode</a> is set to something
other than <code>interleaved</code> (the default), or when interactive apps are ran in
parallel with other tasks.</p><p>The <code>interactive: true</code> tells Task this is an interactive application, and Task
will try to optimize for it:</p><divclass="language-yaml codeBlockContainer_MPoW theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_B9tL"><pretabindex="0"class="prism-code language-yaml codeBlock__0OG thin-scrollbar"><codeclass="codeBlockLines_gEuF"><spanclass="token-line"style="color:#393A34"><spanclass="token key atrule"style="color:#00a4db">version</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token string"style="color:#e3116c">'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:#00a4db">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:#00a4db">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:#00a4db">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"> vim my</span><spanclass="token punctuation"style="color:#393A34">-</span><spanclass="token plain">file.txt</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"></span><spanclass="token key atrule"style="color:#00a4db">interactive</span><spanclass="token punctuation"style="color:#393A34">:</span><spanclass="token plain"></span><spanclass="token boolean important"style="color:#36acaa">true</span><br></span></code></pre><divclass="buttonGroup_hRr1"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_W9eQ"aria-hidden="true"><svgclass="copyButtonIcon_XEyF"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_i9w9"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 still have problem running an interactive app through Task, please open
an issue about it.</p><h2class="anchor anchorWithStickyNavbar_mojV"id="short-task-syntax">Short task syntax<aclass="hash-link"href="#short-task-syntax"title="Direct link to heading"></a></h2><p>Starting on Task v3, you can now write tasks with a shorter syntax if they
so task knows which files to watch.</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_cNA8 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></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="#vars-of-included-taskfiles"class="table-of-contents__link toc-highlight">Vars of included Taskfiles</a></li></ul></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="#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-execution-of-an-task-and-its-dependencies"class="table-of-contents__link toc-highlight">Using programmatic checks to cancel execution of an task and it's 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-contents__link toc-highlight">Doing task cleanup with <code>defer</code></a></li><li><ahref="#gos-template-engine"class="table-of-contents__link toc-highlight">Go's template engine</a></li><li><ahref="#help"class="table-of-contents__link toc-highlight">Help</a></li><li><ahref="#display-summary-of-task"class="table-of-contents__link toc-highlight">Display summary of task</a></li><li><ahref="#overriding-task-name"class="table-of-contents__link toc-highlight">Overriding task name</a></li><li><ahref="#silent-mode"class="table-of-contents__link toc-highlight">Silent mode</a></li><li><ahref="#dry-run-mode"class="table-of-contents__link toc-highlight">Dry run mode</a></li><li><ahref="#ignore-errors"class="table-of-cont