Automatic versioning for aptly

New version format:

* for releases, `x.y.z` (follows tag without leading `v`)
* for nightly builds, `x.y.z+N+hash` (previous version, not the upcoming one)

This means that each nightly build `aptly` would report
correct version now.

Version is now complied into the aptly binary, system tests
automatically check for current version, no need to update them
anymore.
This commit is contained in:
Andrey Smirnov
2017-03-25 00:18:45 +03:00
parent 91219e3a0a
commit 2943422d5d
13 changed files with 43 additions and 13 deletions
+1
View File
@@ -28,6 +28,7 @@ before_install:
- mkdir -p $GOPATH/src/github.com/smira - mkdir -p $GOPATH/src/github.com/smira
- ln -s $TRAVIS_BUILD_DIR $GOPATH/src/github.com/smira || true - ln -s $TRAVIS_BUILD_DIR $GOPATH/src/github.com/smira || true
- cd $GOPATH/src/github.com/smira/aptly - cd $GOPATH/src/github.com/smira/aptly
- make version
install: install:
- make prepare - make prepare
+7 -4
View File
@@ -1,6 +1,6 @@
GOVERSION=$(shell go version | awk '{print $$3;}') GOVERSION=$(shell go version | awk '{print $$3;}')
VERSION=$(shell git describe --tags | sed 's@^v@@' | sed 's@-@+@g')
PACKAGES=context database deb files http query swift s3 utils PACKAGES=context database deb files http query swift s3 utils
ALL_PACKAGES=api aptly context cmd console database deb files http query swift s3 utils
PYTHON?=python PYTHON?=python
TESTS?= TESTS?=
BINPATH?=$(GOPATH)/bin BINPATH?=$(GOPATH)/bin
@@ -39,12 +39,12 @@ check:
gometalinter --vendor --vendored-linters --config=linter.json ./... gometalinter --vendor --vendored-linters --config=linter.json ./...
install: install:
go install -v go install -x -v -ldflags "-X main.Version=$(VERSION)"
system-test: install system-test: install
if [ ! -e ~/aptly-fixture-db ]; then git clone https://github.com/aptly-dev/aptly-fixture-db.git ~/aptly-fixture-db/; fi if [ ! -e ~/aptly-fixture-db ]; then git clone https://github.com/aptly-dev/aptly-fixture-db.git ~/aptly-fixture-db/; fi
if [ ! -e ~/aptly-fixture-pool ]; then git clone https://github.com/aptly-dev/aptly-fixture-pool.git ~/aptly-fixture-pool/; fi if [ ! -e ~/aptly-fixture-pool ]; then git clone https://github.com/aptly-dev/aptly-fixture-pool.git ~/aptly-fixture-pool/; fi
PATH=$(BINPATH)/:$(PATH) $(PYTHON) system/run.py --long $(TESTS) APTLY_VERSION=$(VERSION) PATH=$(BINPATH)/:$(PATH) $(PYTHON) system/run.py --long $(TESTS)
travis: $(TRAVIS_TARGET) check system-test travis: $(TRAVIS_TARGET) check system-test
@@ -79,4 +79,7 @@ goxc:
man: man:
make -C man make -C man
.PHONY: coverage.out man version:
@echo $(VERSION)
.PHONY: coverage.out man version
+2 -2
View File
@@ -1,7 +1,7 @@
package aptly package aptly
// Version of aptly // Version of aptly (filled in at link time)
const Version = "0.9.8~dev" var Version string
// EnableDebug triggers some debugging features // EnableDebug triggers some debugging features
const EnableDebug = false const EnableDebug = false
+3
View File
@@ -96,6 +96,9 @@ func (s *VersionSuite) TestCompareVersions(c *C) {
c.Check(CompareVersions("1.0~beta1~svn1245", "1.0~beta1"), Equals, -1) c.Check(CompareVersions("1.0~beta1~svn1245", "1.0~beta1"), Equals, -1)
c.Check(CompareVersions("1.0~beta1", "1.0"), Equals, -1) c.Check(CompareVersions("1.0~beta1", "1.0"), Equals, -1)
c.Check(CompareVersions("1.0-133-avc", "1.1"), Equals, -1)
c.Check(CompareVersions("1.0-133-avc", "1.0"), Equals, 1)
} }
func (s *VersionSuite) TestParseDependency(c *C) { func (s *VersionSuite) TestParseDependency(c *C) {
+10
View File
@@ -3,9 +3,19 @@ package main
import ( import (
"os" "os"
"github.com/smira/aptly/aptly"
"github.com/smira/aptly/cmd" "github.com/smira/aptly/cmd"
) )
// Version variable, filled in at link time
var Version string
func main() { func main() {
if Version == "" {
Version = "unknown"
}
aptly.Version = Version
os.Exit(cmd.Run(cmd.RootCommand(), os.Args[1:], true)) os.Exit(cmd.Run(cmd.RootCommand(), os.Args[1:], true))
} }
+6
View File
@@ -98,6 +98,12 @@ def run(include_long_tests=False, capture_results=False, tests=None, filters=Non
sys.exit(1) sys.exit(1)
if __name__ == "__main__": if __name__ == "__main__":
if 'APTLY_VERSION' not in os.environ:
try:
os.environ['APTLY_VERSION'] = os.popen("make version").read().strip()
except BaseException, e:
print "Failed to capture current version: ", e
os.chdir(os.path.realpath(os.path.dirname(sys.argv[0]))) os.chdir(os.path.realpath(os.path.dirname(sys.argv[0])))
random.seed() random.seed()
include_long_tests = False include_long_tests = False
+1 -1
View File
@@ -1 +1 @@
aptly version: 0.9.8~dev aptly version: ${APTLY_VERSION}
+1
View File
@@ -9,5 +9,6 @@ class VersionTest(BaseTest):
""" """
version should match version should match
""" """
gold_processor = BaseTest.expand_environ
runCmd = "aptly version" runCmd = "aptly version"
+1 -1
View File
@@ -21,6 +21,6 @@ End command output: ------------------------------
4) [Running]: version 4) [Running]: version
Begin command output: ---------------------------- Begin command output: ----------------------------
aptly version: 0.9.8~dev aptly version: ${APTLY_VERSION}
End command output: ------------------------------ End command output: ------------------------------
+2
View File
@@ -5,6 +5,8 @@ class RunTask1Test(BaseTest):
""" """
task run: simple commands, 1-word command task run: simple commands, 1-word command
""" """
gold_processor = BaseTest.expand_environ
runCmd = "aptly task run repo list, repo create local, repo drop local, version" runCmd = "aptly task run repo list, repo create local, repo drop local, version"
+4 -3
View File
@@ -1,10 +1,11 @@
import requests_unixsocket import requests_unixsocket
import time
import urllib import urllib
import os
import os.path import os.path
from lib import BaseTest from lib import BaseTest
class SystemdAPIHandoverTest(BaseTest): class SystemdAPIHandoverTest(BaseTest):
aptly_server = None aptly_server = None
socket_path = "/tmp/_aptly_systemdapihandovertest.sock" socket_path = "/tmp/_aptly_systemdapihandovertest.sock"
@@ -37,9 +38,9 @@ class SystemdAPIHandoverTest(BaseTest):
Verify we can listen on a unix domain socket. Verify we can listen on a unix domain socket.
""" """
def check(self): def check(self):
if self.aptly_server == None: if self.aptly_server is None:
print("Skipping test as we failed to setup a listener.") print("Skipping test as we failed to setup a listener.")
return return
session = requests_unixsocket.Session() session = requests_unixsocket.Session()
r = session.get('http+unix://%s/api/version' % urllib.quote(self.socket_path, safe='')) r = session.get('http+unix://%s/api/version' % urllib.quote(self.socket_path, safe=''))
self.check_equal(r.json(), {'Version': '0.9.8~dev'}) self.check_equal(r.json(), {'Version': os.environ['APTLY_VERSION']})
+3 -1
View File
@@ -1,9 +1,11 @@
import requests_unixsocket import requests_unixsocket
import time import time
import os
import urllib import urllib
from lib import BaseTest from lib import BaseTest
class UnixSocketAPITest(BaseTest): class UnixSocketAPITest(BaseTest):
aptly_server = None aptly_server = None
socket_path = "/tmp/_aptly_test.sock" socket_path = "/tmp/_aptly_test.sock"
@@ -33,4 +35,4 @@ class UnixSocketAPITest(BaseTest):
r = session.get('http+unix://%s/api/version' % urllib.quote(UnixSocketAPITest.socket_path, safe='')) r = session.get('http+unix://%s/api/version' % urllib.quote(UnixSocketAPITest.socket_path, safe=''))
# Just needs to come back, we actually don't care much about the code. # Just needs to come back, we actually don't care much about the code.
# Only needs to verify that the socket is actually responding. # Only needs to verify that the socket is actually responding.
self.check_equal(r.json(), {'Version': '0.9.8~dev'}) self.check_equal(r.json(), {'Version': os.environ['APTLY_VERSION']})
+2 -1
View File
@@ -1,4 +1,5 @@
from api_lib import APITest from api_lib import APITest
import os
class VersionAPITest(APITest): class VersionAPITest(APITest):
@@ -7,4 +8,4 @@ class VersionAPITest(APITest):
""" """
def check(self): def check(self):
self.check_equal(self.get("/api/version").json(), {'Version': '0.9.8~dev'}) self.check_equal(self.get("/api/version").json(), {'Version': os.environ['APTLY_VERSION']})