Adapt Jenkins Pipelines to the new build system.
This commit is contained in:
parent
0dd48ec57e
commit
270a48b37d
@ -1,10 +1,11 @@
|
|||||||
FROM debian:buster
|
FROM debian:buster-slim
|
||||||
|
|
||||||
RUN useradd -ms /bin/bash --uid 1006 builder
|
RUN useradd -ms /bin/bash --uid 1006 builder
|
||||||
|
|
||||||
# 0 A.D. dependencies.
|
# 0 A.D. dependencies.
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG DEBCONF_NOWARNINGS="yes"
|
ARG DEBCONF_NOWARNINGS="yes"
|
||||||
RUN apt-get -qqy update && apt-get install -qqy \
|
RUN apt-get -qqy update && apt-get install -qqy --no-install-recommends \
|
||||||
cmake \
|
cmake \
|
||||||
curl \
|
curl \
|
||||||
libboost-dev \
|
libboost-dev \
|
||||||
@ -18,7 +19,6 @@ RUN apt-get -qqy update && apt-get install -qqy \
|
|||||||
libgtk-3-dev \
|
libgtk-3-dev \
|
||||||
libicu-dev \
|
libicu-dev \
|
||||||
libidn11-dev \
|
libidn11-dev \
|
||||||
libjson-perl \
|
|
||||||
libminiupnpc-dev \
|
libminiupnpc-dev \
|
||||||
libogg-dev \
|
libogg-dev \
|
||||||
libopenal-dev \
|
libopenal-dev \
|
||||||
@ -27,15 +27,22 @@ RUN apt-get -qqy update && apt-get install -qqy \
|
|||||||
libsodium-dev \
|
libsodium-dev \
|
||||||
libvorbis-dev \
|
libvorbis-dev \
|
||||||
libwxgtk3.0-dev \
|
libwxgtk3.0-dev \
|
||||||
libxcursor-dev \
|
|
||||||
libxml-simple-perl \
|
|
||||||
libxml2-dev \
|
libxml2-dev \
|
||||||
|
make \
|
||||||
m4 \
|
m4 \
|
||||||
|
patch \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
subversion \
|
||||||
|
xz-utils \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
|
# Install git-lfs
|
||||||
|
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
RUN apt-get -qqy update && apt-get install -qqy --no-install-recommends git-lfs
|
||||||
|
RUN git lfs install --system --skip-smudge
|
||||||
|
|
||||||
# Install rust and Cargo via rustup
|
# Install rust and Cargo via rustup
|
||||||
USER builder
|
USER builder
|
||||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
@ -1,6 +1,4 @@
|
|||||||
FROM build-base:latest
|
FROM buster-base:latest
|
||||||
|
|
||||||
# Obviously clang8 is not available but 13 is ^^"
|
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG DEBCONF_NOWARNINGS="yes"
|
ARG DEBCONF_NOWARNINGS="yes"
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
FROM 0ad-gcc7:latest
|
|
||||||
|
|
||||||
USER root
|
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
ARG DEBCONF_NOWARNINGS="yes"
|
|
||||||
RUN apt-get install -qqy graphviz doxygen xsltproc lcov --no-install-recommends
|
|
||||||
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7
|
|
||||||
|
|
||||||
USER builder
|
|
@ -1,4 +1,4 @@
|
|||||||
FROM build-base:latest
|
FROM buster-base:latest
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG DEBCONF_NOWARNINGS="yes"
|
ARG DEBCONF_NOWARNINGS="yes"
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
FROM debian:bookworm-slim
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
ARG DEBCONF_NOWARNINGS="yes"
|
|
||||||
RUN useradd -ms /bin/bash --uid 1006 builder
|
|
||||||
RUN apt-get -qq update && apt-get install -qqy --no-install-recommends \
|
|
||||||
python3-dev \
|
|
||||||
cppcheck \
|
|
||||||
git \
|
|
||||||
subversion \
|
|
||||||
libphutil \
|
|
||||||
php-cli \
|
|
||||||
php-curl \
|
|
||||||
curl \
|
|
||||||
&& apt-get clean
|
|
||||||
ENV SHELL /bin/bash
|
|
||||||
WORKDIR "/home/builder"
|
|
||||||
RUN curl -fsSLk https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
|
|
||||||
RUN chmod +x nodesource_setup.sh && ./nodesource_setup.sh && rm nodesource_setup.sh
|
|
||||||
RUN apt install nodejs -qqy
|
|
||||||
RUN npm install -g eslint@8.57.0 eslint-plugin-brace-rules
|
|
||||||
USER builder
|
|
||||||
RUN git clone https://github.com/phacility/arcanist.git ~/arcanist
|
|
||||||
ENV PATH="${PATH}:~/arcanist/bin/"
|
|
13
build/jenkins/dockerfiles/tools.Dockerfile
Normal file
13
build/jenkins/dockerfiles/tools.Dockerfile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
FROM python:3.12-slim-bookworm
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
ARG DEBCONF_NOWARNINGS="yes"
|
||||||
|
RUN apt -qq update && apt install -qqy --no-install-recommends \
|
||||||
|
git \
|
||||||
|
git-lfs \
|
||||||
|
subversion \
|
||||||
|
&& apt clean
|
||||||
|
|
||||||
|
RUN git lfs install --system --skip-smudge
|
||||||
|
|
||||||
|
RUN pip3 install --upgrade lxml
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2022 Wildfire Games.
|
/* Copyright (C) 2024 Wildfire Games.
|
||||||
* This file is part of 0 A.D.
|
* This file is part of 0 A.D.
|
||||||
*
|
*
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
@ -15,40 +15,31 @@
|
|||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// This pipeline is used to build the design document.
|
// This pipeline runs source/tools/entity/checkrefs.py to identify
|
||||||
|
// mistakes and oversights in references to game content (assets,
|
||||||
|
// templates, etc).
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
node {
|
dockerfile {
|
||||||
label 'LinuxSlave'
|
label 'LinuxAgent'
|
||||||
|
customWorkspace 'workspace/checkrefs'
|
||||||
|
dir 'build/jenkins/dockerfiles'
|
||||||
|
filename 'tools.Dockerfile'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
stage("Checkout") {
|
stage("Asset download") {
|
||||||
steps {
|
steps {
|
||||||
ws("/zpool0/design-docs"){
|
sh "git lfs pull -I binaries/data/mods/public/maps"
|
||||||
git "https://code.wildfiregames.com/source/design.git"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
stage("Generate") {
|
stage("Data checks") {
|
||||||
steps {
|
steps {
|
||||||
ws("/zpool0/design-docs"){
|
sh "cd source/tools/entity/ && python3 checkrefs.py -tax"
|
||||||
sh "mkdocs build"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage("Upload") {
|
|
||||||
steps {
|
|
||||||
ws("/zpool0/design-docs"){
|
|
||||||
sh "rsync -rti --delete-after --progress site/ docs.wildfiregames.com:~/www/design/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
step([$class: 'PhabricatorNotifier'])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,194 +0,0 @@
|
|||||||
/* Copyright (C) 2022 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This pipeline is used to build patches on various compilers.
|
|
||||||
|
|
||||||
def compilers = []
|
|
||||||
if (params["With Clang"])
|
|
||||||
{
|
|
||||||
compilers = ["clang7"]
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
compilers = ["gcc7"]
|
|
||||||
}
|
|
||||||
|
|
||||||
def patchesMap = compilers.collectEntries {
|
|
||||||
["${it}": patch(it)]
|
|
||||||
}
|
|
||||||
def patch(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Patch: ${compiler}") {
|
|
||||||
try {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
sh "arc patch ${params.DIFF_ID} --force"
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
sh "sudo zfs rollback zpool0/${compiler}@latest"
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def buildsMap = compilers.collectEntries {
|
|
||||||
["${it}": build(it)]
|
|
||||||
}
|
|
||||||
def build(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Build: ${compiler}") {
|
|
||||||
try {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
docker.image("0ad-${compiler}:latest").inside {
|
|
||||||
script {
|
|
||||||
def NoAudioOption = ""
|
|
||||||
def NoPchOption = ""
|
|
||||||
def GlesOption = ""
|
|
||||||
def NoLobbyOption = ""
|
|
||||||
|
|
||||||
if (params["No PCH"])
|
|
||||||
{
|
|
||||||
NoPchOption="--without-pch "
|
|
||||||
}
|
|
||||||
if (params["OpenGL ES"])
|
|
||||||
{
|
|
||||||
GlesOption="--gles "
|
|
||||||
}
|
|
||||||
if (params["No Audio"])
|
|
||||||
{
|
|
||||||
NoAudioOption="--without-audio "
|
|
||||||
}
|
|
||||||
if (params["No Lobby"])
|
|
||||||
{
|
|
||||||
NoLobbyOption="--without-lobby "
|
|
||||||
}
|
|
||||||
|
|
||||||
sh "build/workspaces/update-workspaces.sh ${NoAudioOption}${GlesOption}${NoPchOption}${NoLobbyOption} -j1"
|
|
||||||
}
|
|
||||||
test_env="this is test env"
|
|
||||||
withEnv(["CXXFLAGS=${params.CXXFLAGS}", "CFLAGS=${params.CFLAGS}", "LDFLAGS=${params.LDFLAGS}"]){
|
|
||||||
if (params["CXXFLAGS"])
|
|
||||||
{
|
|
||||||
echo "Custom CXXFLAGS: ${env.CXXFLAGS}"
|
|
||||||
}
|
|
||||||
if (params["CFLAGS"])
|
|
||||||
{
|
|
||||||
echo "Custom CFLAGS: ${env.CFLAGS}"
|
|
||||||
}
|
|
||||||
if (params["Debug Build"])
|
|
||||||
{
|
|
||||||
def debugBuildErrorFile = "builderr-debug-${compiler}.log"
|
|
||||||
try {
|
|
||||||
try {
|
|
||||||
sh '''
|
|
||||||
CC_VERSION="$($CC --version | sed -e \'s/version//g\' -e \'s/(.*)//g' -e \'s/\\s//\' | sed 1q)"
|
|
||||||
CXX_VERSION="$($CXX --version | sed -e \'s/version//g\' -e \'s/(.*)//g' -e \'s/\\s//\' | sed 1q)"
|
|
||||||
echo "Building pyrogenesis in debug with $CC_VERSION/$CXX_VERSION using 2 jobs..."
|
|
||||||
'''
|
|
||||||
sh "cd build/workspaces/gcc/ && make config=debug clean && make -j2 config=debug 2> ../../../${debugBuildErrorFile}"
|
|
||||||
} catch(e) {
|
|
||||||
sh "rm -rf build/workspaces/gcc/obj/test_Debug"
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
archiveArtifacts artifacts: "${debugBuildErrorFile}", fingerprint: true
|
|
||||||
}
|
|
||||||
|
|
||||||
def debugBuildTestFile = "cxxtest-debug-${compiler}.log"
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test_dbg > ${debugBuildTestFile}"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "${debugBuildTestFile}"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
archiveArtifacts artifacts: "${debugBuildTestFile}", fingerprint: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
def releaseBuildErrorFile = "builderr-release-${compiler}.log"
|
|
||||||
try {
|
|
||||||
try {
|
|
||||||
sh '''
|
|
||||||
CC_VERSION="$($CC --version | sed -e \'s/version//g\' -e \'s/(.*)//g' -e \'s/\\s//\' | sed 1q)"
|
|
||||||
CXX_VERSION="$($CXX --version | sed -e \'s/version//g\' -e \'s/(.*)//g' -e \'s/\\s//\' | sed 1q)"
|
|
||||||
echo "Building pyrogenesis in release with $CC_VERSION/$CXX_VERSION using 2 jobs..."
|
|
||||||
'''
|
|
||||||
sh "cd build/workspaces/gcc/ && make clean && make -j2 config=release 2> ../../../${releaseBuildErrorFile}"
|
|
||||||
} catch(e) {
|
|
||||||
sh "rm -rf build/workspaces/gcc/obj/test_Release"
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
archiveArtifacts artifacts: "${releaseBuildErrorFile}", fingerprint: true
|
|
||||||
}
|
|
||||||
|
|
||||||
def releaseBuildTestFile = "cxxtest-release-${compiler}.log"
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test > ${releaseBuildTestFile}"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "${releaseBuildTestFile}"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
archiveArtifacts artifacts: "${releaseBuildTestFile}", fingerprint: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
sh "sudo zfs rollback zpool0/${compiler}@latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
node {
|
|
||||||
label 'LinuxSlave'
|
|
||||||
customWorkspace '/zpool0/trunk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parameters {
|
|
||||||
string(name: 'DIFF_ID', defaultValue: '', description: 'ID of the Phabricator Differential.')
|
|
||||||
booleanParam(name: 'OpenGL ES', defaultValue: false, description: 'Build with --gles.')
|
|
||||||
booleanParam(name: 'No PCH', defaultValue: false, description: 'Build with --without-pch.')
|
|
||||||
booleanParam(name: 'No Audio', defaultValue: false, description: 'Build with --without-audio.')
|
|
||||||
booleanParam(name: 'No Lobby', defaultValue: false, description: 'Build with --without-lobby.')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Patch") {
|
|
||||||
when { expression { return !!params.DIFF_ID } }
|
|
||||||
steps {
|
|
||||||
script { parallel patchesMap }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Build") {
|
|
||||||
options {
|
|
||||||
timeout(time: 2, unit: 'HOURS')
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script { parallel buildsMap }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,261 +0,0 @@
|
|||||||
/* Copyright (C) 2024 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This pipeline is used to build patches on various compilers.
|
|
||||||
|
|
||||||
def compilers = ["gcc7", "clang8"]
|
|
||||||
|
|
||||||
def patchesMap = compilers.collectEntries {
|
|
||||||
["${it}": patch(it)]
|
|
||||||
}
|
|
||||||
|
|
||||||
def patch(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Patch: ${compiler}") {
|
|
||||||
try {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
sh "arc patch --diff ${params.DIFF_ID} --force"
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
reset("${compiler}").call()
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def resetMap = compilers.collectEntries {
|
|
||||||
["${it}": reset(it)]
|
|
||||||
}
|
|
||||||
|
|
||||||
def reset(compiler)
|
|
||||||
{
|
|
||||||
return {
|
|
||||||
stage("Reset: ${compiler}") {
|
|
||||||
sleep 30
|
|
||||||
sh "sudo zfs rollback zpool0/${compiler}@latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def buildsMap = compilers.collectEntries {
|
|
||||||
["${it}": build(it)]
|
|
||||||
}
|
|
||||||
|
|
||||||
def build(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Build: ${compiler}") {
|
|
||||||
try {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
docker.image("0ad-${compiler}:latest").inside {
|
|
||||||
|
|
||||||
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests"
|
|
||||||
|
|
||||||
try {
|
|
||||||
retry(3) {
|
|
||||||
try {
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j1 config=debug 2> ../../../builderr-debug-${compiler}.txt"
|
|
||||||
} catch(e) {
|
|
||||||
sh "rm -rf build/workspaces/gcc/obj/test_Debug"
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
stash includes: "builderr-debug-${compiler}.txt", name: "build-debug-${compiler}"
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test_dbg > cxxtest-debug-${compiler}.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-debug-${compiler}.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
stash includes: "cxxtest-debug-${compiler}.xml", name: "tests-debug-${compiler}"
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
retry(3) {
|
|
||||||
try {
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j1 config=release 2> ../../../builderr-release-${compiler}.txt"
|
|
||||||
} catch(e) {
|
|
||||||
sh "rm -rf build/workspaces/gcc/obj/test_Release"
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
stash includes: "builderr-release-${compiler}.txt", name: "build-release-${compiler}"
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test > cxxtest-release-${compiler}.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-release-${compiler}.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
stash includes: "cxxtest-release-${compiler}.xml", name: "tests-release-${compiler}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
reset("${compiler}").call()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
node {
|
|
||||||
label 'LinuxSlave'
|
|
||||||
customWorkspace '/zpool0/trunk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parameters {
|
|
||||||
string(name: 'DIFF_ID', defaultValue: '', description: 'ID of the Phabricator Differential.')
|
|
||||||
string(name: 'PHID', defaultValue: '', description: 'Phabricator ID')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Patch") {
|
|
||||||
when { expression { return !!params.DIFF_ID } }
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "arc patch --diff ${params.DIFF_ID} --force"
|
|
||||||
script { parallel patchesMap }
|
|
||||||
} catch(e) {
|
|
||||||
// In case of failure, reset both, since they were patched together.
|
|
||||||
parallel resetMap
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Build") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
buildsMap.each { key, value ->
|
|
||||||
value.call()
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
// In case of failure, reset both, since they were patched together.
|
|
||||||
parallel resetMap
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
for(compiler in compilers) {
|
|
||||||
catchError { unstash "build-debug-${compiler}" }
|
|
||||||
catchError { unstash "tests-debug-${compiler}" }
|
|
||||||
catchError { unstash "build-release-${compiler}" }
|
|
||||||
catchError { unstash "tests-release-${compiler}" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catchError {
|
|
||||||
sh '''
|
|
||||||
for file in builderr-*.txt ; do
|
|
||||||
if [ -s "$file" ]; then
|
|
||||||
echo "$file" >> build-errors.txt
|
|
||||||
cat "$file" >> build-errors.txt
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
'''
|
|
||||||
}
|
|
||||||
catchError { junit 'cxxtest*.xml' }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Lint") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
docker.image("0ad-lint:latest").inside {
|
|
||||||
try {
|
|
||||||
// arc lint outputs an empty file on success - unless there is nothing to lint.
|
|
||||||
// On failure, it'll output the file and a failure error code.
|
|
||||||
// Explicitly checking for the file presence is thus best to detect the linter did run
|
|
||||||
sh '~/arcanist/bin/arc lint --never-apply-patches --output jenkins --outfile .phabricator-lint && touch .phabricator-lint'
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
if (!fileExists(".phabricator-lint")) {
|
|
||||||
sh '''echo '{"General":[{"line": 0, "char": 0, "code": "Jenkins", "severity": "error", "name": "ci-error", "description": "Error running lint", "original": null, "replacement": null, "granularity": 1, "locations": [], "bypassChangedLineFiltering": true, "context": null}]}' > .phabricator-lint '''
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sh 'echo "error(s) were found running lint"'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
stash includes: ".phabricator-lint", name: "Lint File"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
unstash("Lint File")
|
|
||||||
if (fileExists(".phabricator-lint")) {
|
|
||||||
sh '''cat .phabricator-lint '''
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Data checks") {
|
|
||||||
steps {
|
|
||||||
warnError('CheckRefs.py script failed!') {
|
|
||||||
sh "cd source/tools/entity/ && python3 checkrefs.py -tax 2> data-errors.txt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
catchError {
|
|
||||||
sh "if [ -s build-errors.txt ]; then cat build-errors.txt >> .phabricator-comment ; fi"
|
|
||||||
sh '''
|
|
||||||
if [ -s data-errors.txt ]; then
|
|
||||||
echo "Data checks errors:" >> .phabricator-comment
|
|
||||||
cat data-errors.txt >> .phabricator-comment
|
|
||||||
fi
|
|
||||||
'''
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (fileExists(".phabricator-comment")) {
|
|
||||||
step([$class: 'PhabricatorNotifier', commentOnSuccess: true, commentWithConsoleLinkOnFailure: true, customComment: true, commentFile: ".phabricator-comment", processLint: true, lintFile: ".phabricator-lint"])
|
|
||||||
} else {
|
|
||||||
step([$class: 'PhabricatorNotifier', commentWithConsoleLinkOnFailure: true, processLint: true, lintFile: ".phabricator-lint"])
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
sh "sudo zfs rollback zpool0/trunk@latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,87 +0,0 @@
|
|||||||
/* Copyright (C) 2022 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This pipeline is used to build a clean base from scratch in order to
|
|
||||||
// use ZFS snapshots efficiently.
|
|
||||||
|
|
||||||
def compilers = ["gcc7", "clang7"]
|
|
||||||
|
|
||||||
def volumeUpdatesMap = compilers.collectEntries {
|
|
||||||
["${it}": volumeUpdate(it)]
|
|
||||||
}
|
|
||||||
def volumeUpdate(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Recreate: ${compiler}") {
|
|
||||||
sh "sudo zfs clone zpool0/trunk@base zpool0/${compiler}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def buildsMap = compilers.collectEntries {
|
|
||||||
["${it}": build(it)]
|
|
||||||
}
|
|
||||||
def build(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Build: ${compiler}") {
|
|
||||||
try {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
docker.image("0ad-${compiler}:latest").inside {
|
|
||||||
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests"
|
|
||||||
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j1 config=debug"
|
|
||||||
sh "binaries/system/test_dbg"
|
|
||||||
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j1 config=release"
|
|
||||||
sh "binaries/system/test"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
sh "sudo zfs snapshot zpool0/${compiler}@latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
node {
|
|
||||||
label 'LinuxSlave'
|
|
||||||
customWorkspace '/zpool0/trunk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Volume updates") {
|
|
||||||
steps {
|
|
||||||
// Note: latest must always be the last snapshot in order to be able to rollback to it
|
|
||||||
sh "sudo zfs rollback zpool0/trunk@latest"
|
|
||||||
sh "sudo zfs destroy -R zpool0/trunk@latest"
|
|
||||||
sh "sudo zfs destroy -R zpool0/trunk@base"
|
|
||||||
sh "sudo zfs snapshot zpool0/trunk@base"
|
|
||||||
sh "sudo zfs snapshot zpool0/trunk@latest"
|
|
||||||
script { parallel volumeUpdatesMap }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Build") {
|
|
||||||
steps {
|
|
||||||
script { parallel buildsMap }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,100 +0,0 @@
|
|||||||
/* Copyright (C) 2024 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This is a helper pipeline to build Docker images and setup ZFS volumes.
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
node {
|
|
||||||
label 'LinuxSlave'
|
|
||||||
customWorkspace '/zpool0/trunk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parameters {
|
|
||||||
booleanParam(name: 'no-cache', defaultValue: false, description: 'Rebuild containers from scratch')
|
|
||||||
booleanParam(name: 'reset-volumes', defaultValue: false, description: 'Reset ZFS volumes')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Cleanup") {
|
|
||||||
steps {
|
|
||||||
sh 'docker system prune -f'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Full Rebuild") {
|
|
||||||
when {
|
|
||||||
environment name: 'no-cache', value: 'true'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
sh 'docker build --no-cache -t build-base ~/dockerfiles/build-base'
|
|
||||||
sh 'docker build --no-cache -t 0ad-gcc7 ~/dockerfiles/gcc7'
|
|
||||||
sh 'docker build --no-cache -t 0ad-gcc7-docs ~/dockerfiles/gcc7-docs'
|
|
||||||
sh 'docker build --no-cache -t 0ad-clang8 ~/dockerfiles/clang8'
|
|
||||||
sh 'docker build --no-cache -t 0ad-translations ~/dockerfiles/translations'
|
|
||||||
sh 'docker build --no-cache -t 0ad-lint ~/dockerfiles/lint'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Build") {
|
|
||||||
when {
|
|
||||||
environment name: 'no-cache', value: 'true'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
sh 'docker build -t build-base ~/dockerfiles/build-base'
|
|
||||||
sh 'docker build -t 0ad-gcc7 ~/dockerfiles/gcc7'
|
|
||||||
sh 'docker build -t 0ad-gcc7-docs ~/dockerfiles/gcc7-docs'
|
|
||||||
sh 'docker build -t 0ad-clang8 ~/dockerfiles/clang8'
|
|
||||||
sh 'docker build -t 0ad-translations ~/dockerfiles/translations'
|
|
||||||
sh 'docker build -t 0ad-lint ~/dockerfiles/lint'
|
|
||||||
sh """
|
|
||||||
docker rmi debian:buster
|
|
||||||
DANGLING_IMAGES="\$(docker images --filter \"\"\"dangling=true\"\"\" -q --no-trunc)"
|
|
||||||
if [ -n "\$DANGLING_IMAGES" ]; then
|
|
||||||
echo "Removing dangling images: \$DANGLING_IMAGES"
|
|
||||||
docker rmi \$(docker images --filter \"\"\"dangling=true\"\"\" -q --no-trunc)
|
|
||||||
echo "Done."
|
|
||||||
else
|
|
||||||
echo "No dangling images found."
|
|
||||||
fi
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Update") {
|
|
||||||
steps {
|
|
||||||
sh "svn cleanup 2>/dev/null || true"
|
|
||||||
svn "https://svn.wildfiregames.com/public/ps/trunk"
|
|
||||||
sh "svn st --no-ignore | cut -c 9- | xargs rm -rf"
|
|
||||||
sh "svn revert -R ."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Volumes") {
|
|
||||||
when {
|
|
||||||
environment name: 'reset-volumes', value: 'true'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
sh "sudo zfs destroy -R zpool0/trunk@base || true"
|
|
||||||
sh "sudo zfs destroy -R zpool0/trunk@latest || true"
|
|
||||||
|
|
||||||
sh "sudo zfs snapshot zpool0/trunk@base"
|
|
||||||
sh "sudo zfs clone zpool0/trunk@base zpool0/gcc7"
|
|
||||||
sh "sudo zfs clone zpool0/trunk@base zpool0/clang8"
|
|
||||||
sh "sudo zfs snapshot zpool0/trunk@latest"
|
|
||||||
sh "sudo zfs snapshot zpool0/clang8@latest"
|
|
||||||
sh "sudo zfs snapshot zpool0/gcc7@latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
/* Copyright (C) 2022 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This pipeline is used to build the documentation.
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
node {
|
|
||||||
label 'LinuxSlave'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
stage("Setup") {
|
|
||||||
steps {
|
|
||||||
sh "sudo zfs clone zpool0/gcc7@latest zpool0/docker-nopch"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Build") {
|
|
||||||
steps {
|
|
||||||
ws("/zpool0/docker-nopch"){
|
|
||||||
dir('build/workspaces/'){
|
|
||||||
sh "./update-workspaces.sh -j1 --without-pch"
|
|
||||||
dir('gcc/'){
|
|
||||||
sh "make clean"
|
|
||||||
sh "make -j1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Test") {
|
|
||||||
steps {
|
|
||||||
ws("/zpool0/docker-nopch"){
|
|
||||||
dir('build/workspaces/gcc'){
|
|
||||||
// as where it was built else nothing is generated.
|
|
||||||
sh "../../../binaries/system/test"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
ws("/zpool0/trunk") {
|
|
||||||
sleep 10
|
|
||||||
sh "sudo zfs destroy zpool0/docker-nopch"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
/* Copyright (C) 2021 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This is the post-commit pipeline.
|
|
||||||
// In case of success, it provides a clean base for incremental builds
|
|
||||||
// with the `differential` pipeline.
|
|
||||||
|
|
||||||
def compilers = ["gcc7"]
|
|
||||||
|
|
||||||
def volumeUpdatesMap = compilers.collectEntries {
|
|
||||||
["${it}": volumeUpdate(it)]
|
|
||||||
}
|
|
||||||
def volumeUpdate(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Update: ${compiler}") {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
sh "svn up -r ${params.SVN_REV}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def buildsMap = compilers.collectEntries {
|
|
||||||
["${it}": build(it)]
|
|
||||||
}
|
|
||||||
def build(compiler) {
|
|
||||||
return {
|
|
||||||
stage("Build: ${compiler}") {
|
|
||||||
try {
|
|
||||||
ws("/zpool0/${compiler}") {
|
|
||||||
docker.image("0ad-${compiler}:latest").inside {
|
|
||||||
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests"
|
|
||||||
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j1 config=debug"
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test_dbg > cxxtest-debug-${compiler}.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-debug-${compiler}.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
catchError {
|
|
||||||
sh "sed -i 's/date/timestamp/g' cxxtest-debug-${compiler}.xml"
|
|
||||||
}
|
|
||||||
stash includes: "cxxtest-debug-${compiler}.xml", name: "tests-debug-${compiler}"
|
|
||||||
}
|
|
||||||
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j1 config=release"
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test > cxxtest-release-${compiler}.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-release-${compiler}.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
catchError {
|
|
||||||
sh "sed -i 's/date/timestamp/g' cxxtest-release-${compiler}.xml"
|
|
||||||
}
|
|
||||||
stash includes: "cxxtest-release-${compiler}.xml", name: "tests-release-${compiler}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sh "sudo zfs destroy zpool0/${compiler}@latest"
|
|
||||||
sh "sudo zfs snapshot zpool0/${compiler}@latest"
|
|
||||||
} catch (e) {
|
|
||||||
sh "sudo zfs rollback zpool0/${compiler}@latest"
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
node {
|
|
||||||
label 'LinuxSlave'
|
|
||||||
customWorkspace '/zpool0/trunk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parameters {
|
|
||||||
string(name: 'SVN_REV', defaultValue: '', description: 'For instance 21000')
|
|
||||||
string(name: 'PHID', defaultValue: '', description: 'Phabricator ID')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Update") {
|
|
||||||
steps {
|
|
||||||
sh "svn cleanup 2>/dev/null || true"
|
|
||||||
svn "https://svn.wildfiregames.com/public/ps/trunk@${params.SVN_REV}"
|
|
||||||
sh "svn st --no-ignore | cut -c 9- | xargs rm -rf"
|
|
||||||
sh "svn revert -R ."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Volume updates") {
|
|
||||||
steps {
|
|
||||||
script { parallel volumeUpdatesMap }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Build") {
|
|
||||||
steps {
|
|
||||||
script { parallel buildsMap }
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
for(compiler in compilers) {
|
|
||||||
catchError { unstash "tests-debug-${compiler}" }
|
|
||||||
catchError { unstash "tests-release-${compiler}" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catchError { junit 'cxxtest*.xml' }
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
sh "sudo zfs rollback zpool0/trunk@latest"
|
|
||||||
}
|
|
||||||
success {
|
|
||||||
sh "sudo zfs destroy -R zpool0/trunk@latest"
|
|
||||||
sh "sudo zfs snapshot zpool0/trunk@latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Data checks") {
|
|
||||||
steps {
|
|
||||||
sh "cd source/tools/entity/ && perl checkrefs.pl --check-map-xml --validate-templates"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
step([$class: 'PhabricatorNotifier'])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
120
build/jenkins/pipelines/linux.Jenkinsfile
Normal file
120
build/jenkins/pipelines/linux.Jenkinsfile
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
/* Copyright (C) 2024 Wildfire Games.
|
||||||
|
* This file is part of 0 A.D.
|
||||||
|
*
|
||||||
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 0 A.D. is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This pipeline builds the game on Linux (with min and max supported versions of GCC and clang) and runs tests.
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent none
|
||||||
|
stages {
|
||||||
|
stage("Setup") {
|
||||||
|
agent {
|
||||||
|
node {
|
||||||
|
label 'LinuxAgent'
|
||||||
|
customWorkspace 'workspace/linux'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
discoverGitReferenceBuild()
|
||||||
|
sh "cd build/jenkins/dockerfiles/ && docker build -t buster-base -f buster-base.Dockerfile ."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage("Linux Build") {
|
||||||
|
failFast true
|
||||||
|
|
||||||
|
matrix {
|
||||||
|
axes {
|
||||||
|
axis {
|
||||||
|
name 'JENKINS_COMPILER'
|
||||||
|
values 'gcc7' //, 'gcc14', 'clang8', 'clang18'
|
||||||
|
}
|
||||||
|
axis {
|
||||||
|
name 'JENKINS_PCH'
|
||||||
|
values 'pch' //, 'no-pch'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
agent {
|
||||||
|
dockerfile {
|
||||||
|
label 'LinuxAgent'
|
||||||
|
customWorkspace "workspace/${JENKINS_COMPILER}-${JENKINS_PCH}"
|
||||||
|
dir 'build/jenkins/dockerfiles'
|
||||||
|
filename "${JENKINS_COMPILER}.Dockerfile"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage("Pre-build") {
|
||||||
|
steps {
|
||||||
|
sh "git lfs pull -I binaries/data/tests"
|
||||||
|
sh "git lfs pull -I \"binaries/data/mods/_test.*\""
|
||||||
|
|
||||||
|
sh "libraries/build-source-libs.sh -j1 2> ${JENKINS_COMPILER}-prebuild-errors.log"
|
||||||
|
script {
|
||||||
|
if (env.JENKINS_PCH == "no-pch") {
|
||||||
|
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests --without-pch 2>> ${JENKINS_COMPILER}-prebuild-errors.log"
|
||||||
|
} else {
|
||||||
|
sh "build/workspaces/update-workspaces.sh -j1 --jenkins-tests 2>> ${JENKINS_COMPILER}-prebuild-errors.log"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
failure {
|
||||||
|
echo (message: readFile (file: "${JENKINS_COMPILER}-prebuild-errors.log"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Debug Build") {
|
||||||
|
steps {
|
||||||
|
sh "cd build/workspaces/gcc/ && make -j1 config=debug"
|
||||||
|
timeout(time: 15) {
|
||||||
|
sh "cd binaries/system/ && ./test_dbg > cxxtest-debug.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
junit 'binaries/system/cxxtest-debug.xml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Release Build") {
|
||||||
|
steps {
|
||||||
|
sh "cd build/workspaces/gcc/ && make -j1 config=release"
|
||||||
|
timeout(time: 15) {
|
||||||
|
sh "cd binaries/system/ && ./test > cxxtest-release.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
junit 'binaries/system/cxxtest-release.xml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
node('LinuxSlave') { ws('workspace/linux') {
|
||||||
|
recordIssues enabledForFailure: true, qualityGates: [[threshold: 1, type: 'NEW']], tools: [clang(), gcc()]
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
80
build/jenkins/pipelines/macOS.Jenkinsfile
Normal file
80
build/jenkins/pipelines/macOS.Jenkinsfile
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/* Copyright (C) 2024 Wildfire Games.
|
||||||
|
* This file is part of 0 A.D.
|
||||||
|
*
|
||||||
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 0 A.D. is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This pipeline builds the game on macOS (which uses the clang-10 compiler) and runs tests.
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
node {
|
||||||
|
label 'macOSAgent'
|
||||||
|
customWorkspace 'workspace/clang10'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage ("Pre-build") {
|
||||||
|
steps {
|
||||||
|
discoverGitReferenceBuild()
|
||||||
|
|
||||||
|
sh "git lfs pull -I binaries/data/tests"
|
||||||
|
sh "git lfs pull -I \"binaries/data/mods/_test.*\""
|
||||||
|
|
||||||
|
sh "libraries/build-macos-libs.sh -j4 2> macos-prebuild-errors.log"
|
||||||
|
sh "build/workspaces/update-workspaces.sh -j4 --jenkins-tests 2>> macos-prebuild-errors.log"
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
failure {
|
||||||
|
echo (message: readFile (file: "macos-prebuild-errors.log"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Debug Build") {
|
||||||
|
steps {
|
||||||
|
sh "cd build/workspaces/gcc/ && make -j4 config=debug"
|
||||||
|
timeout(time: 15) {
|
||||||
|
sh "cd binaries/system/ && ./test_dbg > cxxtest-debug.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
junit 'binaries/system/cxxtest-debug.xml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Release Build") {
|
||||||
|
steps {
|
||||||
|
sh "cd build/workspaces/gcc/ && make -j4 config=release"
|
||||||
|
timeout(time: 15) {
|
||||||
|
sh "cd binaries/system/ && ./test > cxxtest-release.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
junit 'binaries/system/cxxtest-release.xml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
recordIssues enabledForFailure: true, qualityGates: [[threshold: 1, type: 'NEW']], tool: clang()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,143 +0,0 @@
|
|||||||
/* Copyright (C) 2021 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent { label 'MacSlave' }
|
|
||||||
options {
|
|
||||||
skipDefaultCheckout()
|
|
||||||
}
|
|
||||||
|
|
||||||
parameters {
|
|
||||||
string(name: 'DIFF_ID', defaultValue: '', description: 'ID of the Phabricator Differential.')
|
|
||||||
string(name: 'PHID', defaultValue: '', description: 'Phabricator ID')
|
|
||||||
booleanParam(name: 'CLEAN_WORKSPACE', defaultValue: false, description: 'Delete the workspace before compiling (NB: does not delete the compiled libraries)')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage ("Checkout") {
|
|
||||||
options {
|
|
||||||
retry(3)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "svn update"
|
|
||||||
} catch(e) {
|
|
||||||
sh "svn cleanup"
|
|
||||||
sleep 300
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "svn cleanup"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Patch") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "arc patch --diff ${params.DIFF_ID} --force"
|
|
||||||
} catch (e) {
|
|
||||||
sh "svn st binaries/data/ | cut -c 9- | xargs rm -rfv"
|
|
||||||
sh "svn st source/ | cut -c 9- | xargs rm -rfv"
|
|
||||||
sh "svn st -q | cut -c 9- | xargs rm -rfv"
|
|
||||||
sh "svn revert -R ."
|
|
||||||
sh "arc patch --diff ${params.DIFF_ID} --force"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("macOS libraries build") {
|
|
||||||
steps {
|
|
||||||
sh "cd libraries/osx/ && ./build-osx-libs.sh -j4"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Update workspaces") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
if (params.CLEAN_WORKSPACE) {
|
|
||||||
sh "rm -rf build/workspaces/gcc"
|
|
||||||
}
|
|
||||||
sh "cd build/workspaces/ && ./update-workspaces.sh -j4 --jenkins-tests"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Debug Build & Tests") {
|
|
||||||
steps {
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j4 config=debug 2> ../../../builderr-debug-macos.txt"
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test_dbg > cxxtest-debug.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-debug.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
junit "cxxtest-debug.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Release Build & Tests") {
|
|
||||||
steps {
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j4 config=release 2> ../../../builderr-release-macos.txt"
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test > cxxtest-release.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-release.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
junit "cxxtest-release.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
catchError {
|
|
||||||
sh '''
|
|
||||||
for file in builderr-*.txt ; do
|
|
||||||
if [ -s "$file" ]; then
|
|
||||||
echo "$file" >> .phabricator-comment
|
|
||||||
cat "$file" >> .phabricator-comment
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
'''
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (fileExists(".phabricator-comment")) {
|
|
||||||
step([$class: 'PhabricatorNotifier', commentOnSuccess: true, commentWithConsoleLinkOnFailure: true, customComment: true, commentFile: ".phabricator-comment"])
|
|
||||||
} else {
|
|
||||||
step([$class: 'PhabricatorNotifier', commentWithConsoleLinkOnFailure: true])
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
sh "rm -f .phabricator-comment builderr-*.txt cxxtest-*.xml"
|
|
||||||
sh "svn st binaries/data/ | cut -c 9- | xargs rm -rfv"
|
|
||||||
sh "svn st source/ | cut -c 9- | xargs rm -rfv"
|
|
||||||
sh "svn st -q | cut -c 9- | xargs rm -rfv"
|
|
||||||
sh "svn revert -R ."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
/* Copyright (C) 2021 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent { label 'MacSlave' }
|
|
||||||
|
|
||||||
parameters {
|
|
||||||
string(name: 'SVN_REV', defaultValue: '', description: 'For instance 21000')
|
|
||||||
string(name: 'PHID', defaultValue: '', description: 'Phabricator ID')
|
|
||||||
booleanParam(name: 'CLEAN_WORKSPACE', defaultValue: false, description: 'Delete the workspace before compiling (NB: does not delete the compiled libraries)')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Checkout") {
|
|
||||||
options {
|
|
||||||
// Account for network errors
|
|
||||||
retry(3)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
svn "https://svn.wildfiregames.com/public/ps/trunk@${params.SVN_REV}"
|
|
||||||
} catch(e) {
|
|
||||||
sh "svn cleanup"
|
|
||||||
sleep 300
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "svn cleanup"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("macOS libraries build") {
|
|
||||||
steps {
|
|
||||||
sh "cd libraries/osx/ && ./build-osx-libs.sh -j4"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Update workspaces") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
if (params.CLEAN_WORKSPACE) {
|
|
||||||
sh "rm -rf build/workspaces/gcc"
|
|
||||||
}
|
|
||||||
sh "cd build/workspaces/ && ./update-workspaces.sh -j4 --jenkins-tests"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Debug Build & Tests") {
|
|
||||||
steps {
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j4 config=debug"
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test_dbg > cxxtest-debug.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-debug.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
junit "cxxtest-debug.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage("Release Build & Tests") {
|
|
||||||
steps {
|
|
||||||
sh "cd build/workspaces/gcc/ && make -j4 config=release"
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
sh "binaries/system/test > cxxtest-release.xml"
|
|
||||||
} catch (e) {
|
|
||||||
echo (message: readFile (file: "cxxtest-release.xml"))
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
junit "cxxtest-release.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
step([$class: 'PhabricatorNotifier'])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,139 +0,0 @@
|
|||||||
/* Copyright (C) 2021 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This pipeline builds Windows binaries. It is run at most daily, every
|
|
||||||
// time a commit touches the source code.
|
|
||||||
|
|
||||||
def AtlasOption = ""
|
|
||||||
def GlooxOption = ""
|
|
||||||
def AtlasPrj = ""
|
|
||||||
def output = ""
|
|
||||||
def jobs = "2"
|
|
||||||
pipeline {
|
|
||||||
agent { label 'WindowsSlave' }
|
|
||||||
|
|
||||||
parameters {
|
|
||||||
booleanParam(name: 'pyrogenesis', defaultValue: true, description: 'Build and commit the main executable.')
|
|
||||||
booleanParam(name: 'atlas', defaultValue: false, description: 'Build and commit the AtlasUI library.')
|
|
||||||
booleanParam(name: 'collada', defaultValue: false, description: 'Build and commit the Collada library.')
|
|
||||||
booleanParam(name: 'gloox', defaultValue: false, description: 'Build and commit the gloox wrapper.')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Checkout") {
|
|
||||||
options {
|
|
||||||
// Account for network errors
|
|
||||||
retry(3)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
checkout([$class: 'SubversionSCM', locations: [[credentialsId: 'redacted', local: '.', remote: 'https://svn.wildfiregames.com/svn/ps/trunk']]])
|
|
||||||
} catch(e) {
|
|
||||||
bat "svn cleanup"
|
|
||||||
sleep 300
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bat "svn cleanup"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage('Setup workspace') {
|
|
||||||
steps {
|
|
||||||
bat "del binaries\\system\\pyrogenesis.pdb binaries\\system\\pyrogenesis.exe"
|
|
||||||
script {
|
|
||||||
if (env.atlas == 'true') {
|
|
||||||
echo "atlas is enabled"
|
|
||||||
AtlasOption = "--atlas"
|
|
||||||
AtlasPrj = "/t:AtlasUI /t:ActorEditor"
|
|
||||||
bat "(robocopy /MIR C:\\wxwidgets-3.1.4\\lib libraries\\win32\\wxwidgets\\lib) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
|
|
||||||
bat "(robocopy /MIR C:\\wxwidgets-3.1.4\\include libraries\\win32\\wxwidgets\\include) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
|
|
||||||
bat "del binaries\\system\\AtlasUI.dll"
|
|
||||||
}
|
|
||||||
if (env.gloox == 'true') {
|
|
||||||
echo "gloox is enabled"
|
|
||||||
GlooxOption = "--build-shared-glooxwrapper"
|
|
||||||
bat "del binaries\\system\\glooxwrapper.pdb binaries\\system\\glooxwrapper.lib binaries\\system\\glooxwrapper.dll"
|
|
||||||
bat "del binaries\\system\\glooxwrapper_dbg.pdb binaries\\system\\glooxwrapper_dbg.lib binaries\\system\\glooxwrapper_dbg.dll"
|
|
||||||
}
|
|
||||||
if (env.collada == 'true') {
|
|
||||||
echo "collada is enabled"
|
|
||||||
bat "del binaries\\system\\Collada.dll"
|
|
||||||
}
|
|
||||||
output = bat(returnStdout: true, script: 'svnversion source -n').trim()
|
|
||||||
output = (output.readLines().drop(1).join("").toInteger() + 1)
|
|
||||||
}
|
|
||||||
bat "cd build\\workspaces && update-workspaces.bat ${AtlasOption} ${GlooxOption} --large-address-aware --jenkins-tests"
|
|
||||||
bat "echo L\"${output}\" > build\\svn_revision\\svn_revision.txt"
|
|
||||||
bat "echo ${output}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ('Build') {
|
|
||||||
steps {
|
|
||||||
bat("cd build\\workspaces\\vs2017 && \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\MSBuild.exe\" pyrogenesis.sln /nologo /p:XPDeprecationWarning=false /p:XPDeprecationWarning=false /m:${jobs} /p:PlatformToolset=v141_xp /t:pyrogenesis ${AtlasPrj} /t:test /p:Configuration=Release")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ('Build debug glooxwrapper') {
|
|
||||||
when { environment name: 'gloox', value: 'true'}
|
|
||||||
steps {
|
|
||||||
bat("cd build\\workspaces\\vs2017 && \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\MSBuild.exe\" pyrogenesis.sln /nologo /p:XPDeprecationWarning=false /p:XPDeprecationWarning=false /m:${jobs} /p:PlatformToolset=v141_xp /t:glooxwrapper /p:Configuration=Debug")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ('Tests') {
|
|
||||||
steps {
|
|
||||||
bat 'binaries\\system\\test.exe'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ('Commit') {
|
|
||||||
options {
|
|
||||||
// Account for network errors
|
|
||||||
retry(3)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
bat "svn changelist --remove --recursive --cl commit ."
|
|
||||||
script {
|
|
||||||
if (env.pyrogenesis == 'true') {
|
|
||||||
bat "svn changelist commit binaries\\system\\pyrogenesis.pdb binaries\\system\\pyrogenesis.exe"
|
|
||||||
}
|
|
||||||
if (env.atlas == 'true') {
|
|
||||||
bat "svn changelist commit binaries\\system\\AtlasUI.dll binaries\\system\\ActorEditor.exe"
|
|
||||||
}
|
|
||||||
if (env.collada == 'true') {
|
|
||||||
bat "svn changelist commit binaries\\system\\Collada.dll"
|
|
||||||
}
|
|
||||||
if (env.gloox == 'true') {
|
|
||||||
bat "svn changelist commit binaries\\system\\glooxwrapper.dll binaries\\system\\glooxwrapper.lib binaries\\system\\glooxwrapper.pdb binaries\\system\\glooxwrapper_dbg.dll binaries\\system\\glooxwrapper_dbg.lib binaries\\system\\glooxwrapper_dbg.pdb"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
withCredentials([usernamePassword(credentialsId: 'redacted', passwordVariable: 'SVNPASS', usernameVariable: 'SVNUSER')]) {
|
|
||||||
bat 'svn commit --username %SVNUSER% --password %SVNPASS% --no-auth-cache --non-interactive --changelist commit -m "[Windows] Automated build."'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
bat "svn revert -R ."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
/* Copyright (C) 2022 Wildfire Games.
|
|
||||||
* This file is part of 0 A.D.
|
|
||||||
*
|
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 0 A.D. is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This pipeline is used to build patches on MSVC 15.0 (Visual Studio 2017).
|
|
||||||
|
|
||||||
def jobs = "2"
|
|
||||||
def visualStudioPath = "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\MSBuild.exe\""
|
|
||||||
def cleanFiles() {
|
|
||||||
bat 'powershell.exe "svn st -q | ForEach-Object { Remove-Item -ErrorAction Ignore -Recurse -Force -Verbose -LiteralPath $_.substring(8) } " '
|
|
||||||
bat 'powershell.exe "svn st binaries/data | ForEach-Object { Remove-Item -ErrorAction Ignore -Recurse -Verbose -Force -LiteralPath $_.substring(8) } " '
|
|
||||||
bat 'powershell.exe "svn st source/ | ForEach-Object { Remove-Item -ErrorAction Ignore -Recurse -Force -Verbose -LiteralPath $_.substring(8) } " '
|
|
||||||
bat 'svn revert -R .'
|
|
||||||
}
|
|
||||||
pipeline {
|
|
||||||
agent { label 'WindowsSlave' }
|
|
||||||
options {
|
|
||||||
skipDefaultCheckout()
|
|
||||||
}
|
|
||||||
|
|
||||||
parameters {
|
|
||||||
string(name: 'DIFF_ID', defaultValue: '', description: 'ID of the Phabricator Differential.')
|
|
||||||
string(name: 'PHID', defaultValue: '', description: 'Phabricator ID')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage ('Checkout') {
|
|
||||||
options {
|
|
||||||
retry(3)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
svn "https://svn.wildfiregames.com/public/ps/trunk"
|
|
||||||
} catch(e) {
|
|
||||||
bat "svn cleanup"
|
|
||||||
sleep 300
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bat "svn cleanup"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Patch') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
bat "arc patch --diff ${params.DIFF_ID} --force"
|
|
||||||
} catch (e) {
|
|
||||||
cleanFiles()
|
|
||||||
bat "arc patch --diff ${params.DIFF_ID} --force"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Update-Workspace') {
|
|
||||||
steps {
|
|
||||||
bat "(robocopy /MIR /NDL /NJH /NJS /NP /NS /NC C:\\wxwidgets3.0.4\\lib libraries\\win32\\wxwidgets\\lib) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
|
|
||||||
bat "(robocopy /MIR /NDL /NJH /NJS /NP /NS /NC C:\\wxwidgets3.0.4\\include libraries\\win32\\wxwidgets\\include) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
|
|
||||||
bat "cd build\\workspaces && update-workspaces.bat --atlas --build-shared-glooxwrapper --jenkins-tests"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Debug: Build') {
|
|
||||||
steps {
|
|
||||||
dir('build\\workspaces\\vs2017'){
|
|
||||||
bat("${visualStudioPath} pyrogenesis.sln /nologo /p:XPDeprecationWarning=false /m:${jobs} /p:PlatformToolset=v141_xp /t:pyrogenesis /t:AtlasUI /t:test /p:Configuration=Debug -clp:Warningsonly -clp:ErrorsOnly > ..\\..\\..\\build-errors-debug.txt 2>&1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
bat "if exist build-errors-debug.txt type build-errors-debug.txt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Debug: Test') {
|
|
||||||
options {
|
|
||||||
timeout(time: 30)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
catchError {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
bat 'binaries\\system\\test_dbg.exe > cxxtest_debug.xml'
|
|
||||||
} catch(err) {
|
|
||||||
echo (message: readFile (file: "cxxtest_debug.xml"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
failure {
|
|
||||||
echo (message: readFile (file: "cxxtest_debug.xml"))
|
|
||||||
archiveArtifacts artifacts: "cxxtest_debug.xml", fingerprint: true
|
|
||||||
}
|
|
||||||
always {
|
|
||||||
junit "cxxtest_debug.xml"
|
|
||||||
archiveArtifacts artifacts: "cxxtest_debug.xml", fingerprint: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Release: Build') {
|
|
||||||
steps {
|
|
||||||
dir('build\\workspaces\\vs2017'){
|
|
||||||
bat("${visualStudioPath} pyrogenesis.sln /nologo /p:XPDeprecationWarning=false /m:${jobs} /p:PlatformToolset=v141_xp /t:pyrogenesis /t:AtlasUI /t:test /p:Configuration=Release -clp:Warningsonly -clp:ErrorsOnly > ..\\..\\..\\build-errors-release.txt 2>&1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
bat "if exist build-errors-release.txt type build-errors-release.txt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Release: Test') {
|
|
||||||
options {
|
|
||||||
timeout(time: 30)
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
bat 'binaries\\system\\test.exe > cxxtest_release.xml'
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
failure {
|
|
||||||
echo (message: readFile (file: "cxxtest_release.xml"))
|
|
||||||
}
|
|
||||||
always {
|
|
||||||
junit "cxxtest_release.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
catchError {
|
|
||||||
bat 'powershell.exe "if (![String]::IsNullOrWhiteSpace((Get-Content -ErrorAction Ignore -Path build-errors-debug.txt))) { Add-Content .phabricator-comment Debug: }" '
|
|
||||||
bat "if exist build-errors-debug.txt type build-errors-debug.txt >> .phabricator-comment"
|
|
||||||
bat 'powershell.exe "if (![String]::IsNullOrWhiteSpace((Get-Content -ErrorAction Ignore -Path build-errors-release.txt))) { Add-Content .phabricator-comment Release: }" '
|
|
||||||
bat "if exist build-errors-release.txt type build-errors-release.txt >> .phabricator-comment"
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
if (fileExists(".phabricator-comment")) {
|
|
||||||
bat "if exist .phabricator-comment type .phabricator-comment"
|
|
||||||
step([$class: 'PhabricatorNotifier', commentOnSuccess: true, commentWithConsoleLinkOnFailure: true, customComment: true, commentFile: ".phabricator-comment"])
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
throw e
|
|
||||||
} finally {
|
|
||||||
bat 'del .phabricator-comment'
|
|
||||||
bat 'del build-errors-debug.txt'
|
|
||||||
bat 'del build-errors-release.txt'
|
|
||||||
bat 'del cxxtest_*.xml'
|
|
||||||
cleanFiles()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
68
build/jenkins/pipelines/windows.Jenkinsfile
Normal file
68
build/jenkins/pipelines/windows.Jenkinsfile
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* Copyright (C) 2024 Wildfire Games.
|
||||||
|
* This file is part of 0 A.D.
|
||||||
|
*
|
||||||
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 0 A.D. is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This pipeline builds the game on Windows (which uses the MSVC 15.0 compiler from Visual Studio 2017) and runs tests.
|
||||||
|
|
||||||
|
def visualStudioPath = "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\MSBuild.exe\""
|
||||||
|
def buildOptions = "/p:PlatformToolset=v141_xp /p:XPDeprecationWarning=false /t:pyrogenesis /t:AtlasUI /t:test /m:2 /nologo -clp:NoSummary"
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
node {
|
||||||
|
label 'WindowsAgent'
|
||||||
|
customWorkspace 'workspace/vs2017'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage ("Pre-build") {
|
||||||
|
steps {
|
||||||
|
discoverGitReferenceBuild()
|
||||||
|
|
||||||
|
bat "git lfs pull -I binaries/data/tests"
|
||||||
|
bat "git lfs pull -I \"binaries/data/mods/_test.*\""
|
||||||
|
|
||||||
|
bat "cd libraries && get-windows-libs.bat"
|
||||||
|
bat "(robocopy /MIR /NDL /NJH /NJS /NP /NS /NC C:\\wxwidgets3.0.4\\lib libraries\\win32\\wxwidgets\\lib) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
|
||||||
|
bat "(robocopy /MIR /NDL /NJH /NJS /NP /NS /NC C:\\wxwidgets3.0.4\\include libraries\\win32\\wxwidgets\\include) ^& IF %ERRORLEVEL% LEQ 1 exit 0"
|
||||||
|
bat "cd build\\workspaces && update-workspaces.bat --atlas --jenkins-tests"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage ("Release Build") {
|
||||||
|
steps {
|
||||||
|
dir('build\\workspaces\\vs2017'){
|
||||||
|
bat("${visualStudioPath} pyrogenesis.sln /p:Configuration=Release ${buildOptions}")
|
||||||
|
}
|
||||||
|
timeout(time: 5) {
|
||||||
|
bat "cd binaries\\system && test.exe > cxxtest-release.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
junit 'binaries/system/cxxtest-release.xml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
recordIssues enabledForFailure: true, qualityGates: [[threshold: 1, type: 'NEW']], tool: msBuild()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user