From 4898b94b0a2f5097830f87766bb41b9c23104ba6 Mon Sep 17 00:00:00 2001 From: "philippe.dul" Date: Mon, 13 Mar 2023 17:11:23 +0100 Subject: [PATCH] [releng] Fix build download IFE sample and use pipeline for promotion --- Jenkinsfile | 82 ++++++++++-------- .../.classpath | 22 ++--- .../.settings/org.eclipse.jdt.core.prefs | 28 +++--- ...ight Entertainment System.test_results.ser | Bin 10887855 -> 11152195 bytes 4 files changed, 70 insertions(+), 62 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 264dbe42..e200729b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,11 +9,12 @@ pipeline { JACOCO_VERSION = "0.8.6" MVN_QUALITY_PROFILES = '-P full' JACOCO_EXEC_FILE_PATH = '${WORKSPACE}/jacoco.exec' + BUILD_KEY = (github.isPullRequest() ? CHANGE_TARGET : BRANCH_NAME).replaceFirst(/^v/, '') } stages { stage('Generate TP') { steps { - sh 'mvn verify -e -f releng/org.polarsys.capella.docgen.target/pom.xml' + sh 'mvn verify -e -f releng/org.polarsys.capella.docgen.target/pom.xml' } } @@ -31,52 +32,59 @@ pipeline { } } stage('Deploy') { - when { - not { changeRequest() } + steps { + script { + def deploymentDirName = + (github.isPullRequest() ? "${BUILD_KEY}-${BRANCH_NAME}-${BUILD_ID}" : "${BRANCH_NAME}-${BUILD_ID}") + .replaceAll('/','-') + + deployer.addonNightlyDropins("${WORKSPACE}/releng/org.polarsys.capella.docgen.site/target/*-dropins-*.zip", deploymentDirName) + deployer.addonNightlyUpdateSite("${WORKSPACE}/releng/org.polarsys.capella.docgen.site/target/repository/*", deploymentDirName) + deployer.addonNightlyUpdateSite("${WORKSPACE}/releng/org.polarsys.capella.docgen.site/target/*-updateSite-*.zip", deploymentDirName) + + currentBuild.description = "${deploymentDirName} - drop-in - update-site" + } } + } + stage('Deploy as nightly') { steps { - sshagent ( ['projects-storage.eclipse.org-bot-ssh']) { - script { - def VERSION = BRANCH_NAME - if (VERSION.matches("v\\d\\.\\d\\.x")) { - VERSION = VERSION.substring(1) - } - - def DEST_UPDATESITE_DIR='/home/data/httpd/download.eclipse.org/capella/addons/xhtmldocgen/updates/nightly/'+VERSION - def DEST_DROPINS_DIR='/home/data/httpd/download.eclipse.org/capella/addons/xhtmldocgen/dropins/nightly/'+VERSION + script { + def nightlyDirName = + (github.isPullRequest() ? "${BUILD_KEY}-${BRANCH_NAME}" : "${BRANCH_NAME}") + .replaceAll('/','-') + deployer.cleanAddonNightlyArtefacts(nightlyDirName) + deployer.addonNightlyDropins("${WORKSPACE}/releng/org.polarsys.capella.docgen.site/target/*-dropins-*.zip", nightlyDirName) + deployer.addonNightlyUpdateSite("${WORKSPACE}/releng/org.polarsys.capella.docgen.site/target/repository/*", nightlyDirName) + deployer.addonNightlyUpdateSite("${WORKSPACE}/releng/org.polarsys.capella.docgen.site/target/*-updateSite-*.zip", nightlyDirName) + } + } + } + stage('Run tests') { + steps { + wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) { + script { + // Retrieve the IFE sample from capella repository + checkout([$class: 'GitSCM', + branches: [[name: '*/master']], + extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: 'samples']]], + [$class: 'RelativeTargetDirectory', relativeTargetDir: 'capella']], + userRemoteConfigs: [[credentialsId: '0dea5761-867c-44db-92fa-9304c81a8653', url: 'https://github.com/eclipse/capella']] + ]) - sh "echo 'deploy update site'" - sh "ssh genie.capella@projects-storage.eclipse.org rm -rf ${DEST_UPDATESITE_DIR}" - sh "ssh genie.capella@projects-storage.eclipse.org mkdir -p ${DEST_UPDATESITE_DIR}" - sh "scp -r releng/org.polarsys.capella.docgen.site/target/repository/* genie.capella@projects-storage.eclipse.org:${DEST_UPDATESITE_DIR}" - - sh "echo 'deploy product'" - sh "ssh genie.capella@projects-storage.eclipse.org rm -rf ${DEST_DROPINS_DIR}" - sh "ssh genie.capella@projects-storage.eclipse.org mkdir -p ${DEST_DROPINS_DIR}" - sh "scp -r releng/org.polarsys.capella.docgen.site/target/*-dropins-*.zip genie.capella@projects-storage.eclipse.org:${DEST_DROPINS_DIR}" + sh "cp -r capella/samples/In-Flight\\ Entertainment\\ System/* \"tests/plugins/org.polarsys.capella.docgen.test.ju/model/In-Flight Entertainment System/\"" + + // Launch test + sh 'mvn -Dmaven.test.failure.ignore=true -Dtycho.localArtifacts=ignore integration-test -P tests -e -f pom.xml' } } } - } - stage('Run tests') { - steps { - wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) { - script { - // Retrieve the IFE sample from capella repository - sh "git clone --filter=blob:none --no-checkout -b master --sparse \"https://github.com/eclipse/capella.git\" capella; cd capella; git sparse-checkout add samples; git checkout; cd .." - sh "cp capella/samples/In-Flight\\ Entertainment\\ System/* \"tests/plugins/org.polarsys.capella.docgen.test.ju/model/In-Flight Entertainment System/\"" - - // Launch test - sh 'mvn -Dmaven.test.failure.ignore=true -Dtycho.localArtifacts=ignore integration-test -P tests -e -f pom.xml' - } - } - } - } + } stage('Publish results') { steps { junit allowEmptyResults: true, testResults: '*.xml,**/target/surefire-reports/*.xml' sh "mvn -Djacoco.dataFile=$JACOCO_EXEC_FILE_PATH org.jacoco:jacoco-maven-plugin:$JACOCO_VERSION:report $MVN_QUALITY_PROFILES -e -f pom.xml" - } + archiveArtifacts artifacts: 'tests/**/*.ser' + } } stage('Perform Sonar analysis') { environment { diff --git a/tests/plugins/org.polarsys.capella.docgen.test.ju/.classpath b/tests/plugins/org.polarsys.capella.docgen.test.ju/.classpath index a81eb12b..91457494 100644 --- a/tests/plugins/org.polarsys.capella.docgen.test.ju/.classpath +++ b/tests/plugins/org.polarsys.capella.docgen.test.ju/.classpath @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/tests/plugins/org.polarsys.capella.docgen.test.ju/.settings/org.eclipse.jdt.core.prefs b/tests/plugins/org.polarsys.capella.docgen.test.ju/.settings/org.eclipse.jdt.core.prefs index 910a770e..e2e9c66d 100644 --- a/tests/plugins/org.polarsys.capella.docgen.test.ju/.settings/org.eclipse.jdt.core.prefs +++ b/tests/plugins/org.polarsys.capella.docgen.test.ju/.settings/org.eclipse.jdt.core.prefs @@ -1,14 +1,14 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=14 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=14 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=14 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/tests/plugins/org.polarsys.capella.docgen.test.ju/model/In-Flight Entertainment System/In-Flight Entertainment System.test_results.ser b/tests/plugins/org.polarsys.capella.docgen.test.ju/model/In-Flight Entertainment System/In-Flight Entertainment System.test_results.ser index a6093dfcdf939d300e3797380a53454f1cccebcf..6b9dd9c2669bee8be784b8b32589b218ed7cc1bc 100644 GIT binary patch delta 50742 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 delta 2144 zcmaLYdr(wW7y$4&mp6*+gI5x|>wTc zkq}u$%m<|@?Kea@P+}7)WD<^4#F7=78DdR5)cRm|ri`IKet+F_?m72+-B0_D8=dYv zU{oRJjPJd#IJO=Xi?@G8n1{EI(YfvoOKq8l^AV?AtvR$chae7Ga}2%@ zD9#11b3!jdVs)R#T&r^}AY3C<*h~ik;x7x6v#4>H6&QzEzv~HW4q4ZJLwm|>kS(%< zp0dZ5{z02+<|BJ(s(JiI3mx9*0K*#>l$+3)yaf=Gw{XEd*!qUZDjGK56eST(m;vG# z*#KeP=Xj=2ep3D#2g`mFUAF+`nAC?r|3i^;KM??FA{Y`;7PI*G%Ea%)Ci<1s>$VuY zZZ9fxB2o~KC+IT?Wi95rIap*PX*FZtx0@R=rH`c{NJNsGViw+&=m_P3lA?Of&Pt!v zTR%v~XA70}gaoW79JljmiGvfAI4riDq{VK|$OVesT+hZ{&k~(Mq%m`9c0( z|Bqzg^Rs_Efy&N$eNaB20V)pe-1h%`?u;}8)=3DV4<`KK!Nk+23`nsqx7| z+w%jcJ^vZ7=RZ55rIE&~Q6O3ak;Xy!-6V3VvaS(0(H9h_>lAwaP7s{G^ITF2C(urv zaFVajVO^SRe-9`0gk|M6*9iOA)Y}|#zjfHbL51J*wMPGGp$7T$&>#=qcOJOw;(o%u zJmqZ8R%?WO$kYfkIM^o$IXzF;N#o)W7#FWiyA0X(dHSUgba(Al-i#njH%s-II6ee( zq0%Da0otG4F?hTaImWshCHEv??OodwT50rXq1+cS-mci_>I&y5R^aKkf+^Di=2QnP zmoQ~lqTy8iR2VYlK$bmpwub(?j~3>JL1C_Z>{*)JEl1%<0m#YKO_oQ(lkWz$c97Zw{lYtq#Tu~eO~4#lDMpiX!p^E=M^WBoa!ejA<^&T`4= zS=8QgR6rFG8&Et-K#Ax@l!P{-O`wQK9*H6aEa?g22*0)^FUqH5YhOYy!`RxCA4>?Q zKd$5Jln45esTxk9s^L_W2CCuo>mR_iv#*qdQ$xE9l!>yy(C*a>?(~y&uOcOUvMxJq z2(Hw)T_vnyrMDq)ew*WTlZ@I%Z3f$@Ej>5LeEm^fzB%`1M&+NHxf7hzI7nS&ThVK1 z8@R}FJ$ku0%BdGzC*Zk2wbhLITM$RO$wdX5Twb@h$IZ3WKMirn8#SAm*r}LJmt>Z6 z-oPN3Ic;ZmX}kLll#h0z0`vy7yB9Vj(0X+t+J%ZxG1RL|E)IisdD9~^pzTe1b=Dcs zTSuX{Zntk25rSeQ2sa+e++qqhQ%WaISiq+R@oZ$wS3z$nOVJ**7nQ*+<(r`tYUh`G z#=w!{^3Q&vqs9AB1*(M6;;OSxa(0IL(#AiQHM4E6a)b{xRi|bfrR-7_WtXafU3x2R z56<`LiCx1B5yDUF_J7IK^>=pqe#lO*c_9uoH)~iSUiz-N<5vXmH=yR}hf75PJG+wH=vh?)Npy|aHxhFG#^2Y=qPFegXUw7V%n@dhTef@?eU#jko27p GMgI-{_L*b=