b91e6bc9a3
We lost this during the transition from PAPR to CoreOS CI. We don't have a lot of new tests there since new unit tests tend to be in Rust, though we should still run what we do have. Repurpose the `rust` branch to more generically run all unit tests and not just the Rust ones. It still also checks that compilation against the MSRV works fine.
135 lines
4.4 KiB
Plaintext
135 lines
4.4 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
|
|
ci/installdeps.sh
|
|
git submodule update --init
|
|
|
|
# We lose sanitizers (all the *san) here by building straight to RPMs, but we can
|
|
# restore those through a build opt later on. Being able to stash RPMs directly is
|
|
# super nice (and archiving later on will make it easy for anyone to download
|
|
# binaries from PRs in the future) and meshes well with the following stages.
|
|
export PATH="\$HOME/.cargo/bin:\$PATH"
|
|
cargo install cbindgen
|
|
cbindgen -c rust/cbindgen.toml -o rpmostree-rust.h rust
|
|
|
|
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
|
|
PATH="\$HOME/.cargo/bin:\$PATH" make check
|
|
""")
|
|
}
|
|
}}
|
|
|
|
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'
|
|
}
|
|
}
|
|
}
|
|
}}
|