
needed to import glob, and use os.symlink, not util.symlink. Also, here made the 'tar' verbose. if '-v' option given.
154 lines
5.0 KiB
Python
Executable File
154 lines
5.0 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import os
|
|
import shutil
|
|
import sys
|
|
import glob
|
|
|
|
# Use the util functions from cloudinit
|
|
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(
|
|
sys.argv[0]), os.pardir, os.pardir))
|
|
if os.path.exists(os.path.join(possible_topdir, "cloudinit", "__init__.py")):
|
|
sys.path.insert(0, possible_topdir)
|
|
|
|
from cloudinit import templater
|
|
from cloudinit import util
|
|
|
|
import argparse
|
|
|
|
# Package names that will showup in requires to what we can actually
|
|
# use in our debian 'control' file
|
|
PKG_MP = {
|
|
'tempita': 'python-tempita',
|
|
'boto': 'python-boto',
|
|
'configobj': 'python-configobj',
|
|
'oauth': 'python-oauth',
|
|
'yaml': 'python-yaml',
|
|
'prettytable': 'python-prettytable',
|
|
'argparse': 'python-argparse',
|
|
}
|
|
|
|
|
|
def write_debian_folder(root, version, revno):
|
|
deb_dir = util.abs_join(root, 'debian')
|
|
os.makedirs(deb_dir)
|
|
|
|
# Fill in the change log template
|
|
templater.render_to_file(util.abs_join('debian', 'changelog'),
|
|
util.abs_join(deb_dir, 'changelog'),
|
|
params={
|
|
'version': version,
|
|
'revision': revno,
|
|
})
|
|
|
|
# Write out the control file template
|
|
cmd = [sys.executable,
|
|
util.abs_join(os.pardir, 'tools', 'read-dependencies')]
|
|
(stdout, _stderr) = util.subp(cmd)
|
|
|
|
# Map to known packages
|
|
pkgs = [p.lower().strip() for p in stdout.splitlines()]
|
|
requires = []
|
|
for p in pkgs:
|
|
tgt_pkg = None
|
|
for name in PKG_MP.keys():
|
|
if p.find(name) != -1:
|
|
tgt_pkg = PKG_MP.get(name)
|
|
break
|
|
if not tgt_pkg:
|
|
raise RuntimeError(("Do not know how to translate %s to "
|
|
" a known package") % (p))
|
|
else:
|
|
requires.append(tgt_pkg)
|
|
|
|
templater.render_to_file(util.abs_join('debian', 'control'),
|
|
util.abs_join(deb_dir, 'control'),
|
|
params={'requires': requires})
|
|
|
|
# Just copy the following directly
|
|
for base_fn in ['dirs', 'copyright', 'compat', 'pycompat', 'rules']:
|
|
shutil.copy(util.abs_join('debian', base_fn),
|
|
util.abs_join(deb_dir, base_fn))
|
|
|
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-n", "--no-sign", dest="sign",
|
|
help=("attempt to sign "
|
|
"the package (default: %(default)s)"),
|
|
default=True,
|
|
action='store_false')
|
|
parser.add_argument("-v", "--verbose", dest="verbose",
|
|
help=("run verbosely"
|
|
" (default: %(default)s)"),
|
|
default=False,
|
|
action='store_true')
|
|
args = parser.parse_args()
|
|
|
|
capture = True
|
|
if args.verbose:
|
|
capture = False
|
|
|
|
with util.tempdir() as tdir:
|
|
|
|
cmd = [sys.executable,
|
|
util.abs_join(os.pardir, 'tools', 'read-version')]
|
|
(sysout, _stderr) = util.subp(cmd)
|
|
version = sysout.strip()
|
|
|
|
cmd = ['bzr', 'revno']
|
|
(sysout, _stderr) = util.subp(cmd)
|
|
revno = sysout.strip()
|
|
|
|
cmd = [sys.executable,
|
|
util.abs_join(os.getcwd(), 'make-tarball')]
|
|
(sysout, _stderr) = util.subp(cmd)
|
|
arch_fn = sysout.strip()
|
|
|
|
tmp_arch_fn = util.abs_join(tdir, os.path.basename(arch_fn))
|
|
shutil.move(arch_fn, tmp_arch_fn)
|
|
|
|
cmd = ['tar', '-xvzf', tmp_arch_fn, '-C', tdir]
|
|
util.subp(cmd)
|
|
|
|
base_name = os.path.basename(arch_fn)[:-len(".tar.gz")]
|
|
shutil.move(util.abs_join(tdir, base_name),
|
|
util.abs_join(tdir, 'cloud-init'))
|
|
|
|
write_debian_folder(util.abs_join(tdir, 'cloud-init'),
|
|
version, revno)
|
|
|
|
tar_fn = "cloud-init_%s~%s.orig.tar.gz" % (version, revno)
|
|
cmd = ['tar', '-czvf',
|
|
util.abs_join(tdir, tar_fn),
|
|
'-C', util.abs_join(tdir, 'cloud-init')]
|
|
cmd.extend(os.listdir(util.abs_join(tdir, 'cloud-init')))
|
|
util.subp(cmd, capture=capture)
|
|
shutil.copy(util.abs_join(tdir, tar_fn), tar_fn)
|
|
print("Wrote out archive %r" % (util.abs_join(tar_fn)))
|
|
|
|
with util.chdir(util.abs_join(tdir, 'cloud-init')):
|
|
cmd = ['debuild']
|
|
if not args.sign:
|
|
cmd.extend(['-us', '-uc'])
|
|
util.subp(cmd, capture=capture)
|
|
|
|
globs = []
|
|
globs.extend(glob.glob("%s/*.deb" %
|
|
(os.path.join(tdir))))
|
|
for fn in globs:
|
|
base_fn = os.path.basename(fn)
|
|
shutil.move(fn, base_fn)
|
|
print("Wrote out debian package %r" % (base_fn))
|
|
if fn.endswith('_all.deb'):
|
|
# Add in the local link
|
|
util.del_file('cloud-init_all.deb')
|
|
os.symlink(base_fn, 'cloud-init_all.deb')
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|