On Mon, Jun 08, 2020 at 05:42:32PM +0200, Andrea Bolognani wrote:
We use cirrus-run to trigger Cirrus CI jobs from GitLab CI jobs,
making it possible to extend our platform coverage to include
FreeBSD without having to maintain our own runners; additionally,
we'll be able to ditch Travis CI and, since results for Cirrus CI
jobs are reflected back to the GitLab CI jobs that triggered them,
we will be able to get all information from a single dashboard.
The FreeBSD and macOS job definitions can be improved further: for
example, we will want to enable caching to speed up builds, and
ultimately we should figure out a way to generate at least part of
them, notably the list of packages to be installed, using lcitool.
All of that will happen in later patches: for now, this is good
enough to start using Cirrus CI.
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7113a1283c..bded69224b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -38,6 +38,27 @@ stages:
- master
- /^ci-full-.*$/
+# Jobs that we delegate to Cirrus CI because they require an operating
+# system other than Linux
+.cirrus_build_default_job_template: &cirrus_build_default_job_definition
+ stage: native_build
+ image:
registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master
+ script:
+ - |
+ if test -z "$CIRRUS_GITHUB_REPO" || test -z
"$CIRRUS_API_TOKEN"; then
+ echo "WARN: Cirrus CI integration not set up correctly for your
account"
+ echo "WARN: This job will be skipped"
+ echo "WARN: See ci/README.rst for more information"
+ exit 0
+ fi
This will give a misleading impression that the macOS / FreeBSD
job has been run for a user's merge request. Instead we shoudl
do
+ - cirrus-run ci/cirrus/$NAME.yml.j2
only:
variables:
- $CIRRUS_GITHUB_REPO
- $CIRRUS_API_TOKEN
this ensures the job is not even created if the contributor has not
configured things. Thus we can see from the list of jobs whether
the merge request has CI coverage of macOS/FreeBSD, instead of
having to read the job log to spot the warning.
+
+.cirrus_build_extra_job_template: &cirrus_build_extra_job_definition
+ <<: *cirrus_build_default_job_definition
+ only:
+ - master
+ - /^ci-full-.*$/
+
diff --git a/ci/cirrus/freebsd-11.yml.j2
b/ci/cirrus/freebsd-11.yml.j2
new file mode 100644
index 0000000000..e8df443d21
--- /dev/null
+++ b/ci/cirrus/freebsd-11.yml.j2
@@ -0,0 +1,73 @@
+freebsd_instance:
+ image_family: freebsd-11-3
+
+env:
+ CI_REPOSITORY_URL: {{ CI_REPOSITORY_URL }}
+ CI_COMMIT_REF_NAME: {{ CI_COMMIT_REF_NAME }}
+ CI_COMMIT_SHA: {{ CI_COMMIT_SHA }}
+
+freebsd_11_task:
+ install_script:
+ - pkg install -y
+ augeas
+ autoconf
+ automake
+ avahi
+ bash
+ bash-completion
+ ca_root_nss
+ ccache
+ chrony
+ cppi
+ curl
+ cyrus-sasl
+ dbus
+ diskscrub
+ dnsmasq
+ fusefs-libs
+ gdb
+ gettext
+ gettext-tools
+ git
+ glib
+ gmake
+ gnutls
+ hal
+ libpcap
+ libpciaccess
+ libssh
+ libssh2
+ libtool
+ libxml2
+ libxslt
+ lsof
+ meson
+ ncurses
+ ninja
+ patch
+ perl5
+ pkgconf
+ polkit
+ py37-docutils
+ py37-flake8
+ py37-setuptools
+ py37-wheel
+ python3
+ qemu-utils
+ radvd
+ readline
+ screen
+ sudo
+ vim
+ yajl
+ clone_script:
+ - git clone --depth 100 "$CI_REPOSITORY_URL" .
+ - git fetch origin "$CI_COMMIT_REF_NAME"
+ - git reset --hard "$CI_COMMIT_SHA"
+ build_script:
+ - mkdir build
+ - cd build
+ - ../autogen.sh --prefix=$(pwd)/install-root
+ - gmake -j3
+ - gmake -j3 install
+ - gmake -j3 dist
For the dockerfiles, we're auto-generating using lcitool.
IIUC, we should have sufficient info avialable in lcitol that
we can wrote a command to generate this entire file, including
the build_script commands.
In fact eventually we could try to get to a point where we
auto-generate the .gitlab-ci.yml from lcitool.
diff --git a/ci/cirrus/macos-1015.yml.j2
b/ci/cirrus/macos-1015.yml.j2
new file mode 100644
index 0000000000..d8aa9715d6
--- /dev/null
+++ b/ci/cirrus/macos-1015.yml.j2
@@ -0,0 +1,38 @@
+osx_instance:
+ image: catalina-base
+
+env:
+ CI_REPOSITORY_URL: {{ CI_REPOSITORY_URL }}
+ CI_COMMIT_REF_NAME: {{ CI_COMMIT_REF_NAME }}
+ CI_COMMIT_SHA: {{ CI_COMMIT_SHA }}
+ PATH:
/usr/local/opt/gettext/bin:/usr/local/opt/ccache/libexec:/usr/local/opt/rpcgen/bin:$PATH
+ PKG_CONFIG_PATH: /usr/local/opt/libxml2/lib/pkgconfig
+
+macos_1015_task:
+ install_script:
+ - brew install
+ autoconf
+ automake
+ ccache
+ docutils
+ glib
+ gnutls
+ libtool
+ libxml2
+ make
+ pkg-config
+ python
+ rpcgen
+ xz
+ yajl
Obviously we'd need to define a mapping for macOS in lcitool
for this.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|