You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/12/29 18:21:20 UTC

[jackrabbit-filevault-jenkins-lib] branch feature/JCRVLT-580-parameterize-maven-version created (now 1876f9f)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a change to branch feature/JCRVLT-580-parameterize-maven-version
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault-jenkins-lib.git.


      at 1876f9f  JCRVLT-580 allow to parameterize Maven version

This branch includes the following new commits:

     new 1876f9f  JCRVLT-580 allow to parameterize Maven version

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[jackrabbit-filevault-jenkins-lib] 01/01: JCRVLT-580 allow to parameterize Maven version

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/JCRVLT-580-parameterize-maven-version
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault-jenkins-lib.git

commit 1876f9f24cd7feb6387a055210e5bec6b98a2a5b
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Wed Dec 29 19:20:25 2021 +0100

    JCRVLT-580 allow to parameterize Maven version
---
 vars/fileVaultMavenStdBuild.groovy | 58 +++++++++++++++++++++++++++++---------
 1 file changed, 45 insertions(+), 13 deletions(-)

diff --git a/vars/fileVaultMavenStdBuild.groovy b/vars/fileVaultMavenStdBuild.groovy
index 070b123..7fb9077 100644
--- a/vars/fileVaultMavenStdBuild.groovy
+++ b/vars/fileVaultMavenStdBuild.groovy
@@ -22,8 +22,12 @@ def isOnMainBranch() {
 }
 
 def executeMaven(String jdkLabel, String mavenArguments, String publisherStrategy) {
+    executeMaven(jdkLabel, 'maven_3_latest', mavenArguments, publisherStrategy)
+}
+
+def executeMaven(String jdkLabel, String mavenLabel, String mavenArguments, String publisherStrategy) {
     withMaven(
-        maven: 'maven_3_latest',
+        maven: mavenLabel,
         jdk: jdkLabel,
         mavenLocalRepo: '.repository',
         publisherStrategy: publisherStrategy) {
@@ -35,15 +39,31 @@ def executeMaven(String jdkLabel, String mavenArguments, String publisherStrateg
     }
 }
 
-def buildStage(final int jdkVersion, final String nodeLabel, final boolean isMainBuild, final String sonarProjectKey) {
+// always major.minor.qualifier version parts or just one (which means latest of that major version)
+String getMavenLabel(String mavenVersion) {
+    String versionLabel
+    if (mavenVersion =~ /\d+/) {
+        versionLabel = "${mavenVersion}_latest"
+    } else if (mavenVersion =~ /\d+\.\d+\.\d+/) {
+        // make sure it 
+        versionLabel = mavenVersion
+    } else {
+        throw new IllegalArgumentException('mavenVersion must be either one integer or three integers separated by dot')
+    }
+    // valid installation names in https://cwiki.apache.org/confluence/display/INFRA/Maven+Installation+Matrix and https://github.com/apache/infrastructure-p6/blob/production/modules/jenkins_client_master/files/hudson.tasks.Maven.xml
+    return "maven_${versionLabel}${isUnix?'':'_windows'}" 
+}
+
+def buildStage(final int jdkVersion, final String nodeLabel, final String mavenVersion, final boolean isMainBuild, final String sonarProjectKey) {
     return {
         // https://cwiki.apache.org/confluence/display/INFRA/JDK+Installation+Matrix
-        def availableJDKs = [ 8: 'jdk_1.8_latest', 9: 'jdk_1.9_latest', 10: 'jdk_10_latest', 11: 'jdk_11_latest', 12: 'jdk_12_latest', 13: 'jdk_13_latest', 14: 'jdk_14_latest', 15: 'jdk_15_latest', 16: 'jdk_16_latest', 17: 'jdk_17_latest', 18: 'jdk_18_latest']
+        def availableJDKs = [ 8: 'jdk_1.8_latest', 9: 'jdk_1.9_latest', 10: 'jdk_10_latest', 11: 'jdk_11_latest', 12: 'jdk_12_latest', 13: 'jdk_13_latest', 14: 'jdk_14_latest', 15: 'jdk_15_latest', 16: 'jdk_16_latest', 17: 'jdk_17_latest', 18: 'jdk_18_latest', 19: 'jdk_19_latest']
         final String jdkLabel = availableJDKs[jdkVersion]
+        final String mavenLabel = getMavenLabel(mavenVersion)
         final String wagonPluginGav = "org.codehaus.mojo:wagon-maven-plugin:2.0.2"
-        final String sonarPluginGav = "org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.0.2155"
+        final String sonarPluginGav = "org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184"
         node(label: nodeLabel) {
-            stage("${isMainBuild ? 'Main ' : ''}Maven Build (JDK ${jdkVersion}, ${nodeLabel})") {
+            stage("${isMainBuild ? 'Main ' : ''}Maven Build (JDK ${jdkVersion}, Maven ${mavenVersion}, ${nodeLabel})") {
                 timeout(60) {
                     echo "Running on node ${env.NODE_NAME}"
                     checkout scm
@@ -59,7 +79,7 @@ def buildStage(final int jdkVersion, final String nodeLabel, final boolean isMai
                         } else {
                             mavenArguments = '-U clean verify site'
                         }
-                        executeMaven(jdkLabel, mavenArguments, 'IMPLICIT')
+                        executeMaven(jdkLabel, mavenLabel, mavenArguments, 'IMPLICIT')
                         if (isMainBuild && isOnMainBranch()) {
                             // Stash the build results so we can deploy them on another node
                             stash name: 'local-snapshots-dir', includes: 'local-snapshots-dir/**'
@@ -98,12 +118,13 @@ def buildStage(final int jdkVersion, final String nodeLabel, final boolean isMai
     }
 }
 
-def stagesFor(List<Integer> jdkVersions, int mainJdkVersion, List<String> nodeLabels, String mainNodeLabel, String sonarProjectKey) {
+def stagesFor(List<Integer> jdkVersions, int mainJdkVersion, List<String> nodeLabels, String mainNodeLabel, List<String> mavenVersions, String mainMavenVersion, String sonarProjectKey) {
     def stageMap = [:]
     for (nodeLabel in nodeLabels) {
         for (jdkVersion in jdkVersions) {
-            boolean isMainBuild = (jdkVersion == mainJdkVersion && nodeLabel == mainNodeLabel)
-            stageMap["JDK ${jdkVersion}, ${nodeLabel}${isMainBuild ? ' (Main)' : ''}"] = buildStage(jdkVersion, nodeLabel, isMainBuild, sonarProjectKey)
+            for (mavenVersion in mavenVersions) {
+                boolean isMainBuild = (jdkVersion == mainJdkVersion && nodeLabel == mainNodeLabel && mainMavenVersion == mavenVersion)
+                stageMap["JDK ${jdkVersion}, ${nodeLabel}, Maven ${mavenVersion}, ${isMainBuild ? ' (Main)' : ''}"] = buildStage(jdkVersion, nodeLabel, mavenVersion, isMainBuild, sonarProjectKey)
         }
     }
     return stageMap
@@ -111,9 +132,20 @@ def stagesFor(List<Integer> jdkVersions, int mainJdkVersion, List<String> nodeLa
 
 // valid node labels in https://cwiki.apache.org/confluence/display/INFRA/ci-builds.apache.org
 def call(List<Integer> jdkVersions, int mainJdkVersion, List<String> nodeLabels, String mainNodeLabel, String sonarProjectKey) {
+    call(jdkVersions, mainJdkVersion, nodeLabels, mainNodeLabel, ["3"], "3", sonarProjectKey)
+}
+
+def call(List<Integer> jdkVersions, int mainJdkVersion, List<String> nodeLabels, String mainNodeLabel, List<String> mavenVersions, String mainMavenVersion, String sonarProjectKey) {
     // adjust some job properties (https://www.jenkins.io/doc/pipeline/steps/workflow-multibranch/#properties-set-job-properties)
-    properties([
-        buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '10'))
-    ])
-    parallel stagesFor(jdkVersions, mainJdkVersion, nodeLabels, mainNodeLabel, sonarProjectKey)
+    def buildProperties = []
+    if (isOnMainBranch) {
+      // set build retention time first
+      buildProperties.add(buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '5', daysToKeepStr: '15', numToKeepStr: '10')))
+      // ensure a build is done every month
+      buildProperties.add(pipelineTriggers([cron('@monthly')]))
+    } else {
+      buildProperties.add(buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '2', daysToKeepStr: '7', numToKeepStr: '3')))
+    }
+    properties(buildProperties)
+    parallel stagesFor(jdkVersions, mainJdkVersion, nodeLabels, mainNodeLabel, mavenVersions, mainMavenVersion, sonarProjectKey)
 }