summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 4bc9f3aeaec29fcc9adb1143a8dcc4fbfe799469 (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
128
129
130
131
132
133
# 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 81f66518561308ef294142663198f0890c99d195 # 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-keyboard'
  # 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:  '2023-12-02.0'
  FDO_DISTRIBUTION_VERSION: '14.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-keyboard
  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 install the latest xorgproto needed to build Xserver
    - |
      /app/vmctl exec "git clone --depth=1 https://gitlab.freedesktop.org/xorg/proto/xorgproto.git"
      /app/vmctl exec "mkdir xorgproto/_builddir"
      /app/vmctl exec "cd xorgproto/_builddir && meson setup"
      /app/vmctl exec "cd xorgproto/_builddir && ninja install"
    # Then 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 && env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 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