Switch from mage to make (#242)

* Switched to Makefile
This commit is contained in:
Neil O'Toole 2023-05-26 22:16:52 -06:00 committed by GitHub
parent 0e7334f3c6
commit 6bd72190cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 196 deletions

28
Makefile Normal file
View File

@ -0,0 +1,28 @@
PKG := github.com/neilotoole/sq
VERSION_PKG := $(PKG)/cli/buildinfo
BUILD_VERSION := $(shell git describe --tags --always --dirty)
BUILD_COMMIT := $(shell git rev-parse HEAD)
BUILD_TIMESTAMP := $(shell date -u '+%Y-%m-%dT%H:%M:%SZ')
LDFLAGS ?= -s -w -X $(VERSION_PKG).Version=$(BUILD_VERSION) -X $(VERSION_PKG).Commit=$(BUILD_COMMIT) -X $(VERSION_PKG).Timestamp=$(BUILD_TIMESTAMP)
.PHONY: test
test:
@go test ./...
.PHONY: install
install:
@go install -ldflags "$(LDFLAGS)"
.PHONY: lint
lint:
@golangci-lint run --out-format tab --sort-results
.PHONY: gen
gen:
@go generate ./...
.PHONY: fmt
fmt:
@# Use gofumpt instead of "go fmt"
@gofumpt -w .

1
go.mod
View File

@ -11,7 +11,6 @@ require (
github.com/go-sql-driver/mysql v1.7.1 github.com/go-sql-driver/mysql v1.7.1
github.com/google/uuid v1.3.0 github.com/google/uuid v1.3.0
github.com/h2non/filetype v1.1.3 github.com/h2non/filetype v1.1.3
github.com/magefile/mage v1.15.0
github.com/mattn/go-colorable v0.1.13 github.com/mattn/go-colorable v0.1.13
github.com/mattn/go-isatty v0.0.19 github.com/mattn/go-isatty v0.0.19
github.com/mattn/go-runewidth v0.0.14 github.com/mattn/go-runewidth v0.0.14

2
go.sum
View File

@ -76,8 +76,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=

View File

@ -1,193 +0,0 @@
//go:build mage
// Magefile for building/test sq. This magefile was originally copied from
// the Hugo magefile, and may contain functionality that can be ditched.
package main
// See https://magefile.org
// This file originally derived from the Hugo magefile, see https://github.com/gohugoio/hugo
import (
"fmt"
"os"
"path/filepath"
"time"
"github.com/magefile/mage/sh"
)
const (
packageName = "github.com/neilotoole/sq"
ldflags = "-X $PACKAGE/cli/buildinfo.Version=$BUILD_VERSION -X $PACKAGE/cli/buildinfo.Timestamp=$BUILD_TIMESTAMP -X $PACKAGE/cli/buildinfo.Commit=$BUILD_COMMIT"
)
var Default = Install
func ldflagsEnv() map[string]string {
hash := gitHeadCommit(true)
return map[string]string{
"PACKAGE": packageName,
"BUILD_COMMIT": hash,
"BUILD_TIMESTAMP": time.Now().Format("2006-01-02T15:04:05Z0700"),
"BUILD_VERSION": generateBuildVersion(),
"BUILD_BRANCH": gitCurrentBranch(),
}
}
// Clean cleans the dist dirs, and binaries.
func Clean() error {
if err := sh.Run("rm", "-rf", "./dist*"); err != nil {
return err
}
// Delete the sq binary that "go build" might produce
if err := sh.Rm("./sq"); err != nil {
return err
}
if gopath, ok := os.LookupEnv("GOPATH"); ok {
if err := sh.Rm(filepath.Join(gopath, "bin", "sq")); err != nil {
return err
}
}
return nil
}
// Build builds sq.
func Build() error {
return sh.RunWith(ldflagsEnv(), "go", "build", "-ldflags", ldflags, packageName)
}
// Install installs the sq binary.
func Install() error {
return sh.RunWith(ldflagsEnv(), "go", "install", "-ldflags", ldflags, packageName)
}
// Test runs go test.
func Test() error {
return sh.RunV("go", "test", "-v", "./...")
}
// Lint runs the golangci-lint linters.
// The golangci-lint binary must be installed:
//
// $ brew install golangci-lint
//
// See .golangci.yml for configuration.
func Lint() error {
return sh.RunV("golangci-lint", "run", "./...")
}
// Fmt runs gofumpt on the source.
func Fmt() error {
return sh.RunV("gofumpt", "-l", "-w", ".")
}
// Generate generates SLQ parser Go files from the
// antlr grammar. Note that the antlr generator tool is Java-based; you
// must have Java installed.
func Generate() error {
return sh.Run("go", "generate", "./...")
}
func panicIf(err error) {
if err != nil {
panic(err)
}
}
// CheckDocker verifies that docker is running by executing echo
// on alpine.
func CheckDocker() error {
return execDocker("run", "-it", "alpine", "echo", "docker is working")
}
// execDocker executes a docker command with args, returning
// any error. Example:
//
// execDocker("run", "-it", "alpine", "echo", "hello world")
func execDocker(cmd string, args ...string) error {
args = append([]string{cmd}, args...)
return sh.RunV("docker", args...)
}
func gitHeadCommit(short bool) string {
args := []string{"rev-parse", "HEAD"}
if short {
args = []string{"rev-parse", "--short", "HEAD"}
}
hash, err := sh.Output("git", args...)
panicIf(err)
return hash
}
func gitCommitForLatestTag() string {
hash, err := sh.Output("git", "rev-list", "--tags", "--max-count=1")
panicIf(err)
return hash
}
func gitTagForCommit(commit string) string {
tag, err := sh.Output("git", "describe", "--tags", commit)
panicIf(err)
return tag
}
func gitLatestTag() string {
commitForLatestTag := gitCommitForLatestTag()
tag := gitTagForCommit(commitForLatestTag)
return tag
}
func gitCurrentBranch() string {
branch, err := sh.Output("git", "rev-parse", "--abbrev-ref", "HEAD")
panicIf(err)
return branch
}
func gitIsDirtyWorkingDir() bool {
diff, err := sh.Output("git", "diff", "HEAD")
panicIf(err)
// If no diff, then diff's output will be empty.
return diff != ""
}
// BuildVersion prints the build version that would be
// incorporated into the sq binary. The build version is of
// the form TAG[-SUFFIX], for example "v0.5.9-dev".
// - If working dir is dirty, or if the HEAD commit does not
// match the latest tag commit, the suffix is "-wip" (Work In
// Progress), e.g. "v0.5.9-wip".
// - Else, if the branch is not master, the branch name is
// used as the suffix, e.g. "v0.5.9-dev".
// - Else, we're on master and the HEAD commit is the latest
// tag, so the suffix is omitted, e.g. "v0.5.9".
func BuildVersion() {
fmt.Println(generateBuildVersion())
}
func generateBuildVersion() string {
commitForLatestTag := gitCommitForLatestTag()
headCommit := gitHeadCommit(false)
latestTag := gitTagForCommit(commitForLatestTag)
currentBranch := gitCurrentBranch()
// If working dis is dirty or we're not on the latest tag,
// then add a "-wip" suffix (Work In Progress).
isDirty := gitIsDirtyWorkingDir()
if isDirty || headCommit != commitForLatestTag {
return latestTag + "-wip"
}
// Else, if the current branch is not master, append the
// branch.
if currentBranch != "master" {
return latestTag + "-" + currentBranch
}
return latestTag
}