rpm-ostree/.cci.jenkinsfile
Colin Walters 08c414f897 Rework bindgen/cxx.rs usage and CI build
cxx.rs (aka cxxbridge) and cbindgen are
both generating source code.  Since the last release
we've introduced the former, and we need to ensure
that the generated cxx.rs source ends up in release tarballs
the same way as the cbindgen code.

Rationalize and clean up the binding infrastructure.
Drop support for the vendored cbindgen which we
weren't actually using:
Closes: https://github.com/coreos/rpm-ostree/issues/2392

Move the cxx-rs and cbindgen bits into the same place,
and update our CoreOS CI build to use a separate `Makefile.bindings`
that just generates the code, so our CI still "works like"
a main Koji RPM build.
2021-01-04 13:17:35 +01:00

138 lines
4.5 KiB
Plaintext

// Documentation: https://github.com/coreos/coreos-ci/blob/master/README-upstream-ci.md
stage("Build") {
parallel rpms: {
cosaPod(buildroot: true, runAsUser: 0, memory: "2Gi") {
checkout scm
shwrap("""
# fetch tags so `git describe` gives a nice NEVRA when building the RPM
git fetch origin --tags
git submodule update --init
ci/installdeps.sh
ci/install-extra-builddeps.sh
# Not in the path by default
export PATH="\$HOME/.cargo/bin:\$PATH"
# Our primary CI build goes via RPM rather than direct to binaries
# to better test that path, including our vendored spec file, etc.
# However, to do that we need to generate
# the source code expected via the RPM path. Because the binding
# build rules are part of an Automake-generated Makefile we end
# up running autotools twice, which is annoying but extracting
#
env NOCONFIGURE=1 ./autogen.sh
./configure --prefix=/usr
make -f Makefile.bindings bindings
cd packaging
make -f Makefile.dist-packaging rpm
mv \$(find . -name '*.rpm') ..
""")
// make it easy for anyone to download the RPMs
archiveArtifacts '*.rpm'
stash excludes: '*.src.rpm', includes: '*.rpm', name: 'rpms'
}
},
codestyle: {
cosaPod(buildroot: true) {
checkout scm
shwrap("""
# Jenkins by default only fetches the branch it's testing. Explicitly fetch master
# for ci-commitmessage-submodules.sh
git fetch origin +refs/heads/master:refs/remotes/origin/master
ci/ci-commitmessage-submodules.sh
ci/codestyle.sh
""")
}
},
unit: {
// this branch runs unit tests (both Rust-based and C-based) and makes sure we compile
// fine against the MSRV
def n = 5
cosaPod(buildroot: true, runAsUser: 0, memory: "2Gi", cpu: "${n}") {
checkout scm
shwrap("""
MAKE_JOBS=${n} CARGO_BUILD_JOBS=${n} ci/msrv.sh
""")
}
}}
stage("Test") {
parallel insttests: {
def nhosts = 6
def mem = (nhosts * 1024) + 512
cosaPod(runAsUser: 0, memory: "${mem}Mi", cpu: "${nhosts}") {
stage("Build FCOS") {
checkout scm
unstash 'rpms'
// run this stage first without installing deps, so we match exactly the cosa pkgset
// (+ our built rpm-ostree)
shwrap("""
dnf install -y *.rpm
coreos-assembler init --force https://github.com/coreos/fedora-coreos-config
# include our built rpm-ostree in the image
mkdir -p overrides/rpm
mv *.rpm overrides/rpm
coreos-assembler fetch
coreos-assembler build
""")
}
stage("Install Deps") {
// really, we just need test deps, but meh...
shwrap("ci/installdeps.sh")
}
stage("Kola") {
// TODO upstream this into coreos-ci-lib
shwrap("make -C tests/kolainst install")
fcosKola(cosaDir: "${env.WORKSPACE}", extraArgs: "ext.*", parallel: nhosts)
}
stage("vmcheck") {
try {
timeout(time: 30, unit: 'MINUTES') {
shwrap("""
fcos=\$(ls builds/latest/*/*.qcow2) # */
ln -sf "\$(realpath \${fcos})" tests/vmcheck/image.qcow2
JOBS=${nhosts} tests/vmcheck.sh
""")
}
} finally {
shwrap("""
if [ -d vmcheck-logs ]; then
tar -C vmcheck-logs -cf- . | xz -c9 > vmcheck-logs.tar.xz
fi
""")
archiveArtifacts allowEmptyArchive: true, artifacts: 'vmcheck-logs.tar.xz'
}
}
}
},
compose: {
def jobs = 5
def mem = (jobs * 2048) + 512
cosaPod(runAsUser: 0, memory: "${mem}Mi", cpu: "${jobs}") {
checkout scm
unstash 'rpms'
stage("Install Deps") {
shwrap("""
ci/installdeps.sh # really, we just need test deps, but meh...
dnf install -y *.rpm # install our built rpm-ostree
""")
}
stage("Run") {
try {
timeout(time: 60, unit: 'MINUTES') {
shwrap("""
mkdir -p compose-logs /srv/tmpdir
TMPDIR=/srv/tmpdir JOBS=${jobs} ./tests/compose.sh
""")
}
} finally {
shwrap("""
if [ -d compose-logs ]; then
tar -C compose-logs -cf- . | xz -c9 > compose-logs.tar.xz
fi
""")
archiveArtifacts allowEmptyArchive: true, artifacts: 'compose-logs.tar.xz'
}
}
}
}}