# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2017 Claudio André <claudioandre.br@gmail.com>
---
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-07-23.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 yarn 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-2190518_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
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\]/
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\]/
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\]/
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\]/
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" --ignore-words-list="afterall,befores,files',filetest,gir,inout,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.mozjs91:
<<: *create_docker_image
variables:
<<: *docker_variables
DOCKERFILE: test/extra/Dockerfile
fedora.mozjs91-debug:
<<: *create_docker_image
variables:
<<: *docker_variables
DOCKERFILE: test/extra/Dockerfile.debug
fedora.mozjs102:
<<: *create_docker_image
variables:
<<: *docker_variables
DOCKERFILE: test/extra/Dockerfile
ARGS: --build-arg MOZJS_BRANCH=mozjs102 --build-arg MOZJS_BUILDDEPS=mozjs91
fedora.mozjs102-debug:
<<: *create_docker_image
variables:
<<: *docker_variables
DOCKERFILE: test/extra/Dockerfile.debug
ARGS: --build-arg MOZJS_BRANCH=mozjs102 --build-arg MOZJS_BUILDDEPS=mozjs91