annotate bin/publishpackages.py @ 171:c0ea6cbb0fd2

Add "--debbuildopts -b" to "pbuilder build" command line to stop pbuilder from creating a source package. The .changes would otherwise contain references to that new source package instead of the one we passed to pbuilder. The checksums for the two source packages would be different so the .changes file would not match the source package that treepkg produces.
author Bernhard Herzog <bh@intevation.de>
date Mon, 23 Jun 2008 16:12:01 +0000
parents 3caf4a5ecbf0
children ce03e24f6d0f
rev   line source
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
1 #! /usr/bin/python2.4
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
2 # Copyright (C) 2007 by Intevation GmbH
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
3 # Authors:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
4 # Bernhard Herzog <bh@intevation.de>
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
5 #
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
6 # This program is free software under the GPL (>=v2)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
7 # Read the file COPYING coming with the software for details.
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
8
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
9 """Publishes selected packages created by treepkg"""
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
10
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
11 import sys
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
12 import os
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
13 import shutil
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
14 from optparse import OptionParser
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
15 from ConfigParser import SafeConfigParser
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
16
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
17 import treepkgcmd
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
18 from treepkg.readconfig import read_config_section
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
19 from treepkg.run import call, capture_output
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
20 from treepkg.cmdexpand import cmdexpand
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
21 from treepkg.util import ensure_directory, listdir_abs
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
22
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
23
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
24 def remove_trailing_slashes(s):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
25 return s.rstrip("/")
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
26
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
27 def expand_filename(filename):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
28 """
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
29 Applies os.path.expanduser and os.path.expandvars to filename
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
30 """
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
31 return os.path.expandvars(os.path.expanduser(filename))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
32
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
33 config_desc = ["build_user", "build_host", "build_listpackages",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
34 "publish_user", "publish_host", "publish_apt_archive_update",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
35 ("publish_dir", remove_trailing_slashes),
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
36 ("cachedir",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
37 lambda s: expand_filename(remove_trailing_slashes(s)))]
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
38
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
39 def read_config(filename):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
40 parser = SafeConfigParser()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
41 parser.read([filename])
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
42 return read_config_section(parser, "publishpackages", config_desc)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
43
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
44 def parse_commandline():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
45 parser = OptionParser()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
46 parser.set_defaults(config_file=os.path.join(treepkgcmd.topdir,
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
47 "publishpackages.cfg"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
48 parser.add_option("--config-file",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
49 help=("The configuration file."
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
50 " Default is publishpackages.cfg"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
51 parser.add_option("--revision",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
52 help=("The revision whose files are to be published."
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
53 " If not given, the latest revision is used"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
54 parser.add_option("--dist",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
55 help=("The debian distribution name to use on"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
56 " the publishing system"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
57 parser.add_option("--section",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
58 help=("The debian distribution section name to use on"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
59 " the publishing system"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
60 parser.add_option("--track",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
61 help=("The package track whose files are to be"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
62 " published"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
63 return parser.parse_args()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
64
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
65
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
66 def publish_packages_arch(variables, track, revision, dist, section, arch):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
67 # create web-page on build host
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
68 if arch == "source":
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
69 variables["pkgtype"] = "--source"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
70 else:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
71 variables["pkgtype"] = "--binary"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
72
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
73 files = capture_output(cmdexpand("ssh $build_user$@$build_host"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
74 " $build_listpackages"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
75 " --track $track @revision $pkgtype",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
76 **variables)).strip().split("\n")
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
77 # scp the packages to the cache dir
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
78 cachedir = variables["cachedir"]
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
79 shutil.rmtree(cachedir, ignore_errors=True)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
80 ensure_directory(cachedir)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
81 userhost = "%(build_user)s@%(build_host)s:" % variables
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
82 call(cmdexpand("scp @files $cachedir/",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
83 files = [userhost + filename for filename in files],
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
84 **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
85
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
86 # copy the packages to the remote publishing host. Create the
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
87 # destination directory if it doesn't exist yet.
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
88 destdir = os.path.join(variables["publish_dir"], dist, section, arch)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
89 call(cmdexpand("ssh $publish_user$@$publish_host mkdir --parents $destdir",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
90 destdir=destdir, **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
91 call(cmdexpand("scp @files $publish_user$@$publish_host:$destdir",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
92 files=listdir_abs(cachedir), destdir=destdir,
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
93 **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
94
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
95
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
96 def publish_packages(config_filename, track, revision, dist, section):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
97 config = read_config(config_filename)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
98
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
99 variables = config.copy()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
100 variables["track"] = track
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
101 if revision:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
102 variables["revision"] = ["--revision", revision]
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
103 else:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
104 variables["revision"] = []
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
105
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
106 for arch in ["binary-i386", "source"]:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
107 publish_packages_arch(variables, track, revision, dist, section, arch)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
108
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
109 # update apt archive
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
110 call(cmdexpand("ssh $publish_user$@$publish_host"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
111 " $publish_apt_archive_update",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
112 **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
113
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
114 def main():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
115 options, args = parse_commandline()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
116 for required_opt in ["track", "dist", "section"]:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
117 if getattr(options, required_opt) is None:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
118 print >>sys.stderr, "The --%s option must be given" % required_opt
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
119 sys.exit(1)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
120 publish_packages(options.config_file, options.track, options.revision,
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
121 options.dist, options.section)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
122
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
123 main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)