diff options
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 289 |
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' |