For the "development" profile, lets use the Nightly variant, to visually indicate to users that they are running an unstable version of the application.
410 lines
9.6 KiB
YAML
410 lines
9.6 KiB
YAML
image: registry.gitlab.gnome.org/gnome/gnome-control-center:fedora.dev
|
|
stages:
|
|
- build
|
|
- test
|
|
- manual
|
|
- review
|
|
- deploy
|
|
|
|
.Log files: &log_files [./*.log, _build/meson-logs/]
|
|
|
|
.Build logs: &save_build_logs
|
|
artifacts:
|
|
name: log
|
|
when: always
|
|
paths: *log_files
|
|
|
|
.Git Untracked files: &save_untracked_files
|
|
artifacts:
|
|
name: untracked
|
|
paths: [$(pwd)]
|
|
expire_in: 3h30min
|
|
|
|
.Show Info: &environment_information
|
|
build-aux/ci/ci-helper.sh "INFO" &&
|
|
build-aux/ci/ci-helper.sh "GIT_INFO"
|
|
|
|
.Build procedure: &build_procedure
|
|
echo "== Building ==" &&
|
|
rm -rf _build/ &&
|
|
meson . _build ${BUILD_OPTS} -Dprofile=development &&
|
|
ninja -C _build 2>&1 | tee compilation.log
|
|
|
|
.Run Tests: &run_tests
|
|
echo "== Testing ==" &&
|
|
meson test -C _build --verbose --no-stdsplit
|
|
|
|
##
|
|
# Stage: Build
|
|
#
|
|
# Checks if GNOME Control Center is properly building and installing. This is the
|
|
# most important stage of the CI, and no MR should ever be merged if it breaks
|
|
# any of them.
|
|
##
|
|
build:
|
|
<<: *save_untracked_files
|
|
stage: build
|
|
|
|
script:
|
|
- *environment_information
|
|
- *build_procedure
|
|
|
|
- echo "== Installing =="
|
|
- ninja -C _build install
|
|
|
|
- echo "== Report =="
|
|
- build-aux/ci/ci-helper.sh "WARNINGS"
|
|
|
|
# Save all but git-related files
|
|
- rm -rf .git .gitignore .gitmodules
|
|
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
|
|
##
|
|
# Stage: Test
|
|
#
|
|
# Runs the unit tests.
|
|
##
|
|
test:
|
|
<<: *save_build_logs
|
|
stage: test
|
|
|
|
dependencies:
|
|
- build
|
|
|
|
script:
|
|
- *environment_information
|
|
- *run_tests
|
|
|
|
- |
|
|
if [[ -n "${CI_COMMIT_TAG}" ]]; then
|
|
echo "== Distro Test =="
|
|
ninja dist -C _build
|
|
fi
|
|
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
|
|
|
|
# Runs the coverage test.
|
|
coverage:
|
|
<<: *save_build_logs
|
|
stage: test
|
|
variables:
|
|
BUILD_OPTS: "-Db_coverage=true"
|
|
coverage: '/^Lines:.\d+.\d+.(\d+\.\d+\%)/'
|
|
only:
|
|
- master@GNOME/gnome-control-center
|
|
|
|
script:
|
|
- *environment_information
|
|
- *build_procedure
|
|
- *run_tests
|
|
|
|
- ninja -C _build coverage-html
|
|
|
|
# Parse the report to get the coverage result
|
|
- |
|
|
echo == Coverage ==
|
|
sed -e 's/<[^>]*>//g' _build/meson-logs/coveragereport/index.html | tr -d ' \t' | grep -A3 -P '^Lines:$' | tr '\n' ' '; echo
|
|
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
|
|
|
|
# Runs the address sanitizer.
|
|
# - below, at the "sanitizers section"
|
|
|
|
##
|
|
# Stage: Deploy
|
|
#
|
|
# Publishes the Coverage Report generated above
|
|
##
|
|
pages:
|
|
stage: deploy
|
|
dependencies:
|
|
- coverage
|
|
script:
|
|
- mv _build/meson-logs/coveragereport/ public/
|
|
artifacts:
|
|
paths:
|
|
- public
|
|
only:
|
|
- master@GNOME/gnome-control-center
|
|
|
|
except:
|
|
variables:
|
|
- $CRON_TASK == "BUILD_CI_IMAGES"
|
|
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
|
|
|
|
##
|
|
# Stage: Manual
|
|
#
|
|
# Creates a flatpak
|
|
##
|
|
flatpak:
|
|
stage: manual
|
|
image: registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master
|
|
artifacts:
|
|
name: package
|
|
paths:
|
|
- $(pwd)/*.flatpak
|
|
expire_in: 7 days
|
|
|
|
variables:
|
|
OLD_APPID: "org.gnome.Settings"
|
|
APPID: "org.gnome.SettingsDevel"
|
|
BUNDLE: "org.gnome.SettingsDevel.flatpak"
|
|
MANIFEST_PATH: "org.gnome.Settings.json"
|
|
PATCHES: "build-aux/flatpak/*.patch"
|
|
PROJECT_FILE: "build-aux/flatpak/org.gnome.Settings.json"
|
|
PROJECT_ID: "org.gnome.Settings"
|
|
PROJECT_NAME: "gnome-control-center.git"
|
|
RUNTIME_REPO: "https://sdk.gnome.org/gnome-nightly.flatpakrepo"
|
|
|
|
script:
|
|
- echo "== Flatpak packaging =="
|
|
|
|
# Move needed files to the root folder
|
|
- cp ${PATCHES} . || true
|
|
- cp ${PROJECT_FILE} ${MANIFEST_PATH}
|
|
|
|
# Make it a develoment manifest
|
|
- sed -i -n "p; s/$PROJECT_NAME//p" ${MANIFEST_PATH}
|
|
- >
|
|
sed -i "s,\"app-id\" : \"$PROJECT_ID\",\"app-id\" : \"<<ID>>\",g" ${MANIFEST_PATH}
|
|
- >
|
|
sed -i "s,\"url\" : \"https://gitlab.gnome.org/GNOME/$PROJECT_NAME\",\"branch\" : \"<<current>>\"\,,g" ${MANIFEST_PATH}
|
|
- >
|
|
sed -i "s,\"url\" : \"https://gitlab.gnome.org/GNOME/\",\"path\" : \".\",g" ${MANIFEST_PATH}
|
|
|
|
# Adjust the manifest to HEAD
|
|
- sed -i "s,<<ID>>,$APPID,g" ${MANIFEST_PATH}
|
|
- sed -i "s,<<current>>,origin/$CI_COMMIT_REF_NAME,g" ${MANIFEST_PATH}
|
|
|
|
# Update the icon name
|
|
- mv data/icons/hicolor/scalable/apps/$OLD_APPID.svg data/icons/hicolor/scalable/apps/$APPID.svg
|
|
- mv data/icons/hicolor/symbolic/apps/$OLD_APPID-symbolic.svg data/icons/hicolor/symbolic/apps/$APPID-symbolic.svg
|
|
|
|
- flatpak-builder --bundle-sources --repo=devel build ${MANIFEST_PATH}
|
|
- flatpak build-bundle devel ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APPID}
|
|
|
|
cache:
|
|
paths:
|
|
- .flatpak-builder/cache
|
|
when: manual
|
|
except:
|
|
- tags
|
|
- gnome-3-.*
|
|
- master@GNOME/gnome-control-center
|
|
|
|
##
|
|
# Review
|
|
#
|
|
# Stage: review
|
|
#
|
|
# Starts the Flatpak review process.
|
|
##
|
|
review:
|
|
stage: review
|
|
dependencies:
|
|
- flatpak
|
|
|
|
when: manual
|
|
variables:
|
|
BUNDLE: "org.gnome.SettingsDevel.flatpak"
|
|
script:
|
|
- echo "Generating flatpak deployment"
|
|
artifacts:
|
|
paths:
|
|
- ${BUNDLE}
|
|
expire_in: 30 days
|
|
environment:
|
|
name: review/$CI_COMMIT_REF_NAME
|
|
url: https://gitlab.gnome.org/$CI_PROJECT_PATH/-/jobs/$CI_JOB_ID/artifacts/raw/${BUNDLE}
|
|
on_stop: stop_review
|
|
except:
|
|
- tags
|
|
- gnome-3-.*
|
|
- master@GNOME/gnome-control-center
|
|
|
|
##
|
|
# Stop Review
|
|
#
|
|
# Stage: review
|
|
#
|
|
# Stops the Flatpak review process.
|
|
##
|
|
stop_review:
|
|
stage: review
|
|
script:
|
|
- echo "Stopping flatpak deployment"
|
|
when: manual
|
|
environment:
|
|
name: review/$CI_COMMIT_REF_NAME
|
|
action: stop
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
|
|
# Runs the sanitizers [address, thread, undefined, and memory].
|
|
.sanitizer: &sanitizer
|
|
<<: *save_build_logs
|
|
stage: manual
|
|
when: manual
|
|
script:
|
|
- *environment_information
|
|
- *build_procedure
|
|
- *run_tests
|
|
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
|
|
|
|
asan:
|
|
<<: *sanitizer
|
|
stage: test
|
|
when: on_success
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=address"
|
|
LSAN_OPTIONS: "suppressions=${CI_PROJECT_DIR}/build-aux/ci/lsan.supp"
|
|
|
|
tsan:
|
|
<<: *sanitizer
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=thread"
|
|
|
|
ubsan:
|
|
<<: *sanitizer
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=undefined"
|
|
|
|
msan:
|
|
<<: *sanitizer
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=memory"
|
|
CC: "clang"
|
|
|
|
# Runs multiarch build test.
|
|
.qemu: &multiarch
|
|
<<: *save_build_logs
|
|
image: docker:latest
|
|
services:
|
|
- docker:dind
|
|
|
|
script:
|
|
# Register QEMU archs
|
|
- docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
|
|
|
# Run the multiarch test job using QEMU
|
|
- 'docker run -v $(pwd):/cwd $IMAGE bash -e -c "cd /cwd &&
|
|
echo == Building == &&
|
|
rm -rf _build/ &&
|
|
meson . _build ${BUILD_OPTS} &&
|
|
ninja -C _build 2>&1 | tee compilation.log &&
|
|
|
|
echo == Testing == &&
|
|
ninja -C _build test"
|
|
'
|
|
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
|
|
|
|
armv8:
|
|
<<: *multiarch
|
|
stage: manual
|
|
when: manual
|
|
variables:
|
|
DOCKER_DRIVER: overlay
|
|
IMAGE: "registry.gitlab.gnome.org/gnome/gnome-control-center:fedora.aarch64"
|
|
|
|
ppc64le:
|
|
<<: *multiarch
|
|
stage: manual
|
|
when: manual
|
|
allow_failure: true
|
|
variables:
|
|
DOCKER_DRIVER: overlay
|
|
IMAGE: "registry.gitlab.gnome.org/gnome/gnome-control-center:fedora.ppc64le"
|
|
|
|
#############################################
|
|
# Create CI Docker Images #
|
|
#############################################
|
|
.Docker image template: &create_docker_image
|
|
image: docker:latest
|
|
stage: deploy
|
|
services:
|
|
- docker:dind
|
|
only:
|
|
variables:
|
|
- $CRON_TASK == "BUILD_CI_IMAGES"
|
|
changes:
|
|
- build-aux/ci/Dockerfile.*
|
|
|
|
|
|
script:
|
|
# Skip the build (if requested)
|
|
- |
|
|
if [[ -z "${CI_COMMIT_MESSAGE##*'[skip images]'*}" ]]; then
|
|
echo "== Nothing to do =="
|
|
exit 0
|
|
fi
|
|
|
|
- |
|
|
if [[ "${CI_COMMIT_REF_NAME}" != "master" ]]; then
|
|
echo "== Exiting, will only build CI images when pushing to master. =="
|
|
exit 0
|
|
fi
|
|
|
|
# Only when we have somewhere to publish to
|
|
- |
|
|
if [[ -z "${CI_REGISTRY}${CI_REGISTRY_IMAGE}${CI_REGISTRY_USER}${CI_REGISTRY_PASSWORD}" ]]; then
|
|
echo "== Exiting, CI registry not configured. =="
|
|
exit 0
|
|
fi
|
|
|
|
# Get multiarch stuff
|
|
- |
|
|
if [[ -n "${TARGET_ARCH}" ]]; then
|
|
docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
|
wget https://github.com/multiarch/qemu-user-static/releases/download/v2.12.0/x86_64_qemu-${TARGET_ARCH}-static.tar.gz
|
|
fi
|
|
|
|
# Build using the Dockerfile
|
|
- docker build -f "$DOCKERFILE" -t "$CI_REGISTRY_IMAGE:$NAME" .
|
|
|
|
# Publish
|
|
- docker tag "$CI_REGISTRY_IMAGE:$NAME" "$CI_REGISTRY_IMAGE:job-"$CI_JOB_ID"_$NAME"
|
|
- docker images
|
|
- docker login ${CI_REGISTRY} -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
|
|
- docker push "$CI_REGISTRY_IMAGE"
|
|
|
|
fedora.dev:
|
|
<<: *create_docker_image
|
|
variables:
|
|
DOCKER_DRIVER: overlay
|
|
DOCKERFILE: "build-aux/ci/Dockerfile.fedora.30"
|
|
NAME: "fedora.dev"
|
|
|
|
fedora.aarch64:
|
|
<<: *create_docker_image
|
|
variables:
|
|
DOCKER_DRIVER: overlay
|
|
DOCKERFILE: "build-aux/ci/Dockerfile.arm64v8.fedora.30"
|
|
NAME: "fedora.aarch64"
|
|
TARGET_ARCH: "aarch64"
|
|
|
|
fedora.ppc64le:
|
|
<<: *create_docker_image
|
|
variables:
|
|
DOCKER_DRIVER: overlay
|
|
DOCKERFILE: "build-aux/ci/Dockerfile.ppc64le.fedora.latest"
|
|
NAME: "fedora.ppc64le"
|
|
TARGET_ARCH: "ppc64le"
|