mirror of
https://github.com/go-task/task.git
synced 2024-12-12 10:45:49 +02:00
Website: Sync translations (#1111)
This commit is contained in:
parent
8026d8ddb3
commit
720137304b
@ -17,10 +17,12 @@ task [--flags] [tasks...] [-- CLI_ARGS...]
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
If `--` is given, all remaning arguments will be assigned to a special `CLI_ARGS` variable
|
||||
|
||||
:::
|
||||
|
||||
|
||||
| Short | Flag | Type | Default | Description |
|
||||
| ----- | --------------------------- | -------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `-c` | `--color` | `bool` | `true` | Colored output. Enabled by default. Set flag to `false` or use `NO_COLOR=1` to disable. |
|
||||
@ -35,6 +37,7 @@ If `--` is given, all remaning arguments will be assigned to a special `CLI_ARGS
|
||||
| `-I` | `--interval` | `string` | `5s` | Sets a different watch interval when using `--watch`, the default being 5 seconds. This string should be a valid [Go Duration](https://pkg.go.dev/time#ParseDuration). |
|
||||
| `-l` | `--list` | `bool` | `false` | Lists tasks with description of current Taskfile. |
|
||||
| `-a` | `--list-all` | `bool` | `false` | Lists tasks with or without a description. |
|
||||
| | `--sort` | `string` | `default` | Changes the order of the tasks when listed. |
|
||||
| | `--json` | `bool` | `false` | See [JSON Output](#json-output) |
|
||||
| `-o` | `--output` | `string` | Default set in the Taskfile or `intervealed` | Sets output style: [`interleaved`/`group`/`prefixed`]. |
|
||||
| | `--output-group-begin` | `string` | | Message template to print before a task's grouped output. |
|
||||
@ -66,7 +69,7 @@ When using the `--json` flag in combination with either the `--list` or `--list-
|
||||
"column": 3,
|
||||
"taskfile": "/path/to/Taskfile.yml"
|
||||
}
|
||||
},
|
||||
}
|
||||
// ...
|
||||
],
|
||||
"location": "/path/to/Taskfile.yml"
|
||||
@ -135,6 +138,7 @@ Some environment variables can be overriden to adjust Task behavior.
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Informing only a string like below is equivalent to setting that value to the `taskfile` attribute.
|
||||
|
||||
```yaml
|
||||
@ -144,15 +148,17 @@ includes:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Variable
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
| --------- | -------- | ------- | ------------------------------------------------------------------------ |
|
||||
| *itself* | `string` | | A static value that will be set to the variable. |
|
||||
| _itself_ | `string` | | A static value that will be set to the variable. |
|
||||
| `sh` | `string` | | A shell command. The output (`STDOUT`) will be assigned to the variable. |
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Static and dynamic variables have different syntaxes, like below:
|
||||
|
||||
```yaml
|
||||
@ -164,6 +170,7 @@ vars:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Task
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -195,6 +202,7 @@ vars:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
These alternative syntaxes are available. They will set the given values to `cmds` and everything else will be set to their default values:
|
||||
|
||||
```yaml
|
||||
@ -211,6 +219,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Command
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -227,6 +236,7 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
If given as a a string, the value will be assigned to `cmd`:
|
||||
|
||||
```yaml
|
||||
@ -239,6 +249,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Dependency
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -248,6 +259,7 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
If you don't want to set additional variables, it's enough to declare the dependency as a list of strings (they will be assigned to `task`):
|
||||
|
||||
```yaml
|
||||
@ -258,6 +270,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Precondition
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -267,6 +280,7 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
If you don't want to set a different message, you can declare a precondition like this and the value will be assigned to `sh`:
|
||||
|
||||
```yaml
|
||||
|
@ -9,7 +9,7 @@ Some of the work to improve the Task ecosystem is done by the community, be it i
|
||||
|
||||
## Translations
|
||||
|
||||
[@DeronW](https://github.com/DeronW) maintains the [Chinese translation](https://task-zh.readthedocs.io/zh_CN/latest/) of the website [on this repository](https://github.com/DeronW/task).
|
||||
[@DeronW](https://github.com/DeronW) maintains the [Chinese translation](https://task-zh.readthedocs.io/zh_CN/latest/) of the website [on this repository](https://github.com/DeronW/task).
|
||||
|
||||
## Editor Integrations
|
||||
|
||||
|
@ -14,34 +14,33 @@ Contributions to Task are very welcome, but we ask that you read this document b
|
||||
|
||||
## 1. Setup
|
||||
|
||||
- **Go** - Task is written in [Go][]. We always support the latest two major Go versions, so make sure your version is recent enough.
|
||||
- **Node.js** - [Node.js][] is used to host Task's documentation server and is required if you want to run this server locally.
|
||||
- **Yarn** - [Yarn][] is the Node.js package manager used by Task.
|
||||
- **Go** - Task is written in [Go](https://go.dev). We always support the latest two major Go versions, so make sure your version is recent enough.
|
||||
- **Node.js** - [Node.js](https://nodejs.org/en/) is used to host Task's documentation server and is required if you want to run this server locally.
|
||||
- **Yarn** - [Yarn](https://yarnpkg.com/) is the Node.js package manager used by Task.
|
||||
|
||||
## 2. Making changes
|
||||
|
||||
- **Code style** - Try to maintain the existing code style where possible and ensure that code is formatted by `gofmt`. We use `golangci-lint` in our CI to enforce a consistent style and best-practice. There's a `lint` command in the Taskfile to run this locally.
|
||||
- **Code style** - Try to maintain the existing code style where possible and ensure that code is formatted by [`gofumpt`](https://github.com/mvdan/gofumpt). We use [`golangci-lint`](https://golangci-lint.run/) in our CI to enforce a consistent style and best-practice. You can use the `task lint` command to run this locally and the `task lint:fix` command to automatically fix any issues that are found.
|
||||
- **Documentation** - Ensure that you add/update any relevant documentation. See the [updating documentation](#updating-documentation) section below.
|
||||
- **Tests** - Ensure that you add/update any relevant tests and that all tests are passing before submitting the PR. See the [writing tests](#writing-tests) section below.
|
||||
|
||||
### Running your changes
|
||||
|
||||
To run Task with working changes, you can use `go run ./cmd/task`. To run a development build of task against a test Taskfile in `testdata`, you can use `go
|
||||
run ./cmd/task --dir ./testdata/<my_test_dir> <task_name>`.
|
||||
To run Task with working changes, you can use `go run ./cmd/task`. To run a development build of task against a test Taskfile in `testdata`, you can use `go run ./cmd/task --dir ./testdata/<my_test_dir> <task_name>`.
|
||||
|
||||
### Updating documentation
|
||||
|
||||
Task uses [Docusaurus][] to host a documentation server. This can be setup and run locally by using `task docs` (requires `nodejs` & `yarn`). All content is written in Markdown and is located in the `docs/docs` directory. All Markdown documents should have an 80 character line wrap limit.
|
||||
Task uses [Docusaurus](https://docusaurus.io) to host a documentation server. This can be setup and run locally by using `task docs` (requires `nodejs` & `yarn`). All content is written in Markdown and is located in the `docs/docs` directory. All Markdown documents should have an 80 character line wrap limit.
|
||||
|
||||
When making a change, consider whether a change to the [Usage Guide](./usage.md) is necessary. This document contains descriptions and examples of how to use Task features. If you're adding a new feature, try to find an appropriate place to add a new section. If you're updating an existing feature, ensure that the documentation and any examples are up-to-date. Ensure that any examples follow the [Taskfile Styleguide](./styleguide.md).
|
||||
|
||||
If you added a new field, command or flag, ensure that you add it to the [API Reference](./api_reference.md). New fields also need to be added to the [JSON Schema][]. The descriptions for fields in the API reference and the schema should match.
|
||||
If you added a new field, command or flag, ensure that you add it to the [API Reference](./api_reference.md). New fields also need to be added to the [JSON Schema](https://github.com/go-task/task/blob/master/docs/static/schema.json). The descriptions for fields in the API reference and the schema should match.
|
||||
|
||||
### Writing tests
|
||||
|
||||
Most of Task's test are held in the `task_test.go` file in the project root and this is where you'll most likely want to add new ones too. Most of these tests also have a subdirectory in the `testdata` directory where any Taskfiles/data required to run the tests are stored.
|
||||
|
||||
When making a changes, consider whether new tests are required. These tests should ensure that the functionality you are adding will continue to work in the future. Existing tests may also need updating if you have changed Task's behaviour.
|
||||
When making a changes, consider whether new tests are required. These tests should ensure that the functionality you are adding will continue to work in the future. Existing tests may also need updating if you have changed Task's behavior.
|
||||
|
||||
## 3. Committing your code
|
||||
|
||||
@ -58,22 +57,16 @@ Try to write meaningful commit messages and avoid having too many commits on the
|
||||
|
||||
> I want to contribute, where do I start?
|
||||
|
||||
Take a look at the list of [open issues][]. We have a [good first issue][] label for simpler issues that are ideal for first time contributions.
|
||||
Take a look at the list of [open issues](https://github.com/go-task/task/issues). We have a [good first issue](https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label for simpler issues that are ideal for first time contributions.
|
||||
|
||||
All kinds of contributions are welcome, whether its a typo fix or a shiny new feature. You can also contribute by upvoting/commenting on issues, helping to answer questions or contributing to other [community projects](./community.md).
|
||||
|
||||
> I'm stuck, where can I get help?
|
||||
|
||||
If you have questions, feel free to ask them in the `#help` forum channel on our [Discord server][] or open a [Discussion][] on GitHub.
|
||||
If you have questions, feel free to ask them in the `#help` forum channel on our [Discord server](https://discord.gg/6TY36E39UK) or open a [Discussion](https://github.com/go-task/task/discussions) on GitHub.
|
||||
|
||||
---
|
||||
|
||||
[Go]: https://go.dev
|
||||
[Node.js]: https://nodejs.org/en/
|
||||
[Yarn]: https://yarnpkg.com/
|
||||
[Docusaurus]: https://docusaurus.io
|
||||
[JSON Schema]: https://github.com/go-task/task/blob/master/docs/static/schema.json
|
||||
[open issues]: https://github.com/go-task/task/issues
|
||||
[good first issue]: https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
|
||||
[Discord server]: https://discord.gg/6TY36E39UK
|
||||
[Discussion]: https://github.com/go-task/task/discussions
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -9,11 +9,11 @@ Se você acha esse projeto útil, considere doar usando um dos meios listados ab
|
||||
|
||||
Esta é apenas uma maneira de dizer "obrigado", ele não lhe dará nenhum benefício como maior prioridade em issues ou algo parecido.
|
||||
|
||||
As empresas que doarem pelo menos $50/mês ganharão destaque como "Patrocinador Ouro" na página do site e no README do repositório no GitHub. Faça contato com [@andreynering][] com o logotipo que você deseja ser mostrado no site. Nogócios suspeitos (apostas, cassinos, etc) não serão permitidos, porém.
|
||||
Companies who donate at least $50/month will be featured as a "Gold Sponsor" in the website homepage and on the GitHub repository README. Make contact with [@andreynering](https://github.com/andreynering) with the logo you want to be shown. Suspect businesses (gambling, casinos, etc) won't be allowed, though.
|
||||
|
||||
## GitHub Sponsors
|
||||
|
||||
A forma sugerida de doar para os mantenedores é através do GitHub Sponsors. Basta usar os seguintes links para fazer a sua doação:
|
||||
A forma sugerida de doar para os mantenedores é através do GitHub Sponsors. Just use the following links to do your donation:
|
||||
|
||||
- [@andreynering](https://github.com/sponsors/andreynering)
|
||||
- [@pd93](https://github.com/sponsors/pd93)
|
||||
@ -30,12 +30,14 @@ Se você preferir o [Open Collective](https://opencollective.com/task) você pod
|
||||
|
||||
## PayPal
|
||||
|
||||
Você pode doar para [@andreynering][] através do PayPal também:
|
||||
You can donate to [@andreynering](https://github.com/andreynering) via PayPal as well:
|
||||
|
||||
- [Qualquer valor - Doação única](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=GSVDU63RKG45A¤cy_code=USD&source=url)
|
||||
|
||||
## PIX (somente para o Brasil)
|
||||
|
||||
E se você é brasileiro, também pode doar para [@andreynering][] via PIX [usando este QR Code](/img/pix.png).
|
||||
And if you're Brazilian, you can also donate to [@andreynering](https://github.com/andreynering) via PIX by [using this QR Code](/img/pix.png).
|
||||
|
||||
[@andreynering]: https://github.com/andreynering
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -31,7 +31,7 @@ The default shell on Windows (`cmd` and `powershell`) do not have commands like
|
||||
|
||||
- Use the `{{OS}}` function to run an OS-specific script.
|
||||
- Use something like `{{if eq OS "windows"}}powershell {{end}}<my_cmd>` to detect windows and run the command in Powershell directly.
|
||||
- Use a shell on Windows that supports these commands as builtins, such as [Git Bash][] or [WSL][].
|
||||
- Use a shell on Windows that supports these commands as builtins, such as [Git Bash](https://gitforwindows.org/) or [WSL](https://learn.microsoft.com/en-us/windows/wsl/install).
|
||||
|
||||
We want to make improvements to this part of Task and the issues below track this work. Constructive comments and contributions are very welcome!
|
||||
|
||||
@ -39,5 +39,6 @@ We want to make improvements to this part of Task and the issues below track thi
|
||||
- [mvdan/sh#93](https://github.com/mvdan/sh/issues/93)
|
||||
- [mvdan/sh#97](https://github.com/mvdan/sh/issues/97)
|
||||
|
||||
[Git Bash]: https://gitforwindows.org/
|
||||
[WSL]: https://learn.microsoft.com/en-us/windows/wsl/install
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -11,7 +11,7 @@ Task offers many installation methods. Check out the available methods below.
|
||||
|
||||
### Homebrew
|
||||
|
||||
If you're on macOS or Linux and have [Homebrew][homebrew] installed, getting Task is as simple as running:
|
||||
If you're on macOS or Linux and have [Homebrew](https://brew.sh/) installed, getting Task is as simple as running:
|
||||
|
||||
```bash
|
||||
brew install go-task/tap/go-task
|
||||
@ -27,7 +27,7 @@ brew install go-task
|
||||
|
||||
### Snap
|
||||
|
||||
Task is available in [Snapcraft][snapcraft], but keep in mind that your Linux distribution should allow classic confinement for Snaps to Task work right:
|
||||
Task is available in [Snapcraft](https://snapcraft.io/task), but keep in mind that your Linux distribution should allow classic confinement for Snaps to Task work right:
|
||||
|
||||
```bash
|
||||
sudo snap install task --classic
|
||||
@ -35,7 +35,7 @@ sudo snap install task --classic
|
||||
|
||||
### Chocolatey
|
||||
|
||||
If you're on Windows and have [Chocolatey][choco] installed, getting Task is as simple as running:
|
||||
If you're on Windows and have [Chocolatey](https://chocolatey.org/) installed, getting Task is as simple as running:
|
||||
|
||||
```bash
|
||||
choco install go-task
|
||||
@ -45,7 +45,7 @@ This installation method is community owned.
|
||||
|
||||
### Scoop
|
||||
|
||||
If you're on Windows and have [Scoop][scoop] installed, getting Task is as simple as running:
|
||||
If you're on Windows and have [Scoop](https://scoop.sh/) installed, getting Task is as simple as running:
|
||||
|
||||
```cmd
|
||||
scoop install task
|
||||
@ -109,7 +109,7 @@ winget install Task.Task
|
||||
|
||||
### Binary
|
||||
|
||||
You can download the binary from the [releases page on GitHub][releases] and add to your `$PATH`.
|
||||
You can download the binary from the [releases page on GitHub](https://github.com/go-task/task/releases) and add to your `$PATH`.
|
||||
|
||||
DEB and RPM packages are also available.
|
||||
|
||||
@ -117,7 +117,7 @@ The `task_checksums.txt` file contains the SHA-256 checksum for each file.
|
||||
|
||||
### Install Script
|
||||
|
||||
We also have an [install script][installscript] which is very useful in scenarios like CI. Many thanks to [GoDownloader][godownloader] for enabling the easy generation of this script.
|
||||
We also have an [install script](https://github.com/go-task/task/blob/master/install-task.sh) which is very useful in scenarios like CI. Many thanks to [GoDownloader](https://github.com/goreleaser/godownloader) for enabling the easy generation of this script.
|
||||
|
||||
By default, it installs on the `./bin` directory relative to the working directory:
|
||||
|
||||
@ -133,10 +133,12 @@ sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin
|
||||
|
||||
:::caution
|
||||
|
||||
|
||||
On macOS and Windows, `~/.local/bin` and `~/bin` are not added to `$PATH` by default.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
If you want to install Task in GitHub Actions you can try using [this action](https://github.com/arduino/setup-task) by the Arduino team:
|
||||
@ -155,7 +157,7 @@ This installation method is community owned.
|
||||
|
||||
### Go Modules
|
||||
|
||||
Ensure that you have a supported version of [Go][go] properly installed and setup. You can find the minimum required version of Go in the [go.mod](https://github.com/go-task/task/blob/master/go.mod#L3) file.
|
||||
Ensure that you have a supported version of [Go](https://golang.org/) properly installed and setup. You can find the minimum required version of Go in the [go.mod](https://github.com/go-task/task/blob/master/go.mod#L3) file.
|
||||
|
||||
You can then install the latest release globally by running:
|
||||
|
||||
@ -171,10 +173,12 @@ env GOBIN=/bin go install github.com/go-task/task/v3/cmd/task@latest
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
For CI environments we recommend using the [install script](#install-script) instead, which is faster and more stable, since it'll just download the latest released binary.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Setup completions
|
||||
|
||||
Download the autocompletion file corresponding to your shell.
|
||||
@ -237,11 +241,6 @@ Add the line and save the file:
|
||||
Invoke-Expression -Command path/to/task.ps1
|
||||
```
|
||||
|
||||
[go]: https://golang.org/
|
||||
[snapcraft]: https://snapcraft.io/task
|
||||
[homebrew]: https://brew.sh/
|
||||
[installscript]: https://github.com/go-task/task/blob/master/install-task.sh
|
||||
[releases]: https://github.com/go-task/task/releases
|
||||
[godownloader]: https://github.com/goreleaser/godownloader
|
||||
[choco]: https://chocolatey.org/
|
||||
[scoop]: https://scoop.sh/
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -10,11 +10,11 @@ title: Página Inicial
|
||||
<img id="logo" src="img/logo.svg" height="250px" width="250px" />
|
||||
</div>
|
||||
|
||||
Task é uma ferramenta de automatização de tarefas que foi criada para ser mais simples de usar do que outras similares, como por exemplo o [GNU Make][make].
|
||||
Task is a task runner / build tool that aims to be simpler and easier to use than, for example, [GNU Make](https://www.gnu.org/software/make/).
|
||||
|
||||
Por ser escrito em [Go][go], o Task é simplesmente um binário e não possui nenhuma outra dependência, o que significa que você não precisa lidar com um processo de instalação complicado apenas para usar uma ferramenta de automação.
|
||||
Por ser escrito em [Go](https://go.dev/), o Task é simplesmente um binário e não possui nenhuma outra dependência, o que significa que você não precisa lidar com um processo de instalação complicado apenas para usar uma ferramenta de automação.
|
||||
|
||||
Uma vez [instalado](installation.md), você só precisa só precisa escrever suas tarefas usando um esquema [YAML][yaml] simples num arquivo chamado `Taskfile.yml`:
|
||||
Uma vez [instalado](installation.md), você só precisa só precisa escrever suas tarefas usando um esquema [YAML](http://yaml.org/) simples num arquivo chamado `Taskfile.yml`:
|
||||
|
||||
```yaml title="Taskfile.yml"
|
||||
version: '3'
|
||||
@ -32,10 +32,10 @@ O exemplo acima é apenas o começo. Você pode dar uma olhada no [guia de uso](
|
||||
|
||||
## Funcionalidades
|
||||
|
||||
- [Instalação fácil](installation.md): apenas baixe um único binário, adicione-o a `$PATH` e pronto! Ou você também pode instalá-lo usando [Homebrew][homebrew], [Snapcraft][snapcraft] ou [Scoop][scoop] se você quiser.
|
||||
- Disponível em CIs: adicionando [este script simples](installation.md#install-script) para instalá-lo no seu CI você estará pronto para usar o Task como parte do seu pipeline de CI;
|
||||
- Verdadeiramente multiplataforma: enquanto a maioria das ferramentas de compilação só funcionam bem no Linux ou macOS, o Task também suporta Windows graças [a este interpretador de shell para Go][sh].
|
||||
- Ótimo para a geração de código: você pode facilmente [impedir que uma tarefa execute](/usage#prevent-unnecessary-work) se um determinado conjunto de arquivos não tiver mudado desde a última execução (baseado na data de modificação ou conteúdo dos arquivos).
|
||||
- [Instalação fácil](installation.md): apenas baixe um único binário, adicione-o a `$PATH` e pronto! Ou você também pode instalá-lo usando [Homebrew](https://brew.sh/), [Snapcraft](https://snapcraft.io/) ou [Scoop](https://scoop.sh/) se você quiser.
|
||||
- Available on CIs: by adding [this simple command](installation.md#install-script) to install on your CI script and you're ready to use Task as part of your CI pipeline;
|
||||
- Verdadeiramente multiplataforma: enquanto a maioria das ferramentas de compilação só funcionam bem no Linux ou macOS, o Task também suporta Windows graças [a este interpretador de shell para Go](https://github.com/mvdan/sh).
|
||||
- Great for code generation: you can easily [prevent a task from running](/usage#prevent-unnecessary-work) if a given set of files haven't changed since last run (based either on its timestamp or content).
|
||||
|
||||
## Patrocinadores de Ouro
|
||||
|
||||
@ -46,10 +46,7 @@ O exemplo acima é apenas o começo. Você pode dar uma olhada no [guia de uso](
|
||||
| [![Appwrite](/img/appwrite.svg)](https://appwrite.io/?utm_source=taskfile.dev&utm_medium=website&utm_campaign=task_oss_fund) |
|
||||
|
||||
</div>
|
||||
[make]: https://www.gnu.org/software/make/
|
||||
[go]: https://go.dev/
|
||||
[yaml]: http://yaml.org/
|
||||
[homebrew]: https://brew.sh/
|
||||
[snapcraft]: https://snapcraft.io/
|
||||
[scoop]: https://scoop.sh/
|
||||
[sh]: https://github.com/mvdan/sh
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 10
|
||||
|
||||
# Releasing
|
||||
|
||||
The release process of Task is done with the help of [GoReleaser][goreleaser]. You can test the release process locally by calling the `test-release` task of the Taskfile.
|
||||
The release process of Task is done with the help of [GoReleaser](https://goreleaser.com/). You can test the release process locally by calling the `test-release` task of the Taskfile.
|
||||
|
||||
[GitHub Actions](https://github.com/go-task/task/actions) should release artifacts automatically when a new Git tag is pushed to master (raw executables and DEB and RPM packages).
|
||||
|
||||
@ -13,18 +13,18 @@ Since v3.15.0, raw executables can also be reproduced and verified locally by ch
|
||||
|
||||
# Homebrew
|
||||
|
||||
Goreleaser will automatically push a new commit to the [Formula/go-task.rb][gotaskrb] file in the [Homebrew tap][homebrewtap] repository to release the new version.
|
||||
Goreleaser will automatically push a new commit to the [Formula/go-task.rb](https://github.com/go-task/homebrew-tap/blob/master/Formula/go-task.rb) file in the [Homebrew tap](https://github.com/go-task/homebrew-tap) repository to release the new version.
|
||||
|
||||
# npm
|
||||
|
||||
To release to npm update the version in the [`package.json`][packagejson] file and then run `task npm:publish` to push it.
|
||||
To release to npm update the version in the [`package.json`](https://github.com/go-task/task/blob/master/package.json#L3) file and then run `task npm:publish` to push it.
|
||||
|
||||
# Snapcraft
|
||||
|
||||
The [snap package][snappackage] requires to manual steps to release a new version:
|
||||
The [snap package](https://github.com/go-task/snap) requires to manual steps to release a new version:
|
||||
|
||||
* Updating the current version on [snapcraft.yaml][snapcraftyaml].
|
||||
* Moving both `amd64`, `armhf` and `arm64` new artifacts to the stable channel on the [Snapcraft dashboard][snapcraftdashboard].
|
||||
- Updating the current version on [snapcraft.yaml](https://github.com/go-task/snap/blob/master/snap/snapcraft.yaml#L2).
|
||||
- Moving both `amd64`, `armhf` and `arm64` new artifacts to the stable channel on the [Snapcraft dashboard](https://snapcraft.io/task/releases).
|
||||
|
||||
# Scoop
|
||||
|
||||
@ -34,10 +34,6 @@ Scoop is a command-line package manager for the Windows operating system. Scoop
|
||||
|
||||
Nix is a community owned installation method. Nix package maintainers usually take care of updating versions there by editing [this file](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/tools/go-task/default.nix). If you think its Task version is outdated, open an issue to let us know.
|
||||
|
||||
[goreleaser]: https://goreleaser.com/
|
||||
[homebrewtap]: https://github.com/go-task/homebrew-tap
|
||||
[gotaskrb]: https://github.com/go-task/homebrew-tap/blob/master/Formula/go-task.rb
|
||||
[packagejson]: https://github.com/go-task/task/blob/master/package.json#L3
|
||||
[snappackage]: https://github.com/go-task/snap
|
||||
[snapcraftyaml]: https://github.com/go-task/snap/blob/master/snap/snapcraft.yaml#L2
|
||||
[snapcraftdashboard]: https://snapcraft.io/task/releases
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -78,8 +78,8 @@ vars:
|
||||
FOO: foo
|
||||
BAR: bar
|
||||
BAZ: baz
|
||||
FOOBAR: "{{.FOO}}{{.BAR}}"
|
||||
FOOBARBAZ: "{{.FOOBAR}}{{.BAZ}}"
|
||||
FOOBAR: '{{.FOO}}{{.BAR}}'
|
||||
FOOBARBAZ: '{{.FOOBAR}}{{.BAZ}}'
|
||||
|
||||
tasks:
|
||||
default:
|
||||
@ -89,7 +89,7 @@ tasks:
|
||||
|
||||
## Version 2.1
|
||||
|
||||
Version 2.1 includes a global `output` option, to allow having more control over how commands output are printed to the console (see [documentation][output] for more info):
|
||||
Version 2.1 includes a global `output` option, to allow having more control over how commands output are printed to the console (see [documentation](usage.md#output-syntax) for more info):
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -103,7 +103,7 @@ tasks:
|
||||
prefix: server
|
||||
```
|
||||
|
||||
From this version it's also possible to ignore errors of a command or task (check documentation [here][ignore_errors]):
|
||||
From this version it's also possible to ignore errors of a command or task (check documentation [here](usage.md#ignore-errors)):
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -149,7 +149,7 @@ tasks:
|
||||
- aws s3 cp .env s3://myenvironment
|
||||
```
|
||||
|
||||
Please check the [documentation][includes]
|
||||
Please check the [documentation](usage.md#including-other-taskfiles)
|
||||
|
||||
## Version 3
|
||||
|
||||
@ -202,7 +202,3 @@ tasks:
|
||||
- Global + CLI variables
|
||||
- Call variables
|
||||
- Task variables
|
||||
|
||||
[output]: usage.md#output-syntax
|
||||
[ignore_errors]: usage.md#ignore-errors
|
||||
[includes]: usage.md#including-other-taskfiles
|
||||
|
@ -7,9 +7,10 @@ sidebar_position: 13
|
||||
|
||||
Quer nos ajudar a traduzir esta documentação? Neste documento, explicamos como.
|
||||
|
||||
NÃO edite os arquivos markdown traduzidos diretamente no repositório do GitHub! Nós usamos o [Crowdin][crowdin] para permitir que os contribuidores trabalhem nas traduções. O repositório é atualizado periodicamente com o progresso no Crowdin.
|
||||
NÃO edite os arquivos markdown traduzidos diretamente no repositório do GitHub! We use [Crowdin](https://crowdin.com/project/taskfile) to allow contributors on work on translations. The repository is periodically updated with progress from Crowdin.
|
||||
|
||||
Se você quer ter acesso ao projeto Crowdin para ser capaz de sugerir traduções, por favor, peça acesso no canal de [#translations no nosso servidor do Discord][discord]. Se um determinado idioma ainda não está sendo mostrado ao Crowdin, basta pedir e podemos configurá-lo.
|
||||
If you want to have access to the Crowdin project to be able to suggest translations, please ask for access on the [#translations channel on our Discord server](https://discord.gg/6TY36E39UK). If a given language is not being shown to Crowdin yet, just ask and we can configure it.
|
||||
|
||||
[crowdin]: https://crowdin.com/project/taskfile
|
||||
[discord]: https://discord.gg/6TY36E39UK
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -71,6 +71,7 @@ This is useful to have automation that you can run from anywhere in your system!
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
When running your global Taskfile with `-g`, tasks will run on `$HOME` by default, and not on your working directory!
|
||||
|
||||
As mentioned in the previous section, the `{{.USER_WORKING_DIR}}` special variable can be very handy here to run stuff on the directory you're calling `task -g` from.
|
||||
@ -91,6 +92,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Environment variables
|
||||
|
||||
### Task
|
||||
@ -124,10 +126,12 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
`env` supports expansion and retrieving output from a shell command just like variables, as you can see in the [Variables](#variables) section.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### .env files
|
||||
|
||||
You can also ask Task to include `.env` like files by using the `dotenv:` setting:
|
||||
@ -188,10 +192,12 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Please note that you are not currently able to use the `dotenv` key inside included Taskfiles.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Including other Taskfiles
|
||||
|
||||
If you want to share tasks between different projects (Taskfiles), you can use the importing mechanism to include other Taskfiles using the `includes` keyword:
|
||||
@ -234,10 +240,12 @@ includes:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
The included Taskfiles must be using the same schema version as the main Taskfile uses.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Optional includes
|
||||
|
||||
Includes marked as optional will allow Task to continue execution as normal if the included file is missing.
|
||||
@ -253,7 +261,8 @@ includes:
|
||||
tasks:
|
||||
greet:
|
||||
cmds:
|
||||
- echo "This command can still be successfully executed if ./tests/Taskfile.yml does not exist"
|
||||
- echo "This command can still be successfully executed if
|
||||
./tests/Taskfile.yml does not exist"
|
||||
```
|
||||
|
||||
### Internal includes
|
||||
@ -303,10 +312,12 @@ includes:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Vars declared in the included Taskfile have preference over the variables in the including Taskfile! If you want a variable in an included Taskfile to be overridable, use the [default function](https://go-task.github.io/slim-sprig/defaults.html): `MY_VAR: '{{.MY_VAR | default "my-default-value"}}'`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Internal tasks
|
||||
|
||||
Internal tasks are tasks that cannot be called directly by the user. They will not appear in the output when running `task --list|--list-all`. Other tasks may call internal tasks in the usual way. This is useful for creating reusable, function-like tasks that have no useful purpose on the command line.
|
||||
@ -388,10 +399,12 @@ If there is more than one dependency, they always run in parallel for better per
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
You can also make the tasks given by the command line run in parallel by using the `--parallel` flag (alias `-p`). Example: `task --parallel js css`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
If you want to pass information to dependencies, you can do that the same manner as you would to [call another task](#calling-another-task):
|
||||
|
||||
```yaml
|
||||
@ -401,9 +414,9 @@ tasks:
|
||||
default:
|
||||
deps:
|
||||
- task: echo_sth
|
||||
vars: {TEXT: "before 1"}
|
||||
vars: { TEXT: 'before 1' }
|
||||
- task: echo_sth
|
||||
vars: {TEXT: "before 2"}
|
||||
vars: { TEXT: 'before 2' }
|
||||
cmds:
|
||||
- echo "after"
|
||||
|
||||
@ -517,17 +530,19 @@ tasks:
|
||||
greet-pessimistically:
|
||||
cmds:
|
||||
- task: greet
|
||||
vars: {RECIPIENT: "Cruel World"}
|
||||
vars: { RECIPIENT: 'Cruel World' }
|
||||
```
|
||||
|
||||
The above syntax is also supported in `deps`.
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
NOTE: If you want to call a task declared in the root Taskfile from within an [included Taskfile](#including-other-taskfiles), add a leading `:` like this: `task: :task-name`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Prevent unnecessary work
|
||||
|
||||
### By fingerprinting locally generated files and their sources
|
||||
@ -582,6 +597,7 @@ In situations where you need more flexibility the `status` keyword can be used.
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
By default, task stores checksums on a local `.task` directory in the project's directory. Most of the time, you'll want to have this directory on `.gitignore` (or equivalent) so it isn't committed. (If you have a task for code generation that is committed it may make sense to commit the checksum of that task as well, though).
|
||||
|
||||
If you want these files to be stored in another directory, you can set a `TASK_TEMP_DIR` environment variable in your machine. It can contain a relative path like `tmp/task` that will be interpreted as relative to the project directory, or an absolute or home path like `/tmp/.task` or `~/.task` (subdirectories will be created for each project).
|
||||
@ -592,27 +608,34 @@ export TASK_TEMP_DIR='~/.task'
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Each task has only one checksum stored for its `sources`. If you want to distinguish a task by any of its input variables, you can add those variables as part of the task's label, and it will be considered a different task.
|
||||
|
||||
This is useful if you want to run a task once for each distinct set of inputs until the sources actually change. For example, if the sources depend on the value of a variable, or you if you want the task to rerun if some arguments change even if the source has not.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
The method `none` skips any validation and always run the task.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
For the `checksum` (default) or `timestamp` method to work, it is only necessary to inform the source files. When the `timestamp` method is used, the last time of the running the task is considered as a generate.
|
||||
|
||||
:::
|
||||
|
||||
### Using programmatic checks to indicate a task is up to date.
|
||||
|
||||
### Using programmatic checks to indicate a task is up to date
|
||||
|
||||
Alternatively, you can inform a sequence of tests as `status`. If no error is returned (exit status 0), the task is considered up-to-date:
|
||||
|
||||
@ -668,7 +691,7 @@ tasks:
|
||||
|
||||
### Using programmatic checks to cancel the execution of a task and its dependencies
|
||||
|
||||
In addition to `status` checks, `preconditions` checks are the logical inverse of `status` checks. That is, if you need a certain set of conditions to be _true_ you can use the `preconditions` stanza. `preconditions` are similar to `status` lines, except they support `sh` expansion, and they SHOULD all return 0.
|
||||
In addition to `status` checks, `preconditions` checks are the logical inverse of `status` checks. That is, if you need a certain set of conditions to be _true_ you can use the `preconditions` stanza. `preconditions` are similar to `status` lines, except they support `sh` expansion, and they SHOULD all return 0.
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -682,13 +705,13 @@ tasks:
|
||||
# test existence of files
|
||||
preconditions:
|
||||
- test -f .env
|
||||
- sh: "[ 1 = 0 ]"
|
||||
- sh: '[ 1 = 0 ]'
|
||||
msg: "One doesn't equal Zero, Halting"
|
||||
```
|
||||
|
||||
Preconditions can set specific failure messages that can tell a user what steps to take using the `msg` field.
|
||||
|
||||
If a task has a dependency on a sub-task with a precondition, and that precondition is not met - the calling task will fail. Note that a task executed with a failing precondition will not run unless `--force` is given.
|
||||
If a task has a dependency on a sub-task with a precondition, and that precondition is not met - the calling task will fail. Note that a task executed with a failing precondition will not run unless `--force` is given.
|
||||
|
||||
Unlike `status`, which will skip a task if it is up to date and continue executing tasks that depend on it, a `precondition` will fail a task, along with any other tasks that depend on it.
|
||||
|
||||
@ -698,7 +721,7 @@ version: '3'
|
||||
tasks:
|
||||
task-will-fail:
|
||||
preconditions:
|
||||
- sh: "exit 1"
|
||||
- sh: 'exit 1'
|
||||
|
||||
task-will-also-fail:
|
||||
deps:
|
||||
@ -716,9 +739,9 @@ If a task executed by multiple `cmds` or multiple `deps` you can control when it
|
||||
|
||||
Supported values for `run`:
|
||||
|
||||
* `always` (default) always attempt to invoke the task regardless of the number of previous executions
|
||||
* `once` only invoke this task once regardless of the number of references
|
||||
* `when_changed` only invokes the task once for each unique set of variables passed into the task
|
||||
- `always` (default) always attempt to invoke the task regardless of the number of previous executions
|
||||
- `once` only invoke this task once regardless of the number of references
|
||||
- `when_changed` only invokes the task once for each unique set of variables passed into the task
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -765,10 +788,12 @@ $ TASK_VARIABLE=a-value task do-something
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
A special variable `.TASK` is always available containing the task name.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
Since some shells do not support the above syntax to set environment variables (Windows) tasks also accept a similar style when not at the beginning of the command.
|
||||
|
||||
```bash
|
||||
@ -873,13 +898,15 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Due to the nature of how the [Go's own `defer` work](https://go.dev/tour/flowcontrol/13), the deferred commands are executed in the reverse order if you schedule multiple of them.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Go's template engine
|
||||
|
||||
Task parse commands as [Go's template engine][gotemplate] before executing them. Variables are accessible through dot syntax (`.VARNAME`).
|
||||
Task parse commands as [Go's template engine](https://golang.org/pkg/text/template/) before executing them. Variables are accessible through dot syntax (`.VARNAME`).
|
||||
|
||||
All functions by the Go's [slim-sprig lib](https://go-task.github.io/slim-sprig/) are available. The following example gets the current date in a given format:
|
||||
|
||||
@ -1004,9 +1031,10 @@ dependencies:
|
||||
commands:
|
||||
- your-release-tool
|
||||
```
|
||||
|
||||
If a summary is missing, the description will be printed. If the task does not have a summary or a description, a warning is printed.
|
||||
|
||||
Please note: *showing the summary will not execute the command*.
|
||||
Please note: _showing the summary will not execute the command_.
|
||||
|
||||
## Task aliases
|
||||
|
||||
@ -1077,7 +1105,7 @@ Print something
|
||||
|
||||
There are four ways to enable silent mode:
|
||||
|
||||
* At command level:
|
||||
- At command level:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1089,7 +1117,7 @@ tasks:
|
||||
silent: true
|
||||
```
|
||||
|
||||
* At task level:
|
||||
- At task level:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1101,7 +1129,7 @@ tasks:
|
||||
silent: true
|
||||
```
|
||||
|
||||
* Globally at Taskfile level:
|
||||
- Globally at Taskfile level:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1114,7 +1142,7 @@ tasks:
|
||||
- echo "Print something"
|
||||
```
|
||||
|
||||
* Or globally with `--silent` or `-s` flag
|
||||
- Or globally with `--silent` or `-s` flag
|
||||
|
||||
If you want to suppress STDOUT instead, just redirect a command to `/dev/null`:
|
||||
|
||||
@ -1232,7 +1260,7 @@ task: Failed to run task "errors": exit status 1
|
||||
|
||||
The `prefix` output will prefix every line printed by a command with `[task-name]` as the prefix, but you can customize the prefix for a command with the `prefix:` attribute:
|
||||
|
||||
```yaml
|
||||
```yaml
|
||||
version: '3'
|
||||
|
||||
output: prefixed
|
||||
@ -1241,16 +1269,16 @@ tasks:
|
||||
default:
|
||||
deps:
|
||||
- task: print
|
||||
vars: {TEXT: foo}
|
||||
vars: { TEXT: foo }
|
||||
- task: print
|
||||
vars: {TEXT: bar}
|
||||
vars: { TEXT: bar }
|
||||
- task: print
|
||||
vars: {TEXT: baz}
|
||||
vars: { TEXT: baz }
|
||||
|
||||
print:
|
||||
cmds:
|
||||
- echo "{{.TEXT}}"
|
||||
prefix: "print-{{.TEXT}}"
|
||||
prefix: 'print-{{.TEXT}}'
|
||||
silent: true
|
||||
```
|
||||
|
||||
@ -1263,10 +1291,12 @@ $ task default
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
The `output` option can also be specified by the `--output` or `-o` flags.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Interactive CLI application
|
||||
|
||||
When running interactive CLI applications inside Task they can sometimes behave weirdly, especially when the [output mode](#output-syntax) is set to something other than `interleaved` (the default), or when interactive apps are run in parallel with other tasks.
|
||||
@ -1317,14 +1347,18 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Keep in mind that not all options are available in the [shell interpreter library](https://github.com/mvdan/sh) that Task uses.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Watch tasks
|
||||
|
||||
With the flags `--watch` or `-w` task will watch for file changes and run the task again. This requires the `sources` attribute to be given, so task knows which files to watch.
|
||||
|
||||
The default watch interval is 5 seconds, but it's possible to change it by either setting `interval: '500ms'` in the root of the Taskfile passing it as an argument like `--interval=500ms`.
|
||||
|
||||
[gotemplate]: https://golang.org/pkg/text/template/
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -17,10 +17,12 @@ task [--flags] [tasks...] [-- CLI_ARGS...]
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
If `--` is given, all remaning arguments will be assigned to a special `CLI_ARGS` variable
|
||||
|
||||
:::
|
||||
|
||||
|
||||
| Short | Flag | Type | Default | Description |
|
||||
| ----- | --------------------------- | -------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `-c` | `--color` | `bool` | `true` | Colored output. Enabled by default. Set flag to `false` or use `NO_COLOR=1` to disable. |
|
||||
@ -35,6 +37,7 @@ If `--` is given, all remaning arguments will be assigned to a special `CLI_ARGS
|
||||
| `-I` | `--interval` | `string` | `5s` | Sets a different watch interval when using `--watch`, the default being 5 seconds. This string should be a valid [Go Duration](https://pkg.go.dev/time#ParseDuration). |
|
||||
| `-l` | `--list` | `bool` | `false` | Lists tasks with description of current Taskfile. |
|
||||
| `-a` | `--list-all` | `bool` | `false` | Lists tasks with or without a description. |
|
||||
| | `--sort` | `string` | `default` | Changes the order of the tasks when listed. |
|
||||
| | `--json` | `bool` | `false` | See [JSON Output](#json-output) |
|
||||
| `-o` | `--output` | `string` | Default set in the Taskfile or `intervealed` | Sets output style: [`interleaved`/`group`/`prefixed`]. |
|
||||
| | `--output-group-begin` | `string` | | Message template to print before a task's grouped output. |
|
||||
@ -66,7 +69,7 @@ When using the `--json` flag in combination with either the `--list` or `--list-
|
||||
"column": 3,
|
||||
"taskfile": "/path/to/Taskfile.yml"
|
||||
}
|
||||
},
|
||||
}
|
||||
// ...
|
||||
],
|
||||
"location": "/path/to/Taskfile.yml"
|
||||
@ -135,6 +138,7 @@ Some environment variables can be overriden to adjust Task behavior.
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Informing only a string like below is equivalent to setting that value to the `taskfile` attribute.
|
||||
|
||||
```yaml
|
||||
@ -144,15 +148,17 @@ includes:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Variable
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
| --------- | -------- | ------- | ------------------------------------------------------------------------ |
|
||||
| *itself* | `string` | | A static value that will be set to the variable. |
|
||||
| _itself_ | `string` | | A static value that will be set to the variable. |
|
||||
| `sh` | `string` | | A shell command. The output (`STDOUT`) will be assigned to the variable. |
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Static and dynamic variables have different syntaxes, like below:
|
||||
|
||||
```yaml
|
||||
@ -164,6 +170,7 @@ vars:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Task
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -195,6 +202,7 @@ vars:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
These alternative syntaxes are available. They will set the given values to `cmds` and everything else will be set to their default values:
|
||||
|
||||
```yaml
|
||||
@ -211,6 +219,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Command
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -227,6 +236,7 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
If given as a a string, the value will be assigned to `cmd`:
|
||||
|
||||
```yaml
|
||||
@ -239,6 +249,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Dependency
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -248,6 +259,7 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
If you don't want to set additional variables, it's enough to declare the dependency as a list of strings (they will be assigned to `task`):
|
||||
|
||||
```yaml
|
||||
@ -258,6 +270,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Precondition
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
@ -267,6 +280,7 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
If you don't want to set a different message, you can declare a precondition like this and the value will be assigned to `sh`:
|
||||
|
||||
```yaml
|
||||
|
@ -9,7 +9,7 @@ Some of the work to improve the Task ecosystem is done by the community, be it i
|
||||
|
||||
## Translations
|
||||
|
||||
[@DeronW](https://github.com/DeronW) maintains the [Chinese translation](https://task-zh.readthedocs.io/zh_CN/latest/) of the website [on this repository](https://github.com/DeronW/task).
|
||||
[@DeronW](https://github.com/DeronW) maintains the [Chinese translation](https://task-zh.readthedocs.io/zh_CN/latest/) of the website [on this repository](https://github.com/DeronW/task).
|
||||
|
||||
## Editor Integrations
|
||||
|
||||
|
@ -14,34 +14,33 @@ Contributions to Task are very welcome, but we ask that you read this document b
|
||||
|
||||
## 1. Setup
|
||||
|
||||
- **Go** - Task is written in [Go][]. We always support the latest two major Go versions, so make sure your version is recent enough.
|
||||
- **Node.js** - [Node.js][] is used to host Task's documentation server and is required if you want to run this server locally.
|
||||
- **Yarn** - [Yarn][] is the Node.js package manager used by Task.
|
||||
- **Go** - Task is written in [Go](https://go.dev). We always support the latest two major Go versions, so make sure your version is recent enough.
|
||||
- **Node.js** - [Node.js](https://nodejs.org/en/) is used to host Task's documentation server and is required if you want to run this server locally.
|
||||
- **Yarn** - [Yarn](https://yarnpkg.com/) is the Node.js package manager used by Task.
|
||||
|
||||
## 2. Making changes
|
||||
|
||||
- **Code style** - Try to maintain the existing code style where possible and ensure that code is formatted by `gofmt`. We use `golangci-lint` in our CI to enforce a consistent style and best-practice. There's a `lint` command in the Taskfile to run this locally.
|
||||
- **Code style** - Try to maintain the existing code style where possible and ensure that code is formatted by [`gofumpt`](https://github.com/mvdan/gofumpt). We use [`golangci-lint`](https://golangci-lint.run/) in our CI to enforce a consistent style and best-practice. You can use the `task lint` command to run this locally and the `task lint:fix` command to automatically fix any issues that are found.
|
||||
- **Documentation** - Ensure that you add/update any relevant documentation. See the [updating documentation](#updating-documentation) section below.
|
||||
- **Tests** - Ensure that you add/update any relevant tests and that all tests are passing before submitting the PR. See the [writing tests](#writing-tests) section below.
|
||||
|
||||
### Running your changes
|
||||
|
||||
To run Task with working changes, you can use `go run ./cmd/task`. To run a development build of task against a test Taskfile in `testdata`, you can use `go
|
||||
run ./cmd/task --dir ./testdata/<my_test_dir> <task_name>`.
|
||||
To run Task with working changes, you can use `go run ./cmd/task`. To run a development build of task against a test Taskfile in `testdata`, you can use `go run ./cmd/task --dir ./testdata/<my_test_dir> <task_name>`.
|
||||
|
||||
### Updating documentation
|
||||
|
||||
Task uses [Docusaurus][] to host a documentation server. This can be setup and run locally by using `task docs` (requires `nodejs` & `yarn`). All content is written in Markdown and is located in the `docs/docs` directory. All Markdown documents should have an 80 character line wrap limit.
|
||||
Task uses [Docusaurus](https://docusaurus.io) to host a documentation server. This can be setup and run locally by using `task docs` (requires `nodejs` & `yarn`). All content is written in Markdown and is located in the `docs/docs` directory. All Markdown documents should have an 80 character line wrap limit.
|
||||
|
||||
When making a change, consider whether a change to the [Usage Guide](./usage.md) is necessary. This document contains descriptions and examples of how to use Task features. If you're adding a new feature, try to find an appropriate place to add a new section. If you're updating an existing feature, ensure that the documentation and any examples are up-to-date. Ensure that any examples follow the [Taskfile Styleguide](./styleguide.md).
|
||||
|
||||
If you added a new field, command or flag, ensure that you add it to the [API Reference](./api_reference.md). New fields also need to be added to the [JSON Schema][]. The descriptions for fields in the API reference and the schema should match.
|
||||
If you added a new field, command or flag, ensure that you add it to the [API Reference](./api_reference.md). New fields also need to be added to the [JSON Schema](https://github.com/go-task/task/blob/master/docs/static/schema.json). The descriptions for fields in the API reference and the schema should match.
|
||||
|
||||
### Writing tests
|
||||
|
||||
Most of Task's test are held in the `task_test.go` file in the project root and this is where you'll most likely want to add new ones too. Most of these tests also have a subdirectory in the `testdata` directory where any Taskfiles/data required to run the tests are stored.
|
||||
|
||||
When making a changes, consider whether new tests are required. These tests should ensure that the functionality you are adding will continue to work in the future. Existing tests may also need updating if you have changed Task's behaviour.
|
||||
When making a changes, consider whether new tests are required. These tests should ensure that the functionality you are adding will continue to work in the future. Existing tests may also need updating if you have changed Task's behavior.
|
||||
|
||||
## 3. Committing your code
|
||||
|
||||
@ -58,22 +57,16 @@ Try to write meaningful commit messages and avoid having too many commits on the
|
||||
|
||||
> I want to contribute, where do I start?
|
||||
|
||||
Take a look at the list of [open issues][]. We have a [good first issue][] label for simpler issues that are ideal for first time contributions.
|
||||
Take a look at the list of [open issues](https://github.com/go-task/task/issues). We have a [good first issue](https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label for simpler issues that are ideal for first time contributions.
|
||||
|
||||
All kinds of contributions are welcome, whether its a typo fix or a shiny new feature. You can also contribute by upvoting/commenting on issues, helping to answer questions or contributing to other [community projects](./community.md).
|
||||
|
||||
> I'm stuck, where can I get help?
|
||||
|
||||
If you have questions, feel free to ask them in the `#help` forum channel on our [Discord server][] or open a [Discussion][] on GitHub.
|
||||
If you have questions, feel free to ask them in the `#help` forum channel on our [Discord server](https://discord.gg/6TY36E39UK) or open a [Discussion](https://github.com/go-task/task/discussions) on GitHub.
|
||||
|
||||
---
|
||||
|
||||
[Go]: https://go.dev
|
||||
[Node.js]: https://nodejs.org/en/
|
||||
[Yarn]: https://yarnpkg.com/
|
||||
[Docusaurus]: https://docusaurus.io
|
||||
[JSON Schema]: https://github.com/go-task/task/blob/master/docs/static/schema.json
|
||||
[open issues]: https://github.com/go-task/task/issues
|
||||
[good first issue]: https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
|
||||
[Discord server]: https://discord.gg/6TY36E39UK
|
||||
[Discussion]: https://github.com/go-task/task/discussions
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -9,7 +9,7 @@ If you find this project useful, you can consider donating by using one of the c
|
||||
|
||||
This is just a way of saying "thank you", it won't give you any benefits like higher priority on issues or something similar.
|
||||
|
||||
Companies who donate at least $50/month will be featured as a "Gold Sponsor" in the website homepage and on the GitHub repository README. Make contact with [@andreynering][] with the logo you want to be shown. Suspect businesses (gambling, casinos, etc) won't be allowed, though.
|
||||
Companies who donate at least $50/month will be featured as a "Gold Sponsor" in the website homepage and on the GitHub repository README. Make contact with [@andreynering](https://github.com/andreynering) with the logo you want to be shown. Suspect businesses (gambling, casinos, etc) won't be allowed, though.
|
||||
|
||||
## GitHub Sponsors
|
||||
|
||||
@ -30,12 +30,14 @@ If you prefer [Open Collective](https://opencollective.com/task) you can donate
|
||||
|
||||
## PayPal
|
||||
|
||||
You can donate to [@andreynering][] via PayPal as well:
|
||||
You can donate to [@andreynering](https://github.com/andreynering) via PayPal as well:
|
||||
|
||||
- [Any value - One-time donation](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=GSVDU63RKG45A¤cy_code=USD&source=url)
|
||||
|
||||
## PIX (Brazil only)
|
||||
|
||||
And if you're Brazilian, you can also donate to [@andreynering][] via PIX by [using this QR Code](/img/pix.png).
|
||||
And if you're Brazilian, you can also donate to [@andreynering](https://github.com/andreynering) via PIX by [using this QR Code](/img/pix.png).
|
||||
|
||||
[@andreynering]: https://github.com/andreynering
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -31,7 +31,7 @@ The default shell on Windows (`cmd` and `powershell`) do not have commands like
|
||||
|
||||
- Use the `{{OS}}` function to run an OS-specific script.
|
||||
- Use something like `{{if eq OS "windows"}}powershell {{end}}<my_cmd>` to detect windows and run the command in Powershell directly.
|
||||
- Use a shell on Windows that supports these commands as builtins, such as [Git Bash][] or [WSL][].
|
||||
- Use a shell on Windows that supports these commands as builtins, such as [Git Bash](https://gitforwindows.org/) or [WSL](https://learn.microsoft.com/en-us/windows/wsl/install).
|
||||
|
||||
We want to make improvements to this part of Task and the issues below track this work. Constructive comments and contributions are very welcome!
|
||||
|
||||
@ -39,5 +39,6 @@ We want to make improvements to this part of Task and the issues below track thi
|
||||
- [mvdan/sh#93](https://github.com/mvdan/sh/issues/93)
|
||||
- [mvdan/sh#97](https://github.com/mvdan/sh/issues/97)
|
||||
|
||||
[Git Bash]: https://gitforwindows.org/
|
||||
[WSL]: https://learn.microsoft.com/en-us/windows/wsl/install
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -11,7 +11,7 @@ Task offers many installation methods. Check out the available methods below.
|
||||
|
||||
### Homebrew
|
||||
|
||||
If you're on macOS or Linux and have [Homebrew][homebrew] installed, getting Task is as simple as running:
|
||||
If you're on macOS or Linux and have [Homebrew](https://brew.sh/) installed, getting Task is as simple as running:
|
||||
|
||||
```bash
|
||||
brew install go-task/tap/go-task
|
||||
@ -27,7 +27,7 @@ brew install go-task
|
||||
|
||||
### Snap
|
||||
|
||||
Task is available in [Snapcraft][snapcraft], but keep in mind that your Linux distribution should allow classic confinement for Snaps to Task work right:
|
||||
Task is available in [Snapcraft](https://snapcraft.io/task), but keep in mind that your Linux distribution should allow classic confinement for Snaps to Task work right:
|
||||
|
||||
```bash
|
||||
sudo snap install task --classic
|
||||
@ -35,7 +35,7 @@ sudo snap install task --classic
|
||||
|
||||
### Chocolatey
|
||||
|
||||
If you're on Windows and have [Chocolatey][choco] installed, getting Task is as simple as running:
|
||||
If you're on Windows and have [Chocolatey](https://chocolatey.org/) installed, getting Task is as simple as running:
|
||||
|
||||
```bash
|
||||
choco install go-task
|
||||
@ -45,7 +45,7 @@ This installation method is community owned.
|
||||
|
||||
### Scoop
|
||||
|
||||
If you're on Windows and have [Scoop][scoop] installed, getting Task is as simple as running:
|
||||
If you're on Windows and have [Scoop](https://scoop.sh/) installed, getting Task is as simple as running:
|
||||
|
||||
```cmd
|
||||
scoop install task
|
||||
@ -109,7 +109,7 @@ winget install Task.Task
|
||||
|
||||
### Binary
|
||||
|
||||
You can download the binary from the [releases page on GitHub][releases] and add to your `$PATH`.
|
||||
You can download the binary from the [releases page on GitHub](https://github.com/go-task/task/releases) and add to your `$PATH`.
|
||||
|
||||
DEB and RPM packages are also available.
|
||||
|
||||
@ -117,7 +117,7 @@ The `task_checksums.txt` file contains the SHA-256 checksum for each file.
|
||||
|
||||
### Install Script
|
||||
|
||||
We also have an [install script][installscript] which is very useful in scenarios like CI. Many thanks to [GoDownloader][godownloader] for enabling the easy generation of this script.
|
||||
We also have an [install script](https://github.com/go-task/task/blob/master/install-task.sh) which is very useful in scenarios like CI. Many thanks to [GoDownloader](https://github.com/goreleaser/godownloader) for enabling the easy generation of this script.
|
||||
|
||||
By default, it installs on the `./bin` directory relative to the working directory:
|
||||
|
||||
@ -133,10 +133,12 @@ sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin
|
||||
|
||||
:::caution
|
||||
|
||||
|
||||
On macOS and Windows, `~/.local/bin` and `~/bin` are not added to `$PATH` by default.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
If you want to install Task in GitHub Actions you can try using [this action](https://github.com/arduino/setup-task) by the Arduino team:
|
||||
@ -155,7 +157,7 @@ This installation method is community owned.
|
||||
|
||||
### Go Modules
|
||||
|
||||
Ensure that you have a supported version of [Go][go] properly installed and setup. You can find the minimum required version of Go in the [go.mod](https://github.com/go-task/task/blob/master/go.mod#L3) file.
|
||||
Ensure that you have a supported version of [Go](https://golang.org/) properly installed and setup. You can find the minimum required version of Go in the [go.mod](https://github.com/go-task/task/blob/master/go.mod#L3) file.
|
||||
|
||||
You can then install the latest release globally by running:
|
||||
|
||||
@ -171,10 +173,12 @@ env GOBIN=/bin go install github.com/go-task/task/v3/cmd/task@latest
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
For CI environments we recommend using the [install script](#install-script) instead, which is faster and more stable, since it'll just download the latest released binary.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Setup completions
|
||||
|
||||
Download the autocompletion file corresponding to your shell.
|
||||
@ -237,11 +241,6 @@ Add the line and save the file:
|
||||
Invoke-Expression -Command path/to/task.ps1
|
||||
```
|
||||
|
||||
[go]: https://golang.org/
|
||||
[snapcraft]: https://snapcraft.io/task
|
||||
[homebrew]: https://brew.sh/
|
||||
[installscript]: https://github.com/go-task/task/blob/master/install-task.sh
|
||||
[releases]: https://github.com/go-task/task/releases
|
||||
[godownloader]: https://github.com/goreleaser/godownloader
|
||||
[choco]: https://chocolatey.org/
|
||||
[scoop]: https://scoop.sh/
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -10,11 +10,11 @@ title: Home
|
||||
<img id="logo" src="img/logo.svg" height="250px" width="250px" />
|
||||
</div>
|
||||
|
||||
Task is a task runner / build tool that aims to be simpler and easier to use than, for example, [GNU Make][make].
|
||||
Task is a task runner / build tool that aims to be simpler and easier to use than, for example, [GNU Make](https://www.gnu.org/software/make/).
|
||||
|
||||
Since it's written in [Go][go], Task is just a single binary and has no other dependencies, which means you don't need to mess with any complicated install setups just to use a build tool.
|
||||
Since it's written in [Go](https://go.dev/), Task is just a single binary and has no other dependencies, which means you don't need to mess with any complicated install setups just to use a build tool.
|
||||
|
||||
Once [installed](installation.md), you just need to describe your build tasks using a simple [YAML][yaml] schema in a file called `Taskfile.yml`:
|
||||
Once [installed](installation.md), you just need to describe your build tasks using a simple [YAML](http://yaml.org/) schema in a file called `Taskfile.yml`:
|
||||
|
||||
```yaml title="Taskfile.yml"
|
||||
version: '3'
|
||||
@ -32,9 +32,9 @@ The above example is just the start, you can take a look at the [usage](/usage)
|
||||
|
||||
## Features
|
||||
|
||||
- [Easy installation](installation.md): just download a single binary, add to `$PATH` and you're done! Or you can also install using [Homebrew][homebrew], [Snapcraft][snapcraft], or [Scoop][scoop] if you want.
|
||||
- [Easy installation](installation.md): just download a single binary, add to `$PATH` and you're done! Or you can also install using [Homebrew](https://brew.sh/), [Snapcraft](https://snapcraft.io/), or [Scoop](https://scoop.sh/) if you want.
|
||||
- Available on CIs: by adding [this simple command](installation.md#install-script) to install on your CI script and you're ready to use Task as part of your CI pipeline;
|
||||
- Truly cross-platform: while most build tools only work well on Linux or macOS, Task also supports Windows thanks to [this shell interpreter for Go][sh].
|
||||
- Truly cross-platform: while most build tools only work well on Linux or macOS, Task also supports Windows thanks to [this shell interpreter for Go](https://github.com/mvdan/sh).
|
||||
- Great for code generation: you can easily [prevent a task from running](/usage#prevent-unnecessary-work) if a given set of files haven't changed since last run (based either on its timestamp or content).
|
||||
|
||||
## Gold Sponsors
|
||||
@ -46,10 +46,7 @@ The above example is just the start, you can take a look at the [usage](/usage)
|
||||
| [![Appwrite](/img/appwrite.svg)](https://appwrite.io/?utm_source=taskfile.dev&utm_medium=website&utm_campaign=task_oss_fund) |
|
||||
|
||||
</div>
|
||||
[make]: https://www.gnu.org/software/make/
|
||||
[go]: https://go.dev/
|
||||
[yaml]: http://yaml.org/
|
||||
[homebrew]: https://brew.sh/
|
||||
[snapcraft]: https://snapcraft.io/
|
||||
[scoop]: https://scoop.sh/
|
||||
[sh]: https://github.com/mvdan/sh
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 10
|
||||
|
||||
# Releasing
|
||||
|
||||
The release process of Task is done with the help of [GoReleaser][goreleaser]. You can test the release process locally by calling the `test-release` task of the Taskfile.
|
||||
The release process of Task is done with the help of [GoReleaser](https://goreleaser.com/). You can test the release process locally by calling the `test-release` task of the Taskfile.
|
||||
|
||||
[GitHub Actions](https://github.com/go-task/task/actions) should release artifacts automatically when a new Git tag is pushed to master (raw executables and DEB and RPM packages).
|
||||
|
||||
@ -13,18 +13,18 @@ Since v3.15.0, raw executables can also be reproduced and verified locally by ch
|
||||
|
||||
# Homebrew
|
||||
|
||||
Goreleaser will automatically push a new commit to the [Formula/go-task.rb][gotaskrb] file in the [Homebrew tap][homebrewtap] repository to release the new version.
|
||||
Goreleaser will automatically push a new commit to the [Formula/go-task.rb](https://github.com/go-task/homebrew-tap/blob/master/Formula/go-task.rb) file in the [Homebrew tap](https://github.com/go-task/homebrew-tap) repository to release the new version.
|
||||
|
||||
# npm
|
||||
|
||||
To release to npm update the version in the [`package.json`][packagejson] file and then run `task npm:publish` to push it.
|
||||
To release to npm update the version in the [`package.json`](https://github.com/go-task/task/blob/master/package.json#L3) file and then run `task npm:publish` to push it.
|
||||
|
||||
# Snapcraft
|
||||
|
||||
The [snap package][snappackage] requires to manual steps to release a new version:
|
||||
The [snap package](https://github.com/go-task/snap) requires to manual steps to release a new version:
|
||||
|
||||
* Updating the current version on [snapcraft.yaml][snapcraftyaml].
|
||||
* Moving both `amd64`, `armhf` and `arm64` new artifacts to the stable channel on the [Snapcraft dashboard][snapcraftdashboard].
|
||||
- Updating the current version on [snapcraft.yaml](https://github.com/go-task/snap/blob/master/snap/snapcraft.yaml#L2).
|
||||
- Moving both `amd64`, `armhf` and `arm64` new artifacts to the stable channel on the [Snapcraft dashboard](https://snapcraft.io/task/releases).
|
||||
|
||||
# Scoop
|
||||
|
||||
@ -34,10 +34,6 @@ Scoop is a command-line package manager for the Windows operating system. Scoop
|
||||
|
||||
Nix is a community owned installation method. Nix package maintainers usually take care of updating versions there by editing [this file](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/tools/go-task/default.nix). If you think its Task version is outdated, open an issue to let us know.
|
||||
|
||||
[goreleaser]: https://goreleaser.com/
|
||||
[homebrewtap]: https://github.com/go-task/homebrew-tap
|
||||
[gotaskrb]: https://github.com/go-task/homebrew-tap/blob/master/Formula/go-task.rb
|
||||
[packagejson]: https://github.com/go-task/task/blob/master/package.json#L3
|
||||
[snappackage]: https://github.com/go-task/snap
|
||||
[snapcraftyaml]: https://github.com/go-task/snap/blob/master/snap/snapcraft.yaml#L2
|
||||
[snapcraftdashboard]: https://snapcraft.io/task/releases
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -78,8 +78,8 @@ vars:
|
||||
FOO: foo
|
||||
BAR: bar
|
||||
BAZ: baz
|
||||
FOOBAR: "{{.FOO}}{{.BAR}}"
|
||||
FOOBARBAZ: "{{.FOOBAR}}{{.BAZ}}"
|
||||
FOOBAR: '{{.FOO}}{{.BAR}}'
|
||||
FOOBARBAZ: '{{.FOOBAR}}{{.BAZ}}'
|
||||
|
||||
tasks:
|
||||
default:
|
||||
@ -89,7 +89,7 @@ tasks:
|
||||
|
||||
## Version 2.1
|
||||
|
||||
Version 2.1 includes a global `output` option, to allow having more control over how commands output are printed to the console (see [documentation][output] for more info):
|
||||
Version 2.1 includes a global `output` option, to allow having more control over how commands output are printed to the console (see [documentation](usage.md#output-syntax) for more info):
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -103,7 +103,7 @@ tasks:
|
||||
prefix: server
|
||||
```
|
||||
|
||||
From this version it's also possible to ignore errors of a command or task (check documentation [here][ignore_errors]):
|
||||
From this version it's also possible to ignore errors of a command or task (check documentation [here](usage.md#ignore-errors)):
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -149,7 +149,7 @@ tasks:
|
||||
- aws s3 cp .env s3://myenvironment
|
||||
```
|
||||
|
||||
Please check the [documentation][includes]
|
||||
Please check the [documentation](usage.md#including-other-taskfiles)
|
||||
|
||||
## Version 3
|
||||
|
||||
@ -202,7 +202,3 @@ tasks:
|
||||
- Global + CLI variables
|
||||
- Call variables
|
||||
- Task variables
|
||||
|
||||
[output]: usage.md#output-syntax
|
||||
[ignore_errors]: usage.md#ignore-errors
|
||||
[includes]: usage.md#including-other-taskfiles
|
||||
|
@ -7,9 +7,10 @@ sidebar_position: 13
|
||||
|
||||
Want to help us translate this documentation? In this document we explain how.
|
||||
|
||||
Do NOT edit translated markdown files directly on the GitHub repository! We use [Crowdin][crowdin] to allow contributors on work on translations. The repository is periodically updated with progress from Crowdin.
|
||||
Do NOT edit translated markdown files directly on the GitHub repository! We use [Crowdin](https://crowdin.com/project/taskfile) to allow contributors on work on translations. The repository is periodically updated with progress from Crowdin.
|
||||
|
||||
If you want to have access to the Crowdin project to be able to suggest translations, please ask for access on the [#translations channel on our Discord server][discord]. If a given language is not being shown to Crowdin yet, just ask and we can configure it.
|
||||
If you want to have access to the Crowdin project to be able to suggest translations, please ask for access on the [#translations channel on our Discord server](https://discord.gg/6TY36E39UK). If a given language is not being shown to Crowdin yet, just ask and we can configure it.
|
||||
|
||||
[crowdin]: https://crowdin.com/project/taskfile
|
||||
[discord]: https://discord.gg/6TY36E39UK
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -71,6 +71,7 @@ This is useful to have automation that you can run from anywhere in your system!
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
When running your global Taskfile with `-g`, tasks will run on `$HOME` by default, and not on your working directory!
|
||||
|
||||
As mentioned in the previous section, the `{{.USER_WORKING_DIR}}` special variable can be very handy here to run stuff on the directory you're calling `task -g` from.
|
||||
@ -91,6 +92,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Environment variables
|
||||
|
||||
### Task
|
||||
@ -124,10 +126,12 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
`env` supports expansion and retrieving output from a shell command just like variables, as you can see in the [Variables](#variables) section.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### .env files
|
||||
|
||||
You can also ask Task to include `.env` like files by using the `dotenv:` setting:
|
||||
@ -188,10 +192,12 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Please note that you are not currently able to use the `dotenv` key inside included Taskfiles.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Including other Taskfiles
|
||||
|
||||
If you want to share tasks between different projects (Taskfiles), you can use the importing mechanism to include other Taskfiles using the `includes` keyword:
|
||||
@ -234,10 +240,12 @@ includes:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
The included Taskfiles must be using the same schema version as the main Taskfile uses.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Optional includes
|
||||
|
||||
Includes marked as optional will allow Task to continue execution as normal if the included file is missing.
|
||||
@ -253,7 +261,8 @@ includes:
|
||||
tasks:
|
||||
greet:
|
||||
cmds:
|
||||
- echo "This command can still be successfully executed if ./tests/Taskfile.yml does not exist"
|
||||
- echo "This command can still be successfully executed if
|
||||
./tests/Taskfile.yml does not exist"
|
||||
```
|
||||
|
||||
### Internal includes
|
||||
@ -303,10 +312,12 @@ includes:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Vars declared in the included Taskfile have preference over the variables in the including Taskfile! If you want a variable in an included Taskfile to be overridable, use the [default function](https://go-task.github.io/slim-sprig/defaults.html): `MY_VAR: '{{.MY_VAR | default "my-default-value"}}'`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Internal tasks
|
||||
|
||||
Internal tasks are tasks that cannot be called directly by the user. They will not appear in the output when running `task --list|--list-all`. Other tasks may call internal tasks in the usual way. This is useful for creating reusable, function-like tasks that have no useful purpose on the command line.
|
||||
@ -388,10 +399,12 @@ If there is more than one dependency, they always run in parallel for better per
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
You can also make the tasks given by the command line run in parallel by using the `--parallel` flag (alias `-p`). Example: `task --parallel js css`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
If you want to pass information to dependencies, you can do that the same manner as you would to [call another task](#calling-another-task):
|
||||
|
||||
```yaml
|
||||
@ -401,9 +414,9 @@ tasks:
|
||||
default:
|
||||
deps:
|
||||
- task: echo_sth
|
||||
vars: {TEXT: "before 1"}
|
||||
vars: { TEXT: 'before 1' }
|
||||
- task: echo_sth
|
||||
vars: {TEXT: "before 2"}
|
||||
vars: { TEXT: 'before 2' }
|
||||
cmds:
|
||||
- echo "after"
|
||||
|
||||
@ -517,17 +530,19 @@ tasks:
|
||||
greet-pessimistically:
|
||||
cmds:
|
||||
- task: greet
|
||||
vars: {RECIPIENT: "Cruel World"}
|
||||
vars: { RECIPIENT: 'Cruel World' }
|
||||
```
|
||||
|
||||
The above syntax is also supported in `deps`.
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
NOTE: If you want to call a task declared in the root Taskfile from within an [included Taskfile](#including-other-taskfiles), add a leading `:` like this: `task: :task-name`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Prevent unnecessary work
|
||||
|
||||
### By fingerprinting locally generated files and their sources
|
||||
@ -582,6 +597,7 @@ In situations where you need more flexibility the `status` keyword can be used.
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
By default, task stores checksums on a local `.task` directory in the project's directory. Most of the time, you'll want to have this directory on `.gitignore` (or equivalent) so it isn't committed. (If you have a task for code generation that is committed it may make sense to commit the checksum of that task as well, though).
|
||||
|
||||
If you want these files to be stored in another directory, you can set a `TASK_TEMP_DIR` environment variable in your machine. It can contain a relative path like `tmp/task` that will be interpreted as relative to the project directory, or an absolute or home path like `/tmp/.task` or `~/.task` (subdirectories will be created for each project).
|
||||
@ -592,27 +608,34 @@ export TASK_TEMP_DIR='~/.task'
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Each task has only one checksum stored for its `sources`. If you want to distinguish a task by any of its input variables, you can add those variables as part of the task's label, and it will be considered a different task.
|
||||
|
||||
This is useful if you want to run a task once for each distinct set of inputs until the sources actually change. For example, if the sources depend on the value of a variable, or you if you want the task to rerun if some arguments change even if the source has not.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
The method `none` skips any validation and always run the task.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
For the `checksum` (default) or `timestamp` method to work, it is only necessary to inform the source files. When the `timestamp` method is used, the last time of the running the task is considered as a generate.
|
||||
|
||||
:::
|
||||
|
||||
### Using programmatic checks to indicate a task is up to date.
|
||||
|
||||
### Using programmatic checks to indicate a task is up to date
|
||||
|
||||
Alternatively, you can inform a sequence of tests as `status`. If no error is returned (exit status 0), the task is considered up-to-date:
|
||||
|
||||
@ -668,7 +691,7 @@ tasks:
|
||||
|
||||
### Using programmatic checks to cancel the execution of a task and its dependencies
|
||||
|
||||
In addition to `status` checks, `preconditions` checks are the logical inverse of `status` checks. That is, if you need a certain set of conditions to be _true_ you can use the `preconditions` stanza. `preconditions` are similar to `status` lines, except they support `sh` expansion, and they SHOULD all return 0.
|
||||
In addition to `status` checks, `preconditions` checks are the logical inverse of `status` checks. That is, if you need a certain set of conditions to be _true_ you can use the `preconditions` stanza. `preconditions` are similar to `status` lines, except they support `sh` expansion, and they SHOULD all return 0.
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -682,13 +705,13 @@ tasks:
|
||||
# test existence of files
|
||||
preconditions:
|
||||
- test -f .env
|
||||
- sh: "[ 1 = 0 ]"
|
||||
- sh: '[ 1 = 0 ]'
|
||||
msg: "One doesn't equal Zero, Halting"
|
||||
```
|
||||
|
||||
Preconditions can set specific failure messages that can tell a user what steps to take using the `msg` field.
|
||||
|
||||
If a task has a dependency on a sub-task with a precondition, and that precondition is not met - the calling task will fail. Note that a task executed with a failing precondition will not run unless `--force` is given.
|
||||
If a task has a dependency on a sub-task with a precondition, and that precondition is not met - the calling task will fail. Note that a task executed with a failing precondition will not run unless `--force` is given.
|
||||
|
||||
Unlike `status`, which will skip a task if it is up to date and continue executing tasks that depend on it, a `precondition` will fail a task, along with any other tasks that depend on it.
|
||||
|
||||
@ -698,7 +721,7 @@ version: '3'
|
||||
tasks:
|
||||
task-will-fail:
|
||||
preconditions:
|
||||
- sh: "exit 1"
|
||||
- sh: 'exit 1'
|
||||
|
||||
task-will-also-fail:
|
||||
deps:
|
||||
@ -716,9 +739,9 @@ If a task executed by multiple `cmds` or multiple `deps` you can control when it
|
||||
|
||||
Supported values for `run`:
|
||||
|
||||
* `always` (default) always attempt to invoke the task regardless of the number of previous executions
|
||||
* `once` only invoke this task once regardless of the number of references
|
||||
* `when_changed` only invokes the task once for each unique set of variables passed into the task
|
||||
- `always` (default) always attempt to invoke the task regardless of the number of previous executions
|
||||
- `once` only invoke this task once regardless of the number of references
|
||||
- `when_changed` only invokes the task once for each unique set of variables passed into the task
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -765,10 +788,12 @@ $ TASK_VARIABLE=a-value task do-something
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
A special variable `.TASK` is always available containing the task name.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
Since some shells do not support the above syntax to set environment variables (Windows) tasks also accept a similar style when not at the beginning of the command.
|
||||
|
||||
```bash
|
||||
@ -873,13 +898,15 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Due to the nature of how the [Go's own `defer` work](https://go.dev/tour/flowcontrol/13), the deferred commands are executed in the reverse order if you schedule multiple of them.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Go's template engine
|
||||
|
||||
Task parse commands as [Go's template engine][gotemplate] before executing them. Variables are accessible through dot syntax (`.VARNAME`).
|
||||
Task parse commands as [Go's template engine](https://golang.org/pkg/text/template/) before executing them. Variables are accessible through dot syntax (`.VARNAME`).
|
||||
|
||||
All functions by the Go's [slim-sprig lib](https://go-task.github.io/slim-sprig/) are available. The following example gets the current date in a given format:
|
||||
|
||||
@ -1004,9 +1031,10 @@ dependencies:
|
||||
commands:
|
||||
- your-release-tool
|
||||
```
|
||||
|
||||
If a summary is missing, the description will be printed. If the task does not have a summary or a description, a warning is printed.
|
||||
|
||||
Please note: *showing the summary will not execute the command*.
|
||||
Please note: _showing the summary will not execute the command_.
|
||||
|
||||
## Task aliases
|
||||
|
||||
@ -1077,7 +1105,7 @@ Print something
|
||||
|
||||
There are four ways to enable silent mode:
|
||||
|
||||
* At command level:
|
||||
- At command level:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1089,7 +1117,7 @@ tasks:
|
||||
silent: true
|
||||
```
|
||||
|
||||
* At task level:
|
||||
- At task level:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1101,7 +1129,7 @@ tasks:
|
||||
silent: true
|
||||
```
|
||||
|
||||
* Globally at Taskfile level:
|
||||
- Globally at Taskfile level:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1114,7 +1142,7 @@ tasks:
|
||||
- echo "Print something"
|
||||
```
|
||||
|
||||
* Or globally with `--silent` or `-s` flag
|
||||
- Or globally with `--silent` or `-s` flag
|
||||
|
||||
If you want to suppress STDOUT instead, just redirect a command to `/dev/null`:
|
||||
|
||||
@ -1232,7 +1260,7 @@ task: Failed to run task "errors": exit status 1
|
||||
|
||||
The `prefix` output will prefix every line printed by a command with `[task-name]` as the prefix, but you can customize the prefix for a command with the `prefix:` attribute:
|
||||
|
||||
```yaml
|
||||
```yaml
|
||||
version: '3'
|
||||
|
||||
output: prefixed
|
||||
@ -1241,16 +1269,16 @@ tasks:
|
||||
default:
|
||||
deps:
|
||||
- task: print
|
||||
vars: {TEXT: foo}
|
||||
vars: { TEXT: foo }
|
||||
- task: print
|
||||
vars: {TEXT: bar}
|
||||
vars: { TEXT: bar }
|
||||
- task: print
|
||||
vars: {TEXT: baz}
|
||||
vars: { TEXT: baz }
|
||||
|
||||
print:
|
||||
cmds:
|
||||
- echo "{{.TEXT}}"
|
||||
prefix: "print-{{.TEXT}}"
|
||||
prefix: 'print-{{.TEXT}}'
|
||||
silent: true
|
||||
```
|
||||
|
||||
@ -1263,10 +1291,12 @@ $ task default
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
The `output` option can also be specified by the `--output` or `-o` flags.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Interactive CLI application
|
||||
|
||||
When running interactive CLI applications inside Task they can sometimes behave weirdly, especially when the [output mode](#output-syntax) is set to something other than `interleaved` (the default), or when interactive apps are run in parallel with other tasks.
|
||||
@ -1317,14 +1347,18 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Keep in mind that not all options are available in the [shell interpreter library](https://github.com/mvdan/sh) that Task uses.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Watch tasks
|
||||
|
||||
With the flags `--watch` or `-w` task will watch for file changes and run the task again. This requires the `sources` attribute to be given, so task knows which files to watch.
|
||||
|
||||
The default watch interval is 5 seconds, but it's possible to change it by either setting `interval: '500ms'` in the root of the Taskfile passing it as an argument like `--interval=500ms`.
|
||||
|
||||
[gotemplate]: https://golang.org/pkg/text/template/
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -17,10 +17,12 @@ task [--flags] [tasks...] [-- CLI_ARGS...]
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
如果 `--` 给出,所有剩余参数将被分配给一个特殊的 `CLI_ARGS` 变量
|
||||
|
||||
:::
|
||||
|
||||
|
||||
| 缩写 | 标志 | 类型 | 默认 | 描述 |
|
||||
| ---- | --------------------------- | -------- | -------------------------------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `-c` | `--color` | `bool` | `true` | 彩色输出。 默认开启。 设置为 `false` 或使用 `NO_COLOR=1` 禁用。 |
|
||||
@ -35,6 +37,7 @@ task [--flags] [tasks...] [-- CLI_ARGS...]
|
||||
| `-I` | `--interval` | `string` | `5s` | 使用 `--watch` 设置不同的观察间隔,默认为 5 秒。 这个字符串应该是一个有效的 [Go Duration](https://pkg.go.dev/time#ParseDuration)。 |
|
||||
| `-l` | `--list` | `bool` | `false` | 列出当前文件的全部任务及对应描述。 |
|
||||
| `-a` | `--list-all` | `bool` | `false` | 列出无论有没有描述的所有任务。 |
|
||||
| | `--sort` | `string` | `default` | 在列出时更改 task 的顺序。 |
|
||||
| | `--json` | `bool` | `false` | 查看 [JSON 输出](#json-输出) |
|
||||
| `-o` | `--output` | `string` | 在 Taskfile 中设置默认值或 `intervealed` | 设置输出样式:[`interleaved`/`group`/`prefixed`]。 |
|
||||
| | `--output-group-begin` | `string` | | 在任务组输出前打印的消息模板。 |
|
||||
@ -66,7 +69,7 @@ task [--flags] [tasks...] [-- CLI_ARGS...]
|
||||
"column": 3,
|
||||
"taskfile": "/path/to/Taskfile.yml"
|
||||
}
|
||||
},
|
||||
}
|
||||
// ...
|
||||
],
|
||||
"location": "/path/to/Taskfile.yml"
|
||||
@ -135,6 +138,7 @@ task [--flags] [tasks...] [-- CLI_ARGS...]
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
像下面这样只赋值一个字符串,和把这个值设置到 `taskfile` 属性是一样的。
|
||||
|
||||
```yaml
|
||||
@ -144,15 +148,17 @@ includes:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Variable
|
||||
|
||||
| 属性 | 类型 | 默认 | 描述 |
|
||||
| -------- | -------- | -- | ---------------------------------- |
|
||||
| *itself* | `string` | | 将设置为变量的静态值。 |
|
||||
| _itself_ | `string` | | 将设置为变量的静态值。 |
|
||||
| `sh` | `string` | | 一个 shell 命令。 输出 (`STDOUT`) 将分配给变量。 |
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
静态和动态变量有不同的语法,如下所示:
|
||||
|
||||
```yaml
|
||||
@ -164,6 +170,7 @@ vars:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### Task
|
||||
|
||||
| 属性 | 类型 | 默认 | 描述 |
|
||||
@ -195,6 +202,7 @@ vars:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
这些替代语法可用。 他们会将给定值设置为 `cmds`,其他所有内容都将设置为其默认值:
|
||||
|
||||
```yaml
|
||||
@ -211,6 +219,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Command
|
||||
|
||||
| 属性 | 类型 | 默认 | 描述 |
|
||||
@ -227,6 +236,7 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
如果以字符串形式给出,该值将分配给 `cmd`:
|
||||
|
||||
```yaml
|
||||
@ -239,6 +249,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Dependency
|
||||
|
||||
| 属性 | 类型 | 默认 | 描述 |
|
||||
@ -248,6 +259,7 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
如果你不想设置额外的变量,将依赖关系声明为一个字符串列表就足够了(它们将被分配给 `task`)。
|
||||
|
||||
```yaml
|
||||
@ -258,6 +270,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
#### Precondition
|
||||
|
||||
| 属性 | 类型 | 默认 | 描述 |
|
||||
@ -267,6 +280,7 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
如果你不想设置不同的消息,你可以像这样声明一个前提条件,值将被分配给 `sh`:
|
||||
|
||||
```yaml
|
||||
|
@ -47,4 +47,4 @@ JetBrains IntelliJ 插件由 [@lechuckroh](https://github.com/lechuckroh) 完成
|
||||
|
||||
同时,感谢所有 [代码贡献者](https://github.com/go-task/task/graphs/contributors), [资金赞助](https://opencollective.com/task),以及 [提交问题](https://github.com/go-task/task/issues?q=is%3Aissue) 和 [解答问题](https://github.com/go-task/task/discussions) 的人。
|
||||
|
||||
如果你发现文档有哪些遗漏信息,欢迎提交 pull request。
|
||||
如果你发现文档有哪些遗漏信息,欢迎提交 PR。
|
||||
|
@ -20,7 +20,7 @@ sidebar_position: 9
|
||||
|
||||
## 2. 进行变更
|
||||
|
||||
- **代码风格** - 尽量保持现有的代码风格,并确保代码采用 `gofmt`。 我们在我们的 CI 中使用 `golangci-lint` 来强制执行一致的风格和最佳实践。 Taskfile 中有一个 `lint` 命令可以在本地运行。
|
||||
- **代码风格** - 尽量保持现有的代码风格,并确保代码经过 [`gofumpt`](https://github.com/mvdan/gofumpt) 格式化。 我们在我们的 CI 中使用 [`golangci-lint`](https://golangci-lint.run/) 来强制执行一致的风格和最佳实践。 您可以使用 `task lint` 命令在本地运行它,并使用 `task lint:fix` 命令自动修复发现的任何问题。
|
||||
- **文档** - 确保添加/更新了相关文档。 请参阅下面的 [更新文档](#更新文档) 部分。
|
||||
- **测试** - 确保添加/更新了相关测试,并且在提交 PR 前已通过所有测试。 请参阅下面的 [编写测试](#编写测试) 部分。
|
||||
|
||||
@ -41,11 +41,11 @@ Task 用 [Docusaurus](https://docusaurus.io) 托管文档服务。 这可以通
|
||||
|
||||
Task 的大部分测试都保存在项目根目录的 `task_test.go` 文件中并且这是您最有可能想要添加新测试的地方。 这些测试中的大多数在目录中还有一个 `testdata` 子目录,其中存储了运行测试所需的 Taskfiles/数据。
|
||||
|
||||
进行更改时,请考虑是否需要添加新的测试。 这些测试应确保您添加的功能在未来持续工作。 如果您更改了任务的行为,现有测试可能也需要更新。
|
||||
进行更改时,请考虑是否需要添加新的测试。 这些测试应确保您添加的功能在未来持续工作。 如果您更改了 Task 的行为,则现有测试也可能需要更新。
|
||||
|
||||
## 3. 提交代码
|
||||
|
||||
编写有意义的提交信息,避免一个 PR 上有太多提交。 大多数PR应该有一个提交(尽管对于较大的PR来说,把它分成几个提交可能是合理的)。 Git squash和rebase是你的好朋友!
|
||||
尝试编写有意义的提交消息并避免在 PR 上有太多提交。 大多数 PR 应该有一个单一的提交(尽管对于更大的 PR 将它分成几个可能是合理的)。 Git squash 和 rebase 是你的好朋友!
|
||||
|
||||
## 4. 提交 PR
|
||||
|
||||
@ -58,7 +58,7 @@ Task 的大部分测试都保存在项目根目录的 `task_test.go` 文件中
|
||||
|
||||
> 我想贡献,我从哪里开始?
|
||||
|
||||
查看 [未解决 Issue](https://github.com/go-task/task/issues) 的列表。 我们有一个 [good first issue](https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 标签,用于更简单的 Issue,非常适合首次贡献。
|
||||
查看 [未解决 Issue](https://github.com/go-task/task/issues) 的列表。 我们有一个 [good first issue](https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 标签,用于更简单的问题,非常适合首次贡献。
|
||||
|
||||
欢迎各种贡献,无论是拼写错误修复还是很小的新功能。 您还可以通过对 Issue 进行投票/评论、帮助回答问题或帮助 [其他社区项目](./community.md) 来做出贡献。
|
||||
|
||||
@ -67,3 +67,7 @@ Task 的大部分测试都保存在项目根目录的 `task_test.go` 文件中
|
||||
如果您有任何疑问,请随时在我们的 [Discord 服务器](https://discord.gg/6TY36E39UK) 上的 `#help` 论坛频道中提问,或在 GitHub 上打开 [讨论](https://github.com/go-task/task/discussions)。
|
||||
|
||||
---
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -37,3 +37,7 @@ sidebar_position: 12
|
||||
## PIX (仅巴西)
|
||||
|
||||
如果你是巴西人,你也可以通过 PIX [使用这个QR码](/img/pix.png) 向 [@andreynering](https://github.com/andreynering) 捐款。
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -38,3 +38,7 @@ Windows 上的默认 shell(`cmd` 和 `powershell`)没有像 `rm` 和 `cp`
|
||||
- [#197](https://github.com/go-task/task/issues/197)
|
||||
- [mvdan/sh#93](https://github.com/mvdan/sh/issues/93)
|
||||
- [mvdan/sh#97](https://github.com/mvdan/sh/issues/97)
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -35,7 +35,7 @@ sudo snap install task --classic
|
||||
|
||||
### Chocolatey
|
||||
|
||||
如果 Windows 上安装了 [Chocolatey][choco],再安装 Task 只要这样:
|
||||
如果 Windows 上安装了 [Chocolatey](https://chocolatey.org/),再安装 Task 只要这样:
|
||||
|
||||
```bash
|
||||
choco install go-task
|
||||
@ -45,7 +45,7 @@ choco install go-task
|
||||
|
||||
### Scoop
|
||||
|
||||
如果 Windows 上安装了 [Scoop][scoop],再安装 Task 只要这样:
|
||||
如果 Windows 上安装了 [Scoop](https://scoop.sh/),再安装 Task 只要这样:
|
||||
|
||||
```cmd
|
||||
scoop install task
|
||||
@ -133,10 +133,12 @@ sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin
|
||||
|
||||
:::caution
|
||||
|
||||
|
||||
在 macOS 和 Windows 上,`~/.local/bin` 和 `~/bin` 默认情况下不会添加到 `$PATH`。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
如果你想在 GitHub Actions 中安装 Task,你可以尝试使用 Arduino 团队的 [这个 action](https://github.com/arduino/setup-task):
|
||||
@ -171,10 +173,12 @@ env GOBIN=/bin go install github.com/go-task/task/v3/cmd/task@latest
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
对于 CI 环境,我们建议改用 [安装脚本](#安装脚本),它更快更稳定,因为它只会下载最新发布的二进制文件。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 自动完成
|
||||
|
||||
下载与您的 shell 对应的自动完成文件。
|
||||
@ -237,5 +241,6 @@ notepad $profile
|
||||
Invoke-Expression -Command path/to/task.ps1
|
||||
```
|
||||
|
||||
[choco]: https://chocolatey.org/
|
||||
[scoop]: https://scoop.sh/
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -14,7 +14,7 @@ Task 是一个任务运行器/构建工具,旨在比 [GNU Make](https://www.gn
|
||||
|
||||
由于它是用 [Go](https://go.dev/) 编写的,Task 只是一个二进制文件,没有其他依赖项,这意味着您不需要为了使用构建工具而烦恼任何复杂的安装设置。
|
||||
|
||||
[安装](installation.md) 后,您只需在名为 `Taskfile.yml` 的文件中使用简单的 [YAML][yaml] 规则描述您的构建任务:
|
||||
[安装](installation.md) 后,您只需在名为 `Taskfile.yml` 的文件中使用简单的 [YAML](http://yaml.org/) 规则描述您的构建任务:
|
||||
|
||||
```yaml title="Taskfile.yml"
|
||||
version: '3'
|
||||
@ -46,4 +46,7 @@ tasks:
|
||||
| [![Appwrite](/img/appwrite.svg)](https://appwrite.io/?utm_source=taskfile.dev&utm_medium=website&utm_campaign=task_oss_fund) |
|
||||
|
||||
</div>
|
||||
[yaml]: http://yaml.org/
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -5,7 +5,7 @@ sidebar_position: 10
|
||||
|
||||
# 发布
|
||||
|
||||
Task 的发布流程是在 [GoReleaser](https://goreleaser.com/) 的帮助下完成的。 本地调用 Taskfile 的 `test-release` 任务可以测试发布流程。
|
||||
Task 的发布流程是在 [GoReleaser](https://goreleaser.com/) 的帮助下完成的。 本地调用 Taskfile 的 `test-release` task 可以测试发布流程。
|
||||
|
||||
[GitHub Actions](https://github.com/go-task/task/actions) 会在新 tag 推送到 master 分支的时候,自动发布产出物(原生的可执行文件、DEB 和 RPM 包)。
|
||||
|
||||
@ -23,8 +23,8 @@ Goreleaser 会自动向 [Homebrew tap](https://github.com/go-task/homebrew-tap)
|
||||
|
||||
[snap package](https://github.com/go-task/snap) 发布新版本需要手动执行下面步骤:
|
||||
|
||||
* 更新 [snapcraft.yaml](https://github.com/go-task/snap/blob/master/snap/snapcraft.yaml#L2) 文件中的版本。
|
||||
* 把新的 `amd64`, `armhf` 和 `arm64` 移动到 [Snapcraft dashboard](https://snapcraft.io/task/releases) 的稳定通道。
|
||||
- 更新 [snapcraft.yaml](https://github.com/go-task/snap/blob/master/snap/snapcraft.yaml#L2) 文件中的版本。
|
||||
- 把新的 `amd64`, `armhf` 和 `arm64` 移动到 [Snapcraft dashboard](https://snapcraft.io/task/releases) 的稳定通道。
|
||||
|
||||
# Scoop
|
||||
|
||||
@ -33,3 +33,7 @@ Scoop 是一个 Windows 系统的命令行包管理工具。 Scoop 的包清单
|
||||
# Nix
|
||||
|
||||
Nix 安装由社区维护。 Nix 包的维护人员通常会在 [这个文件](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/tools/go-task/default.nix) 里维护版本。 如果发现 Task 版本是旧的,请提交一个 Issue 通知我们。
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -45,7 +45,7 @@ tasks:
|
||||
- echo "Hello, World!"
|
||||
```
|
||||
|
||||
如果您不想创建 `Taskvars.yml`,版本 2 允许您直接在任务文件中写入全局变量:
|
||||
如果您不想创建 `Taskvars.yml`,版本 2 允许您直接在 Taskfile 中写入全局变量:
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -78,8 +78,8 @@ vars:
|
||||
FOO: foo
|
||||
BAR: bar
|
||||
BAZ: baz
|
||||
FOOBAR: "{{.FOO}}{{.BAR}}"
|
||||
FOOBARBAZ: "{{.FOOBAR}}{{.BAZ}}"
|
||||
FOOBAR: '{{.FOO}}{{.BAR}}'
|
||||
FOOBARBAZ: '{{.FOOBAR}}{{.BAZ}}'
|
||||
|
||||
tasks:
|
||||
default:
|
||||
@ -89,7 +89,7 @@ tasks:
|
||||
|
||||
## 版本 2.1
|
||||
|
||||
2.1 版包括一个全局 `output` 选项,以允许更好地控制如何将命令输出打印到控制台(有关更多信息,请参阅 [文档][output]):
|
||||
2.1 版包括一个全局 `output` 选项,以允许更好地控制如何将命令输出打印到控制台(有关更多信息,请参阅 [文档](usage.md#输出语法)):
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -103,7 +103,7 @@ tasks:
|
||||
prefix: server
|
||||
```
|
||||
|
||||
从这个版本开始,也可以忽略命令或 task 的错误(在 [此处][ignore_errors] 查看文档):
|
||||
从这个版本开始,也可以忽略命令或 task 的错误(在 [此处](usage.md#忽略错误) 查看文档):
|
||||
|
||||
```yaml
|
||||
version: '2'
|
||||
@ -149,7 +149,7 @@ tasks:
|
||||
- aws s3 cp .env s3://myenvironment
|
||||
```
|
||||
|
||||
请检查 [文档][includes]
|
||||
请检查 [文档](usage.md#包含其他-taskfile)
|
||||
|
||||
## 版本 3
|
||||
|
||||
@ -202,7 +202,3 @@ tasks:
|
||||
- 全局或 CLI 变量
|
||||
- 调用变量
|
||||
- Task 内的变量
|
||||
|
||||
[output]: usage.md#输出语法
|
||||
[ignore_errors]: usage.md#忽略错误
|
||||
[includes]: usage.md#包含其他-taskfile
|
||||
|
@ -7,9 +7,10 @@ sidebar_position: 13
|
||||
|
||||
想帮助我们翻译此文档吗? 在本文档中,我们解释了如何解决这一问题。
|
||||
|
||||
不要直接在 GitHub 存储库上编辑翻译后的 markdown 文件! 我们使用 [Crowdin][crowdin] 来允许贡献者进行翻译工作。 存储库会根据 Crowdin 的进展定期更新。
|
||||
不要直接在 GitHub 存储库上编辑翻译后的 markdown 文件! 我们使用 [Crowdin](https://crowdin.com/project/taskfile) 来允许贡献者进行翻译工作。 存储库会根据 Crowdin 的进展定期更新。
|
||||
|
||||
如果您想访问 Crowdin 项目以提供翻译建议,请在 [我们的 Discord 服务器上的 #translations 频道][discord] 上申请访问权限。 如果给定的语言尚未显示给 Crowdin,请询问,我们可以对其进行配置。
|
||||
如果您想访问 Crowdin 项目以提供翻译建议,请在 [我们的 Discord 服务器上的 #translations 频道](https://discord.gg/6TY36E39UK) 上申请访问权限。 如果给定的语言尚未显示给 Crowdin,请询问,我们可以对其进行配置。
|
||||
|
||||
[crowdin]: https://crowdin.com/project/taskfile
|
||||
[discord]: https://discord.gg/6TY36E39UK
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
@ -71,6 +71,7 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
When running your global Taskfile with `-g`, tasks will run on `$HOME` by default, and not on your working directory!
|
||||
|
||||
As mentioned in the previous section, the `{{.USER_WORKING_DIR}}` special variable can be very handy here to run stuff on the directory you're calling `task -g` from.
|
||||
@ -91,6 +92,7 @@ tasks:
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 环境变量
|
||||
|
||||
### Task
|
||||
@ -124,10 +126,12 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
`env` 支持扩展和检索 shell 命令的输出,就像变量一样,如您在 [变量](#变量) 部分中看到的那样。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### .env 文件
|
||||
|
||||
您还可以使用 `dotenv:` 设置要求 tasks 包含 `.env` 之类的文件
|
||||
@ -188,10 +192,12 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
请注意,您目前无法在包含的 Taskfile 中使用 `dotenv` 键。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 包含其他 Taskfile
|
||||
|
||||
如果要在不同项目(Taskfile)之间共享任务,可以使用导入机制使用 `includes` 关键字包含其他任务文件:
|
||||
@ -204,13 +210,13 @@ includes:
|
||||
docker: ./DockerTasks.yml
|
||||
```
|
||||
|
||||
The tasks described in the given Taskfiles will be available with the informed namespace. So, you'd call `task docs:serve` to run the `serve` task from `documentation/Taskfile.yml` or `task docker:build` to run the `build` task from the `DockerTasks.yml` file.
|
||||
给定的 Taskfile 中描述的任务将在指定的命名空间中提供。 因此,您可以从 `documentation/Taskfile.yml` 调用 `task docs:serve` 运行 `serve` task,或者从 `DockerTasks.yml` 文件调用 `task docker:build` 运行 `build` task。
|
||||
|
||||
相对路径是相对于包含包含 Taskfile 的目录解析的。
|
||||
|
||||
### 操作系统特定 Taskfile
|
||||
|
||||
With `version: '2'`, task automatically includes any `Taskfile_{{OS}}.yml` if it exists (for example: `Taskfile_windows.yml`, `Taskfile_linux.yml` or `Taskfile_darwin.yml`). 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:
|
||||
在 `version: '2'` 中,task 会自动尝试引入 `Taskfile_{{OS}}.yml` 文件 (例如`Taskfile_windows.yml`, `Taskfile_linux.yml` 或 `Taskfile_darwin.yml`)。 但是因为过于隐晦,在版本 3 中被移除了, 在版本 3 可以通过明确的引用来实现类似功能:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -234,10 +240,12 @@ includes:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
包含的 Taskfile 必须使用与主 Taskfile 使用的相同规则版本。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
### 可选 includes
|
||||
|
||||
如果包含文件丢失,标记为可选的包含将允许 task 继续正常执行。
|
||||
@ -253,12 +261,13 @@ includes:
|
||||
tasks:
|
||||
greet:
|
||||
cmds:
|
||||
- echo "This command can still be successfully executed if ./tests/Taskfile.yml does not exist"
|
||||
- echo "This command can still be successfully executed if
|
||||
./tests/Taskfile.yml does not exist"
|
||||
```
|
||||
|
||||
### 内部 includes
|
||||
|
||||
Includes marked as internal will set all the tasks of the included file to be internal as well (see the [Internal tasks](#internal-tasks) section below). This is useful when including utility tasks that are not intended to be used directly by the user.
|
||||
标记为 internal 的包含会将包含文件的所有 task 也设置为内部 task(请参阅下面的 [内部-tasks](#内部-tasks) 部分)。 这在包含不打算由用户直接使用的实用程序任务时很有用。
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -303,10 +312,12 @@ includes:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Vars declared in the included Taskfile have preference over the variables in the including Taskfile! If you want a variable in an included Taskfile to be overridable, use the [default function](https://go-task.github.io/slim-sprig/defaults.html): `MY_VAR: '{{.MY_VAR | default "my-default-value"}}'`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 内部 tasks
|
||||
|
||||
Internal tasks are tasks that cannot be called directly by the user. They will not appear in the output when running `task --list|--list-all`. Other tasks may call internal tasks in the usual way. This is useful for creating reusable, function-like tasks that have no useful purpose on the command line.
|
||||
@ -348,7 +359,7 @@ tasks:
|
||||
|
||||
> 依赖项并行运行,因此一项 task 的依赖项不应相互依赖。 如果您想强制任务顺序运行,请查看下面的 [调用另一个 task](#调用另一个-task) 部分。
|
||||
|
||||
您可能有依赖于其它的 task。 将它们指向 `deps` 将使它们在运行父 task 之前自动运行:
|
||||
您可能有依赖于其它的 task。 Just pointing them on `deps` will make them run automatically before running the parent task:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -388,11 +399,13 @@ tasks:
|
||||
|
||||
:::tip
|
||||
|
||||
您还可以使用 `--parallel` 标志(别名 `-p`)使命令行给出的 task 并行运行。 例如: `task --parallel js css`。
|
||||
|
||||
You can also make the tasks given by the command line run in parallel by using the `--parallel` flag (alias `-p`). 例如: `task --parallel js css`。
|
||||
|
||||
:::
|
||||
|
||||
如果你想将信息传递给依赖项,你可以像 [调用另一个 task](#调用另一个-task) 一样以相同的方式进行:
|
||||
|
||||
If you want to pass information to dependencies, you can do that the same manner as you would to [call another task](#calling-another-task):
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -401,9 +414,9 @@ tasks:
|
||||
default:
|
||||
deps:
|
||||
- task: echo_sth
|
||||
vars: {TEXT: "before 1"}
|
||||
vars: { TEXT: 'before 1' }
|
||||
- task: echo_sth
|
||||
vars: {TEXT: "before 2"}
|
||||
vars: { TEXT: 'before 2' }
|
||||
cmds:
|
||||
- echo "after"
|
||||
|
||||
@ -414,11 +427,11 @@ tasks:
|
||||
|
||||
## 平台特定的 tasks 和 cmds
|
||||
|
||||
如果您想将 task 的运行限制在明确的平台上,可以使用 `platforms:` 键来实现。 Task 可以限制在特定的操作系统、架构或两者的组合中。 如果不匹配,任务或命令将被跳过,并且不会抛出任何错误。
|
||||
If you want to restrict the running of tasks to explicit platforms, this can be achieved using the `platforms:` key. Tasks can be restricted to a specific OS, architecture or a combination of both. On a mismatch, the task or command will be skipped, and no error will be thrown.
|
||||
|
||||
允许作为 OS 或 Arch 的值是有效的 `GOOS` 和 `GOARCH` 值,正如 [此处](https://github.com/golang/go/blob/master/src/go/build/syslist.go) 的 Go 语言所定义的那样。
|
||||
|
||||
下面的 `build-windows` task 将仅在 Windows 所有架构上运行:
|
||||
The `build-windows` task below will run only on Windows, and on any architecture:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -481,7 +494,7 @@ tasks:
|
||||
|
||||
## 调用另一个 task
|
||||
|
||||
当一个 task 有很多依赖时,它们是并发执行的。 这通常会导致更快的构建管道。 但是,在某些情况下,您可能需要串行调用其他 task。 在这种情况下,请使用以下语法:
|
||||
当一个 task 有很多依赖时,它们是并发执行的。 这通常会导致更快的构建管道。 However, in some situations, you may need to call other tasks serially. 在这种情况下,请使用以下语法:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -517,17 +530,19 @@ tasks:
|
||||
greet-pessimistically:
|
||||
cmds:
|
||||
- task: greet
|
||||
vars: {RECIPIENT: "Cruel World"}
|
||||
vars: { RECIPIENT: 'Cruel World' }
|
||||
```
|
||||
|
||||
`deps` 也支持上述语法。
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
注意:如果您想从 [包含的 Taskfile](#包含其他-taskfile) 中调用在根 Taskfile 中声明的 task,请像这样添加 `:` 前缀:`task: :task-name`。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 减少不必要的工作
|
||||
|
||||
### 通过指纹识别本地生成的文件及其来源
|
||||
@ -562,7 +577,7 @@ tasks:
|
||||
|
||||
`sources` and `generates` can be files or file patterns. When given, Task will compare the checksum of the source files to determine if it's necessary to run the task. If not, it will just print a message like `Task "js" is up to date`.
|
||||
|
||||
如果您希望通过文件的修改 timestamp 而不是其 checksum(内容)来进行此检查,只需将 `method` 属性设置为 `timestamp` 即可。
|
||||
If you prefer this check to be made by the modification timestamp of the files, instead of its checksum (content), just set the `method` property to `timestamp`.
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -582,6 +597,7 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
By default, task stores checksums on a local `.task` directory in the project's directory. Most of the time, you'll want to have this directory on `.gitignore` (or equivalent) so it isn't committed. (If you have a task for code generation that is committed it may make sense to commit the checksum of that task as well, though).
|
||||
|
||||
If you want these files to be stored in another directory, you can set a `TASK_TEMP_DIR` environment variable in your machine. It can contain a relative path like `tmp/task` that will be interpreted as relative to the project directory, or an absolute or home path like `/tmp/.task` or `~/.task` (subdirectories will be created for each project).
|
||||
@ -592,27 +608,34 @@ export TASK_TEMP_DIR='~/.task'
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Each task has only one checksum stored for its `sources`. If you want to distinguish a task by any of its input variables, you can add those variables as part of the task's label, and it will be considered a different task.
|
||||
|
||||
This is useful if you want to run a task once for each distinct set of inputs until the sources actually change. For example, if the sources depend on the value of a variable, or you if you want the task to rerun if some arguments change even if the source has not.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
将 method 设置为 `none` 会跳过任何验证并始终运行任务。
|
||||
|
||||
:::
|
||||
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
For the `checksum` (default) or `timestamp` method to work, it is only necessary to inform the source files. When the `timestamp` method is used, the last time of the running the task is considered as a generate.
|
||||
|
||||
:::
|
||||
|
||||
### 使用程序检查来表示任务是最新的
|
||||
|
||||
### Using programmatic checks to indicate a task is up to date
|
||||
|
||||
Alternatively, you can inform a sequence of tests as `status`. If no error is returned (exit status 0), the task is considered up-to-date:
|
||||
|
||||
@ -638,7 +661,7 @@ Two special variables `{{.CHECKSUM}}` and `{{.TIMESTAMP}}` are available for int
|
||||
|
||||
Note that the `{{.TIMESTAMP}}` variable is a "live" Go `time.Time` struct, and can be formatted using any of the methods that `time.Time` responds to.
|
||||
|
||||
有关详细信息,请参阅 [Go Time 文档](https://golang.org/pkg/time/)。
|
||||
See [the Go Time documentation](https://golang.org/pkg/time/) for more information.
|
||||
|
||||
如果你想强制任务运行,即使是最新的,你也可以使用 `--force` 或 `-f`。
|
||||
|
||||
@ -668,7 +691,7 @@ tasks:
|
||||
|
||||
### 使用程序检查取消任务及其依赖项的执行
|
||||
|
||||
In addition to `status` checks, `preconditions` checks are the logical inverse of `status` checks. That is, if you need a certain set of conditions to be _true_ you can use the `preconditions` stanza. `preconditions` are similar to `status` lines, except they support `sh` expansion, and they SHOULD all return 0.
|
||||
In addition to `status` checks, `preconditions` checks are the logical inverse of `status` checks. That is, if you need a certain set of conditions to be _true_ you can use the `preconditions` stanza. `preconditions` are similar to `status` lines, except they support `sh` expansion, and they SHOULD all return 0.
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -682,13 +705,13 @@ tasks:
|
||||
# test existence of files
|
||||
preconditions:
|
||||
- test -f .env
|
||||
- sh: "[ 1 = 0 ]"
|
||||
- sh: '[ 1 = 0 ]'
|
||||
msg: "One doesn't equal Zero, Halting"
|
||||
```
|
||||
|
||||
Preconditions can set specific failure messages that can tell a user what steps to take using the `msg` field.
|
||||
|
||||
If a task has a dependency on a sub-task with a precondition, and that precondition is not met - the calling task will fail. Note that a task executed with a failing precondition will not run unless `--force` is given.
|
||||
If a task has a dependency on a sub-task with a precondition, and that precondition is not met - the calling task will fail. Note that a task executed with a failing precondition will not run unless `--force` is given.
|
||||
|
||||
Unlike `status`, which will skip a task if it is up to date and continue executing tasks that depend on it, a `precondition` will fail a task, along with any other tasks that depend on it.
|
||||
|
||||
@ -698,7 +721,7 @@ version: '3'
|
||||
tasks:
|
||||
task-will-fail:
|
||||
preconditions:
|
||||
- sh: "exit 1"
|
||||
- sh: 'exit 1'
|
||||
|
||||
task-will-also-fail:
|
||||
deps:
|
||||
@ -716,9 +739,9 @@ If a task executed by multiple `cmds` or multiple `deps` you can control when it
|
||||
|
||||
`run` 支持的值:
|
||||
|
||||
* `always` (default) always attempt to invoke the task regardless of the number of previous executions
|
||||
* `once` only invoke this task once regardless of the number of references
|
||||
* `when_changed` only invokes the task once for each unique set of variables passed into the task
|
||||
- `always` (default) always attempt to invoke the task regardless of the number of previous executions
|
||||
- `once` only invoke this task once regardless of the number of references
|
||||
- `when_changed` only invokes the task once for each unique set of variables passed into the task
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -748,7 +771,7 @@ tasks:
|
||||
|
||||
## 变量
|
||||
|
||||
在进行变量插值时,Task 将查找以下内容。 它们按权重顺序列在下面(即最重要的第一位):
|
||||
在进行变量插值时,Task 将查找以下内容。 They are listed below in order of importance (i.e. most important first):
|
||||
|
||||
- Variables declared in the task definition
|
||||
- Variables given while calling a task from another (See [Calling another task](#calling-another-task) above)
|
||||
@ -765,10 +788,12 @@ $ TASK_VARIABLE=a-value task do-something
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
A special variable `.TASK` is always available containing the task name.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
Since some shells do not support the above syntax to set environment variables (Windows) tasks also accept a similar style when not at the beginning of the command.
|
||||
|
||||
```bash
|
||||
@ -873,15 +898,17 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Due to the nature of how the [Go's own `defer` work](https://go.dev/tour/flowcontrol/13), the deferred commands are executed in the reverse order if you schedule multiple of them.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Go 的模板引擎
|
||||
|
||||
任务在执行命令之前将命令解析为 [Go 的模板引擎][gotemplate]。 可以通过点语法 (`.VARNAME`) 访问变量。
|
||||
Task parse commands as [Go's template engine](https://golang.org/pkg/text/template/) before executing them. 可以通过点语法 (`.VARNAME`) 访问变量。
|
||||
|
||||
Go 的 [slim-sprig 库](https://go-task.github.io/slim-sprig/) 的所有功能都可用。 以下示例按照给定格式获取当前日期:
|
||||
All functions by the Go's [slim-sprig lib](https://go-task.github.io/slim-sprig/) are available. The following example gets the current date in a given format:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -931,7 +958,7 @@ tasks:
|
||||
|
||||
## 帮助
|
||||
|
||||
运行 `task --list`(或 `task -l`)列出所有带有描述的任务。 以下 Taskfile:
|
||||
运行 `task --list`(或 `task -l`)列出所有带有描述的任务。 The following Taskfile:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -967,7 +994,7 @@ tasks:
|
||||
|
||||
## 显示任务摘要
|
||||
|
||||
运行 `task --summary task-name` 将显示任务的摘要。 以下 Taskfile:
|
||||
运行 `task --summary task-name` 将显示任务的摘要。 The following Taskfile:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1004,13 +1031,14 @@ dependencies:
|
||||
commands:
|
||||
- your-release-tool
|
||||
```
|
||||
如果缺少摘要,将打印描述。 如果任务没有摘要或描述,则会打印一条警告。
|
||||
|
||||
请注意:*显示摘要不会执行命令*。
|
||||
如果缺少摘要,将打印描述。 If the task does not have a summary or a description, a warning is printed.
|
||||
|
||||
Please note: _showing the summary will not execute the command_.
|
||||
|
||||
## Task 别名
|
||||
|
||||
Aliases 是 task 的替代名称。 它们可以使运行具有长名称或难以键入名称的 task 变得更加容易和快速。 您可以在命令行上使用它们,在您的 Taskfile 中 [调用子任务](#调用另一个-task) 时以及在 [包含来自另一个 Taskfile](#包含其他-taskfile) 的别名 task 时。 它们也可以与 [命名空间别名](#命名空间别名) 一起使用。
|
||||
Aliases 是 task 的替代名称。 它们可以使运行具有长名称或难以键入名称的 task 变得更加容易和快速。 您可以在命令行上使用它们,在您的 Taskfile 中 [调用子任务](#调用另一个-task) 时以及在 [包含来自另一个 Taskfile](#包含其他-taskfile) 的别名 task 时。 They can also be used together with [namespace aliases](#namespace-aliases).
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1051,7 +1079,7 @@ tasks:
|
||||
|
||||
## 静默模式
|
||||
|
||||
静默模式在 Task 运行命令之前禁用命令回显。 对于以下 Taskfile:
|
||||
静默模式在 Task 运行命令之前禁用命令回显。 For the following Taskfile:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1077,7 +1105,7 @@ Print something
|
||||
|
||||
开启静默模式有四种方式:
|
||||
|
||||
* 在 cmds 级别:
|
||||
- 在 cmds 级别:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1089,7 +1117,7 @@ tasks:
|
||||
silent: true
|
||||
```
|
||||
|
||||
* 在 task 级别:
|
||||
- 在 task 级别:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1101,7 +1129,7 @@ tasks:
|
||||
silent: true
|
||||
```
|
||||
|
||||
* 在 Taskfile 全局级别:
|
||||
- 在 Taskfile 全局级别:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1114,7 +1142,7 @@ tasks:
|
||||
- echo "Print something"
|
||||
```
|
||||
|
||||
* 或者全局使用 `--silent` 或 `-s` 标志
|
||||
- 或者全局使用 `--silent` 或 `-s` 标志
|
||||
|
||||
如果您想改为禁止 STDOUT,只需将命令重定向到 `/dev/null`:
|
||||
|
||||
@ -1133,7 +1161,7 @@ Dry run mode (`--dry`) compiles and steps through each task, printing the comman
|
||||
|
||||
## 忽略错误
|
||||
|
||||
您可以选择在命令执行期间忽略错误。 给定以下 Taskfile:
|
||||
您可以选择在命令执行期间忽略错误。 Given the following Taskfile:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
@ -1232,7 +1260,7 @@ task: Failed to run task "errors": exit status 1
|
||||
|
||||
The `prefix` output will prefix every line printed by a command with `[task-name]` as the prefix, but you can customize the prefix for a command with the `prefix:` attribute:
|
||||
|
||||
```yaml
|
||||
```yaml
|
||||
version: '3'
|
||||
|
||||
output: prefixed
|
||||
@ -1241,16 +1269,16 @@ tasks:
|
||||
default:
|
||||
deps:
|
||||
- task: print
|
||||
vars: {TEXT: foo}
|
||||
vars: { TEXT: foo }
|
||||
- task: print
|
||||
vars: {TEXT: bar}
|
||||
vars: { TEXT: bar }
|
||||
- task: print
|
||||
vars: {TEXT: baz}
|
||||
vars: { TEXT: baz }
|
||||
|
||||
print:
|
||||
cmds:
|
||||
- echo "{{.TEXT}}"
|
||||
prefix: "print-{{.TEXT}}"
|
||||
prefix: 'print-{{.TEXT}}'
|
||||
silent: true
|
||||
```
|
||||
|
||||
@ -1263,10 +1291,12 @@ $ task default
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
The `output` option can also be specified by the `--output` or `-o` flags.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 交互式 CLI 应用
|
||||
|
||||
When running interactive CLI applications inside Task they can sometimes behave weirdly, especially when the [output mode](#output-syntax) is set to something other than `interleaved` (the default), or when interactive apps are run in parallel with other tasks.
|
||||
@ -1317,14 +1347,18 @@ tasks:
|
||||
|
||||
:::info
|
||||
|
||||
|
||||
Keep in mind that not all options are available in the [shell interpreter library](https://github.com/mvdan/sh) that Task uses.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## 观察任务
|
||||
|
||||
With the flags `--watch` or `-w` task will watch for file changes and run the task again. This requires the `sources` attribute to be given, so task knows which files to watch.
|
||||
|
||||
The default watch interval is 5 seconds, but it's possible to change it by either setting `interval: '500ms'` in the root of the Taskfile passing it as an argument like `--interval=500ms`.
|
||||
|
||||
[gotemplate]: https://golang.org/pkg/text/template/
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
Loading…
Reference in New Issue
Block a user