Skip to content
Snippets Groups Projects
upload-sprint-to-confluence.py 5.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/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