a837285ae3
Toolbox is a convenient option for development, but setting up the image with all dependencies is annoying at best, in particular later in the cycle when `dnf builddep` is likely insufficient. To address that, produce toolbox images for main and stable branches that are based on the regular CI image, and update them whenever the image version is updated. This guarantees that all build- and runtime dependencies are included. Unsurprisingly, the script that produces the image draws heavily from freedesktop's ci-templates. The most notable difference (other than being neither distro-agnostic nor generic) is that tag names are fixed (toolbox:main, toolbox:43 etc.) to make them easier to consume. Instead, whether an image needs rebuilding is based on a custom label that records the base image that was used. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2713>
304 lines
7.8 KiB
YAML
304 lines
7.8 KiB
YAML
include:
|
|
- remote: 'https://gitlab.gnome.org/GNOME/citemplates/raw/HEAD/flatpak/flatpak_ci_initiative.yml'
|
|
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/fedora.yml'
|
|
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/ci-fairy.yml'
|
|
|
|
stages:
|
|
- pre_review
|
|
- prep
|
|
- review
|
|
- build
|
|
- test
|
|
- analyze
|
|
- deploy
|
|
|
|
default:
|
|
image: $MUTTER_CI_IMAGE
|
|
# Cancel jobs if newer commits are pushed to the branch
|
|
interruptible: true
|
|
# Auto-retry jobs in case of infra failures
|
|
retry:
|
|
max: 1
|
|
when:
|
|
- 'runner_system_failure'
|
|
- 'stuck_or_timeout_failure'
|
|
- 'scheduler_failure'
|
|
- 'api_failure'
|
|
|
|
variables:
|
|
MUTTER_CI_IMAGE: registry.gitlab.gnome.org/gnome/mutter/fedora/37:x86_64-2023-02-22.0
|
|
FDO_UPSTREAM_REPO: GNOME/gnome-shell
|
|
BUNDLE: "extensions-git.flatpak"
|
|
LINT_LOG: "eslint-report.xml"
|
|
LINT_MR_LOG: "eslint-mr-report.xml"
|
|
|
|
workflow:
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_IID'
|
|
- if: '$CI_COMMIT_TAG'
|
|
- if: '$CI_COMMIT_BRANCH'
|
|
|
|
.pipeline_guard: &pipeline_guard
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
- if: '$CI_COMMIT_TAG'
|
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
|
- when: 'manual'
|
|
|
|
.gnome-shell.fedora:
|
|
variables:
|
|
FDO_DISTRIBUTION_VERSION: 38
|
|
FDO_DISTRIBUTION_TAG: '2023-04-21.1'
|
|
FDO_DISTRIBUTION_PACKAGES:
|
|
gjs
|
|
nodejs
|
|
npm
|
|
meson
|
|
pkgconfig(gobject-introspection-1.0)
|
|
pkgconfig(gio-2.0)
|
|
pkgconfig(gio-unix-2.0)
|
|
pkgconfig(gnome-autoar-0)
|
|
pkgconfig(json-glib-1.0)
|
|
FDO_DISTRIBUTION_EXEC: |
|
|
# For static analysis with eslint
|
|
npm install -g eslint eslint-plugin-jsdoc &&
|
|
|
|
dnf group install -y 'Development Tools' \
|
|
'C Development Tools and Libraries' &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.gnome.org/fmuellner/gjs-ci-tools.git \
|
|
main &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
--subdir subprojects/extensions-tool/ \
|
|
--prepare ./generate-translations.sh \
|
|
-Dman=false \
|
|
https://gitlab.gnome.org/GNOME/gnome-shell.git \
|
|
main
|
|
|
|
check_commit_log:
|
|
extends:
|
|
- .fdo.ci-fairy
|
|
stage: pre_review
|
|
variables:
|
|
GIT_DEPTH: "100"
|
|
script:
|
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
then
|
|
ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ;
|
|
else
|
|
echo "Not a merge request" ;
|
|
fi
|
|
<<: *pipeline_guard
|
|
artifacts:
|
|
expire_in: 1 week
|
|
paths:
|
|
- commit-message-junit-report.xml
|
|
reports:
|
|
junit: commit-message-junit-report.xml
|
|
|
|
check-merge-request:
|
|
extends:
|
|
- .fdo.ci-fairy
|
|
stage: pre_review
|
|
script:
|
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
then
|
|
ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
|
|
else
|
|
echo "Not a merge request" ;
|
|
fi
|
|
<<: *pipeline_guard
|
|
artifacts:
|
|
expire_in: 1 week
|
|
paths:
|
|
- check-merge-request-report.xml
|
|
reports:
|
|
junit: check-merge-request-report.xml
|
|
|
|
build-fedora-container:
|
|
extends:
|
|
- .fdo.container-build@fedora@x86_64
|
|
- .gnome-shell.fedora
|
|
stage: prep
|
|
|
|
js_check:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .gnome-shell.fedora
|
|
stage: review
|
|
script:
|
|
- gjs-check-syntax
|
|
artifacts:
|
|
reports:
|
|
junit: gjs-check-syntax.junit.xml
|
|
|
|
eslint:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .gnome-shell.fedora
|
|
stage: review
|
|
script:
|
|
- export NODE_PATH=$(npm root -g)
|
|
- ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit
|
|
artifacts:
|
|
reports:
|
|
junit: ${LINT_LOG}
|
|
when: always
|
|
|
|
eslint_mr:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .gnome-shell.fedora
|
|
stage: review
|
|
script:
|
|
- export NODE_PATH=$(npm root -g)
|
|
- ./.gitlab-ci/run-eslint --output-file ${LINT_MR_LOG} --format junit
|
|
--remote ${CI_MERGE_REQUEST_PROJECT_URL}.git
|
|
--branch ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
|
|
only:
|
|
- merge_requests
|
|
artifacts:
|
|
reports:
|
|
junit: ${LINT_MR_LOG}
|
|
when: always
|
|
|
|
potfile_c_check:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .gnome-shell.fedora
|
|
stage: review
|
|
script:
|
|
- ./.gitlab-ci/check-potfiles.sh
|
|
|
|
potfile_js_check:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .gnome-shell.fedora
|
|
stage: review
|
|
script:
|
|
- gjs-check-potfiles
|
|
artifacts:
|
|
reports:
|
|
junit: gjs-check-potfiles.junit.xml
|
|
|
|
build:
|
|
stage: build
|
|
needs: ["check_commit_log"]
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: normal
|
|
before_script:
|
|
- .gitlab-ci/checkout-mutter.sh
|
|
- meson mutter mutter/build --prefix=/usr
|
|
- meson install -C mutter/build
|
|
script:
|
|
- meson . build -Dbuildtype=debugoptimized -Dman=false --werror
|
|
- meson compile -C build
|
|
- meson install -C build
|
|
artifacts:
|
|
expire_in: 1 day
|
|
paths:
|
|
- mutter
|
|
- build
|
|
|
|
test:
|
|
stage: test
|
|
needs: ["build"]
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: normal
|
|
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
|
NO_AT_BRIDGE: "1"
|
|
before_script:
|
|
- meson install -C mutter/build
|
|
- mkdir -m 700 $XDG_RUNTIME_DIR
|
|
script:
|
|
- dbus-run-session -- xvfb-run meson test -C build --no-rebuild
|
|
artifacts:
|
|
expire_in: 1 day
|
|
paths:
|
|
- build/meson-logs/testlog.txt
|
|
reports:
|
|
junit: build/meson-logs/testlog.junit.xml
|
|
when: on_failure
|
|
|
|
test-coverity:
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "schedule" && $GNOME_SHELL_SCHEDULED_JOB == "coverity"'
|
|
when: always
|
|
- when: manual
|
|
needs: ["build"]
|
|
stage: analyze
|
|
allow_failure: true
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: normal
|
|
before_script:
|
|
- meson install -C mutter/build
|
|
script:
|
|
- .gitlab-ci/download-coverity-tarball.sh
|
|
- CC=clang meson coverity-build -Dman=false
|
|
- ./coverity/cov-analysis-linux64-*/bin/cov-build --fs-capture-search js --dir cov-int meson compile -C coverity-build
|
|
- tar czf cov-int.tar.gz cov-int
|
|
- curl https://scan.coverity.com/builds?project=GNOME+Shell
|
|
--form token=$COVERITY_TOKEN --form email=carlosg@gnome.org
|
|
--form file=@cov-int.tar.gz --form version="`git describe --tags`"
|
|
--form description="GitLab CI build"
|
|
cache:
|
|
key: coverity-tarball
|
|
paths:
|
|
- coverity
|
|
|
|
flatpak:
|
|
stage: build
|
|
needs: ["check_commit_log"]
|
|
variables:
|
|
SUBPROJECT: "subprojects/extensions-app"
|
|
# Your manifest path
|
|
MANIFEST_PATH: "$SUBPROJECT/build-aux/flatpak/org.gnome.Extensions.json"
|
|
RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo"
|
|
FLATPAK_MODULE: "gnome-extensions-app"
|
|
APP_ID: "org.gnome.Extensions.Devel"
|
|
extends: .flatpak
|
|
|
|
nightly:
|
|
extends: '.publish_nightly'
|
|
|
|
dist:
|
|
variables:
|
|
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
|
NO_AT_BRIDGE: "1"
|
|
GIT_SUBMODULE_STRATEGY: normal
|
|
stage: deploy
|
|
needs: ["build"]
|
|
before_script:
|
|
- meson install -C mutter/build
|
|
- mkdir -m 700 $XDG_RUNTIME_DIR
|
|
script:
|
|
- dbus-run-session xvfb-run meson dist -C build
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
changes:
|
|
- "**/meson.build"
|
|
- meson/*
|
|
|
|
|
|
dist-tarball:
|
|
extends: dist
|
|
artifacts:
|
|
expose_as: 'Get tarball here'
|
|
paths:
|
|
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG'
|
|
|
|
build-toolbox:
|
|
image: quay.io/freedesktop.org/ci-templates:container-build-base-2021-07-29.0
|
|
stage: deploy
|
|
needs: []
|
|
script:
|
|
- .gitlab-ci/build-toolbox-image.sh $MUTTER_CI_IMAGE
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PROJECT_NAMESPACE == "GNOME"'
|
|
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/ && $CI_PROJECT_NAMESPACE == "GNOME"'
|