Added CI scripts for PetitParser.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 09 Nov 2015 00:38:23 +0000
changeset 549 8ad6734770cd
parent 548 5536a6da50e4
child 550 777f3813febc
Added CI scripts for PetitParser.
.hgignore
ci/README.md
ci/ci-common.sh
ci/ci-pharo-benchmark.sh
ci/ci-pharo-common.sh
ci/ci-pharo-test.sh
--- a/.hgignore	Thu Oct 08 09:41:03 2015 +0100
+++ b/.hgignore	Mon Nov 09 00:38:23 2015 +0000
@@ -16,3 +16,14 @@
 st.chg
 package-cache
 mc
+
+# CI Artefacts
+ci/package-cache
+ci/pharo*
+ci/test-data
+ci/*.image
+ci/*.changes
+ci/*.fuel
+ci/*.json
+ci/*.xml
+ci/*.log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ci/README.md	Mon Nov 09 00:38:23 2015 +0000
@@ -0,0 +1,19 @@
+# CI scripts for PetitParser / PetitCompiler
+
+This directory contains a set of scripts to run CI jobs. 
+
+## Pharo
+
+To run tests the same way CI does, run:
+
+    wget -O- https://bitbucket.org/janvrany/stx-goodies-petitparser/raw/tip/ci/ci-pharo-test.sh | bash -x
+
+To run benchmarks the same way CI does, run:
+
+    wget -O- https://bitbucket.org/janvrany/stx-goodies-petitparser/raw/tip/ci/ci-pharo-benchmark.sh | bash -x
+
+
+## Smalltalk/X
+
+To be written...
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ci/ci-common.sh	Mon Nov 09 00:38:23 2015 +0000
@@ -0,0 +1,65 @@
+#
+# A set of functions to be used in PetitParser's CI jobs
+#
+
+# Set up some environment variables (if not set by CI)
+if [ -z "$BUILD_NUMBER" ]; then
+   BUILD_NUMBER=0
+fi
+PETITCOMPILER_DATA_DIRECTORY=test-data
+PETITCOMPILER_BENCHMARK_REPORT=benchmark-results-$BUILD_NUMBER.json
+
+function ci_download_and_unzip_file {
+  local url=$1
+  local where=$PETITCOMPILER_DATA_DIRECTORY
+  local file=${url##*/}
+  local directory=${file%.zip}
+  local status=0
+
+  if [ ! -d "$PETITCOMPILER_DATA_DIRECTORY/$directory" ]; then
+    pushd "$PETITCOMPILER_DATA_DIRECTORY"
+      wget -O "$file" "$url"
+      set +e
+      unzip -o "$file"
+      status=$?
+      set -e
+      case "$status" in
+        0)
+          status=0
+          ;;
+        1)
+          status=0
+          ;;
+        2)
+          status=0
+          ;;
+        *)
+          ;;
+      esac
+      rm -f "$file"
+    popd
+  else
+    echo "Skipped $directory (already present)"
+  fi
+  return "$status"
+}
+
+function ci_download_test_data {
+	if [ ! -x "$PETITCOMPILER_DATA_DIRECTORY" ]; then
+		mkdir -p "$PETITCOMPILER_DATA_DIRECTORY"
+	fi
+	ci_download_and_unzip_file http://scg.unibe.ch/download/jk/petit-compiler/java-src.zip
+	ci_download_and_unzip_file http://scg.unibe.ch/download/jk/petit-compiler/smalltalk-src.zip
+	ci_download_and_unzip_file http://scg.unibe.ch/download/jk/petit-compiler/ruby-src.zip
+	ci_download_and_unzip_file http://scg.unibe.ch/download/jk/petit-compiler/python-src.zip
+}
+
+function ci_upload_benchmark_results {
+	if [ -f "$PETITCOMPILER_BENCHMARK_REPORT" ]; then
+  		url 'https://swing.fit.cvut.cz/calipel/imports/push-import'  \
+		    --user "$CALIPEL_USER:$CALIPEL_PASSWORD" \
+		    --compressed \
+		    -H 'Content-Type: application/json' \
+		    --data "@$PETITCOMPILER_BENCHMARK_REPORT"
+	fi
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ci/ci-pharo-benchmark.sh	Mon Nov 09 00:38:23 2015 +0000
@@ -0,0 +1,26 @@
+#!/bin/bash
+# 
+# a CI job to run PetitCompiler benchmarks on Pharo
+#
+set -e
+
+if test -x "ci-pharo-common.sh"; then
+    wget -O "ci-pharo-common.sh" https://bitbucket.org/janvrany/stx-goodies-petitparser/raw/tip/ci/ci-pharo-common.sh
+fi
+. ci-pharo-common.sh
+
+ci_download_test_data
+
+ci_pharo_download_pharo
+ci_pharo_download_petitparser
+
+set +e
+./pharo $IMAGE benchmark --tag PetitParser --setup "Author fullName:'Jenkins'" --json -o $PETITCOMPILER_BENCHMARK_REPORT PPCCalipelBenchmark;
+status=$?
+set -e
+
+ci_upload_benchmark_results
+
+exit $status
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ci/ci-pharo-common.sh	Mon Nov 09 00:38:23 2015 +0000
@@ -0,0 +1,54 @@
+#
+# A set of functions to be used in PetitParser's Pharo CI jobs
+#
+
+if test -x "ci-common.sh"; then
+    echo wget -O "ci-common.sh" https://bitbucket.org/janvrany/stx-goodies-petitparser/raw/tip/ci/ci-common.sh
+fi
+. ci-common.sh
+
+
+IMAGE_BASE=PetitParser-$BUILD_NUMBER
+IMAGE=$IMAGE_BASE.image
+
+# A function to download Pharo. The version of Pharo 
+# is taken from environment variable PHARO. If it's not
+# defined, defaults to  Pharo 5.0 
+function ci_pharo_download_pharo {
+    if [ -z "$PHARO" ]; then
+        PHARO=5.0
+    fi
+
+    if [ ! -x pharo-ui ]; then
+        rm -rf pharo pharo-ui pharo-vm
+        wget -O- http://swing.fit.cvut.cz/download/pharo/vm-swing | bash
+    fi
+
+    if [ ! -r Pharo.image ]; then
+        rm -rf Pharo.image Pharo.changes
+        if [ "$PHARO" == "3.0" ]; then
+            wget -O- get.pharo.org/30 | bash
+        elif [  "$PHARO" == "4.0"  ]; then
+            wget -O- get.pharo.org/40 | bash
+        elif [  "$PHARO" == "5.0"  ]; then
+            wget -O- get.pharo.org/50 | bash   
+        else
+            echo "Unknown PHARO version: $PHARO"
+            exit 1
+        fi
+    fi
+}
+
+# A function to download PetitCompiler and build an image
+
+function ci_pharo_download_petitparser {
+    ./pharo Pharo.image save $IMAGE_BASE
+    ./pharo $IMAGE config http://smalltalkhub.com/mc/JanVrany/CalipeL-S/main ConfigurationOfCalipeLS --install=0.1
+    ./pharo $IMAGE eval --save "
+
+    Gofer new smalltalkhubUser: 'JanKurs' project: 'PetitParser';
+        configurationOf: #PetitCompiler; load.
+    (Smalltalk at: #ConfigurationOfPetitCompiler) perform: #'loadDevelopment'.
+    "
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ci/ci-pharo-test.sh	Mon Nov 09 00:38:23 2015 +0000
@@ -0,0 +1,29 @@
+#!/bin/bash
+# 
+# a CI job to run PetitCompiler tests on Pharo
+#
+set -e
+
+if test -x "ci-pharo-common.sh"; then
+    echo wget -O "ci-pharo-common.sh" fail-here
+fi
+. ci-pharo-common.sh
+
+ci_download_test_data
+
+ci_pharo_download_pharo
+ci_pharo_download_petitparser
+
+rm -rf Petit*Test.xml
+# Must turn off errexit option, Pharo return non-zero
+# status when one or more tests fail. 
+set +e
+./pharo $IMAGE test --junit-xml-output  \
+    PetitTests                          \
+    PetitAnalyzer                       \
+    PetitSmalltalk                      \
+    PetitJava                           \
+    PetitIslands                        \
+    PetitCompiler-Tests                 \
+    PetitCompiler-Extras-Tests		
+set -e