]> source.dussan.org Git - vaadin-framework.git/commitdiff
Create script GeneratePostPublishReport.py
authorAleksi Hietanen <aleksi@vaadin.com>
Fri, 4 Nov 2016 13:00:31 +0000 (15:00 +0200)
committerHenri Sara <hesara@vaadin.com>
Mon, 7 Nov 2016 08:00:54 +0000 (08:00 +0000)
Also improves GenerateBuildTestAndStagingReport and GeneratePublishReportPart1

Change-Id: Ida5a004e6d4533dc04a8e7ffc76078f970bdd2ea

scripts/GenerateBuildTestAndStagingReport.py
scripts/GeneratePostPublishReport.py [new file with mode: 0644]
scripts/GeneratePublishReportPart1.py

index 226493ee1c734e867cc83cfeb31731851cb6e50b..16abd340ae07c0f872ac7fac85f30234f7718be9 100644 (file)
@@ -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 (file)
index 0000000..782729b
--- /dev/null
@@ -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)
index beedcb5b8210612ed90b566fe2263dbc0710bf92..5f69c08384d14950b962678e2aff63ff1a958f85 100644 (file)
@@ -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)