From 38d6f5cfec233caff16ba16705b90df0876fe25a Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sun, 4 Mar 2018 20:16:13 +0000 Subject: [PATCH 1/6] version: set to 0.7.0-SNAPSHOT --- CHANGELOG | 5 +++++ pom.xml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 5a2658c..8a25f54 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,11 @@ CHANGELOG ========= +0.7.0 +----- + +* + 0.6.0 ----- diff --git a/pom.xml b/pom.xml index 4d4717a..93691fb 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ net.kemitix mon - 0.6.0 + 0.7.0-SNAPSHOT 1.8 From b45f07228c8799662f7abb352ca6cff8c29072da Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 8 Mar 2018 18:15:55 +0000 Subject: [PATCH 2/6] jenkins: update jenkinsfile template --- Jenkinsfile.groovy | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index 6c74e11..e799493 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -1,15 +1,8 @@ -final String repoName = "mon" -final String repoUrl = "git@github.com:kemitix/${repoName}.git" final String mvn = "mvn --batch-mode --update-snapshots" pipeline { agent any stages { - stage('Prepare') { - steps { - git url: repoUrl, branch: '**', credentialsId: 'github-kemitix' - } - } stage('no SNAPSHOT in master') { // checks that the pom version is not a snapshot when the current branch is master // TODO: also check for SNAPSHOT when is a pull request with master as the target branch @@ -22,6 +15,14 @@ pipeline { error("Build failed because SNAPSHOT version") } } + stage('Static Code Analysis') { + steps { + withMaven(maven: 'maven 3.5.2', jdk: 'JDK 1.8') { + sh "${mvn} compile checkstyle:checkstyle pmd:pmd" + } + pmd canComputeNew: false, defaultEncoding: '', healthy: '', pattern: '', unHealthy: '' + } + } stage('Build') { parallel { stage('Java 8') { @@ -34,7 +35,7 @@ pipeline { stage('Java 9') { steps { withMaven(maven: 'maven 3.5.2', jdk: 'JDK 9') { - sh 'mvn clean install' + sh "${mvn} clean install" } } } @@ -43,6 +44,14 @@ pipeline { stage('Test Results') { steps { junit '**/target/surefire-reports/*.xml' + jacoco exclusionPattern: '**/*{Test|IT|Main|Application|Immutable}.class' + withMaven(maven: 'maven 3.5.2', jdk: 'JDK 1.8') { + sh "${mvn} com.gavinmogan:codacy-maven-plugin:coverage " + + "-DcoverageReportFile=target/site/jacoco/jacoco.xml " + + "-DprojectToken=`$JENKINS_HOME/codacy/token` " + + "-DapiToken=`$JENKINS_HOME/codacy/apitoken` " + + "-Dcommit=`git rev-parse HEAD`" + } } } stage('Archiving') { @@ -50,15 +59,10 @@ pipeline { archiveArtifacts '**/target/*.jar' } } - stage('Coverage') { - steps { - jacoco(execPattern: '**/target/jacoco.exec') - } - } stage('Deploy') { when { expression { (env.GIT_BRANCH == 'master') } } steps { - withMaven(maven: 'maven 3.5.2', jdk: 'JDK 9') { + withMaven(maven: 'maven 3.5.2', jdk: 'JDK 1.8') { sh "${mvn} deploy --activate-profiles release -DskipTests=true" } } From 878001a25fba6b3503aa656580d168efb610ed80 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 8 Mar 2018 18:17:05 +0000 Subject: [PATCH 3/6] travis: remove deploy --- .gitmodules | 3 --- .travis.yml | 10 +--------- 2 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index c50d110..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule ".travis-support"] - path = .travis-support - url = https://github.com/kemitix/kemitix-travis-support.git diff --git a/.travis.yml b/.travis.yml index 1f3bfa4..fcd939b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,4 @@ cache: directories: - "$HOME/.m2" install: true -script: "./mvnw clean install" -after_success: -- sh .travis-support/coveralls.sh -- bash <(curl -s https://codecov.io/bash) -deploy: - provider: script - script: sh .travis-support/deploy.sh - on: - branch: master +script: "./mvnw -B -U clean install" From 586546f615a485a5cba0ff386df5ce7bae65c582 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 8 Mar 2018 18:51:13 +0000 Subject: [PATCH 4/6] Dump environment - try #1 --- .travis-support | 1 - Jenkinsfile.groovy | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) delete mode 160000 .travis-support diff --git a/.travis-support b/.travis-support deleted file mode 160000 index b8593e5..0000000 --- a/.travis-support +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b8593e541ba9a11447fa9559a83e5f99097ca4d2 diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index e799493..26d3c15 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -3,6 +3,11 @@ final String mvn = "mvn --batch-mode --update-snapshots" pipeline { agent any stages { + stage('dump environment') { + steps { + sh 'set' + } + } stage('no SNAPSHOT in master') { // checks that the pom version is not a snapshot when the current branch is master // TODO: also check for SNAPSHOT when is a pull request with master as the target branch From 997e08458e9645106206427eaa1a9d86afb73c68 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 8 Mar 2018 18:56:59 +0000 Subject: [PATCH 5/6] jenkins: checkfor SNAPSHOT when pull request into master --- Jenkinsfile.groovy | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index 26d3c15..0e9f8ea 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -3,17 +3,16 @@ final String mvn = "mvn --batch-mode --update-snapshots" pipeline { agent any stages { - stage('dump environment') { + stage('Environment') { steps { sh 'set' } } stage('no SNAPSHOT in master') { - // checks that the pom version is not a snapshot when the current branch is master - // TODO: also check for SNAPSHOT when is a pull request with master as the target branch + // checks that the pom version is not a snapshot when the current or target branch is master when { expression { - (env.GIT_BRANCH == 'master') && + (env.GIT_BRANCH == 'master' || env.CHANGE_TARGET == 'master') && (readMavenPom(file: 'pom.xml').version).contains("SNAPSHOT") } } steps { From 606ed8aae86ac3aeb67fe92119d907040eecd7fe Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 8 Mar 2018 19:36:17 +0000 Subject: [PATCH 6/6] codesigning.asc.enc: removed --- codesigning.asc.enc | Bin 20752 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 codesigning.asc.enc diff --git a/codesigning.asc.enc b/codesigning.asc.enc deleted file mode 100644 index 2963d2983275f10d80f235e4b3a8235777fc63a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20752 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