forked from Mirrors/flatpak-builder
ci: Rework to be based on FAH + priv container
Installing build dependencies directly on a host should be considered an anti-pattern. Steal some of the bits from rpm-ostree's PAPR bits. Another benefit here is we avoid duplicating the build dependencies again, since we start using `yum-builddep. We only have one context now, `f25-primary`, rather than having Clang show up as a separate thing, since IMO it's not worth its own context.tingping/wmclass
parent
7ba38095c0
commit
841e6c10a6
92
.papr.yml
92
.papr.yml
|
@ -1,81 +1,39 @@
|
||||||
|
# This PAPR file is mostly inspired by the one in projectatomic/rpm-ostree;
|
||||||
|
# if making enhancements here, consider doing them there first.
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- auto
|
- auto
|
||||||
- try
|
- try
|
||||||
|
|
||||||
host:
|
required: true
|
||||||
distro: fedora/25/cloud
|
context: f25-primary
|
||||||
|
|
||||||
packages:
|
# This test case wants an "unprivileged container with bubblewrap",
|
||||||
- gcc
|
# which we don't have right now; so just provision a VM and do a
|
||||||
- sudo
|
# docker --privileged run.
|
||||||
- which
|
host:
|
||||||
- attr
|
distro: fedora/25/atomic
|
||||||
- fuse
|
|
||||||
- gjs
|
|
||||||
- parallel
|
|
||||||
- clang
|
|
||||||
- libubsan
|
|
||||||
- gnome-desktop-testing
|
|
||||||
- pkgconfig(fuse)
|
|
||||||
- pkgconfig(gio-unix-2.0)
|
|
||||||
- pkgconfig(gobject-introspection-1.0) >= 1.40.0
|
|
||||||
- pkgconfig(json-glib-1.0)
|
|
||||||
- pkgconfig(libarchive) >= 2.8.0
|
|
||||||
- pkgconfig(libelf) >= 0.8.12
|
|
||||||
- pkgconfig(libsoup-2.4)
|
|
||||||
- pkgconfig(ostree-1) >= %{ostree_version}
|
|
||||||
- pkgconfig(polkit-gobject-1)
|
|
||||||
- pkgconfig(libseccomp)
|
|
||||||
- pkgconfig(xau)
|
|
||||||
- bubblewrap >= %{bubblewrap_version}
|
|
||||||
- docbook-dtds
|
|
||||||
- docbook-style-xsl
|
|
||||||
- intltool
|
|
||||||
- libattr-devel
|
|
||||||
- libcap-devel
|
|
||||||
- libdwarf-devel
|
|
||||||
- elfutils
|
|
||||||
- systemd
|
|
||||||
- ostree
|
|
||||||
- gpgme-devel
|
|
||||||
- /usr/bin/xmlto
|
|
||||||
- /usr/bin/xsltproc
|
|
||||||
- redhat-rpm-config
|
|
||||||
- /usr/bin/update-mime-database
|
|
||||||
- /usr/bin/update-desktop-database
|
|
||||||
- /usr/bin/gtk-update-icon-cache
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CFLAGS: '-fsanitize=undefined'
|
# TODO: CFLAGS: Readd -fsanitize-undefined-trap-on-error -fsanitize=address after debugging
|
||||||
|
# https://github.com/flatpak/flatpak/pull/849#issuecomment-308483205
|
||||||
build:
|
CFLAGS: '-fsanitize=undefined -O2 -Wp,-D_FORTIFY_SOURCE=2'
|
||||||
config-opts: >
|
ASAN_OPTIONS: 'detect_leaks=0' # Right now we're not fully clean, but this gets us use-after-free etc
|
||||||
--prefix=/usr
|
# TODO when we're doing leak checks: G_SLICE: "always-malloc"
|
||||||
--libdir=/usr/lib64
|
|
||||||
--enable-installed-tests
|
|
||||||
--enable-gtk-doc
|
|
||||||
|
|
||||||
|
# copy yum.repos.d to get any injected repos from the host, which
|
||||||
|
# will point to a closer mirror
|
||||||
tests:
|
tests:
|
||||||
- make check
|
- docker run --privileged --rm
|
||||||
|
-e "CFLAGS=${CFLAGS:-}"
|
||||||
|
-e "ASAN_OPTIONS=${ASAN_OPTIONS:-}"
|
||||||
|
-v /etc/yum.repos.d:/etc/yum.repos.d.host:ro
|
||||||
|
-v $(pwd):/srv/code -w /srv/code
|
||||||
|
registry.fedoraproject.org/fedora:25 /bin/sh -c
|
||||||
|
"cp -fv /etc/yum.repos.d{.host/*.repo,} &&
|
||||||
|
./ci/build-check.sh"
|
||||||
|
|
||||||
timeout: 30m
|
timeout: 30m
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
- test-suite.log
|
- test-suite.log
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
inherit: true
|
|
||||||
|
|
||||||
context: Clang
|
|
||||||
|
|
||||||
container:
|
|
||||||
image: fedora:25
|
|
||||||
|
|
||||||
env:
|
|
||||||
CC: 'clang'
|
|
||||||
CFLAGS: '-Werror=unused-variable'
|
|
||||||
|
|
||||||
tests:
|
|
||||||
artifacts:
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
|
if test -x /usr/bin/clang; then
|
||||||
|
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
|
||||||
|
fi
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
# Install build dependencies, run unit tests and installed tests.
|
||||||
|
|
||||||
|
set -xeuo pipefail
|
||||||
|
|
||||||
|
dn=$(dirname $0)
|
||||||
|
. ${dn}/libbuild.sh
|
||||||
|
|
||||||
|
pkg_install_builddeps flatpak
|
||||||
|
pkg_install sudo which attr fuse \
|
||||||
|
libubsan libasan libtsan \
|
||||||
|
elfutils ostree \
|
||||||
|
/usr/bin/{update-mime-database,update-desktop-database,gtk-update-icon-cache}
|
||||||
|
pkg_install_if_os fedora gjs parallel clang
|
||||||
|
|
||||||
|
build --enable-gtk-doc ${CONFIGOPTS:-}
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/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
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg_install() {
|
||||||
|
yum -y install "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg_install_if_os() {
|
||||||
|
os=$1
|
||||||
|
shift
|
||||||
|
(. /etc/os-release;
|
||||||
|
if test "${os}" = "${ID}"; then
|
||||||
|
pkg_install "$@"
|
||||||
|
else
|
||||||
|
echo "Skipping installation on OS ${ID}: $@"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg_builddep() {
|
||||||
|
# This is sadly the only case where it's a different command
|
||||||
|
if test -x /usr/bin/dnf; then
|
||||||
|
dnf builddep -y "$@"
|
||||||
|
else
|
||||||
|
yum-builddep -y "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg_install_builddeps() {
|
||||||
|
pkg=$1
|
||||||
|
if test -x /usr/bin/dnf; then
|
||||||
|
yum -y install dnf-plugins-core
|
||||||
|
yum install -y 'dnf-command(builddep)'
|
||||||
|
# Base buildroot
|
||||||
|
pkg_install @buildsys-build
|
||||||
|
else
|
||||||
|
yum -y install yum-utils
|
||||||
|
# Base buildroot, copied from the mock config sadly
|
||||||
|
yum -y install bash bzip2 coreutils cpio diffutils system-release findutils gawk gcc gcc-c++ grep gzip info make patch redhat-rpm-config rpm-build sed shadow-utils tar unzip util-linux which xz
|
||||||
|
fi
|
||||||
|
# builddeps+runtime deps
|
||||||
|
pkg_builddep $pkg
|
||||||
|
pkg_install $pkg
|
||||||
|
rpm -e $pkg
|
||||||
|
}
|
Loading…
Reference in New Issue