Git标签名称为Go via Travis-CI中的版本

时间:2015-06-09 20:13:10

标签: github go makefile travis-ci

基本上我想要做的是将git标签名称(来自github版本)嵌入到我的GO代码中的版本字符串中。

如果我使用此代码;

optionB.map(b => optionA.getOrElse(b))

什么是最好的设置方式" VERSION"在Travis-CI构建期间package main import ( "flag" "fmt" ) var version string func main() { var verFlag bool flag.BoolVar(&verFlag, "version", false, "Returns the version number") var confPath string flag.StringVar(&confPath, "conf", "conf.yml", "Location on config file") flag.Parse() // if the user wants to see the version if verFlag { fmt.Printf("%s", version) return } } -ldflags '-X main.version VERSION'

  

此外,Travis CI设置了您可以在构建中使用的环境变量,例如标记构建,或运行构建后部署。

     

TRAVIS_TAG:如果是标签的当前版本,则包含标签名称

我最后的努力是使用这个make文件:

$TRAVIS_TAG

使用此travis配置文件;

GOFLAGS ?= $(GOFLAGS:)

TAG := $(VERSION)
ifeq ($(TAG),)
  BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
  DT := $(shell date '+%F::%T')
  VSN := $(BRANCH)-$(DT)
else
  VSN := $(TAG)
endif

ENV := $(shell printenv)

GOFLAGS = -ldflags '-X main.version $(VSN)'

default:
    all

all: 
    test
    install

install:
    get-deps
    @go build $(GOFLAGS) *.go

test:
    @go test $(GOFLAGS) ./...

get-deps:
    @go get ./...

clean:
    @go clean $(GOFLAGS) -i ./

然而,无论我尝试什么变体,并且我尝试了许多不同的基本上这个例子,似乎最终在我的github发行版中的二进制文件不包含标记名称。观察到的是在make文件中未设置版本字符串时产生的分支和日期版本字符串。我在我的开发机器上尝试了这个make文件,并将环境变量设置为Travis中的预期变量,并且它按预期工作。我也很清楚,我不希望这种情况发生在提交版本上,但仅限于来自github的版本,即创建标记时。

1 个答案:

答案 0 :(得分:2)

所以我解决了这个问题。

上面示例中的问题出现在Travis文件中。我似乎需要围绕我的"脚本"参数。为了完整起见,这是我的新Travis文件;

language: go
script: 
 - "make VERSION=$TRAVIS_TAG"
go:
 - 1.4.1
deploy:
  provider: releases
  api_key:
    secure: reallylongsecurestring
  file: releasebin
  skip_cleanup: true
  on:
    tags: true