# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0: .templates_sha: &template_sha 007f3e2fe2235328e77d3cd4ce007ab41cd9ce6c # see https://docs.gitlab.com/ee/ci/yaml/#includefile include: # Arch container builder template - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/arch.yml' - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/ci-fairy.yml' # global variables to be used by most/all jobs. variables: FDO_UPSTREAM_REPO: 'xkeyboard-config/xkeyboard-config' BUILDDIR: '_build' # installation directory must be inside $CI_PROJECT_DIR to allow for artifact caching INSTDIR: '$CI_PROJECT_DIR/_inst' # Override these in the jobs to pass commands to configure/make CONFIGURE_ARGS: '' MAKE_EXTRA_ARG: '' # Changing the tag will rebuild the container images. The value is just a # string, but we use the date for human benefits. FDO_DISTRIBUTION_TAG: '2022-01-20.0' stages: - prep - build - dist - test - gitlab container-prep: extends: - .fdo.container-build@arch stage: prep variables: GIT_STRATEGY: none # minimal set of packages required to build xkeyboard-config. BASE_PACKAGES: 'xorg-util-macros gettext pkg-config gcc grep m4 python meson ninja git diffutils' # extra packages we need for various tests EXTRA_PACKAGES: 'tree libxml2 bison xorg-xkbcomp python-pytest python-libevdev python-yaml yq libxkbcommon libxslt python-pycountry' FDO_DISTRIBUTION_PACKAGES: $BASE_PACKAGES $EXTRA_PACKAGES .default_setup: extends: - .fdo.distribution-image@arch .meson_build: extends: .default_setup script: - if [ x"$TARBALL" != "x" ]; then mkdir tarball; tar xf "$BUILDDIR/$TARBALL" -C tarball/ --strip-components=1; pushd tarball > /dev/null; fi - meson "$BUILDDIR" -Dprefix="$INSTDIR" - meson configure "$BUILDDIR" - ninja -C "$BUILDDIR" - if test x"$NINJA_EXTRA_COMMAND" != "x"; then ninja -C "$BUILDDIR" $NINJA_EXTRA_COMMAND; fi # # Verify that the merge request has the allow-collaboration checkbox ticked # check-merge-request: extends: - .fdo.ci-fairy stage: gitlab script: - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml artifacts: when: on_failure reports: junit: results.xml allow_failure: true dependencies: [] meson_install: extends: .meson_build stage: build variables: NINJA_EXTRA_COMMAND: "install" after_script: - tree $INSTDIR artifacts: name: installed files expire_in: 2 weeks paths: - $INSTDIR/ meson_test: extends: .meson_build stage: build variables: NINJA_EXTRA_COMMAND: "test" meston_dist: extends: .meson_build stage: build variables: NINJA_EXTRA_COMMAND: "dist" artifacts: name: tarball expire_in: 2 weeks paths: - $BUILDDIR/meson-dist/xkeyboard-config-*.tar.xz # Checks for new evdev keycodes to be added to keycodes/evdev evdev keycode check: extends: - .default_setup stage: test script: - .gitlab-ci/generate-evdev-keycodes.py --verbose || (echo "keycodes/evdev file needs to be updated" && false) allow_failure: true artifacts: when: on_failure name: Updated evdev keycodes expire_in: 2 weeks paths: - keycodes/evdev needs: ['container-prep'] # Checks for new keysyms to be added to symbols/inet (using xorgproto master) evdev keysym check (xorgproto master): extends: - .default_setup stage: test script: # Check out the latest xorgproto tag - git clone https://gitlab.freedesktop.org/xorg/proto/xorgproto - .gitlab-ci/generate-evdev-keysyms.py --header xorgproto/include/X11/XF86keysym.h - git diff --exit-code || (echo "New keysyms available, please update symbols/inet" && false) allow_failure: true artifacts: when: on_failure name: Updated inet keysyms expire_in: 2 weeks paths: - symbols/inet needs: ['container-prep'] xmllint: extends: - .default_setup dependencies: ['meson_install'] needs: ['meson_install'] stage: test script: - xmllint --dtdvalid "$INSTDIR/share/X11/xkb/rules/xkb.dtd" $INSTDIR/share/X11/xkb/rules/*.xml > /dev/null match group names to registry: extends: - .default_setup needs: ['container-prep'] stage: test script: - "./tests/genLists4Comparison.sh" # libxkbcommon's xkbcli list prints out YAML-like format, if yq cannot parse it, our # evdev.xml file is off xkbcli list check: extends: - .default_setup dependencies: ['meson_install'] needs: ['meson_install'] stage: test script: - xkbcli list --skip-default-paths --load-exotic "$INSTDIR/share/X11/xkb" > rmlvo.yaml - head -n20 rmlvo.yaml - yq . rmlvo.yaml > /dev/null artifacts: when: on_failure name: xbkcli list output expire_in: 2 weeks paths: - rmlvo.yaml # download libxkbcommon and run its layout test program. This will # run a basic keymap compile test against every combination of # layout/variant/option. Syntax errors will fail the test, check the # archived file for details. layout_tests: extends: .default_setup stage: test needs: ["meson_install"] script: # make sure the custom layout resolves to something - ln -s "$INSTDIR/share/X11/xkb/symbols/us" "$INSTDIR/share/X11/xkb/symbols/custom" - rm -rf xorgproto libxkbcommon # Get latest xorgproto so we definitely have all keysyms - git clone --depth=1 https://gitlab.freedesktop.org/xorg/proto/xorgproto - export X11_HEADERS_PREFIX="$PWD/xorgproto/" - git clone --depth=1 https://github.com/xkbcommon/libxkbcommon - pushd libxkbcommon > /dev/null - ./scripts/update-keysyms - meson builddir -Denable-wayland=false -Denable-x11=false -Denable-docs=false -Dxkb-config-root="$INSTDIR/share/X11/xkb" - ninja -C builddir - echo Running test script - this will take several minutes - ./builddir/xkeyboard-config-test --verbose "$INSTDIR/share/X11/xkb/rules/evdev.xml" > $INSTDIR/keymaps-success.yaml 2> $INSTDIR/keymaps-failed.yaml - ./builddir/xkeyboard-config-test --verbose "$INSTDIR/share/X11/xkb/rules/evdev.extras.xml" >> $INSTDIR/keymaps-success.yaml 2>> $INSTDIR/keymaps-failed.yaml - popd > /dev/null after_script: - echo "Failed keymap compilations:" - yq -c ".[] | select(.status != 0) | .cmd, .error" $INSTDIR/keymaps-failed.yaml - .gitlab-ci/yaml-to-junit-xml.py $INSTDIR/keymaps-failed.yaml > junit-results.xml - xz -z "$INSTDIR/keymaps-success.yaml" - xz -z "$INSTDIR/keymaps-failed.yaml" variables: GIT_DEPTH: 1 artifacts: when: on_failure name: xkeyboard-config test output expire_in: 2 weeks paths: - $INSTDIR/keymaps-success.yaml.xz - $INSTDIR/keymaps-failed.yaml.xz reports: junit: junit-results.xml keymap_tests: extends: .default_setup stage: test script: - export XKB_CONFIG_ROOT="$INSTDIR/share/X11/xkb" - pytest --junitxml=results.xml artifacts: reports: junit: results.xml # use the installed tree from the meson_install job needs: - job: meson_install artifacts: true