From 1f0698635d2fbc848d6ac6f14c1b03caa57666f0 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Wed, 25 Jul 2018 08:23:48 +0300 Subject: Add: some more proposd standard pipelines for ick --- pipelines/debian.ick | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 pipelines/debian.ick (limited to 'pipelines/debian.ick') 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 -- cgit v1.2.1