root / devflow / autopkg.py @ 8f939e17
History | View | Annotate | Download (12.8 kB)
1 | 8df4ab84 | Vangelis Koukis | # Copyright 2012, 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 55775645 | Vangelis Koukis | #
|
3 | 55775645 | Vangelis Koukis | # Redistribution and use in source and binary forms, with or
|
4 | 55775645 | Vangelis Koukis | # without modification, are permitted provided that the following
|
5 | 55775645 | Vangelis Koukis | # conditions are met:
|
6 | 55775645 | Vangelis Koukis | #
|
7 | 55775645 | Vangelis Koukis | # 1. Redistributions of source code must retain the above
|
8 | 55775645 | Vangelis Koukis | # copyright notice, this list of conditions and the following
|
9 | 55775645 | Vangelis Koukis | # disclaimer.
|
10 | 55775645 | Vangelis Koukis | #
|
11 | 55775645 | Vangelis Koukis | # 2. Redistributions in binary form must reproduce the above
|
12 | 55775645 | Vangelis Koukis | # copyright notice, this list of conditions and the following
|
13 | 55775645 | Vangelis Koukis | # disclaimer in the documentation and/or other materials
|
14 | 55775645 | Vangelis Koukis | # provided with the distribution.
|
15 | 55775645 | Vangelis Koukis | #
|
16 | 55775645 | Vangelis Koukis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 55775645 | Vangelis Koukis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 55775645 | Vangelis Koukis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 55775645 | Vangelis Koukis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 55775645 | Vangelis Koukis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 55775645 | Vangelis Koukis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 55775645 | Vangelis Koukis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 55775645 | Vangelis Koukis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 55775645 | Vangelis Koukis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 55775645 | Vangelis Koukis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 55775645 | Vangelis Koukis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 55775645 | Vangelis Koukis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 55775645 | Vangelis Koukis | #
|
29 | 55775645 | Vangelis Koukis | # The views and conclusions contained in the software and
|
30 | 55775645 | Vangelis Koukis | # documentation are those of the authors and should not be
|
31 | 55775645 | Vangelis Koukis | # interpreted as representing official policies, either expressed
|
32 | 55775645 | Vangelis Koukis | # or implied, of GRNET S.A.
|
33 | 55775645 | Vangelis Koukis | |
34 | 4a45f70c | Christos Stavrakakis | """Helper script for automatic build of debian packages."""
|
35 | 4a45f70c | Christos Stavrakakis | |
36 | 55775645 | Vangelis Koukis | import os |
37 | 55775645 | Vangelis Koukis | import sys |
38 | 18be409c | Christos Stavrakakis | |
39 | 18be409c | Christos Stavrakakis | from git import GitCommandError |
40 | 55775645 | Vangelis Koukis | from optparse import OptionParser |
41 | 4a45f70c | Christos Stavrakakis | from sh import mktemp, cd, rm, git_dch # pylint: disable=E0611 |
42 | 55775645 | Vangelis Koukis | |
43 | e727d1ba | Christos Stavrakakis | from devflow import versioning |
44 | 9fe1ecd8 | Christos Stavrakakis | from devflow import utils |
45 | c181882a | Christos Stavrakakis | from devflow import BRANCH_TYPES |
46 | 866bb9c1 | Christos Stavrakakis | |
47 | 8efe95c4 | Christos Stavrakakis | if sys.stdout.isatty():
|
48 | 8efe95c4 | Christos Stavrakakis | try:
|
49 | 8efe95c4 | Christos Stavrakakis | import colors |
50 | 8efe95c4 | Christos Stavrakakis | use_colors = True
|
51 | 8efe95c4 | Christos Stavrakakis | except AttributeError: |
52 | 8efe95c4 | Christos Stavrakakis | use_colors = False
|
53 | f9f89675 | Christos Stavrakakis | else:
|
54 | f9f89675 | Christos Stavrakakis | use_colors = False
|
55 | 8efe95c4 | Christos Stavrakakis | |
56 | 8efe95c4 | Christos Stavrakakis | |
57 | 8efe95c4 | Christos Stavrakakis | if use_colors:
|
58 | 8efe95c4 | Christos Stavrakakis | red = colors.red |
59 | 8efe95c4 | Christos Stavrakakis | green = colors.green |
60 | 8efe95c4 | Christos Stavrakakis | else:
|
61 | 55775645 | Vangelis Koukis | red = lambda x: x
|
62 | 55775645 | Vangelis Koukis | green = lambda x: x
|
63 | 55775645 | Vangelis Koukis | |
64 | 55775645 | Vangelis Koukis | print_red = lambda x: sys.stdout.write(red(x) + "\n") |
65 | 55775645 | Vangelis Koukis | print_green = lambda x: sys.stdout.write(green(x) + "\n") |
66 | 55775645 | Vangelis Koukis | |
67 | 55775645 | Vangelis Koukis | AVAILABLE_MODES = ["release", "snapshot"] |
68 | 55775645 | Vangelis Koukis | |
69 | 7316df0e | Christos Stavrakakis | DESCRIPTION = """Tool for automatical build of debian packages.
|
70 | 7316df0e | Christos Stavrakakis |
|
71 | 7316df0e | Christos Stavrakakis | %(prog)s is a helper script for automatic build of debian packages from
|
72 | 7316df0e | Christos Stavrakakis | repositories that follow the `git flow` development model
|
73 | 7316df0e | Christos Stavrakakis | <http://nvie.com/posts/a-successful-git-branching-model/>.
|
74 | 7316df0e | Christos Stavrakakis |
|
75 | b1aa3d49 | Christos Stavrakakis | This script must run from inside a clean git repository and will perform the
|
76 | b1aa3d49 | Christos Stavrakakis | following steps:
|
77 | 7316df0e | Christos Stavrakakis | * Clone your repository to a temporary directory
|
78 | 7316df0e | Christos Stavrakakis | * Merge the current branch with the corresponding debian branch
|
79 | 7316df0e | Christos Stavrakakis | * Compute the version of the new package and update the python
|
80 | 7316df0e | Christos Stavrakakis | version files
|
81 | 7316df0e | Christos Stavrakakis | * Create a new entry in debian/changelog, using `git-dch`
|
82 | 7316df0e | Christos Stavrakakis | * Create the debian packages, using `git-buildpackage`
|
83 | 7316df0e | Christos Stavrakakis | * Tag the appropriate branches if in `release` mode
|
84 | 7316df0e | Christos Stavrakakis |
|
85 | b1aa3d49 | Christos Stavrakakis | %(prog)s will work with the packages that are declared in `autopkg.conf`
|
86 | b1aa3d49 | Christos Stavrakakis | file, which must exist in the toplevel directory of the git repository.
|
87 | b1aa3d49 | Christos Stavrakakis |
|
88 | 7316df0e | Christos Stavrakakis | """
|
89 | 7316df0e | Christos Stavrakakis | |
90 | 7316df0e | Christos Stavrakakis | |
91 | 7316df0e | Christos Stavrakakis | def print_help(prog): |
92 | 7316df0e | Christos Stavrakakis | print DESCRIPTION % {"prog": prog} |
93 | 7316df0e | Christos Stavrakakis | |
94 | 55775645 | Vangelis Koukis | |
95 | 55775645 | Vangelis Koukis | def main(): |
96 | c642d7cb | Christos Stavrakakis | from devflow.version import __version__ # pylint: disable=E0611,F0401 |
97 | 55775645 | Vangelis Koukis | parser = OptionParser(usage="usage: %prog [options] mode",
|
98 | 7316df0e | Christos Stavrakakis | version="devflow %s" % __version__,
|
99 | 7316df0e | Christos Stavrakakis | add_help_option=False)
|
100 | 7316df0e | Christos Stavrakakis | parser.add_option("-h", "--help", |
101 | 7316df0e | Christos Stavrakakis | action="store_true",
|
102 | 7316df0e | Christos Stavrakakis | default=False,
|
103 | 7316df0e | Christos Stavrakakis | help="show this help message")
|
104 | 55775645 | Vangelis Koukis | parser.add_option("-k", "--keep-repo", |
105 | 55775645 | Vangelis Koukis | action="store_true",
|
106 | 55775645 | Vangelis Koukis | dest="keep_repo",
|
107 | 55775645 | Vangelis Koukis | default=False,
|
108 | 55775645 | Vangelis Koukis | help="Do not delete the cloned repository")
|
109 | 55775645 | Vangelis Koukis | parser.add_option("-b", "--build-dir", |
110 | 55775645 | Vangelis Koukis | dest="build_dir",
|
111 | 55775645 | Vangelis Koukis | default=None,
|
112 | 55775645 | Vangelis Koukis | help="Directory to store created pacakges")
|
113 | 55775645 | Vangelis Koukis | parser.add_option("-r", "--repo-dir", |
114 | 55775645 | Vangelis Koukis | dest="repo_dir",
|
115 | 55775645 | Vangelis Koukis | default=None,
|
116 | 55775645 | Vangelis Koukis | help="Directory to clone repository")
|
117 | 55775645 | Vangelis Koukis | parser.add_option("-d", "--dirty", |
118 | 55775645 | Vangelis Koukis | dest="force_dirty",
|
119 | 55775645 | Vangelis Koukis | default=False,
|
120 | 55775645 | Vangelis Koukis | action="store_true",
|
121 | 55775645 | Vangelis Koukis | help="Do not check if working directory is dirty")
|
122 | b1aa3d49 | Christos Stavrakakis | parser.add_option("-c", "--config-file", |
123 | b1aa3d49 | Christos Stavrakakis | dest="config_file",
|
124 | b1aa3d49 | Christos Stavrakakis | help="Override default configuration file")
|
125 | c9c385c0 | Christos Stavrakakis | parser.add_option("--no-sign",
|
126 | c9c385c0 | Christos Stavrakakis | dest="sign",
|
127 | c9c385c0 | Christos Stavrakakis | action="store_false",
|
128 | c9c385c0 | Christos Stavrakakis | default=True,
|
129 | c9c385c0 | Christos Stavrakakis | help="Do not sign the packages")
|
130 | 4a8d727c | Christos Stavrakakis | parser.add_option("--key-id",
|
131 | 4a8d727c | Christos Stavrakakis | dest="keyid",
|
132 | 4a8d727c | Christos Stavrakakis | help="Use this keyid for gpg signing")
|
133 | d4b7f566 | Christos Stavrakakis | parser.add_option("--dist",
|
134 | d4b7f566 | Christos Stavrakakis | dest="dist",
|
135 | 42868817 | Christos Stavrakakis | default=None,
|
136 | 42868817 | Christos Stavrakakis | help="Force distribution in Debian changelog"),
|
137 | a09634f8 | Christos Stavrakakis | parser.add_option("-S", "--source-only", |
138 | a09634f8 | Christos Stavrakakis | dest="source_only",
|
139 | a09634f8 | Christos Stavrakakis | default=False,
|
140 | a09634f8 | Christos Stavrakakis | action="store_true",
|
141 | a09634f8 | Christos Stavrakakis | help="Specifies a source-only build, no binary packages"
|
142 | a09634f8 | Christos Stavrakakis | " need to be made.")
|
143 | 1296e42b | Christos Stavrakakis | parser.add_option("--debian-branch",
|
144 | 1296e42b | Christos Stavrakakis | dest="debian_branch",
|
145 | 1296e42b | Christos Stavrakakis | default=None,
|
146 | 1296e42b | Christos Stavrakakis | help="Use this debian branch, instead of"
|
147 | 1296e42b | Christos Stavrakakis | "auto-discovering the debian branch to use")
|
148 | 55775645 | Vangelis Koukis | |
149 | 55775645 | Vangelis Koukis | (options, args) = parser.parse_args() |
150 | 55775645 | Vangelis Koukis | |
151 | 7316df0e | Christos Stavrakakis | if options.help:
|
152 | 7316df0e | Christos Stavrakakis | print_help(parser.get_prog_name()) |
153 | 7316df0e | Christos Stavrakakis | parser.print_help() |
154 | 7316df0e | Christos Stavrakakis | return
|
155 | 7316df0e | Christos Stavrakakis | |
156 | b1aa3d49 | Christos Stavrakakis | # Get build mode
|
157 | 866bb9c1 | Christos Stavrakakis | try:
|
158 | 866bb9c1 | Christos Stavrakakis | mode = args[0]
|
159 | 866bb9c1 | Christos Stavrakakis | except IndexError: |
160 | c181882a | Christos Stavrakakis | mode = utils.get_build_mode() |
161 | 55775645 | Vangelis Koukis | if mode not in AVAILABLE_MODES: |
162 | 55775645 | Vangelis Koukis | raise ValueError(red("Invalid argument! Mode must be one: %s" |
163 | 55775645 | Vangelis Koukis | % ", ".join(AVAILABLE_MODES)))
|
164 | 55775645 | Vangelis Koukis | |
165 | b1aa3d49 | Christos Stavrakakis | # Load the repository
|
166 | 9fe1ecd8 | Christos Stavrakakis | original_repo = utils.get_repository() |
167 | 55775645 | Vangelis Koukis | |
168 | b1aa3d49 | Christos Stavrakakis | # Check that repository is clean
|
169 | 1e4d1435 | Christos Stavrakakis | toplevel = original_repo.working_dir |
170 | 55775645 | Vangelis Koukis | if original_repo.is_dirty() and not options.force_dirty: |
171 | 55775645 | Vangelis Koukis | raise RuntimeError(red("Repository %s is dirty." % toplevel)) |
172 | 55775645 | Vangelis Koukis | |
173 | b1aa3d49 | Christos Stavrakakis | # Get packages from configuration file
|
174 | ffcbf2bb | Christos Stavrakakis | config = utils.get_config(options.config_file) |
175 | bec4bf12 | Christos Stavrakakis | packages = config['packages'].keys()
|
176 | 8c028e36 | Christos Stavrakakis | print_green("Will build the following packages:\n" + "\n".join(packages)) |
177 | 55775645 | Vangelis Koukis | |
178 | 8c028e36 | Christos Stavrakakis | # Get current branch name and type and check if it is a valid one
|
179 | 9be34db8 | Christos Stavrakakis | branch = original_repo.head.reference.name |
180 | b78d6238 | Christos Stavrakakis | branch = utils.undebianize(branch) |
181 | 4f36685f | Christos Stavrakakis | branch_type_str = utils.get_branch_type(branch) |
182 | 55775645 | Vangelis Koukis | |
183 | 445f53a7 | Christos Stavrakakis | if branch_type_str not in BRANCH_TYPES.keys(): |
184 | 8c028e36 | Christos Stavrakakis | allowed_branches = ", ".join(BRANCH_TYPES.keys())
|
185 | 5a29a44e | Christos Stavrakakis | raise ValueError("Malformed branch name '%s', cannot classify as" |
186 | 5a29a44e | Christos Stavrakakis | " one of %s" % (branch, allowed_branches))
|
187 | 5a29a44e | Christos Stavrakakis | |
188 | b54fa347 | Christos Stavrakakis | # Fix needed environment variables
|
189 | 6b88d711 | Christos Stavrakakis | v = utils.get_vcs_info() |
190 | b54fa347 | Christos Stavrakakis | os.environ["DEVFLOW_BUILD_MODE"] = mode
|
191 | 6b88d711 | Christos Stavrakakis | os.environ["DEBFULLNAME"] = v.name
|
192 | 6b88d711 | Christos Stavrakakis | os.environ["DEBEMAIL"] = v.email
|
193 | b54fa347 | Christos Stavrakakis | |
194 | 4de00f9c | Christos Stavrakakis | # Check that base version file and branch are correct
|
195 | 4de00f9c | Christos Stavrakakis | versioning.get_python_version() |
196 | 4de00f9c | Christos Stavrakakis | |
197 | d0c4fc17 | Christos Stavrakakis | # Get the debian branch
|
198 | 1296e42b | Christos Stavrakakis | if options.debian_branch:
|
199 | 1296e42b | Christos Stavrakakis | debian_branch = options.debian_branch |
200 | 1296e42b | Christos Stavrakakis | else:
|
201 | 1296e42b | Christos Stavrakakis | debian_branch = utils.get_debian_branch(branch) |
202 | e727d1ba | Christos Stavrakakis | origin_debian = "origin/" + debian_branch
|
203 | 9be34db8 | Christos Stavrakakis | |
204 | 9be34db8 | Christos Stavrakakis | # Clone the repo
|
205 | 9be34db8 | Christos Stavrakakis | repo_dir = options.repo_dir or create_temp_directory("df-repo") |
206 | 5b60dcab | Christos Stavrakakis | repo_dir = os.path.abspath(repo_dir) |
207 | 2ec250c7 | Christos Stavrakakis | repo = original_repo.clone(repo_dir, branch=branch) |
208 | 9be34db8 | Christos Stavrakakis | print_green("Cloned repository to '%s'." % repo_dir)
|
209 | 8c028e36 | Christos Stavrakakis | |
210 | 5b60dcab | Christos Stavrakakis | build_dir = options.build_dir or create_temp_directory("df-build") |
211 | 5b60dcab | Christos Stavrakakis | build_dir = os.path.abspath(build_dir) |
212 | 5b60dcab | Christos Stavrakakis | print_green("Build directory: '%s'" % build_dir)
|
213 | 5b60dcab | Christos Stavrakakis | |
214 | 9be34db8 | Christos Stavrakakis | # Create the debian branch
|
215 | 8c028e36 | Christos Stavrakakis | repo.git.branch(debian_branch, origin_debian) |
216 | e727d1ba | Christos Stavrakakis | print_green("Created branch '%s' to track '%s'" % (debian_branch,
|
217 | e727d1ba | Christos Stavrakakis | origin_debian)) |
218 | 55775645 | Vangelis Koukis | |
219 | b1aa3d49 | Christos Stavrakakis | # Go to debian branch
|
220 | 55775645 | Vangelis Koukis | repo.git.checkout(debian_branch) |
221 | 55775645 | Vangelis Koukis | print_green("Changed to branch '%s'" % debian_branch)
|
222 | 55775645 | Vangelis Koukis | |
223 | b1aa3d49 | Christos Stavrakakis | # Merge with starting branch
|
224 | 55775645 | Vangelis Koukis | repo.git.merge(branch) |
225 | 8c028e36 | Christos Stavrakakis | print_green("Merged branch '%s' into '%s'" % (branch, debian_branch))
|
226 | 55775645 | Vangelis Koukis | |
227 | b1aa3d49 | Christos Stavrakakis | # Compute python and debian version
|
228 | 55775645 | Vangelis Koukis | cd(repo_dir) |
229 | e727d1ba | Christos Stavrakakis | python_version = versioning.get_python_version() |
230 | 7316df0e | Christos Stavrakakis | debian_version = versioning.\ |
231 | 2ec7054e | Christos Stavrakakis | debian_version_from_python_version(python_version) |
232 | 866bb9c1 | Christos Stavrakakis | print_green("The new debian version will be: '%s'" % debian_version)
|
233 | 55775645 | Vangelis Koukis | |
234 | 8334fb57 | Christos Stavrakakis | # Update the version files
|
235 | 0dcfcb5f | Christos Stavrakakis | versioning.update_version() |
236 | 8334fb57 | Christos Stavrakakis | |
237 | d3af231f | Christos Stavrakakis | |
238 | d3af231f | Christos Stavrakakis | if not options.sign: |
239 | d3af231f | Christos Stavrakakis | sign_tag_opt = None
|
240 | d3af231f | Christos Stavrakakis | elif options.keyid:
|
241 | d3af231f | Christos Stavrakakis | sign_tag_opt = "-u=%s" % options.keyid
|
242 | d3af231f | Christos Stavrakakis | elif mode == "release": |
243 | d3af231f | Christos Stavrakakis | sign_tag_opt = "-s"
|
244 | d3af231f | Christos Stavrakakis | else:
|
245 | d3af231f | Christos Stavrakakis | sign_tag_opt = None
|
246 | d3af231f | Christos Stavrakakis | |
247 | 8c028e36 | Christos Stavrakakis | # Tag branch with python version
|
248 | 8c028e36 | Christos Stavrakakis | branch_tag = python_version |
249 | d3af231f | Christos Stavrakakis | tag_message = "%s version %s" % (mode.capitalize(), python_version)
|
250 | 18be409c | Christos Stavrakakis | try:
|
251 | d3af231f | Christos Stavrakakis | repo.git.tag(branch_tag, branch, sign_tag_opt, "-m=%s" % tag_message)
|
252 | 18be409c | Christos Stavrakakis | except GitCommandError:
|
253 | 18be409c | Christos Stavrakakis | # Tag may already exist, if only the debian branch has changed
|
254 | 18be409c | Christos Stavrakakis | pass
|
255 | ce5f5240 | Christos Stavrakakis | upstream_tag = "upstream/" + branch_tag
|
256 | ce5f5240 | Christos Stavrakakis | repo.git.tag(upstream_tag, branch) |
257 | 8c028e36 | Christos Stavrakakis | |
258 | b1aa3d49 | Christos Stavrakakis | # Update changelog
|
259 | 55775645 | Vangelis Koukis | dch = git_dch("--debian-branch=%s" % debian_branch,
|
260 | 2ec7054e | Christos Stavrakakis | "--git-author",
|
261 | 2ec7054e | Christos Stavrakakis | "--ignore-regex=\".*\"",
|
262 | 2ec7054e | Christos Stavrakakis | "--multimaint-merge",
|
263 | 2ec7054e | Christos Stavrakakis | "--since=HEAD",
|
264 | 2ec7054e | Christos Stavrakakis | "--new-version=%s" % debian_version)
|
265 | 55775645 | Vangelis Koukis | print_green("Successfully ran '%s'" % " ".join(dch.cmd)) |
266 | 55775645 | Vangelis Koukis | |
267 | 42868817 | Christos Stavrakakis | if options.dist is not None: |
268 | 42868817 | Christos Stavrakakis | distribution = options.dist |
269 | 42868817 | Christos Stavrakakis | elif mode == "release": |
270 | 42868817 | Christos Stavrakakis | distribution = utils.get_distribution_codename() |
271 | 42868817 | Christos Stavrakakis | else:
|
272 | 42868817 | Christos Stavrakakis | distribution = "unstable"
|
273 | 42868817 | Christos Stavrakakis | |
274 | 42868817 | Christos Stavrakakis | f = open("debian/changelog", 'r+') |
275 | 42868817 | Christos Stavrakakis | lines = f.readlines() |
276 | 42868817 | Christos Stavrakakis | lines[0] = lines[0].replace("UNRELEASED", distribution) |
277 | 42868817 | Christos Stavrakakis | lines[2] = lines[2].replace("UNRELEASED", "%s build" % mode) |
278 | 42868817 | Christos Stavrakakis | f.seek(0)
|
279 | 42868817 | Christos Stavrakakis | f.writelines(lines) |
280 | 42868817 | Christos Stavrakakis | f.close() |
281 | 42868817 | Christos Stavrakakis | |
282 | 55775645 | Vangelis Koukis | if mode == "release": |
283 | 1b883fea | Christos Stavrakakis | call("vim debian/changelog")
|
284 | 8c028e36 | Christos Stavrakakis | |
285 | 8c028e36 | Christos Stavrakakis | # Add changelog to INDEX
|
286 | 8c028e36 | Christos Stavrakakis | repo.git.add("debian/changelog")
|
287 | 8c028e36 | Christos Stavrakakis | # Commit Changes
|
288 | 8c028e36 | Christos Stavrakakis | repo.git.commit("-s", "-a", m="Bump version to %s" % debian_version) |
289 | 8c028e36 | Christos Stavrakakis | # Tag debian branch
|
290 | 6e9193cb | Christos Stavrakakis | debian_branch_tag = "debian/" + utils.version_to_tag(debian_version)
|
291 | d3af231f | Christos Stavrakakis | tag_message = "%s version %s" % (mode.capitalize(), debian_version)
|
292 | 7fcadb0c | Christos Stavrakakis | if mode == "release": |
293 | d3af231f | Christos Stavrakakis | repo.git.tag(debian_branch_tag, sign_tag_opt, "-m=%s" % tag_message)
|
294 | 55775645 | Vangelis Koukis | |
295 | 55775645 | Vangelis Koukis | # Add version.py files to repo
|
296 | 1b883fea | Christos Stavrakakis | call("grep \"__version_vcs\" -r . -l -I | xargs git add -f")
|
297 | 55775645 | Vangelis Koukis | |
298 | 8c028e36 | Christos Stavrakakis | # Create debian packages
|
299 | 866bb9c1 | Christos Stavrakakis | cd(repo_dir) |
300 | 3a150e7c | Christos Stavrakakis | version_files = [] |
301 | 3a150e7c | Christos Stavrakakis | for _, pkg_info in config['packages'].items(): |
302 | 3a150e7c | Christos Stavrakakis | version_files.append(pkg_info['version_file'])
|
303 | 3a150e7c | Christos Stavrakakis | ignore_regexp = "|".join(["^(%s)$" % vf for vf in version_files]) |
304 | c9c385c0 | Christos Stavrakakis | build_cmd = "git-buildpackage --git-export-dir=%s"\
|
305 | c9c385c0 | Christos Stavrakakis | " --git-upstream-branch=%s --git-debian-branch=%s"\
|
306 | c9c385c0 | Christos Stavrakakis | " --git-export=INDEX --git-ignore-new -sa"\
|
307 | 8f939e17 | Christos Stavrakakis | " --source-option=--auto-commit"\
|
308 | 3a150e7c | Christos Stavrakakis | " --git-upstream-tag=%s"\
|
309 | 8f939e17 | Christos Stavrakakis | % (build_dir, branch, debian_branch, upstream_tag) |
310 | a09634f8 | Christos Stavrakakis | if options.source_only:
|
311 | a09634f8 | Christos Stavrakakis | build_cmd += " -S"
|
312 | c9c385c0 | Christos Stavrakakis | if not options.sign: |
313 | c9c385c0 | Christos Stavrakakis | build_cmd += " -uc -us"
|
314 | 4a8d727c | Christos Stavrakakis | elif options.keyid:
|
315 | 4a8d727c | Christos Stavrakakis | build_cmd += " -k\"'%s'\"" % options.keyid
|
316 | c9c385c0 | Christos Stavrakakis | call(build_cmd) |
317 | 55775645 | Vangelis Koukis | |
318 | b1aa3d49 | Christos Stavrakakis | # Remove cloned repo
|
319 | f80b3f6a | Christos Stavrakakis | if mode != 'release' and not options.keep_repo: |
320 | 55775645 | Vangelis Koukis | print_green("Removing cloned repo '%s'." % repo_dir)
|
321 | 55775645 | Vangelis Koukis | rm("-r", repo_dir)
|
322 | 55775645 | Vangelis Koukis | |
323 | 8c028e36 | Christos Stavrakakis | # Print final info
|
324 | 8c028e36 | Christos Stavrakakis | info = (("Version", debian_version),
|
325 | 8c028e36 | Christos Stavrakakis | ("Upstream branch", branch),
|
326 | 8c028e36 | Christos Stavrakakis | ("Upstream tag", branch_tag),
|
327 | 8c028e36 | Christos Stavrakakis | ("Debian branch", debian_branch),
|
328 | 8c028e36 | Christos Stavrakakis | ("Debian tag", debian_branch_tag),
|
329 | 8c028e36 | Christos Stavrakakis | ("Repository directory", repo_dir),
|
330 | 8c028e36 | Christos Stavrakakis | ("Packages directory", build_dir))
|
331 | 8c028e36 | Christos Stavrakakis | print_green("\n".join(["%s: %s" % (name, val) for name, val in info])) |
332 | 866bb9c1 | Christos Stavrakakis | |
333 | b1aa3d49 | Christos Stavrakakis | # Print help message
|
334 | 866bb9c1 | Christos Stavrakakis | if mode == "release": |
335 | 8c028e36 | Christos Stavrakakis | origin = original_repo.remote().url |
336 | 8c028e36 | Christos Stavrakakis | repo.create_remote("original_origin", origin)
|
337 | 8c028e36 | Christos Stavrakakis | print_green("Created remote 'original_origin' for the repository '%s'"
|
338 | 8c028e36 | Christos Stavrakakis | % origin) |
339 | 866bb9c1 | Christos Stavrakakis | |
340 | 8c028e36 | Christos Stavrakakis | print_green("To update repositories '%s' and '%s' go to '%s' and run:"
|
341 | 8c028e36 | Christos Stavrakakis | % (toplevel, origin, repo_dir)) |
342 | 8c028e36 | Christos Stavrakakis | for remote in ['origin', 'original_origin']: |
343 | 8c2716c5 | Christos Stavrakakis | objects = [debian_branch, branch_tag, debian_branch_tag] |
344 | 8c2716c5 | Christos Stavrakakis | print_green("git push %s %s" % (remote, " ".join(objects))) |
345 | 866bb9c1 | Christos Stavrakakis | |
346 | 866bb9c1 | Christos Stavrakakis | |
347 | ca01e50e | Christos Stavrakakis | def create_temp_directory(suffix): |
348 | ca01e50e | Christos Stavrakakis | create_dir_cmd = mktemp("-d", "/tmp/" + suffix + "-XXXXX") |
349 | ca01e50e | Christos Stavrakakis | return create_dir_cmd.stdout.strip()
|
350 | 55775645 | Vangelis Koukis | |
351 | 55775645 | Vangelis Koukis | |
352 | 1b883fea | Christos Stavrakakis | def call(cmd): |
353 | 1b883fea | Christos Stavrakakis | rc = os.system(cmd) |
354 | 1b883fea | Christos Stavrakakis | if rc:
|
355 | 06dcdc1b | Christos Stavrakakis | raise RuntimeError("Command '%s' failed!" % cmd) |
356 | b1aa3d49 | Christos Stavrakakis | |
357 | b1aa3d49 | Christos Stavrakakis | |
358 | 55775645 | Vangelis Koukis | if __name__ == "__main__": |
359 | 55775645 | Vangelis Koukis | sys.exit(main()) |