// Documentation: https://github.com/coreos/coreos-ci/blob/master/README-upstream-ci.md stage("Build") { parallel rpms: { cosaPod(buildroot: true, runAsUser: 0) { 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="/root/.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 """) } }, rust: { cosaPod(buildroot: true, runAsUser: 0) { checkout scm shwrap("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 # And further for now, temporarily override ostree, see # https://github.com/coreos/rpm-ostree/pull/2015 dnf --disablerepo=* --enablerepo=f31-coreos-continuous download ostree ostree-libs mv *.rpm overrides/rpm coreos-assembler build """) } stage("Install Deps") { // really, we just need test deps, but meh... shwrap("ci/installdeps.sh") } stage("Kola") { 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: 45, 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' } } } }}