def cancelPreviousBuilds() {
def jobName = env.JOB_NAME
def buildNumber = env.BUILD_NUMBER.toInteger()
def currentJob = Jenkins.instance.getItemByFullName(jobName)
for (def build : currentJob.builds) {
def exec = build.getExecutor()
/* Kill older jobs */
if (build.isBuilding() && build.number.toInteger() < buildNumber && exec != null) {
def cause = { "Job stoped by #${buildNumber}" as String} as CauseOfInterruption
exec.interrupt(Result.ABORTED, cause)
println("Aborting previous build:#${build.number}")
}
}
}
pipeline {
agent {
node {
label 'jenkins-slave-ccache-ram'
customWorkspace "/home/jenkins/workspace/${JOB_NAME}/${BUILD_NUMBER}"
}
}
options{
ansiColor('xterm')
parallelsAlwaysFailFast()
}
environment {
JOBS=15
PATH="/usr/local/cmake-3.21.3-linux-x86_64/bin:/usr/local/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH"
}
stages {
stage('Check for previous running builds') {
steps {
script {
cancelPreviousBuilds()
}
}
}
stage('Initial checks') {
when {
changeRequest()
}
environment {
GITHUB_BASE_REF="${pullRequest.base}"
GITHUB_HEAD_REF="${pullRequest.headRef}"
}
steps {
withCredentials([string(credentialsId: 'f412733a-851c-4f87-ad24-7da2139a98ca', variable: 'TOKEN')]) {
sh ''' #!/bin/bash -e
git config --add --global user.apitoken ${TOKEN}
'''
}
echo "install additional python dependencies"
sh '''#!/bin/bash -e
python3 -m pip install ghapi
'''
echo "Check if branch needs rebasing"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
if [ $(git rev-list --count origin/${CHANGE_TARGET}...`(git merge-base ${GIT_COMMIT} origin/${CHANGE_TARGET})`) = 0 ]; then
echo "Branch OK"
else
echo "Branch is not rebased. Exiting"
exit 1
fi
popd'''
echo "Commit Message check"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
./tools/check_commit_messages.py
popd'''
echo "Copyright notice check"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
./config/license_header_check.sh --ci --check-only
popd'''
echo "Style checking"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
./config/style_check_hook.sh --last
popd'''
}
}
stage('Build RT1051') {
environment {
CCACHE_DIR="/ccache/RT1051"
XDG_CACHE_HOME="/clang-cache"
}
steps {
echo "Check if branch needs rebasing"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
if [ $(git rev-list --count origin/${CHANGE_TARGET}...`(git merge-base ${GIT_COMMIT} origin/${CHANGE_TARGET})`) = 0 ]; then
echo "Branch OK"
else
echo "Branch is not rebased. Exiting"
exit 1
fi
popd'''
sh '''#!/bin/bash -e
export JOBS=${JOBS:-6}
export CCACHE_DIR=/ccache/RT1051
echo "JOBS=${JOBS}"
echo "cmake path=$(which cmake)"
echo "\'workspace dir:${WORKSPACE}\'"
pushd "${WORKSPACE}"
echo "./configure.sh pure rt1051 Release -G Ninja"
./configure.sh pure rt1051 Release -G Ninja
pushd build-PurePhone-rt1051-Release
ninja -j ${JOBS} PurePhone-boot.bin
popd
rm -r build-PurePhone-rt1051-Release
echo "./configure.sh bell rt1051 Release -G Ninja"
./configure.sh bell rt1051 Release -G Ninja
pushd build-BellHybrid-rt1051-Release
ninja -j ${JOBS} BellHybrid-boot.bin
popd
echo "disk usage before removal:"
du -h --max-depth=1 .
rm -r build-BellHybrid-rt1051-Release
echo "disk usage after removal:"
du -h --max-depth=1 .
popd'''
echo "CCache stats"
sh '''#!/bin/bash
export CCACHE_DIR=/ccache/RT1051
ccache --show-stats'''
}
}
stage('Build Linux - Pure') {
environment {
CCACHE_DIR="/ccache/Linux"
XDG_CACHE_HOME="/clang-cache"
}
when {
expression {
return !(env.CHANGE_TARGET ==~ /release\/[0-9]+\.[0-9]+\.[0-9]+-bell/)
}
}
steps {
echo "Check if branch needs rebasing"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
if [ $(git rev-list --count origin/${CHANGE_TARGET}...`(git merge-base ${GIT_COMMIT} origin/${CHANGE_TARGET})`) = 0 ]; then
echo "Branch OK"
else
echo "Branch is not rebased. Exiting"
exit 1
fi
popd'''
echo "Configure"
sh '''#!/bin/bash -e
echo "JOBS=${JOBS}"
pushd "${WORKSPACE}"
echo "./configure.sh pure linux Debug -G Ninja"
./configure.sh pure linux Debug -G Ninja
popd'''
echo "Clang Tidy check"
/* requires compilation database - must be run after configuration */
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
./config/clang_check.sh PurePhone
popd'''
echo "Build"
sh '''#!/bin/bash -e
echo "JOBS=${JOBS}"
pushd "${WORKSPACE}"
pushd build-PurePhone-linux-Debug
ninja -j ${JOBS} PurePhone-boot.bin
popd
popd'''
echo "Build Unit Tests"
sh '''#!/bin/bash -e
pushd "${WORKSPACE}"
pushd build-PurePhone-linux-Debug
ninja -j ${JOBS} unittests
popd'''
echo "CCache stats"
sh '''#!/bin/bash
export CCACHE_DIR=/ccache/Linux
ccache --show-stats'''
echo "Check for Statics"
sh '''#!/bin/bash -e
pushd "${WORKSPACE}"
./tools/find_global_data.py build-PurePhone-linux-Debug/PurePhone.elf
popd'''
echo "Run Unit Tests"
sh '''#!/bin/bash -e
export JOBS=${JOBS:-6}
echo "JOBS=${JOBS}"
pushd "${WORKSPACE}"
pushd build-PurePhone-linux-Debug
ninja check -j ${JOBS}
popd
echo "disk usage before removal:"
du -h --max-depth=1 .
rm -r build-PurePhone-linux-Debug
echo "disk usage after removal:"
du -h --max-depth=1 .
popd'''
}
}
stage('Build Linux - Bell') {
environment {
CCACHE_DIR="/ccache/Linux"
XDG_CACHE_HOME="/clang-cache"
}
when {
expression {
return !(env.CHANGE_TARGET ==~ /release\/[0-9]+\.[0-9]+\.[0-9]+-pure/)
}
}
steps {
echo "Check if branch needs rebasing"
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
if [ $(git rev-list --count origin/${CHANGE_TARGET}...`(git merge-base ${GIT_COMMIT} origin/${CHANGE_TARGET})`) = 0 ]; then
echo "Branch OK"
else
echo "Branch is not rebased. Exiting"
exit 1
fi
popd'''
echo "Configure"
sh '''#!/bin/bash -e
echo "JOBS=${JOBS}"
pushd "${WORKSPACE}"
echo "./configure.sh bell linux Debug -G Ninja"
./configure.sh bell linux Debug -G Ninja
popd'''
echo "Clang Tidy check"
/* requires compilation database - must be run after configuration */
sh '''#!/bin/bash -e
pushd ${WORKSPACE}
./config/clang_check.sh BellHybrid
popd'''
echo "Build"
sh '''#!/bin/bash -e
echo "JOBS=${JOBS}"
pushd "${WORKSPACE}"
pushd build-BellHybrid-linux-Debug
ninja -j ${JOBS} BellHybrid-boot.bin
popd
popd'''
echo "Build Unit Tests"
sh '''#!/bin/bash -e
pushd "${WORKSPACE}"
pushd "${WORKSPACE}"
pushd build-BellHybrid-linux-Debug
ninja -j ${JOBS} unittests
popd
popd'''
echo "CCache stats"
sh '''#!/bin/bash
export CCACHE_DIR=/ccache/Linux
ccache --show-stats'''
echo "Check for Statics"
sh '''#!/bin/bash -e
pushd "${WORKSPACE}"
./tools/find_global_data.py build-BellHybrid-linux-Debug/BellHybrid.elf
popd'''
echo "Run Unit Tests"
sh '''#!/bin/bash -e
export JOBS=${JOBS:-6}
echo "JOBS=${JOBS}"
pushd "${WORKSPACE}"
pushd build-BellHybrid-linux-Debug
ninja check -j ${JOBS}
popd
echo "disk usage before removal:"
du -h --max-depth=1 .
rm -r build-BellHybrid-linux-Debug
echo "disk usage after removal:"
du -h --max-depth=1 .
popd'''
}
}
stage('master-jobs') {
when {
branch 'master'
}
steps {
echo "run some tests"
sh '''#!/bin/bash
echo "HAL 9000 sleeps here."
'''
}
}
}
post {
cleanup {
deleteDir()
dir("${workspace}@tmp") {
deleteDir()
}
dir("${workspace}@script") {
deleteDir()
}
}
}
}