summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 2bec220666d4bfe340fb78de2581d4d2bda95d27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# This is the tag of the docker image used for the build jobs. If the
# image doesn't exist yet, the containers-build stage generates it.
#
# In order to generate a new image, one should generally change the tag.
# While removing the image from the registry would also work, that's not
# recommended except for ephemeral images during development: Replacing
# an image after a significant amount of time might pull in newer
# versions of gcc/clang or other packages, which might break the build
# with older commits using the same tag.
#
# After merging a change resulting in generating a new image to the
# main repository, it's recommended to remove the image from the source
# repository's container registry, so that the image from the main
# repository's registry will be used there as well.
#
# The format of the tag is "%Y-%m-%d-${counter}" where ${counter} stays
# at "01" unless you have multiple updates on the same day :)
variables:
  UBUNTU_TAG: 2019-01-31-01
  UBUNTU_IMAGE: "$CI_REGISTRY/$CI_PROJECT_PATH/ubuntu:$UBUNTU_TAG"


stages:
  - containers-build
  - build+test


# CONTAINERS

containers:ubuntu:
  stage: containers-build
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    # Enable experimental features such as `docker manifest inspect`
    - mkdir -p ~/.docker
    - "echo '{\"experimental\": \"enabled\"}' > ~/.docker/config.json"
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    # Check if the image (with the specific tag) already exists
    - docker manifest inspect $UBUNTU_IMAGE && exit || true
    - docker build -t $UBUNTU_IMAGE -f .gitlab-ci/Dockerfile.ubuntu .
    - docker push $UBUNTU_IMAGE
  only:
    changes:
      - .gitlab-ci.yml
      - .gitlab-ci/Dockerfile.ubuntu


# BUILD

.build:
  image: $UBUNTU_IMAGE
  stage: build+test
  artifacts:
    when: on_failure
    untracked: true

.meson-build:
  extends: .build
  before_script:
    # We need to control the version of llvm-config we're using, so we'll
    # generate a native file to do so. This requires meson >=0.49
    - if test -n "$LLVM_VERSION"; then
        LLVM_CONFIG="llvm-config-${LLVM_VERSION}";
        echo -e "[binaries]\nllvm-config = '`which $LLVM_CONFIG`'" > native.file;
        $LLVM_CONFIG --version;
      else
        touch native.file;
      fi
    - meson --version
    - meson _build
            --native-file=native.file
            -D build-tests=true
            -D libunwind=${UNWIND}
            ${DRI_LOADERS}
            -D dri-drivers=${DRI_DRIVERS:-[]}
            ${GALLIUM_ST}
            -D gallium-drivers=${GALLIUM_DRIVERS:-[]}
            -D vulkan-drivers=${VULKAN_DRIVERS:-[]}
    - cd _build
    - meson configure
  script:
    - ninja
    - ninja test

build:meson-vulkan:
  extends: .meson-build
  variables:
    UNWIND: "false"
    DRI_LOADERS: >
      -D glx=disabled
      -D gbm=false
      -D egl=false
      -D platforms=x11,wayland,drm
      -D osmesa=none
    GALLIUM_ST: >
      -D dri3=true
      -D gallium-vdpau=false
      -D gallium-xvmc=false
      -D gallium-omx=disabled
      -D gallium-va=false
      -D gallium-xa=false
      -D gallium-nine=false
      -D gallium-opencl=disabled
    VULKAN_DRIVERS: intel,amd
    LLVM_VERSION: "7"