From f355bc241767b6c0ed1e05c7cde17b5999c5c226 Mon Sep 17 00:00:00 2001
From: "James E. Blair" <jeblair@hp.com>
Date: Wed, 5 Sep 2012 11:20:05 -0700
Subject: [PATCH] Add script to run jenkins job xml comparison.

Change-Id: Ied3addbe4e43a08ea2ac51e0f9b5560eb46823f6
Reviewed-on: https://review.openstack.org/12453
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Approved: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
---
 .../config/openstack-ci-puppet.yaml           | 29 ++++++++
 .../openstack_project/files/zuul/layout.yaml  |  5 ++
 tools/run-compare-xml.sh                      | 68 +++++++++++++++++++
 3 files changed, 102 insertions(+)
 create mode 100755 tools/run-compare-xml.sh

diff --git a/modules/openstack_project/files/jenkins_job_builder/config/openstack-ci-puppet.yaml b/modules/openstack_project/files/jenkins_job_builder/config/openstack-ci-puppet.yaml
index 4fc458a63e..2e8f469587 100644
--- a/modules/openstack_project/files/jenkins_job_builder/config/openstack-ci-puppet.yaml
+++ b/modules/openstack_project/files/jenkins_job_builder/config/openstack-ci-puppet.yaml
@@ -19,3 +19,32 @@
 
     publishers:
       - console-log
+
+
+- job:
+    name: ci-puppet-compare-xml
+    project-type: freestyle
+    concurrent: true
+    node: precise
+
+    wrappers:
+      - timeout:
+          timeout: 30
+          fail: true
+      - timestamps
+
+    triggers:
+      - zuul
+
+    logrotate:
+      daysToKeep: 1
+      numToKeep: -1
+      artifactDaysToKeep: -1
+      artifactNumToKeep: -1
+
+    builders:
+      - gerrit-git-prep
+      - shell: "./tools/run-compare-xml.sh"
+
+    publishers:
+      - console-log
diff --git a/modules/openstack_project/files/zuul/layout.yaml b/modules/openstack_project/files/zuul/layout.yaml
index 2df6d99c35..154a742308 100644
--- a/modules/openstack_project/files/zuul/layout.yaml
+++ b/modules/openstack_project/files/zuul/layout.yaml
@@ -63,6 +63,10 @@ jobs:
     voting: false
     failure-message: XML output has changed.
     success-message: XML output is unchanged.
+  - name: ci-puppet-compare-xml
+    voting: false
+    failure-message: Jenkins XML output has changed.
+    success-message: Jenkins XML output is unchanged.
 
 
 projects:
@@ -165,6 +169,7 @@ projects:
     check:
       - gate-ci-puppet-merge:
         - gate-ci-puppet-syntax
+        - ci-puppet-compare-xml
     gate:
       - gate-ci-puppet-merge:
         - gate-ci-puppet-syntax
diff --git a/tools/run-compare-xml.sh b/tools/run-compare-xml.sh
new file mode 100755
index 0000000000..06fa59ab7a
--- /dev/null
+++ b/tools/run-compare-xml.sh
@@ -0,0 +1,68 @@
+#!/bin/bash -e
+
+# Copyright (c) 2012, AT&T Labs, Yun Mao <yunmao@gmail.com>
+# All Rights Reserved.
+# Copyright 2012 Hewlett-Packard Development Company, L.P.
+#
+#    Licensed 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.
+
+rm -fr .test
+mkdir .test
+cd .test
+git clone https://review.openstack.org/p/openstack-ci/jenkins-job-builder --depth 1
+cd jenkins-job-builder
+# These are $WORKSPACE/.test/jenkins-job-builder/.test/...
+mkdir -p .test/old/config
+mkdir -p .test/old/out
+mkdir -p .test/new/config
+mkdir -p .test/new/out
+cd ../..
+
+GITHEAD=`git rev-parse HEAD`
+
+# First generate output from HEAD~1
+git checkout HEAD~1
+cp modules/openstack_project/files/jenkins_job_builder/config/* .test/jenkins-job-builder/.test/old/config
+
+# Then use that as a reference to compare against HEAD
+git checkout $GITHEAD
+cp modules/openstack_project/files/jenkins_job_builder/config/* .test/jenkins-job-builder/.test/new/config
+
+cd .test/jenkins-job-builder
+
+tox -e compare-xml-old
+tox -e compare-xml-new
+
+CHANGED=0
+for x in `(cd .test/old/out && find -type f)`
+do
+    if ! diff -u .test/old/out/$x .test/new/out/$x >/dev/null 2>&1
+    then
+	CHANGED=1
+	echo "============================================================"
+	echo $x
+	echo "------------------------------------------------------------"
+    fi
+    diff -u .test/old/out/$x .test/new/out/$x || /bin/true
+done
+cd ../..
+
+echo
+echo "You are in detached HEAD mode. If you are a developer"
+echo "and not very familiar with git, you might want to do"
+echo "'git checkout branch-name' to go back to your branch."
+
+if [ "$CHANGED" -eq "1" ]; then
+    exit 1
+fi
+exit 0