1
1
mirror of https://gitlab.gnome.org/GNOME/gimp.git synced 2025-10-06 01:12:40 +02:00

gitlab-ci: Reduce redundancy on Debian native jobs

* Move common things to the new .default section extensible for all jobs
* Reorganize order of job elements to be way more consistent and rational:
  from general (pipeline/rules) to specific (job artifacts) in a liner way
* The order of rules was changed to be a bit more easier to understand
- Drops 'dependencies' which is redudant, and 'needs' have more options
- Drop apt-cache which lost use and it is sometimes troublesome to cache
+ First try to boost the use of ccache in all build jobs, when possible
+ Fix the problem of non-failing jobs introduced by GNOME/gimp!1171
This commit is contained in:
Bruno Lopes
2024-04-11 19:17:57 -03:00
parent 9a353b9db9
commit e96b751e35

View File

@@ -37,6 +37,32 @@ stages:
- distribution
- analysis
# GitLab "default:" is buggy so let's use extensions and references
.default:
# Caching support
variables:
CCACHE_BASEDIR: "$CI_PROJECT_DIR"
CCACHE_DIR: "$CI_PROJECT_DIR/_ccache"
CC: "ccache clang"
CXX: "ccache clang++"
cache:
key: $CI_JOB_NAME
paths:
- _ccache/
# Universal variables (works in all OSes and archs)
before_script:
- export PATH="$GIMP_PREFIX/bin:$PATH"
- gcc -print-multi-os-directory | grep . && LIB_DIR=$(gcc -print-multi-os-directory | sed 's/\.\.\///g') || LIB_DIR="lib"
- gcc -print-multiarch | grep . && LIB_SUBDIR=$(echo $(gcc -print-multiarch)'/')
- export PKG_CONFIG_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
- export LD_LIBRARY_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
- export XDG_DATA_DIRS="${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"
- export GI_TYPELIB_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
# Common artifacts behavior
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
when: always
variables:
GIT_DEPTH: "1"
ARTIFACTS_SUFFIX: "-x64"
@@ -47,11 +73,6 @@ variables:
image-debian-x64:
rules:
# On commits and merge requests.
- if: '$CI_PIPELINE_SOURCE == "push"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# On releases.
- if: '$CI_COMMIT_TAG != null'
# Custom builds though web GUI, API or schedules.
- if: '$GIMP_CI_MESON_CLANG != null'
- if: '$GIMP_CI_MESON_GCC != null'
@@ -60,13 +81,18 @@ image-debian-x64:
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
- if: '$GIMP_CI_SOURCES != null'
- if: '$GIMP_CI_FLATPAK != null'
# On merge requests and commits.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "push"'
# On releases.
- if: '$CI_COMMIT_TAG != null'
stage: prepare
variables:
GIT_STRATEGY: none
cache: {}
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
variables:
GIT_STRATEGY: none
cache: {}
script:
- export container=docker
- mkdir -p /kaniko/.docker
@@ -81,6 +107,8 @@ image-debian-x64:
- echo "appstream
at-spi2-core
build-essential
ccache
clang
cpio
desktop-file-utils
ffmpeg
@@ -154,37 +182,11 @@ image-debian-x64:
## GNU/Linux 64-bit CIs (Debian bookworm) ##
deps-debian-x64:
rules:
# On commits and merge requests.
- if: '$CI_PIPELINE_SOURCE == "push"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# On releases.
- if: '$CI_COMMIT_TAG != null'
# Custom builds though web GUI, API or schedules.
- if: '$GIMP_CI_MESON_CLANG != null'
- if: '$GIMP_CI_MESON_GCC != null'
- if: '$GIMP_CI_RASTER_ICONS != null'
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
- if: '$GIMP_CI_SOURCES != null'
- if: '$GIMP_CI_FLATPAK != null'
variables:
CC: "clang"
CXX: "clang++"
.deps-debian-base:
extends: .default
needs: ["image-debian-x64"]
stage: dependencies
image: $CI_REGISTRY_IMAGE:build-debian-latest
cache:
paths:
- apt-cache
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
expire_in: 2 hours
when: always
paths:
- "_install${ARTIFACTS_SUFFIX}"
- _babl/_build${ARTIFACTS_SUFFIX}
- _gegl/_build${ARTIFACTS_SUFFIX}
before_script:
- if [ "$CI_COMMIT_TAG" != "" ]; then
repo=https://gitlab.gnome.org/GNOME/babl.git;
@@ -201,78 +203,92 @@ deps-debian-x64:
fi
- git clone $babl_branch --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/babl.git _babl
- git clone $gegl_branch --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/gegl.git _gegl
- export PATH="$GIMP_PREFIX/bin:$PATH"
- gcc -print-multi-os-directory | grep . && LIB_DIR=$(gcc -print-multi-os-directory | sed 's/\.\.\///g') || LIB_DIR="lib"
- gcc -print-multiarch | grep . && LIB_SUBDIR=$(echo $(gcc -print-multiarch)'/')
- export PKG_CONFIG_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
- export LD_LIBRARY_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
- export XDG_DATA_DIRS="${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"
- export GI_TYPELIB_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
# Universal variables
- !reference [.default, before_script]
- mkdir -p _ccache/
script:
- mkdir -p "$APT_CACHE"
- apt-get install -y --no-install-recommends -o dir::cache::archives="$APT_CACHE"
clang
- mkdir _babl/_build${ARTIFACTS_SUFFIX} && cd _babl/_build${ARTIFACTS_SUFFIX}
- meson setup .. -Dprefix="${GIMP_PREFIX}"
- ninja && ninja install
- ninja
- ninja install
- ccache --show-stats
- mkdir ../../_gegl/_build${ARTIFACTS_SUFFIX} && cd ../../_gegl/_build${ARTIFACTS_SUFFIX}
- meson setup .. -Dprefix="${GIMP_PREFIX}"
- ninja && ninja install
needs: ["image-debian-x64"]
.gimp-debian-base:
stage: gimp
image: $CI_REGISTRY_IMAGE:build-debian-latest
dependencies:
- deps-debian-x64
cache:
paths:
- apt-cache
- ninja
- ninja install
- ccache --show-stats
artifacts:
expire_in: 1 days
when: always
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
expire_in: 2 hours
paths:
- "_build${ARTIFACTS_SUFFIX}"
- "_install${ARTIFACTS_SUFFIX}"
before_script:
- export PATH="$GIMP_PREFIX/bin:$PATH"
- gcc -print-multi-os-directory | grep . && LIB_DIR=$(gcc -print-multi-os-directory | sed 's/\.\.\///g') || LIB_DIR="lib"
- gcc -print-multiarch | grep . && LIB_SUBDIR=$(echo $(gcc -print-multiarch)'/')
- export PKG_CONFIG_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
- export LD_LIBRARY_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
- export XDG_DATA_DIRS="${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"
- export GI_TYPELIB_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
- git submodule update --init
needs: ["deps-debian-x64"]
- _install${ARTIFACTS_SUFFIX}
- _babl/_build${ARTIFACTS_SUFFIX}
- _gegl/_build${ARTIFACTS_SUFFIX}
gimp-debian-x64:
deps-debian-x64:
extends: .deps-debian-base
rules:
# On commits and merge requests.
- if: '$CI_PIPELINE_SOURCE == "push"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# Custom builds though web GUI, API or schedules.
- if: '$GIMP_CI_MESON_CLANG != null'
- if: '$GIMP_CI_RASTER_ICONS != null'
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
- if: '$GIMP_CI_SOURCES != null'
- if: '$GIMP_CI_FLATPAK != null'
# On merge requests and commits.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "push"'
# On releases.
- if: '$CI_COMMIT_TAG != null'
# GitLab "rules:variables:" is buggy so let's use jobs
deps-debian-gcc:
extends: .deps-debian-base
rules:
# Custom builds though web GUI, API or schedules.
- if: '$GIMP_CI_MESON_GCC != null'
variables:
CC: "ccache gcc"
CXX: "ccache gcc"
.gimp-debian-base:
extends: .default
needs: ["deps-debian-x64"]
stage: gimp
image: $CI_REGISTRY_IMAGE:build-debian-latest
before_script:
# Universal variables
- !reference [.default, before_script]
- mkdir -p _ccache/
- git submodule update --init
- mkdir -p _build${ARTIFACTS_SUFFIX} && cd _build${ARTIFACTS_SUFFIX}
after_script:
- ccache --show-stats
artifacts:
expire_in: 1 days
paths:
- "_install${ARTIFACTS_SUFFIX}"
- "_build${ARTIFACTS_SUFFIX}"
gimp-debian-x64:
extends: .gimp-debian-base
rules:
# Custom builds though web GUI, API or schedules.
- if: '$GIMP_CI_MESON_CLANG != null'
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
- if: '$GIMP_CI_SOURCES != null'
extends: .gimp-debian-base
variables:
CC: "clang"
CXX: "clang++"
- if: '$GIMP_CI_FLATPAK != null'
# On merge requests and commits.
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "push"'
# On releases.
- if: '$CI_COMMIT_TAG != null'
script:
- mkdir -p "$APT_CACHE"
- apt-get install -y --no-install-recommends -o dir::cache::archives="$APT_CACHE"
clang
- mkdir -p "_build${ARTIFACTS_SUFFIX}" && cd "_build${ARTIFACTS_SUFFIX}"
- meson setup .. -Dprefix="${GIMP_PREFIX}"
-Dgi-docgen=enabled
-Dg-ir-doc=true
- ninja && ninja test
- ninja
- ninja test
# The src should not be changed by the build. If it is, something is
# wrong. Let's print out the diff for debugging in such case, and
# exit to fail the CI.
@@ -280,40 +296,43 @@ gimp-debian-x64:
git diff;
exit 1;
fi
- ninja dist && ninja install
- ninja dist
- ninja install
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
when: always
paths:
- _install${ARTIFACTS_SUFFIX}/
- _build${ARTIFACTS_SUFFIX}/config.h
- _build${ARTIFACTS_SUFFIX}/meson-dist/
- _build${ARTIFACTS_SUFFIX}/devel-docs/
- _build${ARTIFACTS_SUFFIX}/build/flatpak/
- _build${ARTIFACTS_SUFFIX}/meson-logs/
reports:
junit: "_build${ARTIFACTS_SUFFIX}/meson-logs/testlog.junit.xml"
paths:
- "_build${ARTIFACTS_SUFFIX}/config.h"
- "_build${ARTIFACTS_SUFFIX}/meson-logs"
- "_build${ARTIFACTS_SUFFIX}/meson-dist"
- "_build${ARTIFACTS_SUFFIX}/devel-docs"
- "_build${ARTIFACTS_SUFFIX}/build/flatpak/"
- "_install${ARTIFACTS_SUFFIX}"
gimp-debian-gcc:
extends: .gimp-debian-base
rules:
# Custom builds only (web GUI, API or schedules).
- if: '$GIMP_CI_MESON_GCC != null'
extends: .gimp-debian-base
needs: ["deps-debian-gcc"]
variables:
CC: "ccache gcc"
CXX: "ccache gcc"
script:
- mkdir -p _build${ARTIFACTS_SUFFIX} && cd _build${ARTIFACTS_SUFFIX}
- meson setup .. -Dprefix="${GIMP_PREFIX}"
- ninja && ninja test
- ninja
- ninja test
gimp-debian-raster-icons:
extends: .gimp-debian-base
rules:
# Custom builds only (web GUI, API or schedules).
- if: '$GIMP_CI_RASTER_ICONS != null'
extends: .gimp-debian-base
script:
- mkdir -p _build${ARTIFACTS_SUFFIX} && cd _build${ARTIFACTS_SUFFIX}
- meson setup .. -Dprefix="${GIMP_PREFIX}"
-Dvector-icons=false
- ninja && ninja test
- ninja
- ninja test
packaging-flatpak-x64:
# See: https://gitlab.gnome.org/GNOME/Initiatives/-/wikis/DevOps-with-Flatpak
@@ -639,6 +658,7 @@ packaging-win-x86-nightly:
## WINDOWS Aarch64 CI (native MSYS2) ##
.win:
extends: .default
rules:
# On releases.
- if: '$CI_COMMIT_TAG != null'
@@ -649,17 +669,8 @@ packaging-win-x86-nightly:
variables:
BUILD_TYPE: "CI_NATIVE"
CHERE_INVOKING: "yes"
CCACHE_BASEDIR: "$CI_PROJECT_DIR"
CCACHE_DIR: "$CI_PROJECT_DIR/_ccache"
cache:
key: $CI_JOB_NAME
paths:
- _ccache/
before_script:
- New-Item -Path .\_ccache -ItemType Directory -Force
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
when: always
.win-a64:
extends: .win
@@ -809,6 +820,8 @@ packaging-win-x64:
- win32-ps
variables:
MSYSTEM: "MINGW32"
CC: "ccache cc"
CXX: "ccache c++"
deps-win-x86:
extends: .win-x86
@@ -923,8 +936,6 @@ dist-installer-weekly:
- packaging-win-x64
- packaging-win-x86
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
when: always
expire_in: 1 week
expose_as: 'Windows exe'
paths: