Skip to content

goyek/goyek

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goyek

Go Reference Keep a Changelog go.mod Go Report Card codecov Mentioned in Awesome Go

goyek (/ˈɡɔɪæk/ 🔊 listen) is a task automation library intended to be an alternative to Make, Mage, Task.

The primary properties of goyek are:

  • Library, not an application, with API inspired by testing, cobra, flag, http.
  • Cross-platform and shell independent.
  • No binary installation needed.
  • Easy to debug, like regular Go code.
  • Tasks are defined similarly to cobra commands.
  • The task action looks like a Go test. goyek.A has similar methods to testing.T.
  • Reuse any Go code and library e.g. viper.
  • Highly customizable.
  • Zero third-party dependencies.
  • Additional features in goyek/x.

5-minute video: Watch here (Slides).

Please ⭐ Star this repository if you find it valuable.

Usage

For build automation, store your code in the build directory.

The following example defines a simple hello task that logs a message and prints the Go version.

Create build/hello.go:

package main

import (
	"flag"

	"github.com/goyek/goyek/v2"
	"github.com/goyek/x/cmd"
)

var msg = flag.String("msg", "greeting message", "Hello world!")

var hello = goyek.Define(goyek.Task{
	Name:  "hello",
	Usage: "demonstration",
	Action: func(a *goyek.A) {
		a.Log(*msg)
		cmd.Exec(a, "go version")
	},
})

Create build/main.go:

package main

import (
	"os"

	"github.com/goyek/goyek/v2"
	"github.com/goyek/x/boot"
)

func main() {
	if err := os.Chdir(".."); err != nil {
		panic(err)
	}
	goyek.SetDefault(hello)
	boot.Main()
}

The packages from github.com/goyek/x are used for convenience.

Run help:

cd build
go mod tidy
go run . -h

Expected output:

Usage of build: [flags] [--] [tasks]
Tasks:
  hello  demonstration
Flags:
  -dry-run
        print all tasks without executing actions
  -long-run duration
        print when a task takes longer (default 1m0s)
  -msg string
        Hello world! (default "greeting message")
  -no-color
        disable colorizing output
  -no-deps
        do not process dependencies
  -skip comma-separated tasks
        skip processing the comma-separated tasks
  -v    print all tasks as they are run

Run with verbose output:

go run . -v

Example output:

===== TASK  hello
      hello.go:16: greeting message
      hello.go:17: Exec: go version
go version go1.24.0 linux/amd64
----- PASS: hello (0.12s)
ok      0.123s

Instead of running go run . inside build, you can use wrapper scripts:

Use goyek/template when creating a new repository. For existing repositories, simply copy the relevant files.

See the documentation for more information.

Contributing

We welcome contributions! See CONTRIBUTING.md for details.

License

goyek is licensed under the terms of the MIT license.

Note: goyek was named taskflow before v0.3.0.

About

Task automation Go library

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Contributors 8

Languages