#!/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() 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() 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) 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") printWiki() processFile("Installation and Upgrade Wizard (AS+DSS)", "openBIS-installation-standard-technologies", version) 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