summaryrefslogtreecommitdiffstats
path: root/.gitlab-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r--.gitlab-ci.yml289
1 files changed, 289 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..468549f
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,289 @@
+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: registry.gitlab.gnome.org/gnome/mutter/fedora/36:x86_64-2022-09-01.0
+ # 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:
+ FDO_UPSTREAM_REPO: GNOME/gnome-shell
+ BUNDLE: "extensions-git.flatpak"
+ JS_LOG: "js-report.txt"
+ 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:35:
+ variables:
+ FDO_DISTRIBUTION_VERSION: 35
+ FDO_DISTRIBUTION_TAG: '2022-01-18.0'
+ FDO_DISTRIBUTION_PACKAGES:
+ findutils
+ mozjs91-devel
+ nodejs
+ npm
+ meson
+ 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 \
+ --subdir subprojects/extensions-tool/ \
+ --prepare ./generate-translations.sh \
+ -Dman=false \
+ https://gitlab.gnome.org/GNOME/gnome-shell.git \
+ main &&
+
+ dnf clean all
+
+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:35
+ stage: prep
+
+js_check:
+ extends:
+ - .fdo.distribution-image@fedora
+ - .gnome-shell.fedora:35
+ stage: review
+ script:
+ - find js -name '*.js' $(printf "! -wholename %s " $(cat .jscheckignore)) -exec js91 -c '{}' ';' 2>&1 | tee $JS_LOG
+ - (! grep -q . $JS_LOG)
+ artifacts:
+ paths:
+ - ${JS_LOG}
+ when: on_failure
+
+eslint:
+ extends:
+ - .fdo.distribution-image@fedora
+ - .gnome-shell.fedora:35
+ 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:35
+ 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:35
+ stage: review
+ script:
+ - ./.gitlab-ci/check-potfiles.sh
+
+potfile_js_check:
+ extends:
+ - .fdo.distribution-image@fedora
+ - .gnome-shell.fedora:35
+ stage: review
+ script:
+ - js91 -m .gitlab-ci/check-potfiles.js
+
+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
+ 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'