summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 36e8763c496e3e264acc8d6612b1b77e484e06e5 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
#
# This CI uses the freedesktop.org ci-templates.
# Please see the ci-templates documentation for details:
# https://freedesktop.pages.freedesktop.org/ci-templates/

.templates_sha: &template_sha 34f4ade99434043f88e164933f570301fd18b125 # see https://docs.gitlab.com/ee/ci/yaml/#includefile


include:
  # FreeBSD container builder template
  - project: 'freedesktop/ci-templates'
    ref: *template_sha
    file: '/templates/freebsd.yml'
  - project: 'freedesktop/ci-templates'
    ref: *template_sha
    file: '/templates/ci-fairy.yml'
  - template: Security/SAST.gitlab-ci.yml


stages:
  - prep             # prep work like rebuilding the container images if there is a change
  - build            # for actually building and testing things in a container
  - test
  - deploy


variables:
  FDO_UPSTREAM_REPO: 'xorg/driver/xf86-input-mouse'
  # The tag should be updated each time the list of packages is updated.
  # Changing a tag forces the associated image to be rebuilt.
  # Note: the tag has no meaning, we use a date format purely for readability
  FDO_DISTRIBUTION_TAG:  '2022-01-17.0'
  FDO_DISTRIBUTION_VERSION: '13.0'
  # Packages needed to build enough of xorg-server to build this driver
  EXTRA_PACKAGES: 'meson ninja pixman xtrans libXau libXdmcp libXfont2 libxkbfile libxcvt libpciaccess font-util'
  FDO_DISTRIBUTION_PACKAGES: 'git gcc pkgconf autoconf automake libtool xorg-macros xorgproto $EXTRA_PACKAGES'

#
# Verify that commit messages are as expected
#
check-commits:
  extends:
    - .fdo.ci-fairy
  stage: prep
  script:
    - ci-fairy check-commits --junit-xml=results.xml
  except:
    - master@xorg/driver/xf86-input-mouse
  variables:
    GIT_DEPTH: 100
  artifacts:
    reports:
      junit: results.xml

#
# Verify that the merge request has the allow-collaboration checkbox ticked
#
check-merge-request:
  extends:
    - .fdo.ci-fairy
  stage: deploy
  script:
    - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
  artifacts:
    when: on_failure
    reports:
      junit: results.xml
  allow_failure: true


#
# Build a container with the given tag and the packages pre-installed.
# This only happens if the tag changes, otherwise the existing image is
# re-used.
#
container-prep:
  extends:
    - .fdo.qemu-build@freebsd@x86_64
  stage: prep
  variables:
    GIT_STRATEGY: none


#
# The default build, runs on the image built above.
#
build:
  stage: build
  extends:
    - .fdo.distribution-image@freebsd
  variables:
    XSERVER_MESON_FLAGS: -Dglx=false -Dglamor=false -Dudev=false -Dudev_kms=false
  script:
    # start the VM. This also sets up ssh/scp to connect to "vm"
    # correctly.
    - /app/vmctl start
    # copy our workspace to the VM
    # The quotes are required to stop the ':' from parsing as yaml
    - scp -r $PWD "vm:"
    # We don't want any failed commands to exit our script until VM
    # cleanup has been completed.
    - set +e
    # First we need to build and install the Xorg server to get the SDK headers
    - |
      /app/vmctl exec "git clone --depth=1 https://gitlab.freedesktop.org/xorg/xserver.git"
      /app/vmctl exec "mkdir xserver/_builddir"
      /app/vmctl exec "cd xserver/_builddir && meson setup $XSERVER_MESON_FLAGS"
      /app/vmctl exec "cd xserver/_builddir && ninja"
      /app/vmctl exec "cd xserver/_builddir && ninja install"
    # Now build this driver
    - |
      /app/vmctl exec "mkdir $CI_PROJECT_NAME/_builddir"
      /app/vmctl exec "cd $CI_PROJECT_NAME/_builddir && ../autogen.sh --disable-silent-rules PKG_CONFIG_PATH=/usr/local/lib/pkgconfig"
      /app/vmctl exec "cd $CI_PROJECT_NAME/_builddir && make"
      /app/vmctl exec "cd $CI_PROJECT_NAME/_builddir && make check"
      /app/vmctl exec "cd $CI_PROJECT_NAME/_builddir && env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig make distcheck" && touch .success
    # copy any test results from the VM to our container so we can
    # save them as artifacts
    # - scp -r vm:$CI_PROJECT_NAME/test-results.xml .
    # shut down the VM
    - /app/vmctl stop
    # VM cleanup is complete, any command failures now should result in
    # a CI failed job
    - set -e
    # our CI script exit code should match the test command exit status
    - test -e .success || exit 1