Last active
August 5, 2024 16:57
-
-
Save monperrus/866f482f73af5f910ec7c3c191d44053 to your computer and use it in GitHub Desktop.
spoon build.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Compiles an open-source project, spoons the project, runs the tests | |
# and checks at each step if there aren't errors. To execute this | |
# script, create a job in jenkins. | |
# | |
# | |
# Typical usage: | |
# | |
# $ cd my-maven-project-with-pom | |
# $ curl http://spoon.gforge.inria.fr/jenkins/build.sh | bash | |
# Allow to define some options to the maven command, such as debug or memory options | |
# -Drat.skip=true is for skipping license check which fails on some project incl. https://ci.inria.fr/sos/job/Commons-lang/ | |
MAVEN_COMMAND="mvn $MVN_OPTS -Dmaven.javadoc.skip=true -Drat.skip=true -Denforcer.skip=true " | |
echo " " | |
echo "-------------------------------------------------------" | |
echo "Initializes project" | |
echo "-------------------------------------------------------" | |
echo " " | |
# required if workspace has not been cleaned | |
git reset --hard | |
# Gets some information from pom.xml. | |
ARTIFACT_ID=$(xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:artifactId" pom.xml) | |
VERSION=$(xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:version" pom.xml) | |
MODULES_JOB=$(cat pom.xml | grep "<modules>") | |
if [ -z "$MODULES_JOB" ]; then | |
MODULES_JOB="./" | |
else | |
MODULES_JOB=$(xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -T -t -m "/x:project/x:modules/x:module" -v "." -o "/" -n pom.xml) | |
fi | |
# Gets some information from git. | |
VERSION_ID=$(git rev-parse HEAD) | |
# Removes checkstyle plugin because spoon don't make beautiful code in output. | |
HAS_CHECKSTYLE=$(cat pom.xml | grep "maven-checkstyle-plugin") | |
if [ ! -z HAS_CHECKSTYLE ]; then | |
xmlstarlet ed -N x="http://maven.apache.org/POM/4.0.0" -d "/x:project/x:build/x:plugins/x:plugin[x:artifactId='maven-checkstyle-plugin']" pom.xml > pom.bak.xml | |
mv pom.bak.xml pom.xml | |
fi | |
# Removes enforcer plugin because we would like specify our personnal repository. | |
HAS_ENFORCER=$(cat pom.xml | grep "maven-enforcer-plugin") | |
if [ ! -z HAS_ENFORCER ]; then | |
xmlstarlet ed -N x="http://maven.apache.org/POM/4.0.0" -d "/x:project/x:build/x:plugins/x:plugin[x:artifactId='maven-enforcer-plugin']" pom.xml > pom.bak.xml | |
mv pom.bak.xml pom.xml | |
fi | |
# Displays variables used in the build. | |
echo "" | |
echo "--- Displays variables used in the build ---" | |
echo "Artifact id: $ARTIFACT_ID" | |
echo "Version: $VERSION" | |
echo "Modules job:" | |
for module in ${MODULES_JOB// / }; do | |
if [ "$module" = "./" ]; then | |
echo "- "${JOB_NAME} | |
else | |
echo "- "${module}q | |
fi | |
done | |
if [ ! -z HAS_CHECKSTYLE ]; then | |
echo "Has checkstyle: true" | |
else | |
echo "Has checkstyle: false" | |
fi | |
if [ ! -z HAS_ENFORCER ]; then | |
echo "Has enforcer: true" | |
else | |
echo "Has enforcer: false" | |
fi | |
echo "Git version id: $VERSION_ID" | |
## maven uses the Java from JAVA_HOME, not from the home | |
echo "Java home: $JAVA_HOME" | |
JAVA_VERSION=`$JAVA_HOME/bin/java -version 2>&1` | |
echo "Java version: $JAVA_VERSION" | |
echo " " | |
echo "-------------------------------------------------------" | |
echo "Compiles project (at the root project if it's a multi module project) without spoon" | |
echo "-------------------------------------------------------" | |
echo " " | |
# Compiles project. | |
START_COMPILE_PROJECT=$(($(date +%s%N)/1000000)) | |
$MAVEN_COMMAND clean install | |
if [ "$?" -ne 0 ]; then | |
echo "Error: Maven compile original project unsuccessful!" | |
exit 1 | |
fi | |
END_COMPILE_PROJECT=$(($(date +%s%N)/1000000)) | |
DIFF_COMPILE_PROJECT=$(echo "$END_COMPILE_PROJECT - $START_COMPILE_PROJECT" | bc) | |
# Saves the report at the root of the project. | |
for module in ${MODULES_JOB// / }; do | |
REPORT_DIRECTORY=${module}"target/surefire-reports" | |
module_name=$(echo ${module} | tr -d '/ ') | |
if [ -d "$REPORT_DIRECTORY" ]; then | |
NB_TESTS_COMPILE=0 | |
NB_ERRORS_COMPILE=0 | |
NB_SKIPPED_COMPILE=0 | |
NB_FAILURES_COMPILE=0 | |
for i in `ls $REPORT_DIRECTORY/TEST-*.xml`; do | |
tests=$(xmlstarlet sel -t -v "/testsuite/@tests" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_TESTS_COMPILE=$((NB_TESTS_COMPILE+$tests)) | |
fi | |
errors=$(xmlstarlet sel -t -v "/testsuite/@errors" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_ERRORS_COMPILE=$((NB_ERRORS_COMPILE+$errors)) | |
fi | |
skip=$(xmlstarlet sel -t -v "/testsuite/@skipped" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_SKIPPED_COMPILE=$((NB_SKIPPED_COMPILE+$skip)) | |
fi | |
failures=$(xmlstarlet sel -t -v "/testsuite/@failures" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_FAILURES_COMPILE=$((NB_FAILURES_COMPILE+$failures)) | |
fi | |
done | |
echo -e "tests: $NB_TESTS_COMPILE\nerrors: $NB_ERRORS_COMPILE\nskipped: $NB_SKIPPED_COMPILE\nfailures: $NB_FAILURES_COMPILE" > result-spoon-tests-${module_name}.txt | |
fi | |
done | |
# Displays results of the maven compile. | |
echo " " | |
echo "--- Displays results of the maven compile ---" | |
echo "Time to compile: $DIFF_COMPILE_PROJECT" | |
echo "Number of tests: $NB_TESTS_COMPILE" | |
echo "Number of tests skipped: $NB_SKIPPED_COMPILE" | |
echo "Number of failures in tests: $NB_FAILURES_COMPILE" | |
echo "Number of errors in tests: $NB_ERRORS_COMPILE" | |
echo " " | |
echo "-------------------------------------------------------" | |
echo "Inserts the maven plugin to spoon the project" | |
echo "-------------------------------------------------------" | |
echo " " | |
# Edits pom xml to prepare project to spoon project. | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project" --type elem -n pluginRepositories -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories" --type elem -n pluginRepository -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n id -v "spoon-snapshot" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n name -v "Maven repository for Spoon Snapshot" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n url -v "https://oss.sonatype.org/content/repositories/snapshots/" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n snapshots -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories" --type elem -n pluginRepository -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n id -v "spoon-beta" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n name -v "Maven repository for Spoon beta" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:pluginRepositories/x:pluginRepository[last()]" --type elem -n url -v "https://repo1.maven.org/maven2/" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins" --type elem -n plugin -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]" --type elem -n groupId -v "fr.inria.gforge.spoon" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]" --type elem -n artifactId -v "spoon-maven-plugin" pom.xml | |
# we depend on the latest version of spoon-maven-plugin) | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]" --type elem -n version -v "3.8.0" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]" --type elem -n executions -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:executions" --type elem -n execution -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:executions/x:execution" --type elem -n phase -v "generate-sources" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:executions/x:execution" --type elem -n goals -v "" pom.xml | |
# we generate the sources separately | |
#xmlstarlet ed -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:executions/x:execution/x:goals" --type elem -n goal -v "generate" pom.bak8.xml > pom.bak9.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]" --type elem -n configuration -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:configuration" --type elem -n processors -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:configuration/x:processors" --type elem -n processor -v "spoon.processing.SpoonTagger" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]" --type elem -n dependencies -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:dependencies" --type elem -n dependency -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:dependencies/x:dependency[last()]" --type elem -n groupId -v "fr.inria.gforge.spoon" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:dependencies/x:dependency[last()]" --type elem -n artifactId -v "spoon-core" pom.xml | |
## note: before we used ranges [10.0.O,), but this does not work in plugins for some obscure reason | |
# so we have to inject the latest version instead | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:build/x:plugins/x:plugin[last()]/x:dependencies/x:dependency[last()]" --type elem -n version -v $(curl -L "https://www.monperrus.net/martin/last-version-maven.py?groupId=fr.inria.gforge.spoon&artifactId=spoon-core") pom.xml | |
# we add the spoon-core dependency to the project, resolve the ranges and remove it. The resolve ranges plugin only works for dependencies of the project, but not for plugins. But the rewrite engine of the plugin also updates the plugin version. | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:dependencies" -t elem -n dependency -v "" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:dependencies/x:dependency[last()]" --type elem -n groupId -v "fr.inria.gforge.spoon" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:dependencies/x:dependency[last()]" --type elem -n artifactId -v "spoon-core" pom.xml | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -s "/x:project/x:dependencies/x:dependency[last()]" --type elem -n version -v "[7.0.0-SNAPSHOT,)" pom.xml | |
$MAVEN_COMMAND versions:resolve-ranges -DallowSnapshots=true | |
# remove the dependency again | |
xmlstarlet ed -L -N x="http://maven.apache.org/POM/4.0.0" -d "/x:project/x:dependencies/x:dependency[last()]" pom.xml | |
# Purge the project from snapshots | |
# Avoid to use an old snapshot of Spoon and force the resolution | |
$MAVEN_COMMAND dependency:purge-local-repository -DmanualInclude="fr.inria.gforge.spoon:spoon-core" -DsnapshotsOnly=true | |
# Compiles project with spoon configuration. | |
START_COMPILE_WITH_SPOON=$(($(date +%s%N)/1000000)) | |
$MAVEN_COMMAND clean test -DskipTests | |
if [ "$?" -ne 0 ]; then | |
echo "Error: Maven compile with spoon unsuccessful!" | |
exit 1 | |
fi | |
END_COMPILE_WITH_SPOON=$(($(date +%s%N)/1000000)) | |
DIFF_WITH_SPOON=$(echo "$END_COMPILE_WITH_SPOON - $START_COMPILE_WITH_SPOON" | bc) | |
# creating the sources in target/generated-sources | |
mvn fr.inria.gforge.spoon::spoon-maven-plugin:generate | |
for module in ${MODULES_JOB// / }; do | |
if [ ! -f ${module}"target/generated-sources/spoon/spoon/Spoon.java" ]; then | |
echo "ERROR: no tag class, spoon has failed" | |
exit -1 | |
fi | |
done | |
# Overwrites source folder. | |
for module in ${MODULES_JOB// / }; do | |
GENERATED_DIRECTORY=${module}"target/generated-sources/spoon/" | |
if [ -d "${module}src/main/java" ]; then | |
echo normal maven case | |
cp -Rf ${GENERATED_DIRECTORY}* ${module}src/main/java | |
git diff src | head -100 | |
else | |
if [ -d "${module}src" ]; then | |
cp -Rf ${GENERATED_DIRECTORY}* ${module}src | |
fi | |
fi | |
done | |
# Compiles project with source spooned. | |
START_COMPILE_SPOON_SPOON=$(($(date +%s%N)/1000000)) | |
$MAVEN_COMMAND clean install | |
if [ "$?" -ne 0 ]; then | |
echo "Error: Maven compile with spoon unsuccessful!" | |
exit 1 | |
fi | |
END_COMPILE_SPOON_SPOON=$(($(date +%s%N)/1000000)) | |
DIFF_SPOON_SPOON=$(echo "$END_COMPILE_SPOON_SPOON - $START_COMPILE_SPOON_SPOON" | bc) | |
# Displays results of the maven compile. | |
echo " " | |
echo "--- Displays results of the maven compile with spoon of spoon ---" | |
echo "Time to compile with spoon of spoon: $DIFF_SPOON_SPOON" | |
# Saves the report at the root of the project. | |
for module in ${MODULES_JOB// / }; do | |
REPORT_DIRECTORY=${module}"target/surefire-reports" | |
module_name=$(echo ${module} | tr -d '/ ') | |
if [ -d "$REPORT_DIRECTORY" ]; then | |
NB_TESTS_SPOON=0 | |
NB_ERRORS_SPOON=0 | |
NB_SKIPPED_SPOON=0 | |
NB_FAILURES_SPOON=0 | |
for i in `ls $REPORT_DIRECTORY/TEST-*.xml`; do | |
tests=$(xmlstarlet sel -t -v "/testsuite/@tests" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_TESTS_SPOON=$((NB_TESTS_SPOON+$tests)) | |
fi | |
errors=$(xmlstarlet sel -t -v "/testsuite/@errors" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_ERRORS_SPOON=$((NB_ERRORS_SPOON+$errors)) | |
fi | |
skip=$(xmlstarlet sel -t -v "/testsuite/@skipped" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_SKIPPED_SPOON=$((NB_SKIPPED_SPOON+$skip)) | |
fi | |
failures=$(xmlstarlet sel -t -v "/testsuite/@failures" $i) | |
if [ "$?" -eq 0 ]; then | |
NB_FAILURES_SPOON=$((NB_FAILURES_SPOON+$failures)) | |
fi | |
done | |
echo -e "tests: $NB_TESTS_SPOON\nerrors: $NB_ERRORS_SPOON\nskipped: $NB_SKIPPED_SPOON\nfailures: $NB_FAILURES_SPOON" > result-spoon-tests-spooned-${module_name}.txt | |
fi | |
done | |
# Displays results of the maven compile. | |
echo " " | |
echo "--- Displays results of the maven compile with spoon ---" | |
echo "Time to compile with spoon: $DIFF_WITH_SPOON" | |
echo "Number of tests: $NB_TESTS_SPOON" | |
echo "Number of tests skipped: $NB_SKIPPED_SPOON" | |
echo "Number of failures in tests: $NB_FAILURES_SPOON" | |
echo "Number of errors in tests: $NB_ERRORS_SPOON" | |
if [ ! "$NB_TESTS_SPOON" -eq "$NB_TESTS_COMPILE" ]; then | |
echo "Error: Tests aren't equals between original compile and spoon compile!" | |
exit 1 | |
fi | |
if [ ! "$NB_SKIPPED_SPOON" -eq "$NB_SKIPPED_COMPILE" ]; then | |
echo "Error: Tests skipped aren't equals between original compile and spoon compile!" | |
exit 1 | |
fi | |
if [ ! "$NB_FAILURES_SPOON" -eq "$NB_FAILURES_COMPILE" ]; then | |
echo "Error: Tests failures aren't equals between original compile and spoon compile!" | |
exit 1 | |
fi | |
if [ ! "$NB_ERRORS_SPOON" -eq "$NB_ERRORS_COMPILE" ]; then | |
echo "Error: Tests errors aren't equals between original compile and spoon compile!" | |
exit 1 | |
fi | |
echo " " | |
echo "-------------------------------------------------------" | |
echo "Retrieves all results files in the project (in all sub modules if the project is a multi module project)" | |
echo "-------------------------------------------------------" | |
echo " " | |
find . -name "result-spoon-tests-*" | |
# Moves all results file in target directory. | |
for module in ${MODULES_JOB// / }; do | |
module_name=$(echo ${module} | tr -d '/ ') | |
OUTPUT_DIRECTORY="${module}target/spoon-reports" | |
if [ -f "result-spoon-tests-${module_name}.txt" ]; then | |
mkdir $OUTPUT_DIRECTORY | |
mv result-spoon-tests-${module_name}.txt $OUTPUT_DIRECTORY/result-spoon-tests.txt | |
mv result-spoon-tests-spooned-${module_name}.txt $OUTPUT_DIRECTORY/result-spoon-tests-spooned.txt | |
fi | |
done | |
if [ ! -d "target/spoon-reports" ]; then | |
mkdir -p target/spoon-reports | |
fi | |
# Creates result file. | |
echo -e "<?xml version=\"1.0\"?>\n<section name=\"\"/>" > result-spoon.xml | |
xmlstarlet ed -s "/section" --type elem -n table -v "" result-spoon.xml > result-spoon.bak.xml | |
xmlstarlet ed -s "/section/table" --type elem -n tr -v "" result-spoon.bak.xml > result-spoon.bak2.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Project" result-spoon.bak2.xml > result-spoon.bak3.xml | |
xmlstarlet ed -s "/section/table/tr/td" --type attr -n fontattribute -v "bold" result-spoon.bak3.xml > result-spoon.bak4.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Commit id version" result-spoon.bak4.xml > result-spoon.bak5.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak5.xml > result-spoon.bak6.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Project compiles" result-spoon.bak6.xml > result-spoon.bak7.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak7.xml > result-spoon.bak8.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Project tests run" result-spoon.bak8.xml > result-spoon.bak9.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak9.xml > result-spoon.bak10.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Project spooned compiles" result-spoon.bak10.xml > result-spoon.bak11.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak11.xml > result-spoon.bak12.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Project spooned tests run" result-spoon.bak12.xml > result-spoon.bak13.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak13.xml > result-spoon.bak14.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Time to spoon" result-spoon.bak14.xml > result-spoon.bak15.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak15.xml > result-spoon.bak16.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Number of CtStatment" result-spoon.bak16.xml > result-spoon.bak17.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak17.xml > result-spoon.bak18.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Time to compile project" result-spoon.bak18.xml > result-spoon.bak19.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak19.xml > result-spoon.bak20.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Time to compile project spooned" result-spoon.bak20.xml > result-spoon.bak21.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak21.xml > result-spoon.bak22.xml | |
xmlstarlet ed -s "/section/table/tr" --type elem -n td -v "Spoon(Spoon(x))=Spoon(x)" result-spoon.bak22.xml > result-spoon.bak23.xml | |
xmlstarlet ed -s "/section/table/tr/td[last()]" --type attr -n fontattribute -v "bold" result-spoon.bak23.xml > result-spoon.bak24.xml | |
mv result-spoon.bak24.xml result-spoon.xml | |
rm result-spoon.bak*.xml | |
# Saves results. | |
cp result-spoon.xml result-spoon.bak0.xml | |
counter=1 | |
for module in ${MODULES_JOB// / }; do | |
result_file="$(find "${module}target/spoon-maven-plugin" -maxdepth 1 -type f -name "result-spoon-*.xml")" | |
if [ -z "$result_file" ]; then | |
continue | |
fi | |
module_name=$(echo ${module} | tr -d '/ ') | |
xmlstarlet ed -s "/section/table" --type elem -n tr -v "" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
if [ "$module" = "./" ]; then | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "${JOB_NAME}" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
else | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "${module_name}" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
fi | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$VERSION_ID" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "OK" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
if [ -f "${module}target/spoon-reports/result-spoon-tests.txt" ]; then | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$(cat ${module}target/spoon-reports/result-spoon-tests.txt)" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
else | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "N/A" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
fi | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "OK" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
if [ -f "${module}target/spoon-reports/result-spoon-tests-spooned.txt" ]; then | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$(cat ${module}target/spoon-reports/result-spoon-tests-spooned.txt)" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
else | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "N/A" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
fi | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$(xmlstarlet sel -t -v "/project/performance" ${result_file})" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
if [ -f "target/spoon-maven-plugin/spoon-nb-statement.txt" ]; then | |
# Computes number of CtStatement. | |
NB_CTSTATEMENT=0 | |
for line in $(cat target/spoon-maven-plugin/spoon-nb-statement.txt); do | |
NB_CTSTATEMENT=$(($NB_CTSTATEMENT+$line)) | |
done | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$NB_CTSTATEMENT" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
else | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "N/A" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
fi | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$DIFF_COMPILE_PROJECT" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$DIFF_WITH_SPOON" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
xmlstarlet ed -s "/section/table/tr[last()]" --type elem -n td -v "$DIFF_SPOON_SPOON" result-spoon.bak$((counter-1)).xml > result-spoon.bak$counter.xml | |
counter=$((counter+1)) | |
done | |
mv result-spoon.bak$((counter-1)).xml result-spoon.xml | |
rm result-spoon.bak*.xml | |
mv result-spoon.xml target/spoon-reports/result-spoon.xml | |
cat target/spoon-reports/result-spoon.xml | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment