mirror of
https://github.com/TECHNOFAB11/jsonnet-bundler.git
synced 2025-12-12 08:00:05 +01:00
feat(cli): --version using ldflags
The go-modules approach is a bit broken: https://github.com/golang/go/issues/29228 To resolve that, we now compute that version using `git describe` and set it using `ldflags`. While this is not as nice/builtin as the other approach, it at least works all the time and across go versions. Furthermore, I did refactor the Makefile in preparation for an AUR package that builds from source and for building release artifacts in CI.
This commit is contained in:
parent
f8be6a936f
commit
80c06a483a
4 changed files with 37 additions and 83 deletions
52
Makefile
52
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
|
GITHUB_URL=github.com/jsonnet-bundler/jsonnet-bundler
|
||||||
GOOS?=$(shell uname -s | tr A-Z a-z)
|
VERSION := $(shell git describe --tags --dirty --always)
|
||||||
GOARCH?=$(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m)))
|
|
||||||
OUT_DIR=_output
|
OUT_DIR=_output
|
||||||
BIN?=jb
|
BIN?=jb
|
||||||
VERSION?=$(shell cat VERSION)
|
|
||||||
PKGS=$(shell go list ./... | grep -v /vendor/)
|
PKGS=$(shell go list ./... | grep -v /vendor/)
|
||||||
|
|
||||||
check-license:
|
all: check-license build generate test
|
||||||
@echo ">> checking license headers"
|
|
||||||
@./scripts/check_license.sh
|
|
||||||
|
|
||||||
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:
|
build:
|
||||||
@$(eval OUTPUT=$(OUT_DIR)/$(GOOS)/$(GOARCH)/$(BIN))
|
CGO_ENABLED=0 go build ./cmd/$(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)
|
|
||||||
|
|
||||||
install: build
|
install: static
|
||||||
@$(eval OUTPUT=$(OUT_DIR)/$(GOOS)/$(GOARCH)/$(BIN))
|
|
||||||
@echo ">> copying $(BIN) into $(GOPATH)/bin/$(BIN)"
|
@echo ">> copying $(BIN) into $(GOPATH)/bin/$(BIN)"
|
||||||
@cp $(OUTPUT) $(GOPATH)/bin/$(BIN)
|
cp $(OUT_DIR)/$(BIN) $(GOPATH)/bin/$(BIN)
|
||||||
|
|
||||||
|
# Tests
|
||||||
test:
|
test:
|
||||||
@echo ">> running all unit tests"
|
@echo ">> running all unit tests"
|
||||||
go test -v $(PKGS)
|
go test -v $(PKGS)
|
||||||
|
|
@ -34,12 +38,22 @@ test-integration:
|
||||||
@echo ">> running all integration tests"
|
@echo ">> running all integration tests"
|
||||||
go test -v -tags=integration $(PKGS)
|
go test -v -tags=integration $(PKGS)
|
||||||
|
|
||||||
|
# Documentation
|
||||||
generate: embedmd
|
generate: embedmd
|
||||||
@echo ">> generating docs"
|
@echo ">> generating docs"
|
||||||
@./scripts/generate-help-txt.sh
|
@./scripts/generate-help-txt.sh
|
||||||
@$(GOPATH)/bin/embedmd -w `find ./ -path ./vendor -prune -o -name "*.md" -print`
|
@$(GOPATH)/bin/embedmd -w `find ./ -path ./vendor -prune -o -name "*.md" -print`
|
||||||
|
|
||||||
embedmd:
|
check-license:
|
||||||
@go get github.com/campoy/embedmd
|
@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
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import (
|
||||||
|
|
||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"gopkg.in/alecthomas/kingpin.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -30,6 +31,8 @@ const (
|
||||||
rewriteActionName = "rewrite"
|
rewriteActionName = "rewrite"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var Version = "dev"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
os.Exit(Main())
|
os.Exit(Main())
|
||||||
}
|
}
|
||||||
|
|
@ -41,7 +44,7 @@ func Main() int {
|
||||||
|
|
||||||
color.Output = color.Error
|
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.HelpFlag.Short('h')
|
||||||
|
|
||||||
a.Flag("jsonnetpkg-home", "The directory used to cache packages in.").
|
a.Flag("jsonnetpkg-home", "The directory used to cache packages in.").
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue