46ab7d1ae8
This is an experiment in using Jenkins pipelines for our CI. See similar initiatives in coreos-assembler[1] and fedora-coreos-config[2]. For now, this only does the following testing: - checks commit for unintended submodule bumps - checks the minimum Rust version - builds RPMs - builds FCOS (with the new RPMs both for executing the build itself, as well as included in the built OS) There are dummy placeholders for where we'd actually run the vmcheck and the compose testsuites. Let's address those trickier parts as follow-ups. [1] https://github.com/coreos/coreos-assembler/pull/667 [2] https://github.com/coreos/fedora-coreos-config/pull/131 Closes: #1899 Approved by: cgwalters
64 lines
2.2 KiB
Bash
Executable File
64 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -xeuo pipefail
|
|
|
|
dn=$(dirname $0)
|
|
. ${dn}/libbuild.sh
|
|
|
|
# Copyright 2017 Colin Walters <walters@verbum.org>
|
|
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
|
|
|
|
# This script is intended to be used as a CI gating check
|
|
# that if a submodule is changed, the commit message contains
|
|
# the text:
|
|
#
|
|
# Update submodule: submodulepath
|
|
#
|
|
# It's very common for people to accidentally change submodules, and having this
|
|
# requirement is a small hurdle to pass.
|
|
|
|
# If passed the commit, use that. Otherwise, if running under PAPR, use the
|
|
# branch/PR HEAD actually being tested rather than the merge sha
|
|
HEAD=${1:-${PAPR_COMMIT:-HEAD}}
|
|
|
|
tmpd=$(mktemp -d)
|
|
touch ${tmpd}/.tmpdir
|
|
cleanup_tmp() {
|
|
# This sanity check ensures we don't delete something else
|
|
if test -f ${tmpd}/.tmpdir; then
|
|
rm -rf ${tmpd}
|
|
fi
|
|
}
|
|
trap cleanup_tmp EXIT
|
|
|
|
if ! [ -x /usr/bin/git ]; then
|
|
pkg_upgrade
|
|
pkg_install git
|
|
fi
|
|
|
|
gitdir=$(realpath $(pwd))
|
|
# Create a temporary copy of this (using cp not git clone) so git doesn't
|
|
# try to read the submodules from the Internet again. If we wanted to
|
|
# require a newer git, we could use `git worktree`.
|
|
cp -a ${gitdir} ${tmpd}/workdir
|
|
cd ${tmpd}/workdir
|
|
git log --pretty=oneline origin/master..$HEAD | while read logline; do
|
|
commit=$(echo ${logline} | cut -f 1 -d ' ')
|
|
git diff --name-only ${commit}^..${commit} > ${tmpd}/diff.txt
|
|
git log -1 ${commit} > ${tmpd}/log.txt
|
|
echo "Validating commit for submodules: $commit"
|
|
sed -e 's,^,# ,' < ${tmpd}/log.txt
|
|
git checkout -q "${commit}"
|
|
git submodule update --init
|
|
git submodule foreach --quiet 'echo $path'| while read submodule; do
|
|
if grep -q -e '^'${submodule} ${tmpd}/diff.txt; then
|
|
echo "Commit $commit modifies submodule: $submodule"
|
|
expected_match="Update submodule: $submodule"
|
|
if ! grep -q -e "$expected_match" ${tmpd}/log.txt; then
|
|
echo "error: Commit message for ${commit} changes a submodule, but does not match regex ${expected_match}"
|
|
exit 1
|
|
fi
|
|
echo "Verified commit $commit matches regexp ${expected_match}"
|
|
fi
|
|
done
|
|
done
|