Browse Source

Add demo validation and deployment status traffic light to new build report

Change-Id: I0cd71e14c213d3c96a41599aaa03f33b15b797c7
tags/8.0.0.alpha7
Aleksi Hietanen 7 years ago
parent
commit
9e10d5d29c
2 changed files with 38 additions and 16 deletions
  1. 20
    7
      scripts/BuildDemos.py
  2. 18
    9
      scripts/GenerateBuildTestAndStagingReport.py

+ 20
- 7
scripts/BuildDemos.py View 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)

+ 18
- 9
scripts/GenerateBuildTestAndStagingReport.py View 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)

Loading…
Cancel
Save