From 9e10d5d29cc091f7bab62091ebf955891ec28188 Mon Sep 17 00:00:00 2001 From: Aleksi Hietanen Date: Thu, 3 Nov 2016 16:56:54 +0200 Subject: [PATCH] Add demo validation and deployment status traffic light to new build report Change-Id: I0cd71e14c213d3c96a41599aaa03f33b15b797c7 --- scripts/BuildDemos.py | 27 +++++++++++++++----- scripts/GenerateBuildTestAndStagingReport.py | 27 +++++++++++++------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/scripts/BuildDemos.py b/scripts/BuildDemos.py index 7870e743de..01fdf4d25b 100644 --- a/scripts/BuildDemos.py +++ b/scripts/BuildDemos.py @@ -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) diff --git a/scripts/GenerateBuildTestAndStagingReport.py b/scripts/GenerateBuildTestAndStagingReport.py index 32e2c9dde7..226493ee1c 100644 --- a/scripts/GenerateBuildTestAndStagingReport.py +++ b/scripts/GenerateBuildTestAndStagingReport.py @@ -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 += "" + column + "" return html + "" +def getHtmlList(array): + html = "" + 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, see report.".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 += "" + link_list = list(map(lambda demo: "{demoName}".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 += "" + link_list = list(map(lambda module: "
  • {}
  • ".format(args.buildId, module, module), modules)) + return apidiff_html + getHtmlList(link_list) def getDirs(url): page = requests.get(url) -- 2.39.5