Newer
Older
#!/usr/bin/python
#
# Kaloyan: this script was created under time pressure, so its implementation is not optimal.
# Feel free to improve it.
#
# @author: Kaloyan Enimanev
#
from __future__ import with_statement
from datetime import date
import sys, string, xmlrpclib, re, os, getpass, subprocess, shutil
DOWNLOAD_FOLDER="./tmp/"
confluenceToken = None
confluenceServer = xmlrpclib.ServerProxy('https://wiki-bsse.ethz.ch:8443/rpc/xmlrpc')
wikiText = ""
def printWiki(text=""):
global wikiText
wikiText += text
wikiText += "\n"
def logIntoConfluence():
global confluenceToken
user = getpass.getuser()
print "Please specify Confluence password for user ", user
password = getpass.getpass()
felmer
committed
confluenceToken = confluenceServer.confluence2.login(user, password)
if confluenceToken is None:
exit("Could not login page " + spacekey + ":" + pagetitle)
def uploadReleaseBinaryToConfluence(filename, pagetitle):
# ugly, but I don't want to spend more time here
filepath = DOWNLOAD_FOLDER + "/" + filename
with open(filepath, 'rb') as f:
data = f.read(); # slurp all the data
spacekey="bis"
if confluenceToken is None:
logIntoConfluence()
felmer
committed
page = confluenceServer.confluence2.getPage(confluenceToken, spacekey, pagetitle)
if page is None:
exit("Could not find page " + spacekey + ":" + pagetitle)
attachment = {}
attachment['fileName'] = os.path.basename(filename)
attachment['contentType'] = 'application/zip'
print "Uploading {0} to confluence......".format(filename)
felmer
committed
confluenceServer.confluence2.addAttachment(confluenceToken, page['id'], attachment, xmlrpclib.Binary(data))
def fetchBinaries(version):
print "Fetching {0} binaries from server ...".format(version)
os.system("mkdir -p " + DOWNLOAD_FOLDER)
os.system("rm {0}/*.zip".format(DOWNLOAD_FOLDER))
os.system("scp sprint:~/fileserver/sprint_builds/openBIS/*-{0}*/*.* {1}".format(version, DOWNLOAD_FOLDER))
def printVersion(version):
today = date.today().strftime("%d %B %Y")
printWiki("h2. Version {0} ({1})".format(version, today))
def processFile(linkName, filePattern, version, listNestedLevels=1, pagetitle="Sprint Releases"):
fileName = findFile(filePattern + "-" + version)
uploadReleaseBinaryToConfluence(fileName, pagetitle)
nestedPrefix="*"*listNestedLevels
printWiki("{0} [{1}|^{2}] ".format(nestedPrefix, linkName, fileName))
def uploadToConfluenceAndPrintPageText(version):
printVersion(version)
printWiki()
printWiki("h5. openBIS for Standard Technologies")
processFile("Installation and Upgrade Wizard (AS+DSS)", "openBIS-installation-standard-technologies", version)
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
processFile("DSS Client", "dss_client", version)
processFile("KNIME Nodes", "ch.systemsx.cisd.openbis.knime", "")
printWiki("* [Documentation|^CISDDoc-{0}.html.zip]".format(version))
printWiki()
printWiki('h5. openBIS for High Content Screening')
printWiki()
processFile("API", "screening-api", version)
printWiki()
def uploadToConfluenceMetabolomicsAndPrintPageText(version):
global wikiText
wikiText = ""
printVersion(version)
printWiki()
printWiki("h5. openBIS for Metabolomics")
printWiki()
processFile("Application Server (AS)", "openBIS-server", version, 1, "openBIS Metabolomics")
processFile("Data Store Server (DSS)", "datastore_server_metabolomics", version, 1, "openBIS Metabolomics")
processFile("DSS Client", "dss_client", version, 1, "openBIS Metabolomics")
printWiki()
def createMetabolomicsDssDist(version):
# find the files we want to work with
datastore_server = findFile("datastore_server" + "-" + version)
yeastx_plugin = findFile("datastore_server_plugin-yeastx" + "-" + version)
# unzip the yeastx plugin and set up the dir structure
datastore_dir = DOWNLOAD_FOLDER + "datastore_server/"
subprocess.call(["unzip", "-d" + datastore_dir, str(DOWNLOAD_FOLDER + yeastx_plugin)])
# update the datastore_server zip
version_string = datastore_server[len("datastore_server"):len(datastore_server)]
metabolomics_zip = DOWNLOAD_FOLDER + "datastore_server_metabolomics" + version_string
shutil.copy(str(DOWNLOAD_FOLDER + datastore_server), metabolomics_zip)
file_to_update = datastore_dir + "lib/datastore_server_plugin-yeastx.jar"
subprocess.call(["zip", "-u", metabolomics_zip, file_to_update])
def findFile(filePattern):
for file in os.listdir(DOWNLOAD_FOLDER):
if file.startswith(filePattern):
return file
if __name__ == '__main__':
if len(sys.argv) < 2:
exit("""
Usage: {0} <SPRINT-NUMBER>
Example command: {0} S104
""".format(sys.argv[0]))
version=sys.argv[1]
fetchBinaries(version)
uploadToConfluenceAndPrintPageText(version)
print "===================================================================="
print " Paste the following text on the Sprint Releases page in confluence "
print " Link: https://wiki-bsse.ethz.ch/display/bis/Sprint+Releases "
print "===================================================================="
print wikiText
# Agios wants to access the yeastX version from this page
createMetabolomicsDssDist(version)
uploadToConfluenceMetabolomicsAndPrintPageText(version)
print "========================================================================="
print " Paste the following text on the openBIS Metabolomics page in confluence "
print " Link: https://wiki-bsse.ethz.ch/display/bis/openBIS+Metabolomics "
print "========================================================================="
print wikiText