mirror of
https://github.com/neilotoole/sq.git
synced 2024-12-26 09:44:18 +03:00
parent
0e7334f3c6
commit
6bd72190cc
28
Makefile
Normal file
28
Makefile
Normal 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
1
go.mod
@ -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
2
go.sum
@ -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=
|
||||||
|
193
magefile.go
193
magefile.go
@ -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
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user