#!/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 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 speficy Confluence password for user ", user password = getpass.getpass() confluenceToken = confluenceServer.confluence1.login(user, password) if confluenceToken is None: exit("Could not login page " + spacekey + ":" + pagetitle) def uploadReleaseBinaryToConfluence(filename): # 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" pagetitle="Sprint Releases" if confluenceToken is None: logIntoConfluence() page = confluenceServer.confluence1.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) confluenceServer.confluence1.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): fileName = findFile(filePattern + "-" + version) uploadReleaseBinaryToConfluence(fileName) nestedPrefix="*"*listNestedLevels printWiki("{0} [{1}|^{2}] ".format(nestedPrefix, linkName, fileName)) def uploadToConfluenceAndPrintPageText(version): printVersion(version) printWiki() printWiki("h5. openBIS Generic Framework") printWiki() processFile("Application Server (AS)", "openBIS-server", version) processFile("Data Store Server (DSS)", "datastore_server", version) processFile("DSS Client", "dss_client", version) printWiki("* [Documentation|^CISDDoc-{0}.html.zip]".format(version)) printWiki() printWiki('h5. openBIS for High Content Screening') printWiki() printWiki("* Command Line Installation") processFile("Application Server (AS)", "openBIS-server-screening", version, 2) processFile("Data Store Server (DSS)", "datastore_server-screening", version, 2) processFile("Installation Wizard (AS+DSS)", "openBIS-installer-screening", version) processFile("API", "screening-api", version) 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 "====================================================================" print wikiText