# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later # SPDX-FileCopyrightText: 2017 Claudio André --- include: - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/c5626190ec14b475271288dda7a7dae8dbe0cd76/templates/alpine.yml' stages: - prepare - source_check - test - thorough_tests - manual - deploy .gjs-alpine: variables: FDO_DISTRIBUTION_TAG: '2022-11-02.0' FDO_UPSTREAM_REPO: GNOME/gjs build-alpine-image: extends: - .fdo.container-build@alpine@x86_64 - .gjs-alpine stage: prepare variables: FDO_DISTRIBUTION_PACKAGES: cppcheck git python3 npm bash grep FDO_DISTRIBUTION_EXEC: | python3 -m ensurepip && rm -r /usr/lib/python*/ensurepip && pip3 install --no-cache --upgrade cpplint reuse codespell && mkdir -p /cwd .coverage: &coverage image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: coverage: '/^ lines.*(\d+\.\d+\%)/' script: - export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib - 'export DISPLAY="${DISPLAY:-:0}"' # This script runs the build inside its own build tree and generates the # coverage report - xvfb-run -a tools/run_coverage.sh artifacts: name: log_coverage when: always reports: junit: _coverage_build/meson-logs/testlog*.junit.xml expose_as: 'Coverage Report' paths: - _coverage/html/index.html - _coverage/html - _coverage_build/meson-logs .build: &build when: on_success artifacts: reports: junit: _build/meson-logs/testlog*.junit.xml name: log when: always paths: - _build/compile_commands.json - _build/meson-logs/*log*.txt - scripts.log script: - test/test-ci.sh SETUP - test/test-ci.sh BUILD ############################################# # Regular tests # ############################################# # Test despite any changes in the Docker image # SpiderMonkey has been configured with --enable-debug build_recommended: <<: *build stage: source_check image: registry.gitlab.gnome.org/gnome/gjs:job-2382991_fedora.mozjs102-debug # pinned on purpose variables: TEST_OPTS: --verbose --no-stdsplit --print-errorlogs --setup=verbose except: - schedules sanitizer_gcc: <<: *build stage: test tags: - asan # LSAN needs CAP_SYS_PTRACE image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: CONFIG_OPTS: -Db_sanitize=address,undefined TEST_OPTS: --timeout-multiplier=3 --setup=verbose except: - schedules sanitizer_thread_gcc: <<: *build stage: manual when: manual allow_failure: true tags: - asan # TSAN needs CAP_SYS_PTRACE image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: CONFIG_OPTS: -Db_sanitize=thread TEST_OPTS: --timeout-multiplier=3 --setup=verbose except: - schedules # There are a lot of debug log statements that are ifdef'd out in normal usage. # These sometimes get invalid expressions in them, leading to annoyance the # next time you try to use debug logging. build_maximal: <<: *build stage: test image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: CC: clang CXX: clang++ CONFIG_OPTS: >- -Ddtrace=true -Dsystemtap=true -Dverbose_logs=true -Db_pch=false ENABLE_GTK: "yes" except: - schedules script: - test/test-ci.sh SETUP - test/test-ci.sh BUILD - test/test-ci.sh SH_CHECKS build_minimal: <<: *build stage: test image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102 variables: CONFIG_OPTS: >- -Dbuildtype=release -Dcairo=disabled -Dreadline=disabled -Dprofiler=disabled TEST_OPTS: --setup=verbose except: - schedules build_unity: <<: *build stage: test image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102 variables: # unity-size here is forced to use an high number to check whether we can # join all the sources together, but should not be used in real world to # not to break multi-jobs compilation CONFIG_OPTS: >- -Dprofiler=disabled --unity on --unity-size=10000 TEST_OPTS: --setup=verbose except: - schedules # Generates # The Code Coverage Report coverage-automatic: <<: *coverage when: on_success stage: source_check except: - schedules only: refs: - master@GNOME/gjs # Publishes # The code coverage report pages: stage: deploy dependencies: - coverage-automatic script: - mv $(pwd)/_coverage/html/ public/ || true artifacts: paths: - public only: refs: - master@GNOME/gjs except: variables: - $CRON_TASK == "BUILD_CI_IMAGES" ############################################# # Static Analyzers # ############################################# cppcheck: when: on_success extends: - .fdo.distribution-image@alpine - .gjs-alpine stage: source_check script: - cppcheck --version - cppcheck . -v -f -q -UHAVE_PRINTF_ALTERNATIVE_INT --error-exitcode=1 --inline-suppr --library=gtk,tools/cppcheck.cfg --enable=warning,performance,portability except: refs: - schedules - tags variables: - $CI_COMMIT_MESSAGE =~ /\[skip cppcheck\]/ only: changes: - "**/*.c" - "**/*.cpp" - "**/*.h" - "**/*.hh" cpplint: when: on_success stage: source_check extends: - .fdo.distribution-image@alpine - .gjs-alpine script: - cpplint --version - test/test-ci.sh CPPLINT except: refs: - schedules - tags variables: - $CI_COMMIT_MESSAGE =~ /\[skip cpplint\]/ only: changes: - "**/*.cpp" - "**/*.h" - "**/*.hh" eslint: when: on_success extends: - .fdo.distribution-image@alpine - .gjs-alpine stage: source_check script: - ./tools/run_eslint.sh --version - ./tools/run_eslint.sh except: refs: - schedules - tags variables: - $CI_COMMIT_MESSAGE =~ /\[skip eslint\]/ only: changes: - "**/*.js" - .eslintignore - .eslintrc.yml - '**/.eslintrc.yml' pch_check: when: on_success stage: source_check extends: - .fdo.distribution-image@alpine - .gjs-alpine script: - env SELFTEST=1 test/check-pch.sh - test/check-pch.sh except: refs: - schedules - tags variables: - $CI_COMMIT_MESSAGE =~ /\[skip pch_check\]/ only: changes: - "**/*.c" - "**/*.cpp" - "**/*.h" - "**/*.hh" - test/check-pch.sh iwyu: when: on_success stage: source_check image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug script: - test/test-ci.sh UPSTREAM_BASE - meson setup _build -Db_pch=false - include-what-you-use --version - ./tools/run_iwyu.sh ci-upstream-base only: refs: - branches except: - schedules - /^gnome-\d+-\d+$/ codespell: when: on_success extends: - .fdo.distribution-image@alpine - .gjs-alpine stage: source_check script: - codespell --version - | codespell -S "*.png,*.po,*.jpg,*.wrap,.git,LICENSES" -f \ --builtin "code,usage,clear" \ --skip="./installed-tests/js/jasmine.js,./README.md,./build/flatpak/*.json,./tools/package-lock.json" \ --ignore-words-list="afterall,deque,falsy,files',filetest,gir,inout,musl,nmake,stdio,uint,upto,xdescribe" except: - schedules license-check: when: on_success stage: source_check extends: - .fdo.distribution-image@alpine - .gjs-alpine script: - reuse --version - reuse lint except: - schedules ############################################# # Manual Jobs # ############################################# # Planned as daily coverage: <<: *coverage stage: manual when: manual except: - schedules iwyu-full: when: manual stage: manual image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug script: - meson setup _build - ./tools/run_iwyu.sh except: - schedules sanitizer_clang: <<: *build stage: manual tags: - asan # LSAN needs CAP_SYS_PTRACE image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: CC: clang CXX: clang++ CONFIG_OPTS: -Db_sanitize=address,undefined -Db_lundef=false TEST_OPTS: --timeout-multiplier=3 --setup=verbose when: manual except: - schedules installed_tests: <<: *build stage: manual image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: CONFIG_OPTS: -Dinstalled_tests=true -Dprefix=/usr TEST: skip when: manual except: - schedules script: - test/test-ci.sh SETUP - test/test-ci.sh BUILD - sudo ninja -C _build install - xvfb-run -a dbus-run-session -- gnome-desktop-testing-runner gjs valgrind: <<: *build stage: manual image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: TEST_OPTS: --setup=valgrind allow_failure: true when: manual except: - schedules # SpiderMonkey GC Tests (weekly) zeal_2: <<: *build stage: manual image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: TEST_OPTS: --setup=extra_gc when: manual except: - schedules zeal_4: <<: *build stage: manual image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: TEST_OPTS: --setup=pre_verify when: manual except: - schedules zeal_11: <<: *build stage: manual image: registry.gitlab.gnome.org/gnome/gjs:fedora.mozjs102-debug variables: TEST_OPTS: --setup=post_verify when: manual except: - schedules ############################################# # Create CI Docker Images # ############################################# .Docker image template: &create_docker_image image: quay.io/freedesktop.org/ci-templates:container-build-base-2022-05-25.0 stage: deploy only: variables: - $CRON_TASK == "BUILD_CI_IMAGES" script: # Newer versions of podman/buildah try to set overlayfs mount options when # using the vfs driver, and this causes errors. - sed -i '/^mountopt =.*/d' /etc/containers/storage.conf # Where the real magic happens - buildah bud -f $DOCKERFILE -t "$CI_REGISTRY_IMAGE:$CI_JOB_NAME" $ARGS # Prepare to publish - buildah tag "$CI_REGISTRY_IMAGE:$CI_JOB_NAME" "$CI_REGISTRY_IMAGE:job-${CI_JOB_ID}_$CI_JOB_NAME" - buildah images - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY # Publish (if running on a schedule) - | if [[ "$CI_PIPELINE_SOURCE" == "schedule" ]]; then buildah push "$CI_REGISTRY_IMAGE:$CI_JOB_NAME" buildah push "$CI_REGISTRY_IMAGE:job-${CI_JOB_ID}_$CI_JOB_NAME" fi .Docker variables: &docker_variables STORAGE_DRIVER: vfs BUILDAH_FORMAT: docker BUILDAH_ISOLATION: chroot fedora.mozjs102: <<: *create_docker_image variables: <<: *docker_variables DOCKERFILE: test/extra/Dockerfile fedora.mozjs102-debug: <<: *create_docker_image variables: <<: *docker_variables DOCKERFILE: test/extra/Dockerfile.debug