[pulseaudio-discuss] [PATCH] gitlab: Add support for GitLab CI

Arun Raghavan arun at arunraghavan.net
Thu Aug 23 15:14:48 UTC 2018


On Thu, 23 Aug 2018, at 6:29 PM, Felipe Sateler wrote:
> On Wed, Aug 22, 2018 at 11:36 PM Arun Raghavan <arun at arunraghavan.net>
> wrote:
> 
> > This adds a Dockerfile to generate a Docker image with the required
> > dependencies on top of the standard Ubuntu 18.04 image. The Gitlab CI
> > then runs the PulseAudio build within this image.
> > ---
> >  .gitlab-ci.yml     | 19 +++++++++++++++++
> >  scripts/Dockerfile | 53 ++++++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 72 insertions(+)
> >  create mode 100644 .gitlab-ci.yml
> >  create mode 100644 scripts/Dockerfile
> >
> > diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> > new file mode 100644
> > index 000000000..e9c983075
> > --- /dev/null
> > +++ b/.gitlab-ci.yml
> > @@ -0,0 +1,19 @@
> > +image: registry.freedesktop.org/pulseaudio/pulseaudio/ubuntu:18.04
> > +
> > +build:
> > +  stage: build
> > +  script:
> > +    - export MAKEFLAGS="-j4"
> >
> 
> This seems to be inappropriate for a CI build. How do you know the
> available cores in the runner? I would expect to have at most
> MAKEFLAGS=$(nproc)

Sure, can do.

> > +    - NOCONFIGURE=1 ./bootstrap.sh
> > +    - mkdir build
> > +    - cd build
> > +    - ../configure --localstatedir=/var
> >
> 
> I think for CI builds options should be explicitly selected, and have the
> build fail if any of the expected options cannot be enabled. This may help
> catch some configure.ac/Makefile.am bugs.

I'm okay to add that in if you have suggestions for a sensible list (imo this can come as a second step).

> > +    - make
> > +    - make check
> > +    - make check-daemon
> > +    - make distcheck
> >
> 
> This effectively runs make and make check again. I think it would be better
> to split this to a separate job so it can run in parallel.

Jobs require artifacts to be passed around, so it's a bit of a pain. I think the additional work is worth it for now, as distcheck caught the bug that I fixed in the last commit.

> > +    - make install DESTDIR=`mktemp -d`
> > +    - make dist
> > +  artifacts:
> > +    paths:
> > +      - build/
> > diff --git a/scripts/Dockerfile b/scripts/Dockerfile
> > new file mode 100644
> > index 000000000..ed7063212
> > --- /dev/null
> > +++ b/scripts/Dockerfile
> > @@ -0,0 +1,53 @@
> > +# Start with current Ubuntu LTS
> > +FROM ubuntu:18.04
> > +
> > +# Add a PulseAudio's dependencies
> > +RUN apt-get update && apt-get install -y \
> > +    autoconf \
> > +    automake \
> > +    autopoint \
> > +    bash-completion \
> > +    check \
> > +    dbus-x11 \
> > +    g++ \
> > +    gcc \
> >
> 
> build-essential should get you a basic build system in place. Otherwise,
> you need to add make to the list (make might stop being a transitive
> dependency in the future).

I'll just add make in for now.

> > +    gettext \
> >
> 
> Isn't intltool necessary too?(If not I could drop that from the debian
> package)

It got dropped as a dep with 57e3ccaf51f714eec8ca29005c3cc4fde456e84e.
 
> > +    git-core \
> > +    libasound2-dev \
> > +    libasyncns-dev \
> > +    libatomic-ops-dev \
> >
> 
> This is not necessary because gcc has atomic builtins.

Fair enough.

> > +    libavahi-client-dev \
> > +    libbluetooth-dev \
> > +    libcap-dev \
> > +    libfftw3-dev \
> > +    libglib2.0-dev \
> > +    libgtk-3-dev \
> > +    libice-dev \
> > +    libjack-dev \
> > +    liblircclient-dev \
> > +    libltdl-dev \
> > +    liborc-0.4-dev \
> > +    libsbc-dev \
> > +    libsndfile1-dev \
> > +    libsoxr-dev \
> > +    libspeexdsp-dev \
> > +    libssl-dev \
> > +    libtdb-dev \
> > +    libudev-dev \
> > +    libwebrtc-audio-processing-dev \
> > +    libwrap0-dev \
> > +    libx11-xcb-dev \
> > +    libxcb1-dev \
> > +    libxml-parser-perl \
> > +    libxtst-dev \
> > +    systemd
> >
> 
> libsystemd-dev is missing.

We don't depend on libsystemd, just systemd.

> > +
> > +# Add a user and set as default for the build. This is safer, in general,
> > and
> > +# allows us to avoid having to explicitly allow running as root in the
> > +# check-daemon stage.
> > +RUN groupadd -g 1000 a_group && \
> > +    useradd a_user -u 1000 -g a_group -m
> >
> 
> Ubuntu has adduser that creates both user and group at the same time.

Shouldn't matter as it's about the same (and more clear in some sense).

> > +USER a_user:a_group
> > +
> > +# And make sure subsequent commands are run in the user's home directory
> > +WORKDIR /home/a_user
> > --
> > 2.17.1
> >

Thanks for the review. I'll update the MR based on this and let's continue there.

Cheers,
Arun


More information about the pulseaudio-discuss mailing list