summaryrefslogtreecommitdiff
path: root/pipelines/debian.ick
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-07-25 08:23:48 +0300
committerLars Wirzenius <liw@liw.fi>2018-07-25 08:23:48 +0300
commit1f0698635d2fbc848d6ac6f14c1b03caa57666f0 (patch)
tree9e6749541bc23926727fd83e610960384359e867 /pipelines/debian.ick
parentb4fd244faa883da8d67cc3a0d538ab1dc6fb47dc (diff)
downloadick2-1f0698635d2fbc848d6ac6f14c1b03caa57666f0.tar.gz
Add: some more proposd standard pipelines for ick
Diffstat (limited to 'pipelines/debian.ick')
-rw-r--r--pipelines/debian.ick111
1 files changed, 111 insertions, 0 deletions
diff --git a/pipelines/debian.ick b/pipelines/debian.ick
new file mode 100644
index 0000000..c6fe573
--- /dev/null
+++ b/pipelines/debian.ick
@@ -0,0 +1,111 @@
+# Lars Wirzenius.
+#
+# Feel free to use this as you wish. It is simple enough that it is
+# probably not even copyrightable.
+
+pipelines:
+
+ # Install build-dependencies for a Debian build, by checking
+ # debian/control for what's missing. The sources parameter is used
+ # to find all the source trees: for each location, if debian/oontrol
+ # exists as the location, look for missing build-dependencies.
+
+ - pipeline: ick/install_debian_build_dependencies
+ parameters:
+ - sources
+ actions:
+ - python: |
+ import os, subprocess
+
+ def RUN(*args, **kwargs):
+ print('Executing:', args)
+ print('kwargs:', kwargs)
+ return subprocess.run(args, **kwargs)
+
+ def OUT(*args, **kwargs):
+ x = RUN(*args, stdout=subprocess.PIPE, **kwargs)
+ return x.stdout.decode('UTF-8')
+
+ def ERR(*args, **kwargs):
+ x = RUN(*args, stderr=subprocess.PIPE, **kwargs)
+ return x.stderr.decode('UTF-8')
+
+ def is_package_name(s):
+ ok = "abcdefghijklmnopqrstyvwxyz"
+ ok += ok.upper()
+ ok += "0123456789.-"
+ return all(c in ok for c in s)
+
+ sources = params['sources']
+ for source in sources:
+ dirname = source['location']
+ control = os.path.join(dirname, 'debian', 'control')
+ if os.path.exists(control):
+ err = ERR('dpkg-checkbuilddeps', cwd=dirname)
+ print('err', err)
+ pat = 'Unmet build dependencies: '
+ if pat in err:
+ parts = err.split(pat)
+ missing = [x for x in parts[1].split() if is_package_name(x)]
+ print('missing', missing)
+ for name in missing:
+ RUN('apt-get', 'install', '-y', name)
+ where: container
+
+
+ # Build Debian packages. This is a CI build, which means a new
+ # debian/changelog entry is created, with a version number that
+ # contains the build number. This way every build results in a new
+ # package version.
+ #
+ # The build will be done in each location in the sources parameter,
+ # where debian/control exists.
+
+ - pipeline: ick/build_deb_ci
+ parameters:
+ - sources
+ actions:
+ - python: |
+ import os, subprocess
+
+ def RUN(*args, **kwargs):
+ print('Executing:', args)
+ print('kwargs:', kwargs)
+ return subprocess.run(args, **kwargs)
+
+ def OUT(*args, **kwargs):
+ x = RUN(*args, stdout=subprocess.PIPE, **kwargs)
+ return x.stdout.decode('UTF-8')
+
+ sources = params['sources']
+ for source in sources:
+ dirname = source['location']
+ control = os.path.join(dirname, 'debian', 'control')
+ if os.path.exists(control):
+ src = OUT('dpkg-parsechangelog', '-S', 'Source')
+ print('src', src)
+
+ ver = OUT('dpkg-parsechangelog', '-S', 'Version')
+ print('ver', ver)
+
+ if '-' in ver:
+ parts = ver.split('-')
+ ver = '-'.join(ver_parts[:-1])
+ ver += '.0ci{}-1'.format(os.environ['BUILD_NUMBER'])
+ print('ver', ver)
+
+ tarball = '../{}_{}.orig.tar.xz'.format(src, ver)
+ print('tarball', tarball)
+
+ RUN('dch', '-v', ver, 'CI build')
+ RUN('dch', '-r', '')
+ RUN('sh', '-c', 'git archive HEAD | xz > {}'.format(tarball))
+ RUN('dpkg-buildpackage', '-us', '-uc')
+ where: container
+
+ # Upload all *.changes files at the root of the workspace.
+
+ - pipeline: ick/upload_debs
+ actions:
+ - action: dput
+ where: host