include: - project: 'GNOME/citemplates' file: 'templates/default-rules.yml' - project: 'GNOME/citemplates' file: 'flatpak/flatpak_ci_initiative.yml' - project: 'Infrastructure/freedesktop-ci-templates' file: 'templates/fedora.yml' ref: '057b052e682d8e5a20c1eb2dd60d5b87d2b56856' - project: 'Infrastructure/freedesktop-ci-templates' file: 'templates/ci-fairy.yml' ref: 'bc70242ffb8402243e934659ecc1a2d1c89eca2b' - component: gitlab.gnome.org/GNOME/citemplates/release-service@master inputs: job-stage: deploy dist-job-name: "dist-tarball" tarball-artifact-path: $TARBALL_ARTIFACT_PATH - component: gitlab.gnome.org/GNOME/citemplates/gnomeos-build-sysext@1.0.0-alpha.1 inputs: meson-options: -Dextensions_app=false -Dextensions-tool:bash_completion=disabled build-sysext: tags: - x86_64_v3 before_script: - .gitlab-ci/install-gnomeos-sysext-dependencies.sh $CI_PROJECT_DIR/extension stages: - pre-review - prep - review - build - test - analyze - docs - deploy default: image: $MUTTER_CI_IMAGE variables: MUTTER_CI_IMAGE: registry.gitlab.gnome.org/gnome/mutter/fedora/42:x86_64-2025-03-31.0 FDO_UPSTREAM_REPO: GNOME/gnome-shell BUNDLE: "extensions-git.flatpak" LINT_LOG: "eslint-report.xml" LINT_MR_LOG: "eslint-mr-report.xml" TARBALL_ARTIFACT_PATH: build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz .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: 42 FDO_DISTRIBUTION_TAG: '2025-04-01.0' FDO_DISTRIBUTION_PACKAGES: gjs nodejs npm meson git '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@^8.0.0 eslint-plugin-jsdoc@^46.0.0 && ./.gitlab-ci/install-meson-project.sh \ https://gitlab.gnome.org/World/javascript/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 rules: - !reference [.pipeline-guard, rules] 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 rules: - !reference [.pipeline-guard, rules] 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 --stdout artifacts: reports: junit: ${LINT_LOG} when: always eslint-doc: extends: - .fdo.distribution-image@fedora - .gnome-shell.fedora stage: review script: - export NODE_PATH=$(npm root -g) - ./.gitlab-ci/eslint-coding-style.sh rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: - HACKING.md - .eslintrc.yml - lint/* 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"] before_script: - .gitlab-ci/checkout-mutter.sh - meson mutter mutter/build --prefix=/usr - sudo meson install -C mutter/build script: - meson setup . build -Dbuildtype=debugoptimized -Dman=false -Dgtk_doc=true --werror --fatal-meson-warnings - meson compile -C build - sudo meson install -C build artifacts: expire_in: 1 day paths: - mutter - build - subprojects/gvc - subprojects/jasmine-gjs test: stage: test needs: ["build"] variables: XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir" NO_AT_BRIDGE: "1" before_script: - sudo meson install -C mutter/build - mkdir -m 700 $XDG_RUNTIME_DIR - mkdir -m 1777 /tmp/.X11-unix script: - dbus-run-session -- meson test -C build --no-rebuild --timeout-multiplier 5 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 before_script: - sudo 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' needs: - flatpak dist: variables: XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir" NO_AT_BRIDGE: "1" stage: deploy needs: ["build"] before_script: - sudo meson install -C mutter/build - mkdir -m 700 $XDG_RUNTIME_DIR - mkdir -m 1777 /tmp/.X11-unix script: - dbus-run-session meson dist -C build --include-subprojects rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: - "**/meson.build" - meson/* dist-tarball: extends: dist needs: - build artifacts: expose_as: 'Get tarball here' name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" when: always paths: - $TARBALL_ARTIFACT_PATH rules: - if: '$CI_COMMIT_TAG' reference: stage: docs needs: ["build"] script: - mkdir -p reference/ - mv build/docs/reference/{shell/shell,st/st} reference/ artifacts: paths: - reference pages: stage: deploy needs: ['reference'] script: - mv reference/ public/ artifacts: paths: - public rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PROJECT_NAMESPACE == "GNOME"' 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"'