[cig-commits] r7409 - in cs/buildbot/trunk/buildbot: . scripts
leif at geodynamics.org
leif at geodynamics.org
Fri Jun 22 20:13:18 PDT 2007
Author: leif
Date: 2007-06-22 20:13:18 -0700 (Fri, 22 Jun 2007)
New Revision: 7409
Modified:
cs/buildbot/trunk/buildbot/config.py
cs/buildbot/trunk/buildbot/meta.py
cs/buildbot/trunk/buildbot/scripts/packager.py
cs/buildbot/trunk/buildbot/scripts/shipper.py
Log:
Wrote Windows packaging stuff (not tested).
Modified: cs/buildbot/trunk/buildbot/config.py
===================================================================
--- cs/buildbot/trunk/buildbot/config.py 2007-06-23 02:25:37 UTC (rev 7408)
+++ cs/buildbot/trunk/buildbot/config.py 2007-06-23 03:13:18 UTC (rev 7409)
@@ -50,7 +50,7 @@
from buildbot.steps.shell import WithProperties
buildnumber = WithProperties("%d", "buildnumber")
- revision = WithProperties("%s", "revision")
+ revision = WithProperties("%d", "revision")
steps = [
s(step.ShellCommand,
Modified: cs/buildbot/trunk/buildbot/meta.py
===================================================================
--- cs/buildbot/trunk/buildbot/meta.py 2007-06-23 02:25:37 UTC (rev 7408)
+++ cs/buildbot/trunk/buildbot/meta.py 2007-06-23 03:13:18 UTC (rev 7409)
@@ -7,7 +7,7 @@
class Packaging(object):
_name = 'packaging'
- _attrs = ['directories', 'programs', 'scripts', 'libraries', 'python']
+ _attrs = ['directories', 'programs', 'scripts', 'libraries', 'python', 'urls']
class Config(object):
Modified: cs/buildbot/trunk/buildbot/scripts/packager.py
===================================================================
--- cs/buildbot/trunk/buildbot/scripts/packager.py 2007-06-23 02:25:37 UTC (rev 7408)
+++ cs/buildbot/trunk/buildbot/scripts/packager.py 2007-06-23 03:13:18 UTC (rev 7409)
@@ -1,12 +1,227 @@
import os, sys, platform
+from popen2 import Popen4
from buildbot.meta import Config, getPackageAndVersion
+def pairUp(l):
+ pairs = []
+ i = iter(l)
+ try:
+ while True:
+ x = i.next()
+ y = i.next()
+ pairs.append((x, y))
+ except StopIteration:
+ pass
+ return pairs
+
+
+def spawn(**cmd):
+ print ' '.join(cmd)
+ child = Popen4(cmd)
+
+ child.tochild.close()
+
+ output = [line.rstrip() for line in child.fromchild]
+ status = child.wait()
+
+ exitStatus = None
+ if (os.WIFSIGNALED(status)):
+ statusStr = "signal %d" % os.WTERMSIG(status)
+ elif (os.WIFEXITED(status)):
+ exitStatus = os.WEXITSTATUS(status)
+ statusStr = "exit %d" % exitStatus
+ else:
+ statusStr = "status %d" % status
+ print "%s: %s" % (cmd[0], statusStr)
+
+ return output
+
+
+def cygpath(*args):
+ output = spawn("cygpath", *args)
+ return output[0]
+
+
+def generateBashrc(prefix, package, info):
+ bashrc = "." package.lower() + "rc"
+ s = open(prefix + "/" + bashrc, "w")
+
+ bashrc = {
+ "line": "-" * len(info["AppVerName"]),
+ }
+ bashrc.update(info)
+
+ s.write(
+"""
+
+export PATH=/bin:$PATH
+
+echo %(line)s
+echo %(AppVerName)s
+echo %(line)s
+
+PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
+""" % bashrc
+ )
+
+ return bashrc
+
+
+def generateISS(info, config, bashrc, python):
+ s = open("buildbot.iss", "w")
+
+
+ # [Setup]
+ s.write(
+"""
+; Inno Setup Script generated by BuildBot
+
+[Setup]
+AppName=%(AppName)s
+AppVerName=%(AppVerName)s
+AppPublisher=Computational Infrastructure for Geodynamics
+AppPublisherURL=http://www.geodynamics.org/
+AppSupportURL=http://www.geodynamics.org/
+AppUpdatesURL=http://www.geodynamics.org/
+DefaultDirName={pf}\\%(AppName)s
+DefaultGroupName=%(AppName)s
+SourceDir=%(SourceDir)s
+
+""" % info
+ )
+
+
+ # [Tasks]
+ s.write(
+"""
+[Tasks]
+Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"
+
+""")
+
+
+ # [Files]
+ # NOTE: Don't use "Flags: ignoreversion" on any shared system files
+ s.write(
+"""
+[Files]
+"""
+ )
+ for d in config.packaging.directories:
+ s.write("""Source: "%(dir)s\*"; DestDir: "{app}\\%(dir)s"; Flags: ignoreversion recursesubdirs\n""" % {'dir': d})
+ for f in config.packaging.programs:
+ s.write("""Source: "bin\\%s"; DestDir: "{app}\\bin"; Flags: ignoreversion\n""" % f)
+ for f in config.packaging.scripts:
+ s.write("""Source: "bin\\%s"; DestDir: "{app}\\bin"; Flags: ignoreversion\n""" % f)
+ for d in config.packaging.python:
+ s.write("""Source: "lib\\%(python)\\site-packages\\%(dir)s\\*"; DestDir: "{app}\\lib\\%(python)\\site-packages\\%(dir)s"; Flags: ignoreversion recursesubdirs\n""" %
+ {'dir': d, 'python', python})
+ s.write("""Source: "%(bashrc)s"; DestDir: "{app}"; Flags: ignoreversion\n""" % {'bashrc': bashrc})
+
+
+ # [Dirs]
+ s.write(
+"""
+[Dirs]
+; Cygwin demands a /tmp directory
+Name: "{app}\\tmp"
+; for our /usr mounts
+Name: "{app}\\usr"
+Name: "{app}\\usr\\bin"
+Name: "{app}\\usr\\lib"
+
+"""
+ )
+
+
+ # [Registry]
+ s.write(
+"""
+[Registry]
+Root: HKLM; Subkey: "Software\\Cigwin Solutions"; Flags: uninsdeletekey noerror
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin"; Flags: uninsdeletekey noerror
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2"; Flags: uninsdeletekey noerror
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/"; Flags: uninsdeletekey noerror
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/"; Flags: noerror; ValueType: string; ValueName: "native"; ValueData: "{app}"
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/"; Flags: noerror; ValueType: dword; ValueName: "flags"; ValueData: "00000002"
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/bin"; Flags: uninsdeletekey noerror
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/bin"; Flags: noerror; ValueType: string; ValueName: "native"; ValueData: "{app}\\bin"
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/bin"; Flags: noerror; ValueType: dword; ValueName: "flags"; ValueData: "00000002"
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/lib"; Flags: uninsdeletekey noerror
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/lib"; Flags: noerror; ValueType: string; ValueName: "native"; ValueData: "{app}\\lib"
+Root: HKLM; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/lib"; Flags: noerror; ValueType: dword; ValueName: "flags"; ValueData: "00000002"
+; for non-admin install
+Root: HKCU; Subkey: "Software\\Cigwin Solutions"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/"; ValueType: string; ValueName: "native"; ValueData: "{app}"
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/"; ValueType: dword; ValueName: "flags"; ValueData: "00000002"
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/bin"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/bin"; ValueType: string; ValueName: "native"; ValueData: "{app}\\bin"
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/bin"; ValueType: dword; ValueName: "flags"; ValueData: "00000002"
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/lib"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/lib"; ValueType: string; ValueName: "native"; ValueData: "{app}\\lib"
+Root: HKCU; Subkey: "Software\\Cigwin Solutions\\Cygwin\\mounts v2\\/usr/lib"; ValueType: dword; ValueName: "flags"; ValueData: "00000002"
+
+"""
+ )
+
+
+ # [INI]
+ s.write("""[INI]\n""")
+ urls = ["cig", "http://www.geodynamics.org/"] + config.urls
+ urls = pairUp(urls)
+ for filename, url in urls:
+ s.write("""Filename: "{app}\\%(filename)s.url"; Section: "InternetShortcut"; Key: "URL"; String: "%(url)s"\n""" %
+ {'filename': filename, 'url': url})
+
+
+ # [Icons]
+ s.write(
+"""
+[Icons]
+Name: "{group}\\%(AppName)s"; Filename: "{app}\\bin\\bash.exe"; Parameters: "--init-file %(bashrc)s -i"; WorkingDir: "{app}"; IconFilename: "{app}\\cig.ico"
+Name: "{userdesktop}\\%(AppName)s"; Filename: "{app}\\bin\\bash.exe"; Tasks: desktopicon; Parameters: "--init-file %(bashrc)s -i"; WorkingDir: "{app}"; IconFilename: "{app}\\cig.ico"
+""" % {'AppName': info['AppName'], 'bashrc': bashrc}
+ )
+ for filename, url in urls:
+ s.write("""Name: "{group}\CIG"; Filename: "{app}\cig.url"\n""" % (displayName, filename))
+ s.write(
+"""
+Name: "{group}\Uninstall %(AppName)s"; Filename: "{uninstallexe}"
+
+""" % info
+ )
+
+ return
+
+
+def createWindowsInstaller(python, prefix, package, version, config):
+
+ sourceDir = cygpath("-w", prefix)
+
+ info = {
+ "AppName": package,
+ "AppVerName": package + " v" + version,
+ "SourceDir": sourceDir,
+ }
+
+ bashrc = generateBashrc(prefix, package, info)
+
+ generateISS(python, info, config, bashrc, python)
+
+ return
+
+
def mkpkg():
buildnumber = int(sys.argv[1])
revision = sys.argv[2]
- if not revision:
+ if revision:
+ revision = "r" + revision
+ else:
revision = "forced"
opSys = platform.system().lower()
arch = opSys + "-" + platform.machine()
@@ -71,16 +286,26 @@
os.chdir(workdir)
- distdir_arch = distdir + "-" + arch
- os.system("rm " + distdir_arch)
- os.system("ln -s " + prefix + " " + distdir_arch)
- packingList = [distdir_arch + "/" + m for m in packingList]
- archive = distdir_arch + ".tar.gz"
- taggedArchive = tag + "-" + archive
- os.system("tar cvzf " + archive + " " + " ".join(packingList))
- if status != 0:
- sys.exit("tar: exit %d" % status)
+ if opSys == "darwin" or opSys == "linux":
+ # No .dmg on Mac for now.
+ distdir_arch = distdir + "-" + arch
+ os.system("rm " + distdir_arch)
+ os.system("ln -s " + prefix + " " + distdir_arch)
+ packingList = [distdir_arch + "/" + m for m in packingList]
+ archive = distdir_arch + ".tar.gz"
+ taggedArchive = tag + "-" + archive
+ os.system("tar cvzf " + archive + " " + " ".join(packingList))
+ if status != 0:
+ sys.exit("tar: exit %d" % status)
- os.system("mv " + archive + " " + taggedArchive)
+ os.system("mv " + archive + " " + taggedArchive)
+ elif opSys == "cygwin":
+ createWindowsInstaller(python, prefix, package, version, config)
+ else:
+ sys.exit("unknown OS: " + opSys)
return
+
+
+if __name__ == "__main__":
+ mkpkg("0001", "1234")
Modified: cs/buildbot/trunk/buildbot/scripts/shipper.py
===================================================================
--- cs/buildbot/trunk/buildbot/scripts/shipper.py 2007-06-23 02:25:37 UTC (rev 7408)
+++ cs/buildbot/trunk/buildbot/scripts/shipper.py 2007-06-23 03:13:18 UTC (rev 7409)
@@ -8,5 +8,11 @@
if not revision:
revision = "forced"
tag = "b%04d-%s" % (buildnumber, revision)
- command = "scp -o BatchMode=yes " + tag + "* www.geodynamics.org:/home/buildbot/public_html/shipping"
+ files = tag + "*"
+ # BuildBot sets restrictive umask.
+ command = "chmod go+r " + files
+ print command
os.system(command)
+ command = "scp -o BatchMode=yes " + files + " www.geodynamics.org:/home/buildbot/public_html/shipping"
+ print command
+ os.system(command)
More information about the cig-commits
mailing list