From 11bc3d1d4b50a4f3402b9217271e307d0a2d1905 Mon Sep 17 00:00:00 2001 From: radtriste Date: Mon, 14 Aug 2023 16:10:22 +0200 Subject: [PATCH 1/2] kie-issues#423: Prepare for 2.x stream --- .ci/jenkins/Jenkinsfile.deploy | 2 + .ci/jenkins/Jenkinsfile.optaplanner | 2 + .ci/jenkins/Jenkinsfile.setup-branch | 1 + .ci/jenkins/Jenkinsfile.sonarcloud | 1 + .ci/jenkins/dsl/jobs.groovy | 61 ++++++++++++++++++---------- 5 files changed, 45 insertions(+), 22 deletions(-) diff --git a/.ci/jenkins/Jenkinsfile.deploy b/.ci/jenkins/Jenkinsfile.deploy index 9df94edfbd..41147ae95f 100644 --- a/.ci/jenkins/Jenkinsfile.deploy +++ b/.ci/jenkins/Jenkinsfile.deploy @@ -282,6 +282,7 @@ void setDeployPropertyIfNeeded(String key, def value) { MavenCommand getMavenCommand() { return new MavenCommand(this, ['-fae', '-ntp']) .withSettingsXmlId(env.MAVEN_SETTINGS_CONFIG_FILE_ID) + .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) .withProperty('full') } @@ -295,6 +296,7 @@ void runMavenDeploy(boolean skipTests = true, boolean localDeployment = false) { } mvnCmd.withProperty('maven.test.failure.ignore', true) + .withOptions(env.BUILD_MVN_OPTS_CURRENT ? [ env.BUILD_MVN_OPTS_CURRENT ] : []) .skipTests(skipTests) .run('clean deploy') } diff --git a/.ci/jenkins/Jenkinsfile.optaplanner b/.ci/jenkins/Jenkinsfile.optaplanner index f652a72e3e..6fafd5163a 100644 --- a/.ci/jenkins/Jenkinsfile.optaplanner +++ b/.ci/jenkins/Jenkinsfile.optaplanner @@ -80,6 +80,7 @@ pipeline { steps { script { getMavenCommand(kogitoAppsRepo) + .withOptions(env.BUILD_MVN_OPTS_CURRENT ? [ env.BUILD_MVN_OPTS_CURRENT ] : []) .withProperty('skipUI') .withProperty('maven.test.failure.ignore', true) .withProperty('version.org.optaplanner', env.OPTAPLANNER_VERSION) @@ -172,6 +173,7 @@ MavenCommand getMavenCommand(String directory) { return new MavenCommand(this, ['-fae', '-ntp']) .withSettingsXmlId('kogito_release_settings') .withProperty('java.net.preferIPv4Stack', true) + .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) .inDirectory(directory) } diff --git a/.ci/jenkins/Jenkinsfile.setup-branch b/.ci/jenkins/Jenkinsfile.setup-branch index ba525574e4..8eaa5a2d77 100644 --- a/.ci/jenkins/Jenkinsfile.setup-branch +++ b/.ci/jenkins/Jenkinsfile.setup-branch @@ -149,5 +149,6 @@ String getGitAuthorCredsID() { MavenCommand getMavenCommand(String directory) { return new MavenCommand(this, ['-fae', '-ntp']) .withSettingsXmlId(env.MAVEN_SETTINGS_CONFIG_FILE_ID) + .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) .inDirectory(directory) } diff --git a/.ci/jenkins/Jenkinsfile.sonarcloud b/.ci/jenkins/Jenkinsfile.sonarcloud index bbda9f12a1..f4d1888bf8 100644 --- a/.ci/jenkins/Jenkinsfile.sonarcloud +++ b/.ci/jenkins/Jenkinsfile.sonarcloud @@ -86,6 +86,7 @@ pipeline { MavenCommand getMavenCommand() { return new MavenCommand(this, ['-fae', '-ntp']) .withSettingsXmlId('kogito_release_settings') + .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) } void setupCypressEnv(String cypressVersion) { diff --git a/.ci/jenkins/dsl/jobs.groovy b/.ci/jenkins/dsl/jobs.groovy index 19c640537c..a97396c9be 100644 --- a/.ci/jenkins/dsl/jobs.groovy +++ b/.ci/jenkins/dsl/jobs.groovy @@ -18,6 +18,10 @@ import org.kie.jenkins.jobdsl.Utils jenkins_path = '.ci/jenkins' +boolean isMainStream() { + return Utils.getStream(this) == 'main' +} + Map getMultijobPRConfig(JenkinsFolder jobFolder) { String defaultBuildMvnOptsCurrent = jobFolder.getDefaultEnvVarValue('BUILD_MVN_OPTS_CURRENT') ?: '' def jobConfig = [ @@ -32,7 +36,7 @@ Map getMultijobPRConfig(JenkinsFolder jobFolder) { // Sonarcloud analysis only on main branch // As we have only Community edition ENABLE_SONARCLOUD: EnvUtils.isDefaultEnvironment(this, jobFolder.getEnvironmentName()) && Utils.isMainBranch(this), - BUILD_MVN_OPTS_CURRENT: "${defaultBuildMvnOptsCurrent} ${jobFolder.getEnvironmentName() ? '' : '-Dvalidate-formatting'}", // Validate formatting only for default env + BUILD_MVN_OPTS_CURRENT: "${defaultBuildMvnOptsCurrent} ${getAppsBuildMvnOptions(jobFolder).join(' ')}", ] ], [ id: 'kogito-quarkus-examples', @@ -63,13 +67,22 @@ Map getMultijobPRConfig(JenkinsFolder jobFolder) { ] // For Quarkus 3, run only runtimes PR check... for now - if (EnvUtils.hasEnvironmentId(this, jobFolder.getEnvironmentName(), 'quarkus3')) { + if (isMainStream() && EnvUtils.hasEnvironmentId(this, jobFolder.getEnvironmentName(), 'quarkus3')) { jobConfig.jobs.retainAll { it.id == 'kogito-apps' } } return jobConfig } +List getAppsBuildMvnOptions(JenkinsFolder jobFolder) { + List mvnOpts = [] + if (isMainStream() && !jobFolder.getEnvironmentName()) { + // Validate formatting only for default env + mvnOpts += ['-Dvalidate-formatting'] + } + return mvnOpts +} + boolean isProdEnv(JenkinsFolder jobFolder) { return EnvUtils.hasEnvironmentId(this, jobFolder.getEnvironmentName(), 'prod') } @@ -92,35 +105,42 @@ Closure addNodeOptionsEnvJobParamsGetter = { script -> jobParams.env.put('NODE_OPTIONS', '--max_old_space_size=4096') return jobParams } +Closure setup4AMCronTriggerJobParamsGetter = { script -> + def jobParams = addNodeOptionsEnvJobParamsGetter(script) + jobParams.triggers = [ cron: 'H 4 * * *' ] + return jobParams +} -KogitoJobUtils.createNightlyBuildChainBuildAndDeployJobForCurrentRepo(this, '', true, addNodeOptionsEnvJobParamsGetter) -setupSpecificBuildChainNightlyJob('sonarcloud', addNodeOptionsEnvJobParamsGetter) -setupSpecificBuildChainNightlyJob('native', addNodeOptionsEnvJobParamsGetter) -setupNightlyQuarkusIntegrationJob('quarkus-main', addNodeOptionsEnvJobParamsGetter) -setupNightlyQuarkusIntegrationJob('quarkus-branch', addNodeOptionsEnvJobParamsGetter) -setupNightlyQuarkusIntegrationJob('quarkus-lts', addNodeOptionsEnvJobParamsGetter) -setupNightlyQuarkusIntegrationJob('native-lts', addNodeOptionsEnvJobParamsGetter) +Closure nightlyJobParamsGetter = isMainStream() ? addNodeOptionsEnvJobParamsGetter : setup4AMCronTriggerJobParamsGetter +KogitoJobUtils.createNightlyBuildChainBuildAndDeployJobForCurrentRepo(this, '', true, nightlyJobParamsGetter) +setupSpecificBuildChainNightlyJob('sonarcloud', nightlyJobParamsGetter) +setupSpecificBuildChainNightlyJob('native', nightlyJobParamsGetter) +setupNightlyQuarkusIntegrationJob('quarkus-main', nightlyJobParamsGetter) +setupNightlyQuarkusIntegrationJob('quarkus-branch', nightlyJobParamsGetter) +setupNightlyQuarkusIntegrationJob('quarkus-lts', nightlyJobParamsGetter) +setupNightlyQuarkusIntegrationJob('native-lts', nightlyJobParamsGetter) // Release jobs setupDeployJob(JobType.RELEASE) setupPromoteJob(JobType.RELEASE) // Update Optaplanner tools job -KogitoJobUtils.createVersionUpdateToolsJob(this, 'kogito-apps', 'Optaplanner', [ - modules: [ 'kogito-apps-build-parent' ], - properties: [ 'version.org.optaplanner' ], -]) +if (isMainStream()) { + KogitoJobUtils.createVersionUpdateToolsJob(this, 'kogito-apps', 'Optaplanner', [ + modules: [ 'kogito-apps-build-parent' ], + properties: [ 'version.org.optaplanner' ], + ]) + // Quarkus 3 + if (EnvUtils.isEnvironmentEnabled(this, 'quarkus-3')) { + setupPrQuarkus3RewriteJob() + setupStandaloneQuarkus3RewriteJob() + } +} if (Utils.isMainBranch(this)) { setupOptaplannerJob('main') } -// Quarkus 3 -if (EnvUtils.isEnvironmentEnabled(this, 'quarkus-3')) { - setupPrQuarkus3RewriteJob() - setupStandaloneQuarkus3RewriteJob() -} - ///////////////////////////////////////////////////////////////// // Methods ///////////////////////////////////////////////////////////////// @@ -155,7 +175,6 @@ void createSetupBranchJob() { def jobParams = JobParamsUtils.getBasicJobParams(this, 'kogito-apps', JobType.SETUP_BRANCH, "${jenkins_path}/Jenkinsfile.setup-branch", 'Kogito Apps Init branch') JobParamsUtils.setupJobParamsDefaultMavenConfiguration(this, jobParams) jobParams.env.putAll([ - REPO_NAME: 'kogito-apps', JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", GIT_AUTHOR: "${GIT_AUTHOR_NAME}", @@ -187,7 +206,6 @@ void setupDeployJob(JobType jobType, String envName = '') { jobParams.git.project_url = Utils.createProjectUrl("${GIT_AUTHOR_NAME}", jobParams.git.repository) } jobParams.env.putAll([ - REPO_NAME: 'kogito-apps', JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", MAVEN_SETTINGS_CONFIG_FILE_ID: "${MAVEN_SETTINGS_FILE_ID}", ]) @@ -242,7 +260,6 @@ void setupPromoteJob(JobType jobType) { def jobParams = JobParamsUtils.getBasicJobParams(this, 'kogito-apps-promote', jobType, "${jenkins_path}/Jenkinsfile.promote", 'Kogito Apps Promote') JobParamsUtils.setupJobParamsDefaultMavenConfiguration(this, jobParams) jobParams.env.putAll([ - REPO_NAME: 'kogito-apps', PROPERTIES_FILE_NAME: 'deployment.properties', JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", From 395c32e69157b302681eea16ef4f1a994e15a264 Mon Sep 17 00:00:00 2001 From: radtriste Date: Wed, 16 Aug 2023 15:36:48 +0200 Subject: [PATCH 2/2] update --- .ci/jenkins/Jenkinsfile.deploy | 1 + .ci/jenkins/Jenkinsfile.quarkus-3.rewrite.pr | 1 + .../Jenkinsfile.quarkus-3.rewrite.standalone | 1 + .ci/jenkins/Jenkinsfile.setup-branch | 4 + .ci/jenkins/Jenkinsfile.sonarcloud | 96 ------------------- 5 files changed, 7 insertions(+), 96 deletions(-) delete mode 100644 .ci/jenkins/Jenkinsfile.sonarcloud diff --git a/.ci/jenkins/Jenkinsfile.deploy b/.ci/jenkins/Jenkinsfile.deploy index 41147ae95f..23c80d3410 100644 --- a/.ci/jenkins/Jenkinsfile.deploy +++ b/.ci/jenkins/Jenkinsfile.deploy @@ -297,6 +297,7 @@ void runMavenDeploy(boolean skipTests = true, boolean localDeployment = false) { mvnCmd.withProperty('maven.test.failure.ignore', true) .withOptions(env.BUILD_MVN_OPTS_CURRENT ? [ env.BUILD_MVN_OPTS_CURRENT ] : []) + .withOptions(env.KOGITO_APPS_BUILD_MVN_OPTS ? [ env.KOGITO_APPS_BUILD_MVN_OPTS ] : []) .skipTests(skipTests) .run('clean deploy') } diff --git a/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.pr b/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.pr index 0c59868e53..1f8920ee78 100644 --- a/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.pr +++ b/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.pr @@ -97,5 +97,6 @@ String getGitAuthorCredsId() { MavenCommand getMavenCommand() { return new MavenCommand(this, ['-fae', '-ntp']) .withSettingsXmlId(env.MAVEN_SETTINGS_CONFIG_FILE_ID) + .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) .withProperty('enforcer.skip') } diff --git a/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.standalone b/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.standalone index 4e8dfd85a7..18fb14c6f6 100644 --- a/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.standalone +++ b/.ci/jenkins/Jenkinsfile.quarkus-3.rewrite.standalone @@ -177,5 +177,6 @@ String getPRBranch() { MavenCommand getMavenCommand() { return new MavenCommand(this, ['-fae', '-ntp']) .withSettingsXmlId(env.MAVEN_SETTINGS_CONFIG_FILE_ID) + .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) .withProperty('enforcer.skip') } diff --git a/.ci/jenkins/Jenkinsfile.setup-branch b/.ci/jenkins/Jenkinsfile.setup-branch index 8eaa5a2d77..761695729b 100644 --- a/.ci/jenkins/Jenkinsfile.setup-branch +++ b/.ci/jenkins/Jenkinsfile.setup-branch @@ -54,6 +54,8 @@ pipeline { steps { script { getMavenCommand(droolsRepo) + .withOptions(env.BUILD_MVN_OPTS_UPSTREAM ? [ env.BUILD_MVN_OPTS_UPSTREAM ] : []) + .withOptions(env.DROOLS_BUILD_MVN_OPTS_UPSTREAM ? [ env.DROOLS_BUILD_MVN_OPTS_UPSTREAM ] : []) .withProperty('quickly') .run('clean install') } @@ -63,6 +65,8 @@ pipeline { steps { script { getMavenCommand(kogitoRuntimesRepo) + .withOptions(env.BUILD_MVN_OPTS_UPSTREAM ? [ env.BUILD_MVN_OPTS_UPSTREAM ] : []) + .withOptions(env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_UPSTREAM ? [ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_UPSTREAM ] : []) .withProperty('quickly') .run('clean install') } diff --git a/.ci/jenkins/Jenkinsfile.sonarcloud b/.ci/jenkins/Jenkinsfile.sonarcloud deleted file mode 100644 index f4d1888bf8..0000000000 --- a/.ci/jenkins/Jenkinsfile.sonarcloud +++ /dev/null @@ -1,96 +0,0 @@ -@Library('jenkins-pipeline-shared-libraries')_ - -import org.kie.jenkins.MavenCommand - -pipeline { - agent { - label 'kie-rhel8 && docker && kie-mem16g && !built-in' - } - - tools { - maven env.BUILD_MAVEN_TOOL - jdk env.BUILD_JDK_TOOL - } - - options { - timestamps() - timeout(time: 210, unit: 'MINUTES') - } - - environment { - // Some generated env is also defined into ./dsl/jobs.groovy file - - KOGITO_CI_EMAIL_TO = credentials("${JENKINS_EMAIL_CREDS_ID}") - SONARCLOUD_TOKEN = credentials('SONARCLOUD_TOKEN') - MAVEN_OPTS = '-Xms1024m -Xmx4g' - NODE_OPTIONS = '--max_old_space_size=4096' - } - - stages { - stage('Initialize') { - steps { - script { - setupCypressEnv('9.7.0') - } - } - } - stage('Checkout') { - steps { - script { - checkout(githubscm.resolveRepository('kogito-apps', params.GIT_AUTHOR, params.BUILD_BRANCH_NAME, false)) - } - } - } - stage('Build') { - steps { - script { - getMavenCommand() - .withProfiles(['run-code-coverage']) - .run('clean install') - } - } - } - stage('Analyze') { - steps { - script { - getMavenCommand() - .withOptions(['-e', '-nsu']) - .withProfiles(['sonarcloud-analysis']) - .run('validate') - } - } - } - } - post { - always { - script { - sh 'find . -type d -name node_modules -exec rm -rf {} \\; || true' - junit(testResults: '**/junit.xml, **/target/surefire-reports/**/*.xml, **/target/failsafe-reports/**/*.xml, **/target/invoker-reports/**/*.xml', allowEmptyResults: true) - archiveArtifacts(artifacts: '**/*.log,**/cypress/screenshots/**,**/cypress/videos/**', allowEmptyArchive: true) - util.archiveConsoleLog() - } - } - unsuccessful { - script { - mailer.sendMarkdownTestSummaryNotification('SonarCloud', "[${params.BUILD_BRANCH_NAME}] Kogito Apps", [env.KOGITO_CI_EMAIL_TO]) - } - } - cleanup { - script { - util.cleanNode('docker') - } - } - } -} - -MavenCommand getMavenCommand() { - return new MavenCommand(this, ['-fae', '-ntp']) - .withSettingsXmlId('kogito_release_settings') - .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) -} - -void setupCypressEnv(String cypressVersion) { - if (env.CYPRESS_BINARY_URL) { - env.CYPRESS_INSTALL_BINARY = "${CYPRESS_BINARY_URL}/cypress-${cypressVersion}.zip" - } -}