summaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2017-06-08 13:47:20 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2017-06-08 21:08:31 +0000
commita98faa911343378781114d458ba3936c282b90ec (patch)
tree498e27ac6a472016d229097866669b6dbf247636 /ci
parent2a3f17c7aa8e5dc328ee9169dfa51d9cb579ba3a (diff)
downloadostree-a98faa911343378781114d458ba3936c282b90ec.tar.gz
ci: Update to match current rpm-ostree
This copies the `ci/` directory from rpm-ostree, with much the same rationale; among other things we don't want to depend on the Docker hub. The specific reason I'm doing this is that I want to add a CentOS7 build, but that means we can't use `projectatomic/ostree-tester`, and at that point we might as well unwind it all. Closes: #917 Approved by: jlebon
Diffstat (limited to 'ci')
-rwxr-xr-xci/build-check.sh20
-rwxr-xr-xci/build.sh15
-rwxr-xr-xci/ci-commitmessage-submodules.sh55
-rw-r--r--ci/libbuild.sh23
4 files changed, 113 insertions, 0 deletions
diff --git a/ci/build-check.sh b/ci/build-check.sh
new file mode 100755
index 00000000..6123440e
--- /dev/null
+++ b/ci/build-check.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/bash
+# Install build dependencies, run unit tests and installed tests.
+
+set -xeuo pipefail
+
+dn=$(dirname $0)
+. ${dn}/libbuild.sh
+${dn}/build.sh
+make check
+make syntax-check # TODO: do syntax-check under check
+# And now run the installed tests
+make install
+gnome-desktop-testing-runner -p 0 ostree
+
+git clean -dfx && git submodule foreach git clean -dfx
+# And now a clang build to find unused variables; perhaps
+# in the future these could parallelize
+export CC=clang
+export CFLAGS='-Werror=unused-variable'
+build
diff --git a/ci/build.sh b/ci/build.sh
new file mode 100755
index 00000000..d5bacd38
--- /dev/null
+++ b/ci/build.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/bash
+# Install build dependencies, run unit tests and installed tests.
+
+set -xeuo pipefail
+
+dn=$(dirname $0)
+. ${dn}/libbuild.sh
+
+install_builddeps ostree
+
+dnf install -y sudo which attr fuse gjs parallel coccinelle clang \
+ libubsan libasan libtsan PyYAML gnome-desktop-testing redhat-rpm-config \
+ elfutils
+
+build --enable-gtk-doc --enable-installed-tests=exclusive ${CONFIGOPTS:-}
diff --git a/ci/ci-commitmessage-submodules.sh b/ci/ci-commitmessage-submodules.sh
new file mode 100755
index 00000000..aeccc24d
--- /dev/null
+++ b/ci/ci-commitmessage-submodules.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+set -euo pipefail
+
+# 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 running under PAPR, use the branch/PR HEAD actually
+# being tested rather than the merge sha
+HEAD=${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
+
+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"
+ 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
+ sed -e 's,^,# ,' < ${tmpd}/log.txt
+ 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
diff --git a/ci/libbuild.sh b/ci/libbuild.sh
new file mode 100644
index 00000000..b061a486
--- /dev/null
+++ b/ci/libbuild.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/bash
+
+make() {
+ /usr/bin/make -j $(getconf _NPROCESSORS_ONLN) "$@"
+}
+
+build() {
+ env NOCONFIGURE=1 ./autogen.sh
+ ./configure --prefix=/usr --libdir=/usr/lib64 "$@"
+ make V=1
+}
+
+install_builddeps() {
+ pkg=$1
+ dnf -y install dnf-plugins-core
+ dnf install -y @buildsys-build
+ dnf install -y 'dnf-command(builddep)'
+
+ # builddeps+runtime deps
+ dnf builddep -y $pkg
+ dnf install -y $pkg
+ rpm -e $pkg
+}