]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add demo validation and deployment status traffic light to new build report
authorAleksi Hietanen <aleksi@vaadin.com>
Thu, 3 Nov 2016 14:56:54 +0000 (16:56 +0200)
committerHenri Sara <hesara@vaadin.com>
Fri, 4 Nov 2016 07:36:03 +0000 (07:36 +0000)
Change-Id: I0cd71e14c213d3c96a41599aaa03f33b15b797c7

scripts/BuildDemos.py
scripts/GenerateBuildTestAndStagingReport.py

index 7870e743dedd256d4470cd3b4f194c212a34e6b6..01fdf4d25b89bdd2f0ace76d012a81c6b2b91933 100644 (file)
@@ -9,7 +9,7 @@
 # pip install requests
 # Deploy depends on .deployUrl and .deployCredentials files in home folder
 
-import sys, os
+import sys, os, pickle
 from os.path import join, isfile
 from fnmatch import fnmatch
 from xml.etree.ElementTree import ElementTree
@@ -23,6 +23,16 @@ demos = {
 #      "my-demo" : ("my_demo_url_or_path", "my-demo-dev-branch")
 }
 
+status_dump = {"messages": []}
+
+def dump_status(error_occurred):
+       status_dump["error"] = error_occurred
+       pickle.dump(status_dump, open("result/demo_validation_status.pickle", "wb"))
+
+def log_status(log_string):
+       status_dump["messages"].add(log_string)
+       print(log_string)
+
 def checkout(folder, url, repoBranch = "master"):
        Repo.clone_from(url, join(resultPath, folder), branch = repoBranch)
 
@@ -31,7 +41,8 @@ if __name__ == "__main__":
        try:
                from git import Repo
        except:
-               print("BuildDemos depends on gitpython. Install it with `pip install gitpython`")
+               log_status("BuildDemos depends on gitpython. Install it with `pip install gitpython`")
+               dump_status(True)
                sys.exit(1)
        from BuildHelpers import updateRepositories, mavenValidate, copyWarFiles, getLogFile, removeDir, getArgs, mavenInstall, resultPath, readPomFile, parser
        from DeployHelpers import deployWar
@@ -40,7 +51,6 @@ if __name__ == "__main__":
        args = getArgs()
        demosFailed = False
        ignoredDemos = args.ignore.split(",")
-       
        wars = []
 
        for demo in demos:
@@ -57,13 +67,13 @@ if __name__ == "__main__":
                                updateRepositories(join(resultPath, demo), args.pluginRepo, postfix="plugin")
                        mavenValidate(demo, logFile=getLogFile(demo))
                        wars.extend(copyWarFiles(demo))
-                       print("%s demo validation succeeded!" % (demo))
+                       log_status("%s demo validation succeeded!" % (demo))
                except Exception as e:
-                       print("%s demo validation failed: %s" % (demo, e))
+                       log_status("%s demo validation failed: %s" % (demo, e))
                        if demo not in ignoredDemos:
                                demosFailed = True
                except EnvironmentError as e:
-                       print("%s demo validation failed: %s" % (demo, e))
+                       log_status("%s demo validation failed: %s" % (demo, e))
                        if demo not in ignoredDemos:
                                demosFailed = True
                try:
@@ -76,8 +86,11 @@ if __name__ == "__main__":
                try:
                        deployWar(war)
                except Exception as e:
-                       print("War %s failed to deploy: %s" % (war, e))
+                       log_status("War %s failed to deploy: %s" % (war, e))
                        demosFailed = True
 
        if demosFailed:
+               dump_status(True)
                sys.exit(1)
+
+       dump_status(False)
index 32e2c9dde7c9e998dbba0924aeb5458b67ff58fe..226493ee1c734e867cc83cfeb31731851cb6e50b 100644 (file)
@@ -1,5 +1,5 @@
 from BuildDemos import demos
-import argparse, requests, json, subprocess, re
+import argparse, requests, json, subprocess, re, pickle
 
 parser = argparse.ArgumentParser()
 parser.add_argument("version", type=str, help="Vaadin version that was just built")
@@ -23,6 +23,12 @@ def createTableRow(*columns):
         html += "<td>" + column + "</td>"
     return html + "</tr>"
 
+def getHtmlList(array):
+    html = "<ul>"
+    for item in array:
+        html += "<li>" + item + "</li>"
+    return html + "</ul>"
+
 def getBuildStatusHtml():
     build_steps_request_string = "http://{}/app/rest/problemOccurrences?locator=build:{}".format(args.teamcityUrl, args.buildId)
     build_steps_request = requests.get(build_steps_request_string, auth=(args.teamcityUser, args.teamcityPassword), headers={'Accept':'application/json'})
@@ -47,16 +53,20 @@ def getTestStatusHtml():
         else:
             return createTableRow(traffic_light.format(color="red"), "Test status: there are " + str(test_failures_json["count"]) + " failing tests, <a href=\"http://r2d2.devnet.vaadin.com/viewLog.html?buildId={}&buildTypeId=Vaadin80_Releases_BuildTestAndStageRelease&tab=testsInfo\">see report</a>.".format(args.buildId))
 
+def getDemoValidationStatusHtml():
+    status = pickle.load(open("result/demo_validation_status.pickle", "rb"))
+    if status["error"]:
+        return createTableRow(traffic_light.format(color="red"), getHtmlList(status["messages"]))
+    else:
+        return createTableRow(traffic_light.format(color="green"), getHtmlList(status["messages"]))
+
 def getDemoLinksHtml():
     demos_html = "Try demos"
-    demos_html += "<ul>"
-    for demo in demos:
-        demos_html += "<li><a href='{url}/{demoName}-{version}'>{demoName}</a></li>".format(url=args.deployUrl, demoName=demo, version=args.version)
-    return demos_html + "</ul>"
+    link_list = list(map(lambda demo: "<a href='{url}/{demoName}-{version}'>{demoName}</a>".format(url=args.deployUrl, demoName=demo, version=args.version), demos))
+    return demos_html + getHtmlList(link_list)
 
 def getApiDiffHtml():
     apidiff_html = "Check API diff"
-    apidiff_html += "<ul>"
     modules = [
         "client", "client-compiler",
         "compatibility-client",
@@ -64,9 +74,8 @@ def getApiDiffHtml():
         "compatibility-shared",
         "server", "shared"
     ]
-    for module in modules:
-        apidiff_html += "<li><a href='http://r2d2.devnet.vaadin.com/repository/download/Vaadin80_Releases_BuildTestAndStageRelease/{}:id/apidiff/{}/japicmp.html'>{}</a></li>".format(args.buildId, module, module)
-    return apidiff_html + "</ul>"
+    link_list = list(map(lambda module: "<li><a href='http://r2d2.devnet.vaadin.com/repository/download/Vaadin80_Releases_BuildTestAndStageRelease/{}:id/apidiff/{}/japicmp.html'>{}</a></li>".format(args.buildId, module, module), modules))
+    return apidiff_html + getHtmlList(link_list)
 
 def getDirs(url):
     page = requests.get(url)