1
0
mirror of https://github.com/go-task/task.git synced 2025-02-09 13:47:06 +02:00

Merge branch 'master' into v3

This commit is contained in:
Andrey Nering 2019-08-11 23:03:58 -03:00
commit d5a791b470
7 changed files with 62 additions and 27 deletions

View File

@ -9,11 +9,21 @@
## Unreleased ## Unreleased
- Fixed panic bug when assigning a global variable
([#229](https://github.com/go-task/task/issues/229), [#243](https://github.com/go-task/task/issues/234)).
## v2.6.0 - 2019-07-21
- Fixed some bugs regarding minor version checks on `version:`. - Fixed some bugs regarding minor version checks on `version:`.
- Add `preconditions:` to task - Add `preconditions:` to task
([#205](https://github.com/go-task/task/pull/205)). ([#205](https://github.com/go-task/task/pull/205)).
- Create directory informed on `dir:` if it doesn't exist - Create directory informed on `dir:` if it doesn't exist
([#209](https://github.com/go-task/task/issues/209), [#211](https://github.com/go-task/task/pull/211)). ([#209](https://github.com/go-task/task/issues/209), [#211](https://github.com/go-task/task/pull/211)).
- We now have a `--taskfile` flag (alias `-t`), which can be used to run
another Taskfile (other than the default `Taskfile.yml`)
([#221](https://github.com/go-task/task/pull/221)).
- It's now possible to install Task using Homebrew on Linux
([go-task/homebrew-tap#1](https://github.com/go-task/homebrew-tap/pull/1)).
## v2.5.2 - 2019-05-11 ## v2.5.2 - 2019-05-11

View File

@ -5,6 +5,7 @@ import (
"log" "log"
"os" "os"
"os/signal" "os/signal"
"path/filepath"
"syscall" "syscall"
"github.com/go-task/task/v2" "github.com/go-task/task/v2"
@ -18,7 +19,7 @@ var (
version = "master" version = "master"
) )
const usage = `Usage: task [-ilfwvsd] [--init] [--list] [--force] [--watch] [--verbose] [--silent] [--dir] [--dry] [--summary] [task...] const usage = `Usage: task [-ilfwvsd] [--init] [--list] [--force] [--watch] [--verbose] [--silent] [--dir] [--taskfile] [--dry] [--summary] [task...]
Runs the specified task(s). Falls back to the "default" task if no task name Runs the specified task(s). Falls back to the "default" task if no task name
was specified, or lists all tasks if an unknown task name was specified. was specified, or lists all tasks if an unknown task name was specified.
@ -59,6 +60,7 @@ func main() {
dry bool dry bool
summary bool summary bool
dir string dir string
entrypoint string
output string output string
color bool color bool
) )
@ -74,6 +76,7 @@ func main() {
pflag.BoolVar(&dry, "dry", false, "compiles and prints tasks in the order that they would be run, without executing them") pflag.BoolVar(&dry, "dry", false, "compiles and prints tasks in the order that they would be run, without executing them")
pflag.BoolVar(&summary, "summary", false, "show summary about a task") pflag.BoolVar(&summary, "summary", false, "show summary about a task")
pflag.StringVarP(&dir, "dir", "d", "", "sets directory of execution") pflag.StringVarP(&dir, "dir", "d", "", "sets directory of execution")
pflag.StringVarP(&entrypoint, "taskfile", "t", "", `choose which Taskfile to run. Defaults to "Taskfile.yml"`)
pflag.StringVarP(&output, "output", "o", "", "sets output style: [interleaved|group|prefixed]") pflag.StringVarP(&output, "output", "o", "", "sets output style: [interleaved|group|prefixed]")
pflag.BoolVarP(&color, "color", "c", true, "colored output") pflag.BoolVarP(&color, "color", "c", true, "colored output")
pflag.Parse() pflag.Parse()
@ -94,6 +97,17 @@ func main() {
return return
} }
if dir != "" && entrypoint != "" {
log.Fatal("task: You can't set both --dir and --taskfile")
return
}
if entrypoint != "" {
dir = filepath.Dir(entrypoint)
entrypoint = filepath.Base(entrypoint)
} else {
entrypoint = "Taskfile.yml"
}
e := task.Executor{ e := task.Executor{
Force: force, Force: force,
Watch: watch, Watch: watch,
@ -101,6 +115,7 @@ func main() {
Silent: silent, Silent: silent,
Dir: dir, Dir: dir,
Dry: dry, Dry: dry,
Entrypoint: entrypoint,
Summary: summary, Summary: summary,
Color: color, Color: color,

View File

@ -8,13 +8,15 @@ The `task_checksums.txt` file contains the sha256 checksum for each file.
## Homebrew ## Homebrew
If you're on macOS and have [Homebrew][homebrew] installed, getting Task is If you're on macOS or Linux and have [Homebrew][homebrew] installed, getting
as simple as running: Task is as simple as running:
```bash ```bash
brew install go-task/tap/go-task brew install go-task/tap/go-task
``` ```
> This installation method is only currently supported on amd64 architectures.
## Snap ## Snap
Task is available for [Snapcraft][snapcraft], but keep in mind that your Task is available for [Snapcraft][snapcraft], but keep in mind that your

View File

@ -148,6 +148,8 @@ tasks:
- caddy - caddy
``` ```
If the directory doesn't exist, `task` creates it.
## Task dependencies ## Task dependencies
You may have tasks that depend on others. Just pointing them on `deps` will You may have tasks that depend on others. Just pointing them on `deps` will
@ -398,7 +400,7 @@ tasks:
When doing interpolation of variables, Task will look for the below. When doing interpolation of variables, Task will look for the below.
They are listed below in order of importance (e.g. most important first): They are listed below in order of importance (e.g. most important first):
- Variables declared locally in the task - Variables declared in the task definition
- Variables given while calling a task from another. - Variables given while calling a task from another.
(See [Calling another task](#calling-another-task) above) (See [Calling another task](#calling-another-task) above)
- Variables declared in the `vars:` option in the `Taskfile` - Variables declared in the `vars:` option in the `Taskfile`

View File

@ -15,16 +15,13 @@ import (
var ( var (
// ErrIncludedTaskfilesCantHaveIncludes is returned when a included Taskfile contains includes // ErrIncludedTaskfilesCantHaveIncludes is returned when a included Taskfile contains includes
ErrIncludedTaskfilesCantHaveIncludes = errors.New("task: Included Taskfiles can't have includes. Please, move the include to the main Taskfile") ErrIncludedTaskfilesCantHaveIncludes = errors.New("task: Included Taskfiles can't have includes. Please, move the include to the main Taskfile")
// ErrNoTaskfileFound is returned when Taskfile.yml is not found
ErrNoTaskfileFound = errors.New(`task: No Taskfile.yml found. Use "task --init" to create a new one`)
) )
// Taskfile reads a Taskfile for a given directory // Taskfile reads a Taskfile for a given directory
func Taskfile(dir string) (*taskfile.Taskfile, error) { func Taskfile(dir string, entrypoint string) (*taskfile.Taskfile, error) {
path := filepath.Join(dir, "Taskfile.yml") path := filepath.Join(dir, entrypoint)
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {
return nil, ErrNoTaskfileFound return nil, fmt.Errorf(`task: No Taskfile found on "%s". Use "task --init" to create a new one`, path)
} }
t, err := readTaskfile(path) t, err := readTaskfile(path)
if err != nil { if err != nil {

View File

@ -40,5 +40,8 @@ func (tf *Taskfile) UnmarshalYAML(unmarshal func(interface{}) error) error {
if tf.Expansions <= 0 { if tf.Expansions <= 0 {
tf.Expansions = 2 tf.Expansions = 2
} }
if tf.Vars == nil {
tf.Vars = make(Vars)
}
return nil return nil
} }

View File

@ -32,7 +32,9 @@ const (
// Executor executes a Taskfile // Executor executes a Taskfile
type Executor struct { type Executor struct {
Taskfile *taskfile.Taskfile Taskfile *taskfile.Taskfile
Dir string Dir string
Entrypoint string
Force bool Force bool
Watch bool Watch bool
Verbose bool Verbose bool
@ -86,8 +88,12 @@ func (e *Executor) Run(ctx context.Context, calls ...taskfile.Call) error {
// Setup setups Executor's internal state // Setup setups Executor's internal state
func (e *Executor) Setup() error { func (e *Executor) Setup() error {
if e.Entrypoint == "" {
e.Entrypoint = "Taskfile.yml"
}
var err error var err error
e.Taskfile, err = read.Taskfile(e.Dir) e.Taskfile, err = read.Taskfile(e.Dir, e.Entrypoint)
if err != nil { if err != nil {
return err return err
} }