You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/05/26 04:46:06 UTC

[42/50] incubator-ignite git commit: # ignie-456

# ignie-456


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/a2535337
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/a2535337
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/a2535337

Branch: refs/heads/ignite-830
Commit: a25353377ef44de8a31d0c88ed0e8aee0d949167
Parents: 4929c7d
Author: null <null>
Authored: Fri May 22 16:24:52 2015 +0300
Committer: null <null>
Committed: Fri May 22 16:24:52 2015 +0300

----------------------------------------------------------------------
 .gitignore                                 |   3 +-
 dev-tools/slurp.sh                         |  74 +++++++++++++
 dev-tools/src/main/groovy/jiraslurp.groovy | 132 +++++++++++++-----------
 3 files changed, 150 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a2535337/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 296e130..3da8e4d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,4 +19,5 @@ atlassian-ide-plugin.xml
 target
 /libs/
 pom-installed.xml
-git-patch-prop-local.sh
\ No newline at end of file
+git-patch-prop-local.sh
+/slurp.sh

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a2535337/dev-tools/slurp.sh
----------------------------------------------------------------------
diff --git a/dev-tools/slurp.sh b/dev-tools/slurp.sh
new file mode 100644
index 0000000..bf1e91a
--- /dev/null
+++ b/dev-tools/slurp.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# Copy this script file at root of ignite repo.
+# Fill all variables.
+#
+
+#
+# Default branch name. Need to use last version of "jiraslurp" scripts.
+#
+DEFAULT_BRANCH='ignite-sprint-5'
+
+#
+# TC URL. It is 10.30.0.229 for public TC from agents.
+#
+TC_URL='10.30.0.229'
+
+#
+# Jira user name to add comments aboyt triggered builds.
+#
+JIRA_USER='tc_commenter'
+
+#
+# Jira password.
+#
+JIRA_PWD=''
+
+#
+# TC user which have permissions to trigger new builds.
+#
+TASK_RUNNER_USER='task_runner'
+
+#
+# TC user password.
+#
+TASK_RUNNER_PWD=''
+
+#
+# Space separated logins of jira useres which were approved to auto triggering patches. Like 'user1 user2 user3'.
+#
+JIRA_CONTRIBUTORS=''
+
+git fetch
+
+git checkout ${DEFAULT_BRANCH}
+
+git pull
+
+export TC_URL=${TC_URL}
+export GIT_USER_NAME=${GIT_USER_NAME}
+export GIT_USER_EMAIL=${GIT_USER_EMAIL}
+export JIRA_USER=${JIRA_USER}
+export JIRA_PWD=${JIRA_PWD}
+export TASK_RUNNER_PWD=${TASK_RUNNER_PWD}
+export TASK_RUNNER_USER=${TASK_RUNNER_USER}
+export JIRA_CONTRIBUTORS=${JIRA_CONTRIBUTORS}
+
+gradle slurp -b dev-tools/build.gradle

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a2535337/dev-tools/src/main/groovy/jiraslurp.groovy
----------------------------------------------------------------------
diff --git a/dev-tools/src/main/groovy/jiraslurp.groovy b/dev-tools/src/main/groovy/jiraslurp.groovy
index 32a6e43..d70bb32 100644
--- a/dev-tools/src/main/groovy/jiraslurp.groovy
+++ b/dev-tools/src/main/groovy/jiraslurp.groovy
@@ -14,6 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+def envVariable = { name, defaultVar ->
+    def res = System.getenv(name as String)
+
+    if (res == 'null' || res == null)
+        return defaultVar
+
+    res
+}
+
+def envVariableAsList = { name, defaultList ->
+    def list = System.getenv(name as String)?.split(' ') as List
+
+    if (list == 'null' || list == null)
+        return defaultList
+
+    list
+}
+
 /**
  * Parsing a special filter from Apache Ignite JIRA and picking up latest by ID
  * attachments to process.
@@ -25,7 +44,12 @@ final validated_filename = "${System.getProperty("user.home")}/validated-jira.tx
 final LAST_SUCCESSFUL_ARTIFACT = "guestAuth/repository/download/Ignite_PatchValidation_PatchChecker/.lastSuccessful/$validated_filename"
 
 final def JIRA_CMD = System.getProperty('JIRA_COMMAND', 'jira.sh')
-LinkedHashMap<String, String> jirasAttached = [:]
+
+// Envariement variables.
+final def TC_PROJECT_NAME = envVariable("PROJECT_NAME", "Ignite")
+
+final def CONTRIBUTORS = envVariableAsList("JIRA_CONTRIBUTORS", [])
+final def TC_BUILD_EXCLUDE_LIST = envVariableAsList("BUILD_ID_EXCLUDES", ["Ignite_RunAllTestBuilds"])
 
 /**
  * Gets jiras for which test tasks were already triggered.
@@ -37,29 +61,12 @@ def readHistory = {
 
     List validated_list = []
 
-    // TODO do not use folder.
     def validated = new File(validated_filename)
 
     if (validated.exists()) {
-        // TODO use commented way.
         validated_list = validated.text.split('\n')
     }
 
-    // TODO use it way.
-//    try {
-//        def historyUrl = "http://${System.getenv('TC_URL')}/$LAST_SUCCESSFUL_ARTIFACT"
-//
-//        println "Reading history from $historyUrl"
-//
-//        validated_list = new URL(historyUrl).text.split('\n')
-//
-//        println "Got validated list=$validated_list"
-//    }
-//    catch (Exception e) {
-//        println e.getMessage()
-//
-//    }
-
     // Let's make sure the preserved history isn't too long
     if (validated_list.size > MAX_HISTORY)
         validated_list = validated_list[validated_list.size - MAX_HISTORY..validated_list.size - 1]
@@ -74,34 +81,46 @@ def readHistory = {
  * @return <code>null</code> or <code>JIRA-###,latest_attach_id</code>
  */
 def getLatestAttachment = { jira ->
-    def latestAttr = jira.attachments[0].attachment.list().sort {
-        it.@id.toInteger()
-    }.reverse()[0]
+    def attachment = jira.attachments[0].attachment.list()
+        .sort { it.@id.toInteger() }
+        .reverse()
+        .find {
+            def fName = it.@name.toString()
+
+            CONTRIBUTORS.contains(it.@author as String) &&
+                (fName.endsWith(".patch") || fName.endsWith(".txt") || fName.endsWith(".diff"))
+        }
 
     String row = null
 
-    if (latestAttr == null) {
-        println "${jira.key} is in invalid state: patch is not available"
+    if (attachment == null) {
+        println "${jira.key} is in invalid state: there was not found '.{patch/txt/diff}'-file from approved user."
     }
     else {
-        row = "${jira.key},${latestAttr.@id}"
+        row = "${jira.key},${attachment.@id}"
     }
 }
 
-def checkForAttachments = {
+/**
+ * Checks all "Patch availiable" jiras on attached ".patch"-files from approved users.
+ */
+def findAttachments = {
+    // See https://issues.apache.org/jira/issues/?filter=12330308 (the same).
     def JIRA_FILTER =
         "https://issues.apache.org/jira/sr/jira.issueviews:searchrequest-xml/12330308/SearchRequest-12330308.xml?tempMax=100&field=key&field=attachments"
     def rss = new XmlSlurper().parse(JIRA_FILTER)
 
     List list = readHistory {}
 
+    LinkedHashMap<String, String> attachments = [:]
+
     rss.channel.item.each { jira ->
         String row = getLatestAttachment(jira)
 
         if (row != null && !list.contains(row)) {
             def pair = row.split(',')
 
-            jirasAttached.put(pair[0] as String, pair[1] as String)
+            attachments.put(pair[0] as String, pair[1] as String)
 
             list.add(row)
         }
@@ -114,6 +133,8 @@ def checkForAttachments = {
         validated.delete()
 
     validated << list.join('\n')
+
+    attachments
 }
 
 /**
@@ -142,6 +163,8 @@ def applyPatch = { jira, attachementURL ->
     def patchFile = new File("${jira}-${attachementURL}.patch")
 
     try {
+        println "Getting patch content."
+
         patchFile << new URL("$ATTACHMENT_URL/$attachementURL/").text
 
         try {
@@ -163,7 +186,16 @@ def applyPatch = { jira, attachementURL ->
         catch (Exception e) {
             println "Patch was not applied successfully. Aborting patch applying."
 
-            checkprocess "git am --abort".execute(null, new File("../"))
+            try {
+                checkprocess "git am --abort".execute(null, new File("../"))
+
+                print "Succsessfull: git am --abort."
+            }
+            catch (Exception e2) {
+                print "Error: git am --abort fails: "
+
+                e2.printStackTrace()
+            }
 
             throw e;
         }
@@ -181,19 +213,9 @@ def JIRA_xml = { jiranum ->
  * Gets all builds from TC project.
  */
 def getTestBuilds = { ->
-    def projName = System.getenv('PROJECT_NAME')
-
-    if (projName == null || projName == 'null')
-        projName = "Ignite"
-
     def tcURL = System.getenv('TC_URL')
-    def excludeListProp = System.getenv('BUILD_ID_EXCLUDES')
-    def excludeList = excludeListProp?.split(' ') as List
 
-    if (excludeList == null || excludeList == 'null')
-        excludeList = ["Ignite_RunAllTestBuilds"]
-
-    def project = new XmlSlurper().parse("http://$tcURL:80/guestAuth/app/rest/projects/id:$projName")
+    def project = new XmlSlurper().parse("http://$tcURL:80/guestAuth/app/rest/projects/id:$TC_PROJECT_NAME")
 
     def buildIds = []
 
@@ -202,7 +224,7 @@ def getTestBuilds = { ->
     for (int i = 0; i < count; i++) {
         def id = project.buildTypes.buildType[i].@id
 
-        if (excludeList == null || !excludeList.contains(id))
+        if (TC_BUILD_EXCLUDE_LIST == null || !TC_BUILD_EXCLUDE_LIST.contains(id))
             buildIds.add(id)
     }
 
@@ -316,10 +338,6 @@ def runAllTestBuilds = {builds, jiraNum ->
 
             def build = new XmlSlurper().parseText(response)
 
-            println "Triggered build: ${build.buildType.@name}"
-            println "Triggered build url: ${build.@webUrl}"
-            println "Triggered build branch: ${build.@branchName}"
-
             triggeredBuilds.put(build.buildType.@name, build.@webUrl)
         }
         catch (Exception e) {
@@ -338,6 +356,16 @@ def runAllTestBuilds = {builds, jiraNum ->
 
 /**
  * Main.
+ *
+ * Modes:
+ * 1. "slurp" mode - triggers all TC test builds for all jiras with valid attachment
+ * (Jira in "patch availiable" state, there is attached file from approved user with "patch" extension)
+ * 2. "patchApply" mode - gets last valid patch file from given jira number and applies it.
+ * 3. "runAllBuilds" - triggers given jira number for all TC test builds.
+ *
+ * Main workflow:
+ * 1. run in "slurp" mode
+ * 2. each triggered build uses "patchApply" mode to apply latest valid patch.
  */
 args.each {
     println "Arg=$it"
@@ -349,14 +377,14 @@ args.each {
     if (parameters.length >= 1 && parameters[0] == "slurp") {
         println "Running in 'slurp' mode."
 
-        checkForAttachments()
-
         def builds = getTestBuilds()
 
         println "Test builds to be triggered=$builds"
 
+        def attachments = findAttachments()
+
         // For each ticket with new attachment, let's trigger remove build
-        jirasAttached.each { k, v ->
+        attachments.each { k, v ->
             //  Trailing slash is important for download; only need to pass JIRA number
             println "Triggering the test builds for: $k = $ATTACHMENT_URL/$v/"
 
@@ -401,15 +429,3 @@ args.each {
         runAllTestBuilds(builds, jiraNum)
     }
 }
-
-/* Workflow:
-  1. download an attachment if JIRA num's set; otherwise get all latest attachments not mentioned in the
-     validated-jira.txt file from the last successful build
-  2. trigger test build(s) parametrised by JIRA no.
-  3. test build will download JIRA's latest attachment and apply it to currently checked out repo;
-     - build will fail with comment on JIRA if that can not apply
-     - build will post error/success comment depends on the test results
-*/
-// TODO
-//   - TC's test job needs to send a comment to JIRA
-//       $JIRA_CMD -a addComment -s https://issues.apache.org/jira -u ignite-ci -p ci-of-1gnit3 --issue IGNITE-495 --comment "Trying latest version of the jira-cli"