ci: Update to match current rpm-ostree
authorColin Walters <walters@verbum.org>
Thu, 8 Jun 2017 17:47:20 +0000 (13:47 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Thu, 8 Jun 2017 21:08:31 +0000 (21:08 +0000)
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

.papr.Dockerfile [deleted file]
.papr.yml
ci/build-check.sh [new file with mode: 0755]
ci/build.sh [new file with mode: 0755]
ci/ci-commitmessage-submodules.sh [new file with mode: 0755]
ci/libbuild.sh [new file with mode: 0644]
tests/ci-commitmessage-submodules.sh [deleted file]

diff --git a/.papr.Dockerfile b/.papr.Dockerfile
deleted file mode 100644 (file)
index 0081998..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM fedora:25
-
-RUN dnf install -y \
-        gcc \
-        git \
-        sudo \
-        which \
-        attr \
-        fuse \
-        gjs \
-        parallel \
-        coccinelle \
-        clang \
-        libubsan \
-        libasan \
-        libtsan \
-        PyYAML \
-        gnome-desktop-testing \
-        redhat-rpm-config \
-        elfutils \
-        'dnf-command(builddep)' \
- && dnf builddep -y \
-        ostree \
- && dnf clean all
-
-# create an unprivileged user for testing
-RUN adduser testuser
index cc02f75e227a1fb1f29734e2ebb463fd8df6fc7e..67a01683eaa38a6004296e068fd37ac82efa8f3c 100644 (file)
--- a/.papr.yml
+++ b/.papr.yml
@@ -4,102 +4,51 @@ branches:
     - try
 
 required: true
-context: f25-sanitizer
+context: f25-primary
 
 container:
-    image: projectatomic/ostree-tester
-
+    image: registry.fedoraproject.org/fedora:25
 packages:
-  - libasan
   - git
-  - coccinelle
 
 env:
     CFLAGS: '-fsanitize=undefined -fsanitize-undefined-trap-on-error -fsanitize=address -O2 -Wp,-D_FORTIFY_SOURCE=2'
     ASAN_OPTIONS: 'detect_leaks=0'  # Right now we're not fully clean, but this gets us use-after-free etc
     # TODO when we're doing leak checks: G_SLICE: "always-malloc"
 
-build:
-    config-opts: >
-      --prefix=/usr
-      --libdir=/usr/lib64
-      --enable-installed-tests=exclusive
-      --enable-gtk-doc
-
-# The g-d-t-r timeout is for test-pull-many.sh; if tweaking this,
-# also be sure to change the other cases below
 tests:
-    - make syntax-check
-    - ./tests/ci-commitmessage-submodules.sh
-    - make check
-    - /bin/sh -c 'gnome-desktop-testing-runner -p 0 --timeout $((10 * 60)) libostree/'
+  - ci/ci-commitmessage-submodules.sh
+  - ci/build-check.sh
 
 timeout: 30m
 
 artifacts:
-    - test-suite.log
-
----
-
-inherit: true
-required: true
-
-context: f25-clang
-
-env:
-    CC: 'clang'
-    CFLAGS: '-Werror=unused-variable'
-
-tests:
-artifacts:
-
-
+  - test-suite.log
 ---
 
 inherit: true
 
 context: f25-rust
-
 packages:
   - cargo
-
-build:
-    config-opts: >
-      --prefix=/usr
-      --libdir=/usr/lib64
-      --enable-gtk-doc
-      --enable-rust
-
 env:
-    CC: 'gcc'
+  CONFIGOPTS: '--enable-rust'
 
 tests:
+    - ci/build.sh
     - make check TESTS=tests/test-rollsum
 
-artifacts:
-  - test-suite.log
 ---
 
 inherit: true
 
 context: f25-experimental-api
-
-build:
-    config-opts: >
-      --prefix=/usr
-      --libdir=/usr/lib64
-      --enable-gtk-doc
-      --enable-experimental-api
-
 env:
-    CC: 'gcc'
+  CONFIGOPTS: '--enable-experimental-api'
 
 tests:
-    - make check
-    - /bin/sh -c 'gnome-desktop-testing-runner -p 0 --timeout $((10 * 60)) libostree/'
+  - ci/build-check.sh
 
-artifacts:
-  - test-suite.log
 ---
 
 inherit: true
@@ -111,21 +60,11 @@ packages:
   - pkgconfig(libcurl)
   - pkgconfig(openssl)
 
-build:
-    config-opts: >
-      --prefix=/usr
-      --libdir=/usr/lib64
-      --enable-installed-tests=exclusive
-      --enable-gtk-doc
-      --with-curl
-      --with-openssl
+env:
+  CONFIGOPTS: "--with-curl --with-openssl"
 
 tests:
-  - make check
-  - /bin/sh -c 'gnome-desktop-testing-runner -p 0 --timeout $((10 * 60)) libostree/'
-
-artifacts:
-  - test-suite.log
+  - ci/build-check.sh
 
 ---
 
@@ -143,24 +82,16 @@ cluster:
     - name: vmcheck
       distro: fedora/25/atomic
   container:
-    image: projectatomic/ostree-tester
-
-build:
-    config-opts: >
-      --prefix=/usr
-      --libdir=/usr/lib64
-      --enable-gtk-doc
+    image: registry.fedoraproject.org/fedora:25
 
 # Copy the build from the container to the host; ideally down the line
 # this is installing an RPM via https://github.com/jlebon/redhat-ci/issues/10
 tests:
+  - ci/build.sh
   - make install DESTDIR=$(pwd)/insttree
   - rsync -rl -e 'ssh -o User=root' . vmcheck:ostree/
   - ssh root@vmcheck './ostree/tests/installed/fah-prep.sh && ostree admin unlock && rsync -rlv ./ostree/insttree/usr/ /usr/ && ./ostree/tests/installed/run.sh'
 
-artifacts:
-  - test-suite.log
-
 ---
 
 inherit: false
diff --git a/ci/build-check.sh b/ci/build-check.sh
new file mode 100755 (executable)
index 0000000..6123440
--- /dev/null
@@ -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 (executable)
index 0000000..d5bacd3
--- /dev/null
@@ -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 (executable)
index 0000000..aeccc24
--- /dev/null
@@ -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 (file)
index 0000000..b061a48
--- /dev/null
@@ -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
+}
diff --git a/tests/ci-commitmessage-submodules.sh b/tests/ci-commitmessage-submodules.sh
deleted file mode 100755 (executable)
index aeccc24..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/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