blob: 5fbb451da8e639de9d61ca43ce0231e48b7d31f9 [file] [log] [blame]
#!groovy
//
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
build_and_test = '''
mkdir -p ${ERLANG_VERSION}
cd ${ERLANG_VERSION}
rm -rf build
mkdir build
cd build
tar -xf ${WORKSPACE}/apache-couchdb-*.tar.gz
cd apache-couchdb-*
./configure
make check || (make build-report && false)
'''
docs_changed = "git diff --name-only origin/${env.CHANGE_TARGET} | grep -q '^src/docs/'"
other_changes = "git diff --name-only origin/${env.CHANGE_TARGET} | grep -q -v '^src/docs/'"
pipeline {
// no top-level agent; agents must be declared for each stage
agent none
environment {
recipient = 'notifications@couchdb.apache.org'
// Following fix an issue with git <= 2.6.5 where no committer
// name or email are present for reflog, required for git clone
GIT_COMMITTER_NAME = 'Jenkins User'
GIT_COMMITTER_EMAIL = 'couchdb@apache.org'
// Parameters for the matrix build
DOCKER_IMAGE_BASE = 'apache/couchdbci-debian:bullseye-erlang'
// https://github.com/jenkins-infra/jenkins.io/blob/master/Jenkinsfile#64
// We need the jenkins user mapped inside of the image
// npm config cache below deals with /home/jenkins not mapping correctly
// inside the image
DOCKER_ARGS = '-e npm_config_cache=npm-cache -e HOME=. -v=/etc/passwd:/etc/passwd -v /etc/group:/etc/group'
// *** BE SURE TO ALSO CHANGE THE ERLANG VERSIONS FARTHER DOWN ***
// Search for ERLANG_VERSION
// see https://issues.jenkins.io/browse/JENKINS-61047 for why this cannot
// be done parametrically
LOW_ERLANG_VER = '23.3.4.18'
}
options {
buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '10'))
// This fails the build immediately if any parallel step fails
parallelsAlwaysFailFast()
preserveStashes(buildCount: 10)
timeout(time: 3, unit: 'HOURS')
timestamps()
}
stages {
stage('Setup Env') {
agent {
docker {
image "${DOCKER_IMAGE_BASE}-${LOW_ERLANG_VER}"
label 'docker'
args "${DOCKER_ARGS}"
registryUrl 'https://docker.io/'
registryCredentialsId 'dockerhub_creds'
}
}
options {
timeout(time: 10, unit: 'MINUTES')
}
steps {
script {
env.DOCS_CHANGED = '0'
env.ONLY_DOCS_CHANGED = '0'
if ( sh(returnStatus: true, script: docs_changed) == 0 ) {
env.DOCS_CHANGED = '1'
if (sh(returnStatus: true, script: other_changes) == 1) {
env.ONLY_DOCS_CHANGED = '1'
}
}
}
}
post {
cleanup {
// UGH see https://issues.jenkins-ci.org/browse/JENKINS-41894
sh 'rm -rf ${WORKSPACE}/*'
}
}
} // stage 'Setup Environment'
//
// stage('Docs Check') {
// // Run docs `make check` stage if any docs changed
// when {
// beforeOptions true
// expression { DOCS_CHANGED == '1' }
// }
// agent {
// docker {
// image "${DOCKER_IMAGE_BASE}-${LOW_ERLANG_VER}"
// label 'docker'
// args "${DOCKER_ARGS}"
// registryUrl 'https://docker.io/'
// registryCredentialsId 'dockerhub_creds'
// }
// }
// options {
// timeout(time: 15, unit: 'MINUTES')
// }
// steps {
// sh '''
// make python-black
// '''
// sh '''
// (cd src/docs && make check)
// '''
// }
// post {
// cleanup {
// // UGH see https://issues.jenkins-ci.org/browse/JENKINS-41894
// sh 'rm -rf ${WORKSPACE}/*'
// }
// }
// } // stage Docs Check
//
// stage('Build Docs') {
// // Build docs separately if only docs changed. If there are other changes, docs are
// // already built as part of `make dist`
// when {
// beforeOptions true
// expression { ONLY_DOCS_CHANGED == '1' }
// }
// agent {
// docker {
// image "${DOCKER_IMAGE_BASE}-${LOW_ERLANG_VER}"
// label 'docker'
// args "${DOCKER_ARGS}"
// registryUrl 'https://docker.io/'
// registryCredentialsId 'dockerhub_creds'
// }
// }
// options {
// timeout(time: 30, unit: 'MINUTES')
// }
// steps {
// sh '''
// (cd src/docs && ./setup.sh ; make html)
// '''
// }
// post {
// cleanup {
// // UGH see https://issues.jenkins-ci.org/browse/JENKINS-41894
// sh 'rm -rf ${WORKSPACE}/*'
// }
// }
// } // stage Build Docs
//
// stage('Source Format Checks') {
// when {
// beforeOptions true
// expression { ONLY_DOCS_CHANGED == '0' }
// }
// agent {
// docker {
// image "${DOCKER_IMAGE_BASE}-${LOW_ERLANG_VER}"
// label 'docker'
// args "${DOCKER_ARGS}"
// registryUrl 'https://docker.io/'
// registryCredentialsId 'dockerhub_creds'
// }
// }
// options {
// timeout(time: 15, unit: "MINUTES")
// }
// steps {
// sh '''
// rm -rf apache-couchdb-*
// ./configure --skip-deps
// make erlfmt-check
// make elixir-source-checks
// make python-black
// '''
// }
// post {
// cleanup {
// // UGH see https://issues.jenkins-ci.org/browse/JENKINS-41894
// sh 'rm -rf ${WORKSPACE}/*'
// }
// }
// } // stage Erlfmt
//
//
// stage('Make Dist') {
// when {
// beforeOptions true
// expression { ONLY_DOCS_CHANGED == '0' }
// }
// agent {
// docker {
// image "${DOCKER_IMAGE_BASE}-${LOW_ERLANG_VER}"
// label 'docker'
// args "${DOCKER_ARGS}"
// registryUrl 'https://docker.io/'
// registryCredentialsId 'dockerhub_creds'
// }
// }
// options {
// timeout(time: 15, unit: "MINUTES")
// }
// steps {
// sh '''
// rm -rf apache-couchdb-*
// ./configure --spidermonkey-version 78
// make dist
// chmod -R a+w * .
// '''
// }
// post {
// success {
// stash includes: 'apache-couchdb-*.tar.gz', name: 'tarball'
// }
// cleanup {
// // UGH see https://issues.jenkins-ci.org/browse/JENKINS-41894
// sh 'rm -rf ${WORKSPACE}/*'
// }
// }
// } // stage Make Dist
//
// // TODO Rework once Improved Docker Pipeline Engine is released
// // https://issues.jenkins-ci.org/browse/JENKINS-47962
// // https://issues.jenkins-ci.org/browse/JENKINS-48050
//
// stage('Make Check') {
// when {
// beforeOptions true
// expression { ONLY_DOCS_CHANGED == '0' }
// }
// matrix {
// axes {
// axis {
// name 'ERLANG_VERSION'
// values '23.3.4.18', '24.3.4.7', '25.2'
// }
// axis {
// name 'SM_VSN'
// values '78'
// }
// }
//
// stages {
// stage('Build and Test') {
// agent {
// docker {
// image "${DOCKER_IMAGE_BASE}-${ERLANG_VERSION}"
// label 'docker'
// args "${DOCKER_ARGS}"
// }
// }
// options {
// skipDefaultCheckout()
// timeout(time: 90, unit: "MINUTES")
// }
// steps {
// unstash 'tarball'
// sh( script: build_and_test )
// }
// post {
// always {
// junit '**/.eunit/*.xml, **/_build/*/lib/couchdbtest/*.xml, **/src/mango/nosetests.xml, **/test/javascript/junit.xml'
// }
// cleanup {
// sh 'rm -rf ${WORKSPACE}/*'
// }
// }
// } // stage
// } // stages
// } // matrix
// } // stage "Make Check"
} // stages
} // pipeline