root / devflow / autopkg.py @ 4909cbc9
History | View | Annotate | Download (13.3 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 | 595d480a | 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 | 938a4739 | Christos Stavrakakis | parser.add_option("--push-back",
|
149 | 938a4739 | Christos Stavrakakis | dest="push_back",
|
150 | 938a4739 | Christos Stavrakakis | default=False,
|
151 | 938a4739 | Christos Stavrakakis | action="store_true",
|
152 | 938a4739 | Christos Stavrakakis | help="Automatically push branches and tags to repo.")
|
153 | 55775645 | Vangelis Koukis | |
154 | 55775645 | Vangelis Koukis | (options, args) = parser.parse_args() |
155 | 55775645 | Vangelis Koukis | |
156 | 7316df0e | Christos Stavrakakis | if options.help:
|
157 | 7316df0e | Christos Stavrakakis | print_help(parser.get_prog_name()) |
158 | 7316df0e | Christos Stavrakakis | parser.print_help() |
159 | 7316df0e | Christos Stavrakakis | return
|
160 | 7316df0e | Christos Stavrakakis | |
161 | b1aa3d49 | Christos Stavrakakis | # Get build mode
|
162 | 866bb9c1 | Christos Stavrakakis | try:
|
163 | 866bb9c1 | Christos Stavrakakis | mode = args[0]
|
164 | 866bb9c1 | Christos Stavrakakis | except IndexError: |
165 | c181882a | Christos Stavrakakis | mode = utils.get_build_mode() |
166 | 55775645 | Vangelis Koukis | if mode not in AVAILABLE_MODES: |
167 | 55775645 | Vangelis Koukis | raise ValueError(red("Invalid argument! Mode must be one: %s" |
168 | 55775645 | Vangelis Koukis | % ", ".join(AVAILABLE_MODES)))
|
169 | 55775645 | Vangelis Koukis | |
170 | b1aa3d49 | Christos Stavrakakis | # Load the repository
|
171 | 9fe1ecd8 | Christos Stavrakakis | original_repo = utils.get_repository() |
172 | 55775645 | Vangelis Koukis | |
173 | b1aa3d49 | Christos Stavrakakis | # Check that repository is clean
|
174 | 1e4d1435 | Christos Stavrakakis | toplevel = original_repo.working_dir |
175 | 55775645 | Vangelis Koukis | if original_repo.is_dirty() and not options.force_dirty: |
176 | 55775645 | Vangelis Koukis | raise RuntimeError(red("Repository %s is dirty." % toplevel)) |
177 | 55775645 | Vangelis Koukis | |
178 | b1aa3d49 | Christos Stavrakakis | # Get packages from configuration file
|
179 | ffcbf2bb | Christos Stavrakakis | config = utils.get_config(options.config_file) |
180 | bec4bf12 | Christos Stavrakakis | packages = config['packages'].keys()
|
181 | 8c028e36 | Christos Stavrakakis | print_green("Will build the following packages:\n" + "\n".join(packages)) |
182 | 55775645 | Vangelis Koukis | |
183 | 8c028e36 | Christos Stavrakakis | # Get current branch name and type and check if it is a valid one
|
184 | 9be34db8 | Christos Stavrakakis | branch = original_repo.head.reference.name |
185 | b78d6238 | Christos Stavrakakis | branch = utils.undebianize(branch) |
186 | 4f36685f | Christos Stavrakakis | branch_type_str = utils.get_branch_type(branch) |
187 | 55775645 | Vangelis Koukis | |
188 | 445f53a7 | Christos Stavrakakis | if branch_type_str not in BRANCH_TYPES.keys(): |
189 | 8c028e36 | Christos Stavrakakis | allowed_branches = ", ".join(BRANCH_TYPES.keys())
|
190 | 5a29a44e | Christos Stavrakakis | raise ValueError("Malformed branch name '%s', cannot classify as" |
191 | 5a29a44e | Christos Stavrakakis | " one of %s" % (branch, allowed_branches))
|
192 | 5a29a44e | Christos Stavrakakis | |
193 | b54fa347 | Christos Stavrakakis | # Fix needed environment variables
|
194 | 6b88d711 | Christos Stavrakakis | v = utils.get_vcs_info() |
195 | b54fa347 | Christos Stavrakakis | os.environ["DEVFLOW_BUILD_MODE"] = mode
|
196 | 6b88d711 | Christos Stavrakakis | os.environ["DEBFULLNAME"] = v.name
|
197 | 6b88d711 | Christos Stavrakakis | os.environ["DEBEMAIL"] = v.email
|
198 | b54fa347 | Christos Stavrakakis | |
199 | 4de00f9c | Christos Stavrakakis | # Check that base version file and branch are correct
|
200 | 4de00f9c | Christos Stavrakakis | versioning.get_python_version() |
201 | 4de00f9c | Christos Stavrakakis | |
202 | d0c4fc17 | Christos Stavrakakis | # Get the debian branch
|
203 | 1296e42b | Christos Stavrakakis | if options.debian_branch:
|
204 | 1296e42b | Christos Stavrakakis | debian_branch = options.debian_branch |
205 | 1296e42b | Christos Stavrakakis | else:
|
206 | 1296e42b | Christos Stavrakakis | debian_branch = utils.get_debian_branch(branch) |
207 | e727d1ba | Christos Stavrakakis | origin_debian = "origin/" + debian_branch
|
208 | 9be34db8 | Christos Stavrakakis | |
209 | 9be34db8 | Christos Stavrakakis | # Clone the repo
|
210 | 9be34db8 | Christos Stavrakakis | repo_dir = options.repo_dir or create_temp_directory("df-repo") |
211 | 5b60dcab | Christos Stavrakakis | repo_dir = os.path.abspath(repo_dir) |
212 | 2ec250c7 | Christos Stavrakakis | repo = original_repo.clone(repo_dir, branch=branch) |
213 | 9be34db8 | Christos Stavrakakis | print_green("Cloned repository to '%s'." % repo_dir)
|
214 | 8c028e36 | Christos Stavrakakis | |
215 | 5b60dcab | Christos Stavrakakis | build_dir = options.build_dir or create_temp_directory("df-build") |
216 | 5b60dcab | Christos Stavrakakis | build_dir = os.path.abspath(build_dir) |
217 | 5b60dcab | Christos Stavrakakis | print_green("Build directory: '%s'" % build_dir)
|
218 | 5b60dcab | Christos Stavrakakis | |
219 | 9be34db8 | Christos Stavrakakis | # Create the debian branch
|
220 | 8c028e36 | Christos Stavrakakis | repo.git.branch(debian_branch, origin_debian) |
221 | e727d1ba | Christos Stavrakakis | print_green("Created branch '%s' to track '%s'" % (debian_branch,
|
222 | e727d1ba | Christos Stavrakakis | origin_debian)) |
223 | 55775645 | Vangelis Koukis | |
224 | b1aa3d49 | Christos Stavrakakis | # Go to debian branch
|
225 | 55775645 | Vangelis Koukis | repo.git.checkout(debian_branch) |
226 | 55775645 | Vangelis Koukis | print_green("Changed to branch '%s'" % debian_branch)
|
227 | 55775645 | Vangelis Koukis | |
228 | b1aa3d49 | Christos Stavrakakis | # Merge with starting branch
|
229 | 55775645 | Vangelis Koukis | repo.git.merge(branch) |
230 | 8c028e36 | Christos Stavrakakis | print_green("Merged branch '%s' into '%s'" % (branch, debian_branch))
|
231 | 55775645 | Vangelis Koukis | |
232 | b1aa3d49 | Christos Stavrakakis | # Compute python and debian version
|
233 | 55775645 | Vangelis Koukis | cd(repo_dir) |
234 | e727d1ba | Christos Stavrakakis | python_version = versioning.get_python_version() |
235 | 7316df0e | Christos Stavrakakis | debian_version = versioning.\ |
236 | 2ec7054e | Christos Stavrakakis | debian_version_from_python_version(python_version) |
237 | 866bb9c1 | Christos Stavrakakis | print_green("The new debian version will be: '%s'" % debian_version)
|
238 | 55775645 | Vangelis Koukis | |
239 | 8334fb57 | Christos Stavrakakis | # Update the version files
|
240 | 0dcfcb5f | Christos Stavrakakis | versioning.update_version() |
241 | 8334fb57 | Christos Stavrakakis | |
242 | d3af231f | Christos Stavrakakis | if not options.sign: |
243 | d3af231f | Christos Stavrakakis | sign_tag_opt = None
|
244 | d3af231f | Christos Stavrakakis | elif options.keyid:
|
245 | d3af231f | Christos Stavrakakis | sign_tag_opt = "-u=%s" % options.keyid
|
246 | d3af231f | Christos Stavrakakis | elif mode == "release": |
247 | d3af231f | Christos Stavrakakis | sign_tag_opt = "-s"
|
248 | d3af231f | Christos Stavrakakis | else:
|
249 | d3af231f | Christos Stavrakakis | sign_tag_opt = None
|
250 | d3af231f | Christos Stavrakakis | |
251 | 8c028e36 | Christos Stavrakakis | # Tag branch with python version
|
252 | 8c028e36 | Christos Stavrakakis | branch_tag = python_version |
253 | d3af231f | Christos Stavrakakis | tag_message = "%s version %s" % (mode.capitalize(), python_version)
|
254 | 18be409c | Christos Stavrakakis | try:
|
255 | d3af231f | Christos Stavrakakis | repo.git.tag(branch_tag, branch, sign_tag_opt, "-m=%s" % tag_message)
|
256 | 18be409c | Christos Stavrakakis | except GitCommandError:
|
257 | 18be409c | Christos Stavrakakis | # Tag may already exist, if only the debian branch has changed
|
258 | 18be409c | Christos Stavrakakis | pass
|
259 | ce5f5240 | Christos Stavrakakis | upstream_tag = "upstream/" + branch_tag
|
260 | ce5f5240 | Christos Stavrakakis | repo.git.tag(upstream_tag, branch) |
261 | 8c028e36 | Christos Stavrakakis | |
262 | b1aa3d49 | Christos Stavrakakis | # Update changelog
|
263 | 55775645 | Vangelis Koukis | dch = git_dch("--debian-branch=%s" % debian_branch,
|
264 | 2ec7054e | Christos Stavrakakis | "--git-author",
|
265 | 2ec7054e | Christos Stavrakakis | "--ignore-regex=\".*\"",
|
266 | 2ec7054e | Christos Stavrakakis | "--multimaint-merge",
|
267 | 2ec7054e | Christos Stavrakakis | "--since=HEAD",
|
268 | 2ec7054e | Christos Stavrakakis | "--new-version=%s" % debian_version)
|
269 | 55775645 | Vangelis Koukis | print_green("Successfully ran '%s'" % " ".join(dch.cmd)) |
270 | 55775645 | Vangelis Koukis | |
271 | 42868817 | Christos Stavrakakis | if options.dist is not None: |
272 | 42868817 | Christos Stavrakakis | distribution = options.dist |
273 | 42868817 | Christos Stavrakakis | elif mode == "release": |
274 | 42868817 | Christos Stavrakakis | distribution = utils.get_distribution_codename() |
275 | 42868817 | Christos Stavrakakis | else:
|
276 | 42868817 | Christos Stavrakakis | distribution = "unstable"
|
277 | 42868817 | Christos Stavrakakis | |
278 | 42868817 | Christos Stavrakakis | f = open("debian/changelog", 'r+') |
279 | 42868817 | Christos Stavrakakis | lines = f.readlines() |
280 | 42868817 | Christos Stavrakakis | lines[0] = lines[0].replace("UNRELEASED", distribution) |
281 | 42868817 | Christos Stavrakakis | lines[2] = lines[2].replace("UNRELEASED", "%s build" % mode) |
282 | 42868817 | Christos Stavrakakis | f.seek(0)
|
283 | 42868817 | Christos Stavrakakis | f.writelines(lines) |
284 | 42868817 | Christos Stavrakakis | f.close() |
285 | 42868817 | Christos Stavrakakis | |
286 | 55775645 | Vangelis Koukis | if mode == "release": |
287 | 1b883fea | Christos Stavrakakis | call("vim debian/changelog")
|
288 | 8c028e36 | Christos Stavrakakis | |
289 | 8c028e36 | Christos Stavrakakis | # Add changelog to INDEX
|
290 | 8c028e36 | Christos Stavrakakis | repo.git.add("debian/changelog")
|
291 | 8c028e36 | Christos Stavrakakis | # Commit Changes
|
292 | 4909cbc9 | Christos Stavrakakis | repo.git.commit("-s", "debian/changelog", |
293 | 4909cbc9 | Christos Stavrakakis | m="Bump version to %s" % debian_version)
|
294 | 8c028e36 | Christos Stavrakakis | # Tag debian branch
|
295 | 6e9193cb | Christos Stavrakakis | debian_branch_tag = "debian/" + utils.version_to_tag(debian_version)
|
296 | d3af231f | Christos Stavrakakis | tag_message = "%s version %s" % (mode.capitalize(), debian_version)
|
297 | 7fcadb0c | Christos Stavrakakis | if mode == "release": |
298 | d3af231f | Christos Stavrakakis | repo.git.tag(debian_branch_tag, sign_tag_opt, "-m=%s" % tag_message)
|
299 | 55775645 | Vangelis Koukis | |
300 | 55775645 | Vangelis Koukis | # Add version.py files to repo
|
301 | 1b883fea | Christos Stavrakakis | call("grep \"__version_vcs\" -r . -l -I | xargs git add -f")
|
302 | 55775645 | Vangelis Koukis | |
303 | 8c028e36 | Christos Stavrakakis | # Create debian packages
|
304 | 866bb9c1 | Christos Stavrakakis | cd(repo_dir) |
305 | 3a150e7c | Christos Stavrakakis | version_files = [] |
306 | 3a150e7c | Christos Stavrakakis | for _, pkg_info in config['packages'].items(): |
307 | 3a150e7c | Christos Stavrakakis | version_files.append(pkg_info['version_file'])
|
308 | c13bf70a | Christos Stavrakakis | # Export version info to debuilg environment
|
309 | c13bf70a | Christos Stavrakakis | os.environ["DEB_DEVFLOW_DEBIAN_VERSION"] = debian_version
|
310 | c9c385c0 | Christos Stavrakakis | build_cmd = "git-buildpackage --git-export-dir=%s"\
|
311 | c9c385c0 | Christos Stavrakakis | " --git-upstream-branch=%s --git-debian-branch=%s"\
|
312 | c9c385c0 | Christos Stavrakakis | " --git-export=INDEX --git-ignore-new -sa"\
|
313 | 8f939e17 | Christos Stavrakakis | " --source-option=--auto-commit"\
|
314 | 3a150e7c | Christos Stavrakakis | " --git-upstream-tag=%s"\
|
315 | 8f939e17 | Christos Stavrakakis | % (build_dir, branch, debian_branch, upstream_tag) |
316 | a09634f8 | Christos Stavrakakis | if options.source_only:
|
317 | a09634f8 | Christos Stavrakakis | build_cmd += " -S"
|
318 | c9c385c0 | Christos Stavrakakis | if not options.sign: |
319 | c9c385c0 | Christos Stavrakakis | build_cmd += " -uc -us"
|
320 | 4a8d727c | Christos Stavrakakis | elif options.keyid:
|
321 | 4a8d727c | Christos Stavrakakis | build_cmd += " -k\"'%s'\"" % options.keyid
|
322 | c9c385c0 | Christos Stavrakakis | call(build_cmd) |
323 | 55775645 | Vangelis Koukis | |
324 | b1aa3d49 | Christos Stavrakakis | # Remove cloned repo
|
325 | f80b3f6a | Christos Stavrakakis | if mode != 'release' and not options.keep_repo: |
326 | 55775645 | Vangelis Koukis | print_green("Removing cloned repo '%s'." % repo_dir)
|
327 | 55775645 | Vangelis Koukis | rm("-r", repo_dir)
|
328 | 55775645 | Vangelis Koukis | |
329 | 8c028e36 | Christos Stavrakakis | # Print final info
|
330 | 8c028e36 | Christos Stavrakakis | info = (("Version", debian_version),
|
331 | 8c028e36 | Christos Stavrakakis | ("Upstream branch", branch),
|
332 | 8c028e36 | Christos Stavrakakis | ("Upstream tag", branch_tag),
|
333 | 8c028e36 | Christos Stavrakakis | ("Debian branch", debian_branch),
|
334 | 8c028e36 | Christos Stavrakakis | ("Debian tag", debian_branch_tag),
|
335 | 8c028e36 | Christos Stavrakakis | ("Repository directory", repo_dir),
|
336 | 8c028e36 | Christos Stavrakakis | ("Packages directory", build_dir))
|
337 | 8c028e36 | Christos Stavrakakis | print_green("\n".join(["%s: %s" % (name, val) for name, val in info])) |
338 | 866bb9c1 | Christos Stavrakakis | |
339 | b1aa3d49 | Christos Stavrakakis | # Print help message
|
340 | 866bb9c1 | Christos Stavrakakis | if mode == "release": |
341 | 8c028e36 | Christos Stavrakakis | origin = original_repo.remote().url |
342 | 8c028e36 | Christos Stavrakakis | repo.create_remote("original_origin", origin)
|
343 | 8c028e36 | Christos Stavrakakis | print_green("Created remote 'original_origin' for the repository '%s'"
|
344 | 8c028e36 | Christos Stavrakakis | % origin) |
345 | 866bb9c1 | Christos Stavrakakis | |
346 | 8c028e36 | Christos Stavrakakis | print_green("To update repositories '%s' and '%s' go to '%s' and run:"
|
347 | 8c028e36 | Christos Stavrakakis | % (toplevel, origin, repo_dir)) |
348 | 8c028e36 | Christos Stavrakakis | for remote in ['origin', 'original_origin']: |
349 | 8c2716c5 | Christos Stavrakakis | objects = [debian_branch, branch_tag, debian_branch_tag] |
350 | 8c2716c5 | Christos Stavrakakis | print_green("git push %s %s" % (remote, " ".join(objects))) |
351 | 938a4739 | Christos Stavrakakis | if options.push_back:
|
352 | 938a4739 | Christos Stavrakakis | objects = [debian_branch, branch_tag, debian_branch_tag] |
353 | 938a4739 | Christos Stavrakakis | repo.git.push("origin", *objects)
|
354 | 938a4739 | Christos Stavrakakis | print_green("Automatically updated origin repo.")
|
355 | 866bb9c1 | Christos Stavrakakis | |
356 | 866bb9c1 | Christos Stavrakakis | |
357 | ca01e50e | Christos Stavrakakis | def create_temp_directory(suffix): |
358 | ca01e50e | Christos Stavrakakis | create_dir_cmd = mktemp("-d", "/tmp/" + suffix + "-XXXXX") |
359 | ca01e50e | Christos Stavrakakis | return create_dir_cmd.stdout.strip()
|
360 | 55775645 | Vangelis Koukis | |
361 | 55775645 | Vangelis Koukis | |
362 | 1b883fea | Christos Stavrakakis | def call(cmd): |
363 | 1b883fea | Christos Stavrakakis | rc = os.system(cmd) |
364 | 1b883fea | Christos Stavrakakis | if rc:
|
365 | 06dcdc1b | Christos Stavrakakis | raise RuntimeError("Command '%s' failed!" % cmd) |
366 | b1aa3d49 | Christos Stavrakakis | |
367 | b1aa3d49 | Christos Stavrakakis | |
368 | 55775645 | Vangelis Koukis | if __name__ == "__main__": |
369 | 55775645 | Vangelis Koukis | sys.exit(main()) |