Don’t want to depend on another binary in your environment? You can run mage
directly out of your vendor directory (or GOPATH) with go run
.
Just save a file like this (I’ll call it mage.go
, but it can be named
anything. Note that the build tag is not +build mage
. Mage will create its own main file, so we need this one to be excluded from when your magefiles are compiled.
Now you can go run mage.go <target>
and it’ll work just as if you ran mage
<target>
// +build ignore
package main
import (
"os"
"github.com/magefile/mage/mage"
)
func main() { os.Exit(mage.Main()) }
Note that because of the peculiarities of go run
, if you run this way, go run
will only ever exit with an error code of 0 or 1. If mage exits with error code
99, for example, go run
will print out `exit status 99” and then exit with
error code 1. Why? Ask the go team. I’ve tried to get them to fix it, and
they won’t.
All of mage’s functionality is accessible as a compile-in library. Checkout godoc.org/github.com/magefile/mage/mage for full details.
Fair warning, the API of mage/mage may change, so be sure to use vendoring.