# 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