3
# to release, this script follows these steps:
4
# change version in const.py
5
# make sure gtkexcepthook is imported in epidermis.py and creator.py
6
# make sure const.DEBUG is False
7
# make sure debian/changelog is correct
8
# make sure CHANGELOG.txt is correct
10
# sign the .deb and the .tar.gz
11
# create release using this script, use changelog from CHANGELOG.txt
13
# add .tar.gz then .deb to downloads for release
16
# dput epidermis epidermis_*changes
18
from launchpadlib.launchpad import Launchpad, STAGING_SERVICE_ROOT, OAUTH_REALM
22
cachedir = os.path.expanduser("~/.cache/launchpadlib")
23
ppa = "epidermis" # for dput
26
from launchpadlib.credentials import Credentials
32
# edit const.py VERSION
33
root = os.path.dirname(os.path.dirname(os.path.abspath(os.path.realpath(__file__))))
34
ff = open(os.path.join(root,"epidermis/const.py"),"r")
37
for line in ff.readlines():
38
if line.strip().replace(" ","")[:8] == "VERSION=":
39
if line.split("=")[1].strip() == "\"%s\"" % new_version:
42
output += "VERSION = \"%s\"\n" % new_version
43
elif line[:6] == "DEBUG=":
44
if line.split("=")[1].strip()[:5] != "False":
45
print >> sys.stderr, "const.py DEBUG does not equal False, exiting"
53
ff = open(os.path.join(root,"epidermis/const.py"),"w")
57
# make sure gtkexcepthook is imported in epidermis.py and creator.py
58
for filename in ("epidermis.py","creator.py"):
59
ff = open(os.path.join(root,"epidermis/%s"% filename),"r")
61
for line in ff.readlines():
62
if line.strip()[:20] == "import gtkexcepthook":
66
print >> sys.stderr, "import gtkexcepthook not found in %s, exiting" % filename
70
# make sure debian/changelog is correct
71
ff = open(os.path.join(root,"debian/changelog"),"r")
72
line = ff.readlines()[0]
73
deb_version = line.split("(")[1].split(")")[0]
74
if deb_version.split("-")[0] != new_version:
75
print >> sys.stderr, "debian/changelog version is not correct, exiting"
79
# also, cache it, it will be added to the release
80
ff = open(os.path.join(root,"CHANGELOG.txt"),"r")
81
line = ff.readlines()[0]
82
if line.strip() != new_version + ":":
83
print >> sys.stderr, "CHANGELOG.txt has wrong version number, exiting"
87
for line in ff.readlines()[1:]:
89
if line.strip() == "":
94
rr = subprocess.call(["bzr","builddeb"],cwd=root)
96
print >> sys.stderr, "builddeb failed"
99
# sign the .deb and the .tar.gz
100
rr = subprocess.call("rm *.asc",shell=True,cwd=os.path.dirname(root))
101
rr = subprocess.call(["gpg","--armor","--sign","--detach-sig","epidermis_%s_all.deb" % deb_version],cwd=os.path.dirname(root))
102
rr += subprocess.call(["gpg","--armor","--sign","--detach-sig","epidermis_%s.tar.gz" % deb_version],cwd=os.path.dirname(root))
104
print >> sys.stderr, "gpg failed"
107
# log in to Launchpad
108
if os.path.exists(os.path.expanduser("~/launchpadcreds.txt")):
109
credentials = Credentials()
110
credentials.load(open(os.path.expanduser("~/launchpadcreds.txt")))
111
launchpad = Launchpad(credentials, realm, cachedir)
113
launchpad = Launchpad.get_token_and_login('Epidermis script', realm, cachedir)
114
launchpad.credentials.save(file(os.path.expanduser("~/launchpadcreds.txt"), "w"))
116
# find correct Launchpad milestone
117
ep = launchpad.projects['epidermis']
118
milestones = ep.all_milestones
119
release_milestone = None
120
for milestone in milestones:
121
if milestone.name == new_version:
122
release_milestone = milestone
125
if release_milestone is None:
126
print >> sys.stderr, "cannot find launchpad milestone: %s, exiting" % new_version
129
# ask for release summary
132
win.set_title("Summary")
133
win.set_default_size(300,400)
135
vbox.set_homogeneous(False)
136
scr = gtk.ScrolledWindow()
137
textbox = gtk.TextView()
138
textbox.set_wrap_mode(gtk.WRAP_WORD)
139
button = gtk.Button()
140
button.set_label("OK")
144
button.connect("clicked",hm)
145
win.connect("destroy",lambda aa:sys.exit())
148
vbox.pack_start(scr,True,True)
149
vbox.pack_start(button,False,False)
152
print "window closed"
154
buff = textbox.get_buffer()
155
description = buff.get_text(buff.get_start_iter(),buff.get_end_iter())
157
# find correct Launchpad release, or create it
158
today = datetime.datetime.today()
160
release = release_milestone.createProductRelease(date_released=today, changelog=changelog,\
161
release_notes=description)
163
release = release_milestone.release
165
# upload source tarball and .deb file
166
print "If you receive an UTF8 error, you need to update launchpadlib to 1.5.1"
167
release.add_file(content_type="application/x-gzip", description="Source code",\
168
file_content=open(os.path.join(os.path.dirname(root),"epidermis_%s.tar.gz" % deb_version),"rb").read(), \
169
file_type="Code Release Tarball", filename="epidermis_%s.tar.gz" % deb_version, \
170
signature_content=open(os.path.join(os.path.dirname(root),"epidermis_%s.tar.gz.asc" % deb_version),"r").read(),\
171
signature_filename="epidermis_%s.tar.gz.asc" % deb_version)
172
release.add_file(content_type="application/x-debian-package", description="Debian package for Ubuntu",\
173
file_content=open(os.path.join(os.path.dirname(root),"epidermis_%s_all.deb" % deb_version),"r").read(),
174
file_type="Installer file", filename="epidermis_%s_all.deb" % deb_version,
175
signature_content=open(os.path.join(os.path.dirname(root),"epidermis_%s_all.deb.asc" % deb_version),"r").read(),\
176
signature_filename="epidermis_%s_all.deb.asc" % deb_version)
179
print "saving changes"
182
# prepare packages for PPA
183
rr = subprocess.call("rm -f epidermis_*",shell=True,cwd=os.path.dirname(root))
184
rr += subprocess.call(["bzr","builddeb","-S"],cwd=root)
186
print >> sys.stderr, "bzr builddeb -S failed. exiting"
188
print "epidermis_%s_source.changes" % deb_version
190
rr = subprocess.call(["dput", ppa ,"epidermis_%s_source.changes" % deb_version],cwd=os.path.dirname(root))
194
print "Now announce it on your website!"