+++ /dev/null
-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
- 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
- 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
---
- 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
--- /dev/null
+#!/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
--- /dev/null
+#!/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:-}
--- /dev/null
+#!/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
--- /dev/null
+#!/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
+}
+++ /dev/null
-#!/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