diff --git a/Makefile b/Makefile index 451331a..dfd46ac 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,35 @@ -all: check-license build generate test +.PHONY: all check-license crossbuild build install test generate embedmd GITHUB_URL=github.com/jsonnet-bundler/jsonnet-bundler -GOOS?=$(shell uname -s | tr A-Z a-z) -GOARCH?=$(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m))) +VERSION := $(shell git describe --tags --dirty --always) OUT_DIR=_output BIN?=jb -VERSION?=$(shell cat VERSION) PKGS=$(shell go list ./... | grep -v /vendor/) -check-license: - @echo ">> checking license headers" - @./scripts/check_license.sh +all: check-license build generate test -crossbuild: - @GOOS=linux ARCH=amd64 $(MAKE) -s build + +# Binaries +LDFLAGS := '-s -w -extldflags "-static" -X main.Version=${VERSION}' +cross: clean + CGO_ENABLED=0 gox \ + -output="$(OUT_DIR)/jb-{{.OS}}-{{.Arch}}" \ + -ldflags=$(LDFLAGS) \ + -arch="amd64 arm64 arm" -os="linux" \ + -osarch="darwin/amd64" \ + ./cmd/$(BIN) + +static: + CGO_ENABLED=0 go build -ldflags=${LDFLAGS} -o $(OUT_DIR)/$(BIN) ./cmd/$(BIN) build: - @$(eval OUTPUT=$(OUT_DIR)/$(GOOS)/$(GOARCH)/$(BIN)) - @echo ">> building for $(GOOS)/$(GOARCH) to $(OUTPUT)" - @mkdir -p $(OUT_DIR)/$(GOOS)/$(GOARCH) - @CGO_ENABLED=0 go build --installsuffix cgo -o $(OUTPUT) $(GITHUB_URL)/cmd/$(BIN) + CGO_ENABLED=0 go build ./cmd/$(BIN) -install: build - @$(eval OUTPUT=$(OUT_DIR)/$(GOOS)/$(GOARCH)/$(BIN)) +install: static @echo ">> copying $(BIN) into $(GOPATH)/bin/$(BIN)" - @cp $(OUTPUT) $(GOPATH)/bin/$(BIN) + cp $(OUT_DIR)/$(BIN) $(GOPATH)/bin/$(BIN) +# Tests test: @echo ">> running all unit tests" go test -v $(PKGS) @@ -34,12 +38,22 @@ test-integration: @echo ">> running all integration tests" go test -v -tags=integration $(PKGS) +# Documentation generate: embedmd @echo ">> generating docs" @./scripts/generate-help-txt.sh @$(GOPATH)/bin/embedmd -w `find ./ -path ./vendor -prune -o -name "*.md" -print` -embedmd: - @go get github.com/campoy/embedmd +check-license: + @echo ">> checking license headers" + @./scripts/check_license.sh -.PHONY: all check-license crossbuild build install test generate embedmd +embedmd: + pushd /tmp && GO111MODULES=on go get github.com/campoy/embedmd && popd + +# Other +clean: + rm -rf $(OUT_DIR) $(BIN) + +drone: + drone jsonnet --format diff --git a/cmd/jb/main.go b/cmd/jb/main.go index 0a16202..df40a45 100644 --- a/cmd/jb/main.go +++ b/cmd/jb/main.go @@ -21,6 +21,7 @@ import ( "github.com/fatih/color" "github.com/pkg/errors" + "gopkg.in/alecthomas/kingpin.v2" ) const ( @@ -30,6 +31,8 @@ const ( rewriteActionName = "rewrite" ) +var Version = "dev" + func main() { os.Exit(Main()) } @@ -41,7 +44,7 @@ func Main() int { color.Output = color.Error - a := newApp() + a := kingpin.New(filepath.Base(os.Args[0]), "A jsonnet package manager").Version(Version) a.HelpFlag.Short('h') a.Flag("jsonnetpkg-home", "The directory used to cache packages in."). diff --git a/cmd/jb/version.go b/cmd/jb/version.go deleted file mode 100644 index f58bfd1..0000000 --- a/cmd/jb/version.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2018 jsonnet-bundler authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build go1.12 - -package main - -import ( - "os" - "path/filepath" - "runtime/debug" - - kingpin "gopkg.in/alecthomas/kingpin.v2" -) - -func newApp() *kingpin.Application { - a := kingpin.New(filepath.Base(os.Args[0]), "A jsonnet package manager") - d, ok := debug.ReadBuildInfo() - if ok { - return a.Version(d.Main.Version) - } - return a -} diff --git a/cmd/jb/version111.go b/cmd/jb/version111.go deleted file mode 100644 index 40ca400..0000000 --- a/cmd/jb/version111.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018 jsonnet-bundler authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build !go1.12 - -package main - -import ( - "os" - "path/filepath" - - kingpin "gopkg.in/alecthomas/kingpin.v2" -) - -func newApp() *kingpin.Application { - a := kingpin.New(filepath.Base(os.Args[0]), "A jsonnet package manager") - return a -}