From 7c88161044b73c754e59e9fcb8855938eef9ea25 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 1 May 2017 18:02:27 -0400 Subject: [PATCH] ci: More flatpak ci fixes We need our `make install` to override the ostree RPM, so do it all in one txn. This sort of thing is where a more rigorous model like rdgo/gcontinuous use becomes better, but we'll hack it with shell for now. Closes: #824 Approved by: jlebon --- .redhat-ci.yml | 2 + ...-Fix-race-condition-in-tmp-webserver.patch | 44 +++++++++++++++++++ ci/flatpak.sh | 26 ++++++----- 3 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 ci/0001-tests-Fix-race-condition-in-tmp-webserver.patch diff --git a/.redhat-ci.yml b/.redhat-ci.yml index e3eb0f87..97bbcf87 100644 --- a/.redhat-ci.yml +++ b/.redhat-ci.yml @@ -153,6 +153,8 @@ required: false # docker --privileged run. host: distro: fedora/25/atomic + specs: + ram: 4096 # build-bundle is a static delta, which needs RAM right now tests: - docker run --rm --privileged -v $(pwd):/srv/code registry.fedoraproject.org/fedora:25 /bin/sh -c "cd /srv/code && ./ci/flatpak.sh" diff --git a/ci/0001-tests-Fix-race-condition-in-tmp-webserver.patch b/ci/0001-tests-Fix-race-condition-in-tmp-webserver.patch new file mode 100644 index 00000000..dc66425f --- /dev/null +++ b/ci/0001-tests-Fix-race-condition-in-tmp-webserver.patch @@ -0,0 +1,44 @@ +From 6197e6922e3ba3c8881733a6a3253e8ae12eb538 Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Fri, 5 May 2017 16:36:04 -0400 +Subject: [PATCH] tests: Fix race condition in tmp webserver + +I was seeing this when trying to run flatpak's tests in ostree's CI: +https://github.com/ostreedev/ostree/pull/824 + +The race here is that the python process can still be writing to the output +while sed is reading it, and hence we'll find a difference on the next line. +Fix this by making a tmp copy of the file, which then both sed and cmp will +read consistently. + +I'm not *entirely* sure this will fix the problem as I couldn't easily reproduce +the race locally, but I believe it at least fixes *a* race. +--- + tests/test-webserver.sh | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/tests/test-webserver.sh b/tests/test-webserver.sh +index 3291b06..2964ce9 100755 +--- a/tests/test-webserver.sh ++++ b/tests/test-webserver.sh +@@ -10,9 +10,15 @@ env PYTHONUNBUFFERED=1 setsid python -m SimpleHTTPServer 0 >${test_tmpdir}/httpd + child_pid=$! + + for x in $(seq 50); do +- sed -e 's,Serving HTTP on 0.0.0.0 port \([0-9]*\) \.\.\.,\1,' < ${test_tmpdir}/httpd-output > ${test_tmpdir}/httpd-port +- if ! cmp ${test_tmpdir}/httpd-output ${test_tmpdir}/httpd-port 1>/dev/null; then +- break ++ # Snapshot the output ++ cp ${test_tmpdir}/httpd-output{,.tmp} ++ # If it's non-empty, see whether it matches our regexp ++ if test -s ${test_tmpdir}/httpd-output.tmp; then ++ sed -e 's,Serving HTTP on 0.0.0.0 port \([0-9]*\) \.\.\.,\1,' < ${test_tmpdir}/httpd-output.tmp > ${test_tmpdir}/httpd-port ++ if ! cmp ${test_tmpdir}/httpd-output.tmp ${test_tmpdir}/httpd-port 1>/dev/null; then ++ # If so, we've successfully extracted the port ++ break ++ fi + fi + sleep 0.1 + done +-- +2.9.3 diff --git a/ci/flatpak.sh b/ci/flatpak.sh index fee738aa..7d98ff05 100755 --- a/ci/flatpak.sh +++ b/ci/flatpak.sh @@ -12,23 +12,27 @@ build() { codedir=$(pwd) # Core prep -dnf -y install dnf-plugins-core -dnf install -y @buildsys-build -dnf install -y 'dnf-command(builddep)' +yum -y install dnf-plugins-core @buildsys-build 'dnf-command(builddep)' +# build+install ostree, and build deps for both, so that our +# make install overrides the ostree via rpm +dnf builddep -y ostree flatpak +yum -y install flatpak && rpm -e flatpak +# we use yaml below +yum -y install python3-PyYAML -# build+install ostree -dnf builddep -y ostree -build -make install +# Now get flatpak's deps from rhci file tmpd=$(mktemp -d) cd ${tmpd} # Frozen to a tag for now on general principle git clone --recursive --depth=1 -b 0.9.3 https://github.com/flatpak/flatpak cd flatpak -dnf builddep -y flatpak -# And runtime deps -dnf install -y flatpak && rpm -e flatpak -dnf install -y which attr fuse parallel # for the test suite +python3 -c 'import yaml; y = list(yaml.load_all(open(".redhat-ci.yml")))[0]; print("\0".join(y["packages"]))' | xargs -0 yum install -y +# back to ostree and build +cd ${codedir} +build +make install +cd ${tmpd}/flatpak +patch -p1 < ${codedir}/ci/*.patch build # We want to capture automake results from flatpak cleanup() {