diff options
author | Aleksi Hietanen <aleksi@vaadin.com> | 2016-11-04 15:00:31 +0200 |
---|---|---|
committer | Henri Sara <hesara@vaadin.com> | 2016-11-07 08:00:54 +0000 |
commit | b85f6e4bdc49d9ea8693239fa15d1f2f239f85cf (patch) | |
tree | ed87e6a99fbbe6e0dbc3bc66fec0b619746f764f | |
parent | efbcb4e7b0017cf030060276ca912863cd922890 (diff) | |
download | vaadin-framework-b85f6e4bdc49d9ea8693239fa15d1f2f239f85cf.tar.gz vaadin-framework-b85f6e4bdc49d9ea8693239fa15d1f2f239f85cf.zip |
Create script GeneratePostPublishReport.py
Also improves GenerateBuildTestAndStagingReport and GeneratePublishReportPart1
Change-Id: Ida5a004e6d4533dc04a8e7ffc76078f970bdd2ea
-rw-r--r-- | scripts/GenerateBuildTestAndStagingReport.py | 28 | ||||
-rw-r--r-- | scripts/GeneratePostPublishReport.py | 65 | ||||
-rw-r--r-- | scripts/GeneratePublishReportPart1.py | 18 |
3 files changed, 88 insertions, 23 deletions
diff --git a/scripts/GenerateBuildTestAndStagingReport.py b/scripts/GenerateBuildTestAndStagingReport.py index 226493ee1c..16abd340ae 100644 --- a/scripts/GenerateBuildTestAndStagingReport.py +++ b/scripts/GenerateBuildTestAndStagingReport.py @@ -4,12 +4,12 @@ import argparse, requests, json, subprocess, re, pickle parser = argparse.ArgumentParser() parser.add_argument("version", type=str, help="Vaadin version that was just built") parser.add_argument("deployUrl", type=str, help="Base url of the deployment server") -parser.add_argument("buildResultUrl", type=str, help="URL for the build result page") parser.add_argument("teamcityUser", type=str, help="Teamcity username to use") parser.add_argument("teamcityPassword", type=str, help="Password for given teamcity username") parser.add_argument("teamcityUrl", type=str, help="Address to the teamcity server") +parser.add_argument("buildTypeId", type=str, help="The ID of this build step") parser.add_argument("buildId", type=str, help="ID of the build to generate this report for") parser.add_argument("frameworkRepoUrl", type=str, help="URL to the framework staging repository") @@ -17,6 +17,8 @@ parser.add_argument("archetypeRepoUrl", type=str, help="URL to the archetype sta parser.add_argument("pluginRepoUrl", type=str, help="URL to the plugin staging repository") args = parser.parse_args() +buildResultUrl = "http://{}/viewLog.html?buildId={}&tab=buildResultsDiv&buildTypeId={}".format(args.teamcityUrl, args.buildId, args.buildTypeId) + def createTableRow(*columns): html = "<tr>" for column in columns: @@ -39,7 +41,7 @@ def getBuildStatusHtml(): if build_steps_json["count"] == 0: return createTableRow(traffic_light.format(color="green"), "Build status: all build steps successful") else: - return createTableRow(traffic_light.format(color="red"), "Build status: there are failing build steps, <a href={}>check the build report</a>".format(args.buildResultUrl)) + return createTableRow(traffic_light.format(color="red"), "Build status: there are failing build steps, <a href={}>check the build report</a>".format(buildResultUrl)) def getTestStatusHtml(): test_failures_request_string = "http://{}/app/rest/testOccurrences?locator=build:{},status:FAILURE".format(args.teamcityUrl, args.buildId) @@ -51,7 +53,7 @@ def getTestStatusHtml(): if test_failures_json["count"] == 0: return createTableRow(traffic_light.format(color="green"), "Test status: all tests passing") 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)) + return createTableRow(traffic_light.format(color="red"), "Test status: there are " + str(test_failures_json["count"]) + " failing tests, <a href={}>check the build report</a>".format(buildResultUrl)) def getDemoValidationStatusHtml(): status = pickle.load(open("result/demo_validation_status.pickle", "rb")) @@ -74,7 +76,7 @@ def getApiDiffHtml(): "compatibility-shared", "server", "shared" ] - 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)) + link_list = list(map(lambda module: "<a href='http://{}/repository/download/{}/{}:id/apidiff/{}/japicmp.html'>{}</a>".format(args.teamcityUrl, args.buildTypeId, args.buildId, module, module), modules)) return apidiff_html + getHtmlList(link_list) def getDirs(url): @@ -157,28 +159,22 @@ content += createTableRow("", "<h2>Manual checks before publishing</h2>") content += createTableRow("", getDemoLinksHtml()) # link to release notes -content += createTableRow("", "<a href=\"http://r2d2.devnet.vaadin.com/repository/download/Vaadin80_Releases_BuildTestAndStageRelease/{}:id/release-notes/release-notes.html\">Check release notes</a>".format(args.buildId)) +content += createTableRow("", "<a href=\"http://{}/repository/download/{}/{}:id/release-notes/release-notes.html\">Check release notes</a>".format(args.teamcityUrl, args.buildTypeId, args.buildId)) # link to api diff content += createTableRow("", getApiDiffHtml()) -# closed fixed tickets without a milestone -content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=closed&component=Core+Framework&resolution=fixed&milestone=!Vaadin {version}&col=id&col=summary&col=component&col=status&col=type&col=priority&col=milestone&order=priority\">Closed fixed tickets without milestone {version}</a>".format(version=args.version)) -# closed tickets with milestone -content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=closed&component=Core+Framework&resolution=fixed&milestone=Vaadin {version}&col=id&col=summary&col=component&col=milestone&col=status&col=type\">Closed tickets with milestone {version}</a>".format(version=args.version)) -# pending release tickets with milestone -content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=pending-release&component=Core+Framework&resolution=fixed&milestone=Vaadin {version}&col=id&col=summary&col=component&col=milestone&col=status&col=type\">Pending-release tickets with milestone {version}</a>".format(version=args.version)) +# check that trac tickets are in the correct status +content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=closed&status=pending-release&component=Core+Framework&resolution=fixed&group=milestone&col=id&col=summary&col=component&col=status&col=type&col=priority&col=milestone&order=priority\">Check that trac tickets have correct status</a>") # pending release tickets without milestone content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=pending-release&milestone=\">Pending-release tickets without milestone</a>") content += createTableRow("", "<h2>Preparations before publishing</h2>") -# create milestone for next release -content += createTableRow("", "<a href=\"https://dev.vaadin.com/milestone?action=new\">Create milestone for next release</a>") # close trac milestone -content += createTableRow("", "<a href=\"https://dev.vaadin.com/milestone/Vaadin {version}\">Close Trac Milestone</a>".format(version=args.version)) +content += createTableRow("", "<a href=\"https://dev.vaadin.com/milestone/Vaadin {version}\">Close Trac Milestone (deselect \"retarget tickets\")</a>".format(version=args.version)) # verify pending release tickets still have milestone content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=pending-release&component=Core+Framework&resolution=fixed&col=id&col=summary&col=component&col=milestone&col=status&col=type\">Verify pending release tickets still have milestone {version}</a>".format(version=args.version)) -# add version to trac -content += createTableRow("", "<a href=\"https://dev.vaadin.com/admin/ticket/versions\">Add version {version} to Trac".format(version=args.version)) +# link to build dependencies tab to initiate publish step +content += createTableRow("", "<a href=\"http://{}/viewLog.html?buildId={}&buildTypeId={}&tab=dependencies\"><h2>Start Publish Release from dependencies tab</h2></a>".format(args.teamcityUrl, args.buildId, args.buildTypeId)) content += "</table></body></html>" f = open("result/report.html", 'w') diff --git a/scripts/GeneratePostPublishReport.py b/scripts/GeneratePostPublishReport.py new file mode 100644 index 0000000000..782729bc92 --- /dev/null +++ b/scripts/GeneratePostPublishReport.py @@ -0,0 +1,65 @@ +import argparse, requests + +parser = argparse.ArgumentParser(description="Post-publish report generator") +parser.add_argument("version", type=str, help="Vaadin version that was just built") +parser.add_argument("teamcityUrl", type=str, help="Address to the teamcity server") +parser.add_argument("buildTypeId", type=str, help="The ID of this build step") +parser.add_argument("buildId", type=str, help="ID of the build to generate this report for") +parser.add_argument("projectId", type=str, help="The ID of this project") +args = parser.parse_args() + +buildResultUrl = "http://{}/viewLog.html?buildId={}&tab=buildResultsDiv&buildTypeId={}".format(args.teamcityUrl, args.buildId, args.buildTypeId) + +(major, minor, maintenance) = args.version.split(".", 2) +prerelease = "." in maintenance + +def createTableRow(*columns): + html = "<tr>" + for column in columns: + html += "<td>" + column + "</td>" + return html + "</tr>" + +traffic_light = "<svg width=\"20px\" height=\"20px\" style=\"padding-right:5px\"><circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"{color}\"/></svg>" + +content = "<html><head></head><body><table>" + +# Batch update tickets in trac +content += createTableRow("", "<a href=\"https://dev.vaadin.com/query?status=pending-release&component=Core+Framework&resolution=fixed&milestone=Vaadin {version}&col=id&col=summary&col=component&col=milestone&col=status&col=type\">Batch update tickets in Trac</a>") + +# Create milestone for next release +content += createTableRow("", "<a href=\"https://dev.vaadin.com/milestone?action=new\">Create milestone for next release</a>") + +# Tag and pin build +content += createTableRow("", "<a href=\"{url}\">Tag and pin build</a>".format(url=buildResultUrl)) + +# Traffic light for archetype metadata +archetypeMetadataUrl = "" +if not prerelease: + archetypeMetadataUrl = "http://vaadin.com/download/maven-archetypes.xml" +else: + archetypeMetadataUrl ="http://vaadin.com/download/maven-archetypes-prerelease.xml" + +archetype_metadata_request = requests.get(archetypeMetadataUrl) +if archetype_metadata_request.status_code != 200: + content += createTableRow(traffic_light.format(color="black"), "<a href='{url}'>Check archetype metadata: unable to retrieve metadata</a>".format(url=archetypeMetadataUrl)) +else: + if "version=\"{version}\"".format(version=args.version) in archetype_metadata_request.content: + content += createTableRow(traffic_light.format(color="green"), "<a href='{url}'>Check archetype metadata: metadata is correct</a>".format(url=archetypeMetadataUrl)) + else: + content += createTableRow(traffic_light.format(color="red"), "<a href='{url}'>Check archetype metadata: metadata is incorrect</a>".format(url=archetypeMetadataUrl)) + +# TODO GitHub milestones + +# Inform marketing and PO +content += createTableRow("", "Inform marketing and PO about the release") + +# Link to version update in teamcity +content += createTableRow("", "<a href=\"http://{}/admin/editProject.html?projectId={}&tab=projectParams\">Update vaadin.version.latest and vaadin.version.next parameters in TeamCity</a>".format(args.teamcityUrl, args.projectId)) + +# Link to GH release notes +content += createTableRow("", "<a href=\"https://github.com/vaadin/vaadin/releases/new\">Write release notes in GH</a>") + +content += "</table></body></html>" + +with open("result/report.html", "wb") as f: + f.write(content) diff --git a/scripts/GeneratePublishReportPart1.py b/scripts/GeneratePublishReportPart1.py index beedcb5b82..5f69c08384 100644 --- a/scripts/GeneratePublishReportPart1.py +++ b/scripts/GeneratePublishReportPart1.py @@ -19,8 +19,9 @@ metadataChecks = { parser = argparse.ArgumentParser(description="Post-publish report generator") parser.add_argument("version", type=str, help="Vaadin version that was just built") -parser.add_argument("buildResultUrl", type=str, help="URL for the build result page") - +parser.add_argument("teamcityUrl", type=str, help="Address to the teamcity server") +parser.add_argument("buildTypeId", type=str, help="The ID of this build step") +parser.add_argument("buildId", type=str, help="ID of the build to generate this report for") args = parser.parse_args() traffic_light = "<svg width=\"20px\" height=\"20px\" style=\"padding-right:5px\"><circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"{color}\"/></svg>" @@ -68,11 +69,15 @@ content = """<html> <tr><td>{downloadPageOk}</td><td>Download folder on vaadin.com contains the version</td></tr> """.format(metadataOk=getTrafficLight(metadataOk), tagOk=getTrafficLight(tagOk), downloadPageOk=getTrafficLight(downloadPageOk)) +mavenUrl = "" if not prerelease: - content += "<tr><td></td><td><a href='http://repo1.maven.org/maven2/com/vaadin/vaadin-server/{ver}'>Check {ver} is published to maven.org (might take a while)</td></tr>".format(ver=args.version) + mavenUrl = "http://repo1.maven.org/maven2/com/vaadin/vaadin-server/{ver}".format(ver=args.version) + content += "<tr><td></td><td><a href='{mvnUrl}'>Check {ver} is published to maven.org (might take a while)</td></tr>".format(ver=args.version, mvnUrl=mavenUrl) else: - content += "<tr><td></td><td><a href='http://maven.vaadin.com/vaadin-prereleases/com/vaadin/vaadin-server/{ver}'>Check {ver} is published as prerelease to maven.vaadin.com</td></tr>".format(ver=args.version) + mavenUrl = "http://maven.vaadin.com/vaadin-prereleases/com/vaadin/vaadin-server/{ver}".format(ver=args.version) + content += "<tr><td></td><td><a href='{mvnUrl}'>Check {ver} is published as prerelease to maven.vaadin.com</td></tr>".format(ver=args.version, mvnUrl=mavenUrl) +content += "<tr><td></td><td><a href=\"https://dev.vaadin.com/admin/ticket/versions\">Add version {version} to Trac</a></td></tr>".format(version=args.version) if not prerelease: content += '<tr><td></td><td><a href="https://dev.vaadin.com/admin/ticket/versions">Set latest version to default</a></td></tr>' @@ -85,11 +90,10 @@ if not prerelease: content += '<tr><td></td><td><a href="http://vaadin.com/api">Verify API version list updated</a></td></tr>' content += """ -<tr><td></td><td><a href="https://dev.vaadin.com/query?status=pending-release&component=Core+Framework&resolution=fixed&milestone=Vaadin {version}&col=id&col=summary&col=component&col=milestone&col=status&col=type">Batch update tickets in Trac</a></td></tr> -<tr><td></td><td><a href="{url}">Publish result page (See test results, pin and tag build and dependencies)</a></td></tr> +<tr><td></td><td><a href="http://{teamcityUrl}/viewLog.html?buildId={buildId}&buildTypeId={buildTypeId}&tab=dependencies"><h2>Start Post-Publish Release from dependencies tab</a></td></tr> </table> </body> -</html>""".format(url=args.buildResultUrl, version=args.version) +</html>""".format(teamcityUrl=args.teamcityUrl, buildTypeId=args.buildTypeId, buildId=args.buildId, version=args.version) f = open("result/report.html", 'w') f.write(content) |