summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-09-09 17:18:20 +0300
committerLars Wirzenius <liw@liw.fi>2018-09-09 17:18:20 +0300
commit35a2a575fd7332cbfcbfd131b58f3965a9e78e91 (patch)
treee50ed177344034807881dfaae811c98da0ae94f6
parent74945dd457a9f1a31d7f855146b73289754cceec (diff)
downloadick-helpers-35a2a575fd7332cbfcbfd131b58f3965a9e78e91.tar.gz
Add: support for CI builds
-rw-r--r--ick_helpers.py151
1 files changed, 101 insertions, 50 deletions
diff --git a/ick_helpers.py b/ick_helpers.py
index 76e8bbc..3345c5e 100644
--- a/ick_helpers.py
+++ b/ick_helpers.py
@@ -128,6 +128,11 @@ class Version:
def __str__(self):
return self._full_version
+ def upstream_append(self, morever):
+ assert '-' in self._full_version
+ parts = self._full_version.split('-')
+ self._full_version = '{}{}-1'.format(self.upstream, morever)
+
@property
def full(self):
return self._full_version
@@ -145,57 +150,13 @@ class Version:
return parts[1]
-class DebianReleaseBuilder:
+class DebianBuilderBase:
- def __init__(self, ex, resultsdir, debfullname, debemail):
+ def __init__(self, ex, debfullname, debemail):
self.ex = ex
- self.results = resultsdir
self.debfullname = debfullname
self.debemail = debemail
- def build(self, tag, distribution):
- cwd = os.getcwd()
-
- self.checkout(tag)
-
- upstream_tarball = self.create_upstream_tarball(tag)
- debug('upstream_tarball:', upstream_tarball)
- self.stash(upstream_tarball)
-
- source = self.get_source_package()
- version = self.get_version()
- curdist = self.get_distribution()
- debug('Source package:', source)
- debug('Version:', version)
- debug('Distribution:', curdist)
-
- orig_tarball = self.create_debian_orig_tarball(
- upstream_tarball, source, version)
-
- if curdist != distribution:
- self.set_distribution(version, distribution)
-
- self.create_dsc()
- self.build_deb()
-
- debian_files = glob.glob('{}_{}*'.format(source, version.upstream))
- debian_files = [x for x in debian_files if '+git' not in x]
- debug('DEBIAN:', debian_files)
- self.stash(*debian_files)
-
- filenames = glob.glob('{}_{}*'.format(source, version.upstream))
- filenames.append(upstream_tarball)
- self.cleanup(filenames)
-
- debug()
-
- def checkout(self, tag):
- self.ex.run('git', 'reset', '--hard', check=False)
- self.ex.run('git', 'clean', '-fdx', check=False)
- self.ex.run('git', 'checkout', 'master', check=False)
- self.ex.run('git', 'branch', '-d', '__ickbuild', check=False)
- self.ex.run('git', 'checkout', '-b', '__ickbuild', tag)
-
def create_upstream_tarball(self, tag):
basename = '{}.tar.xz'.format(tag)
tarball = os.path.abspath(basename)
@@ -205,19 +166,26 @@ class DebianReleaseBuilder:
def create_debian_orig_tarball(self, upstream_tarball, source, version):
tarball = '{}_{}.orig.tar.xz'.format(source, version.upstream)
os.link(upstream_tarball, tarball)
+ debug('upstream_tarball:', tarball)
return tarball
def get_source_package(self):
output = self.ex.get_stdout('dpkg-parsechangelog', '-S', 'Source')
- return output.strip()
+ source = output.strip()
+ debug('Source package:', source)
+ return source
def get_version(self):
output = self.ex.get_stdout('dpkg-parsechangelog', '-S', 'Version')
- return Version(output.strip())
+ version = Version(output.strip())
+ debug('Version:', version)
+ return version
def get_distribution(self):
output = self.ex.get_stdout('dpkg-parsechangelog', '-S', 'Distribution')
- return output.strip()
+ curdist = output.strip()
+ debug('Distribution:', curdist)
+ return curdist
def set_distribution(self, version, distribution):
env = dict(os.environ)
@@ -225,7 +193,7 @@ class DebianReleaseBuilder:
env['DEBEMAIL'] = self.debemail
newver = '{}.{}'.format(version.full, distribution)
debug('newver:', newver)
- msg = 'Build release for {} in CI.'.format(distribution)
+ msg = 'Build in ick.'
self.ex.run(
'dch', '--no-conf', '-v', newver, '-D', distribution,
'--force-distribution', msg, env=env)
@@ -237,6 +205,47 @@ class DebianReleaseBuilder:
def build_deb(self):
self.ex.run('dpkg-buildpackage', '-b', '--no-sign')
+
+class DebianReleaseBuilder(DebianBuilderBase):
+
+ def __init__(self, ex, resultsdir, debfullname, debemail):
+ super().__init__(ex, debfullname, debemail)
+ self.results = resultsdir
+
+ def build(self, tag, distribution):
+ self.checkout(tag)
+
+ upstream_tarball = self.create_upstream_tarball(tag)
+ self.stash(upstream_tarball)
+
+ source = self.get_source_package()
+ version = self.get_version()
+ curdist = self.get_distribution()
+
+ orig_tarball = self.create_debian_orig_tarball(
+ upstream_tarball, source, version)
+
+ if curdist != distribution:
+ self.set_distribution(version, distribution)
+
+ self.create_dsc()
+ self.build_deb()
+
+ debian_files = glob.glob('{}_{}*'.format(source, version.upstream))
+ debian_files = [x for x in debian_files if '+git' not in x]
+ self.stash(*debian_files)
+
+ filenames = glob.glob('{}_{}*'.format(source, version.upstream))
+ filenames.append(upstream_tarball)
+ self.cleanup(filenames)
+
+ def checkout(self, tag):
+ self.ex.run('git', 'reset', '--hard', check=False)
+ self.ex.run('git', 'clean', '-fdx', check=False)
+ self.ex.run('git', 'checkout', 'master', check=False)
+ self.ex.run('git', 'branch', '-d', '__ickbuild', check=False)
+ self.ex.run('git', 'checkout', '-b', '__ickbuild', tag)
+
def stash(self, *filenames):
if not os.path.exists(self.results):
os.mkdir(self.results)
@@ -251,6 +260,31 @@ class DebianReleaseBuilder:
os.remove(filename)
+class DebianCIBuilder:
+
+ def __init__(self, ex, debfullname, debemail):
+ self.ex = ex
+ self.debfullname = debfullname
+ self.debemail = debemail
+
+ def build(self, distribution):
+ upstream_tarball = self.create_upstream_tarball(tag)
+
+ source = self.get_source_package()
+ version = self.get_version()
+ curdist = self.get_distribution()
+
+ orig_tarball = self.create_debian_orig_tarball(
+ upstream_tarball, source, version)
+
+ morever = '.0ci{}.{}'.format(os.environ['BUILD_NUMBER'], distribution)
+ version.upstream_append(morever)
+ self.set_distribution(version, distribution)
+
+ self.create_dsc()
+ self.build_deb()
+
+
class KnownTags:
filename = '.known_tags'
@@ -281,6 +315,7 @@ def find_upstream_dirs(sources):
dirname = source['location']
control = os.path.join(dirname, 'debian', 'control')
if os.path.exists(control):
+ debug('Found debian/control in', dirname)
yield dirname
@@ -307,3 +342,19 @@ def build_debian_releases(params, resultsdir):
else:
debug('Already built, not building', tag, 'for', distribution)
known.remember(tag, distribution)
+
+
+def ci_build_debian(params):
+ sources = params['sources']
+ distribution = params['distribution_ci']
+ debfullname = params['DEBFULLNAME']
+ debemail = params['DEBEMAIL']
+ dirnames = find_upstream_dirs(sources)
+
+ for dirname in dirnames:
+ ex = Exec(dirname)
+ project = ex.get_project_name()
+ tags = ex.find_release_tags(project)
+ debug('release tags:', tags)
+ builder = DebianCIBuilder(ex, debfullname, debemail)
+ builder.build(distribution)