Too much RUN calls are not efficient. First, VFS uses a lot of IO at each RUN; second, each RUN is cached as layer (we had more than one hundred layer tags!). (Not that this does not apply to Dockerfile2 which uses no layers.)
1051 lines
42 KiB
YAML
1051 lines
42 KiB
YAML
spec:
|
|
inputs:
|
|
distribution_pipeline:
|
|
description: 'Pipelines that creates installable GIMP'
|
|
options:
|
|
- GIMP_CI_APPIMAGE #trigger the appimage making (base & fast).
|
|
- GIMP_CI_FLATPAK #trigger the flatpak build and publishing (base but slow)
|
|
- GIMP_CI_SNAP #trigger the snap build (base but slow)
|
|
- GIMP_CI_WIN_INSTALLER #trigger all native MSYS2 builds then creates Inno Windows installer (base but slow)
|
|
- GIMP_CI_MS_STORE #trigger arm64 and x64 native MSYS2 builds then creates a .msixbundle (base but slow)
|
|
- GIMP_CI_MACOS #trigger arm64 native macOS build then create a .dmg installer (base but slow)
|
|
- none
|
|
default: 'none'
|
|
test_pipeline:
|
|
description: 'Pipelines used only for testing'
|
|
options:
|
|
- GIMP_CI_MESON_CLANG #trigger the Debian Clang build (rare usefulness)
|
|
- GIMP_CI_MESON_MSVC #trigger the Windows Clang-CL/MSVC build (rare usefulness)
|
|
- GIMP_CI_MESON_APPLECLANG #trigger the Apple Clang build with Homebrew packages (rare usefulness)
|
|
- GIMP_CI_RASTER_ICONS #trigger the Debian Clang build without vector icons (rare usefulness)
|
|
- GIMP_CI_CPPCHECK #trigger cppcheck (static code analysis)
|
|
- none
|
|
default: 'none'
|
|
---
|
|
|
|
workflow:
|
|
auto_cancel:
|
|
on_new_commit: interruptible
|
|
|
|
|
|
##################################################
|
|
# There are five "TYPES" of pipelines on our CI: #
|
|
##################################################
|
|
|
|
## 1. On MERGE REQUESTS, the following are triggered:
|
|
## - Abbreviated Linux build
|
|
## - Building quality tests (static code analysis)
|
|
## - clang-format (static code analysis)
|
|
## - Execution tests (dynamic code analysis)
|
|
.pipeline_merge: &CI_MERGE
|
|
if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
interruptible: true
|
|
variables: {}
|
|
|
|
## 2. LABELED MERGE REQUESTS (search for $CI_MERGE_REQUEST_LABELS =~ /.*Package).
|
|
#'interruptible: true' needs to be hardcoded on job rules
|
|
# GitLab is quite sensitive about rules 'if' order so be careful
|
|
|
|
## 3. On COMMITS except tags.
|
|
## - Linux build
|
|
## - Building quality tests (static code analysis)
|
|
## - Execution tests (dynamic code analysis)
|
|
## - Source tarball
|
|
## - Developer documentation
|
|
.pipeline_commit: &CI_COMMIT
|
|
if: '$CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS == null && $CI_COMMIT_TAG == null'
|
|
interruptible: true
|
|
variables: {}
|
|
|
|
## 4. RELEASES.
|
|
## - Source tarball
|
|
## - Developer documentation
|
|
## - Linux .appimage
|
|
## - Inno Windows installer
|
|
## - MS Store .msixupload
|
|
.pipeline_release: &CI_RELEASE
|
|
if: '$CI_COMMIT_TAG != null'
|
|
interruptible: false
|
|
variables: {}
|
|
|
|
.default:
|
|
## 5. On CUSTOM builds though web GUI, API or schedules.
|
|
## Scheduled CI ($CI_PIPELINE_SOURCE == "schedule") will run regularly all
|
|
## the 'distribution_pipeline' and 'test_pipeline' above. To run them without
|
|
## waiting for schedules: https://gitlab.gnome.org/GNOME/gimp/-/pipelines/new
|
|
interruptible: false
|
|
|
|
|
|
# Common jobs behavior
|
|
retry:
|
|
max: 1
|
|
when:
|
|
- 'scheduler_failure'
|
|
needs: []
|
|
# Default Docker image (keep variables: DEB_VERSION: consistent with devel-docs/os-support.txt)
|
|
image: $CI_REGISTRY_IMAGE:build-debian-${DEB_VERSION}-${RUNNER}
|
|
variables:
|
|
DEB_VERSION: "bookworm"
|
|
UMFPACK: libumfpack5
|
|
RUNNER: "x86_64_v3"
|
|
# Common cloning procedure
|
|
GIT_DEPTH: "1"
|
|
GIT_SUBMODULE_STRATEGY: none
|
|
# Enable colorful output when supported (e.g. ninja, cppcheck)
|
|
CLICOLOR_FORCE: "1"
|
|
# Disable timestamps on CI logs
|
|
FF_TIMESTAMPS: false
|
|
# Common artifacts behavior
|
|
artifacts:
|
|
name: "${CI_JOB_NAME_SLUG}${VARIANT}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
|
|
when: always
|
|
|
|
|
|
stages:
|
|
- dependencies
|
|
- build
|
|
- analysis
|
|
- distribution
|
|
|
|
|
|
## Common GNU/Linux 64-bit CI (Debian) ##
|
|
.debian-nonreloc:
|
|
extends: .default
|
|
rules:
|
|
- <<: *CI_MERGE
|
|
- <<: *CI_COMMIT
|
|
variables: {}
|
|
- if: '$GIMP_CI_MESON_CLANG != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_MESON_CLANG.*/'
|
|
variables:
|
|
CC: clang
|
|
CXX: clang++
|
|
CC_LD: lld
|
|
CXX_LD: lld
|
|
TOOLCHAIN: "clang lld"
|
|
VARIANT: -clang
|
|
- if: '$GIMP_CI_RASTER_ICONS != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_RASTER_ICONS.*/'
|
|
variables:
|
|
MESON_OPTIONS: "-Dvector-icons=false"
|
|
VARIANT: "-raster"
|
|
- <<: *CI_RELEASE
|
|
before_script:
|
|
- export GIMP_PREFIX="${CI_PROJECT_DIR}/_install-${RUNNER}"
|
|
timeout: 30m
|
|
|
|
.debian_environ: &ENVIRON
|
|
# See: https://testing.developer.gimp.org/core/setup/build/#preparing-for-building
|
|
- printf "\e[0Ksection_start:`date +%s`:environ[collapsed=true]\r\e[0KPreparing build environment\n"
|
|
- gcc -print-multi-os-directory 2>/dev/null | grep -q ./ && export LIB_DIR=$(gcc -print-multi-os-directory | sed 's/\.\.\///g') || export LIB_DIR="lib"
|
|
- gcc -print-multiarch 2>/dev/null | grep -q . && export LIB_SUBDIR=$(echo $(gcc -print-multiarch)'/') || export LIB_SUBDIR=
|
|
## Build-time vars
|
|
- export PKG_CONFIG_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
|
|
- export XDG_DATA_DIRS="${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"
|
|
## Runtime vars
|
|
- export PATH="${GIMP_PREFIX}/bin:$PATH"
|
|
- export LD_LIBRARY_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
|
- export GI_TYPELIB_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
|
|
- printf "\e[0Ksection_end:`date +%s`:environ\r\e[0K\n"
|
|
|
|
deps-debian-nonreloc:
|
|
extends: .debian-nonreloc
|
|
stage: dependencies
|
|
image: quay.io/buildah/stable
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
script:
|
|
- export BUILDAH_FORMAT=docker
|
|
- export STORAGE_DRIVER=vfs
|
|
- echo "$CI_REGISTRY_PASSWORD" | buildah login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
|
|
# Install deps
|
|
- echo "FROM debian:${DEB_VERSION}" > Dockerfile
|
|
- echo "WORKDIR $CI_PROJECT_DIR" >> Dockerfile
|
|
## 'ca-certificates' is NOT a gimp dep, it is installed only to our Docker image work
|
|
- echo "RUN apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates \\" >> Dockerfile
|
|
## Build-time only dependencies
|
|
- echo "${TOOLCHAIN:-build-essential}
|
|
appstream
|
|
bison
|
|
desktop-file-utils
|
|
flex
|
|
gi-docgen
|
|
git
|
|
gobject-introspection
|
|
libgtk-3-bin
|
|
meson
|
|
valac
|
|
xsltproc \\" >> Dockerfile
|
|
## Runtime dependencies
|
|
- echo "at-spi2-core
|
|
ffmpeg
|
|
gettext
|
|
gjs
|
|
glib-networking
|
|
graphviz
|
|
graphviz-dev
|
|
gvfs
|
|
iso-codes
|
|
libaa1-dev
|
|
libappstream-dev
|
|
libarchive-dev
|
|
libasound2-dev
|
|
libbz2-dev
|
|
libcfitsio-dev
|
|
libgexiv2-dev
|
|
libgirepository1.0-dev
|
|
libgs10
|
|
libgs-dev
|
|
libgtk-3-dev
|
|
libgudev-1.0-dev
|
|
libheif-dev
|
|
$LIBHEIF_PLUGINS
|
|
libjson-glib-dev
|
|
libjxl-dev
|
|
liblcms2-dev
|
|
liblzma-dev
|
|
libmaxflow-dev
|
|
libmng-dev
|
|
libmypaint-dev
|
|
libomp-dev
|
|
libopenexr-dev
|
|
libopenjp2-7-dev
|
|
libpoppler-glib-dev
|
|
libqoi-dev
|
|
librsvg2-dev
|
|
libsuitesparse-dev
|
|
libtiff-dev
|
|
$UMFPACK
|
|
libunwind-dev
|
|
libwebp-dev
|
|
libwmf-dev
|
|
libxmu-dev
|
|
libxpm-dev
|
|
locales
|
|
mypaint-brushes
|
|
poppler-data
|
|
python3
|
|
python3-gi
|
|
python3-gi-cairo" >> Dockerfile
|
|
- echo "RUN echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && locale-gen" >> Dockerfile
|
|
# Prepare environ
|
|
- echo "FROM $CI_REGISTRY_IMAGE:build-debian-${DEB_VERSION}-${RUNNER}" > Dockerfile2;
|
|
- echo "RUN printf \"\e[0Ksection_start:\`date +%s\`:environ[collapsed=true]\r\e[0KPreparing build environment\n\"" >> Dockerfile2;
|
|
- echo "ENV PKG_CONFIG_PATH=\"${GIMP_PREFIX}/lib/$([ "$(uname -m)" = 'aarch64' ] && echo "aarch64-linux-gnu/" || echo "x86_64-linux-gnu/")pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}\"" >> Dockerfile2;
|
|
- echo "ENV XDG_DATA_DIRS=\"${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}\"" >> Dockerfile2;
|
|
- if [ "$VARIANT" = "-clang" ]; then
|
|
echo "ENV CC=\"$CC\"" >> Dockerfile2;
|
|
echo "ENV CXX=\"$CXX\"" >> Dockerfile2;
|
|
echo "ENV CC_LD=\"$CC_LD\"" >> Dockerfile2;
|
|
echo "ENV CXX_LD=\"$CXX_LD\"" >> Dockerfile2;
|
|
fi
|
|
- echo "ENV CLICOLOR_FORCE=\"1\"" >> Dockerfile2;
|
|
- echo "RUN printf \"\e[0Ksection_end:\`date +%s\`:environ\r\e[0K\n\"" >> Dockerfile2;
|
|
# Build some dependencies
|
|
## Build babl
|
|
- echo "RUN printf \"\e[0Ksection_start:\`date +%s\`:babl_build[collapsed=true]\r\e[0KBuilding babl\n\"" >> Dockerfile2;
|
|
- echo "RUN git clone --branch \"\$([ \"$CI_COMMIT_TAG\" ] && echo \"\$(git ls-remote --tags --exit-code --refs https://gitlab.gnome.org/GNOME/babl.git | grep -oi \"BABL_[0-9]*_[0-9]*_[0-9]*\" | sort --version-sort | tail -1)\" || echo \"master\")\" --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/babl.git" babl >> Dockerfile2;
|
|
- echo "RUN meson setup babl/_build-${RUNNER} babl -Dprefix=\"${GIMP_PREFIX}\" $RELOCATABLE_OPTION $PKGCONF_RELOCATABLE_OPTION" >> Dockerfile2;
|
|
- echo "RUN ninja -C babl/_build-${RUNNER}" >> Dockerfile2;
|
|
- echo "RUN ninja -C babl/_build-${RUNNER} install" >> Dockerfile2;
|
|
- echo "RUN printf \"\e[0Ksection_end:\`date +%s\`:babl_build\r\e[0K\n\"" >> Dockerfile2;
|
|
## Build GEGL
|
|
- echo "RUN printf \"\e[0Ksection_start:\`date +%s\`:gegl_build[collapsed=true]\r\e[0KBuilding gegl\n\"" >> Dockerfile2;
|
|
- echo "RUN git clone --branch \"\$([ \"$CI_COMMIT_TAG\" ] && echo \"\$(git ls-remote --tags --exit-code --refs https://gitlab.gnome.org/GNOME/gegl.git | grep -oi \"GEGL_[0-9]*_[0-9]*_[0-9]*\" | sort --version-sort | tail -1)\" || echo \"master\")\" --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/gegl.git" gegl >> Dockerfile2;
|
|
- echo "RUN meson setup gegl/_build-${RUNNER} gegl -Dprefix=\"${GIMP_PREFIX}\" $RELOCATABLE_OPTION $PKGCONF_RELOCATABLE_OPTION" >> Dockerfile2;
|
|
- echo "RUN ninja -C gegl/_build-${RUNNER}" >> Dockerfile2;
|
|
- echo "RUN ninja -C gegl/_build-${RUNNER} install" >> Dockerfile2;
|
|
- echo "RUN printf \"\e[0Ksection_end:\`date +%s\`:gegl_build\r\e[0K\n\"" >> Dockerfile2;
|
|
#FIXME: '2>&1 | grep -v STEP' since buildah is too verbose. See: https://github.com/containers/buildah/issues/6362
|
|
- printf "\e[0Ksection_start:`date +%s`:deps_install[collapsed=true]\r\e[0KInstalling dependencies provided by Debian $DEB_VERSION\n"
|
|
- buildah build --log-level error --volume $CI_PROJECT_DIR:$CI_PROJECT_DIR:Z --file $CI_PROJECT_DIR/Dockerfile --tag $CI_REGISTRY_IMAGE:build-debian-${DEB_VERSION}-${RUNNER} --layers --cache-from $CI_REGISTRY_IMAGE/cache --cache-to $CI_REGISTRY_IMAGE/cache --cache-ttl=120h 2>&1 | grep -v STEP && buildah push --log-level error --compression-format zstd --compression-level 3 --force-compression $CI_REGISTRY_IMAGE:build-debian-${DEB_VERSION}-${RUNNER} 2>&1 | grep -v STEP
|
|
- printf "\e[0Ksection_end:`date +%s`:deps_install\r\e[0K\n"
|
|
- buildah build --log-level error --volume $CI_PROJECT_DIR:$CI_PROJECT_DIR:Z --file $CI_PROJECT_DIR/Dockerfile2 --no-cache 2>&1 | grep -v STEP
|
|
artifacts:
|
|
paths:
|
|
- _install-${RUNNER}/
|
|
- babl/_build-${RUNNER}/meson-logs/meson-log.txt
|
|
- babl/_build-${RUNNER}/config.h
|
|
- gegl/_build-${RUNNER}/meson-logs/meson-log.txt
|
|
- gegl/_build-${RUNNER}/config.h
|
|
expire_in: 2 hours
|
|
|
|
gimp-debian-nonreloc:
|
|
extends: .debian-nonreloc
|
|
needs: ["deps-debian-nonreloc"]
|
|
stage: build
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- *ENVIRON
|
|
# Check building
|
|
- printf "\e[0Ksection_start:`date +%s`:gimp_build[collapsed=true]\r\e[0KBuilding GIMP\n"
|
|
- meson setup _build-${RUNNER} -Dprefix="${GIMP_PREFIX}"
|
|
-Dfile-plug-ins-test=true
|
|
$MESON_OPTIONS
|
|
- cd _build-${RUNNER}
|
|
- ninja
|
|
- printf "\e[0Ksection_end:`date +%s`:gimp_build\r\e[0K\n"
|
|
# Check execution
|
|
- printf "\e[0Ksection_start:`date +%s`:gimp_test[collapsed=true]\r\e[0KTesting GIMP execution\n"
|
|
- ninja test
|
|
- printf "\e[0Ksection_end:`date +%s`:gimp_test\r\e[0K\n"
|
|
# Check source
|
|
- printf "\e[0Ksection_start:`date +%s`:gimp_tar[collapsed=true]\r\e[0KChecking GIMP source\n"
|
|
- if [ $(git diff |wc -l) -ne 0 ]; then
|
|
printf "ERROR. A generated file was updated without the source:\n";
|
|
git diff;
|
|
exit 1;
|
|
fi
|
|
- if [ "$VARIANT" != "-clang" ] && [ "$VARIANT" != "-raster" ] && [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then
|
|
ninja dist > ninja_dist.log 2>&1 || { cat ninja_dist.log; exit 1; };
|
|
fi
|
|
- printf "\e[0Ksection_end:`date +%s`:gimp_tar\r\e[0K\n"
|
|
# Check install
|
|
- printf "\e[0Ksection_start:`date +%s`:gimp_install[collapsed=true]\r\e[0KChecking non-relocatable GIMP installation\n"
|
|
- ninja install > ninja_install.log 2>&1 || { cat ninja_install.log; exit 1; };
|
|
- printf "\e[0Ksection_end:`date +%s`:gimp_install\r\e[0K\n"
|
|
artifacts:
|
|
paths:
|
|
- _install-${RUNNER}/
|
|
- _build-${RUNNER}/meson-logs/meson-log.txt
|
|
- _build-${RUNNER}/meson-dist/
|
|
- _build-${RUNNER}/config.h
|
|
reports:
|
|
junit: "_build-${RUNNER}/meson-logs/testlog.junit.xml"
|
|
expire_in: 2 days
|
|
|
|
|
|
## AppImage CI (Debian) ##
|
|
.debian:
|
|
extends: .debian-nonreloc
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:AppImage.*/ || $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:AppImage.*/'
|
|
interruptible: true
|
|
- if: '$GIMP_CI_APPIMAGE != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_APPIMAGE.*/'
|
|
- <<: *CI_RELEASE
|
|
parallel:
|
|
matrix:
|
|
- RUNNER: [aarch64, x86_64_v3]
|
|
tags:
|
|
- $RUNNER
|
|
variables:
|
|
#FIXME: remove this variables: key and go back to relying on .default DEB_VERSION on GIMP 3.3/3.4
|
|
DEB_VERSION: "trixie"
|
|
UMFPACK: libumfpack6
|
|
LIBHEIF_PLUGINS: "libheif-plugin-dav1d libheif-plugin-aomenc libheif-plugin-libde265 libheif-plugin-x265 libheif-plugin-j2kdec libheif-plugin-j2kenc"
|
|
|
|
deps-debian:
|
|
extends: .debian
|
|
stage: !reference [deps-debian-nonreloc, stage]
|
|
image: !reference [deps-debian-nonreloc, image]
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
RELOCATABLE_OPTION: '-Drelocatable=enabled'
|
|
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
|
|
script:
|
|
- !reference [deps-debian-nonreloc, script]
|
|
artifacts: !reference [deps-debian-nonreloc, artifacts]
|
|
|
|
gimp-debian:
|
|
extends: .debian
|
|
needs: ["deps-debian"]
|
|
stage: !reference [gimp-debian-nonreloc, stage]
|
|
variables:
|
|
#FIXME: remove this variables: key and go back to relying on gimp-debian-nonreloc variables: on GIMP 3.3/3.4
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- *ENVIRON
|
|
# Build GIMP
|
|
- printf "\e[0Ksection_start:`date +%s`:gimp_build[collapsed=true]\r\e[0KBuilding GIMP\n"
|
|
- meson setup _build-${RUNNER} -Dprefix="${GIMP_PREFIX}"
|
|
-Drelocatable-bundle=yes
|
|
-Dpkgconfig.relocatable=true
|
|
-Dgi-docgen=disabled
|
|
-Dcheck-update=yes
|
|
-Dbuild-id=org.gimp.GIMP_official.AppImage.$(uname -m)
|
|
- cd _build-${RUNNER}
|
|
- ninja
|
|
- printf "\e[0Ksection_end:`date +%s`:gimp_build\r\e[0K\n"
|
|
# Create bundle
|
|
- printf "\e[0Ksection_start:`date +%s`:gimp_bundle[collapsed=true]\r\e[0KCreating AppDir bundle\n"
|
|
- ninja install > ninja_install.log 2>&1 || { cat ninja_install.log; exit 1; }
|
|
- cd ..
|
|
- sh build/linux/appimage/3_dist-gimp-goappimage.sh --bundle-only > goappimage.log 2>&1 || { cat goappimage.log; exit 1; }
|
|
- printf "\e[0Ksection_end:`date +%s`:gimp_bundle\r\e[0K\n"
|
|
artifacts:
|
|
paths:
|
|
- AppDir*/
|
|
- appimageignore*
|
|
- _build-${RUNNER}/meson-logs/meson-log.txt
|
|
- _build-${RUNNER}/config.h
|
|
expire_in: 2 days
|
|
|
|
|
|
## Flatpak CI (Fedora) ##
|
|
.flatpak:
|
|
extends: .default
|
|
#We need to specify this since .flatpak from flatpak_ci_initiative.yml sets to true
|
|
interruptible: false
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:Flatpak.*/ || $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Flatpak.*/'
|
|
interruptible: true
|
|
- if: '$GIMP_CI_FLATPAK != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_FLATPAK.*/'
|
|
parallel:
|
|
matrix:
|
|
- RUNNER: [flatpak-aarch64, flatpak-x86_64]
|
|
tags:
|
|
- $RUNNER
|
|
image: quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master
|
|
variables:
|
|
RUN_TESTS: 0
|
|
MESON_DIST: 0
|
|
before_script:
|
|
- export GIMP_PREFIX="${CI_PROJECT_DIR}/_install"
|
|
#30min is enough only if no module was updated/rebuilt, we need more time in case of module bumps
|
|
timeout: 90m
|
|
|
|
deps-flatpak:
|
|
extends: .flatpak
|
|
stage: dependencies
|
|
script:
|
|
- sh build/linux/flatpak/1_build-deps-flatpakbuilder.sh
|
|
artifacts:
|
|
paths:
|
|
- _build-$RUNNER
|
|
- flatpak-builder.log
|
|
- babl-meson-log.txt
|
|
- gegl-meson-log.txt
|
|
expire_in: 2 hours
|
|
|
|
gimp-flatpak:
|
|
extends: .flatpak
|
|
needs: ["deps-flatpak"]
|
|
stage: build
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- sh build/linux/flatpak/2_build-gimp-flatpakbuilder.sh
|
|
artifacts:
|
|
paths:
|
|
- temp*.flatpak
|
|
- repo*.tar
|
|
- gimp-flatpak-builder.log
|
|
- gimp-meson-log.txt
|
|
expire_in: 2 days
|
|
|
|
|
|
## Snap CI (Ubuntu) ##
|
|
.snap:
|
|
extends: .default
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:Snap.*/ || $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Snap.*/'
|
|
interruptible: true
|
|
- if: '$GIMP_CI_SNAP != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_SNAP.*/'
|
|
- <<: *CI_RELEASE
|
|
parallel:
|
|
matrix:
|
|
- RUNNER: [aarch64, x86_64_v3]
|
|
tags:
|
|
- $RUNNER
|
|
image: $CI_REGISTRY_IMAGE:build-snap-${SNAPCRAFT_BASE_VERSION}-${RUNNER}
|
|
variables:
|
|
SNAPCRAFT_BASE_VERSION: "8_core24"
|
|
RUNNER: x86_64_v3
|
|
timeout: 30m
|
|
|
|
deps-snap:
|
|
extends: .snap
|
|
stage: dependencies
|
|
image: quay.io/buildah/stable
|
|
script:
|
|
- export BUILDAH_FORMAT=docker
|
|
- export STORAGE_DRIVER=vfs
|
|
- echo "$CI_REGISTRY_PASSWORD" | buildah login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
|
|
# Install deps
|
|
- echo "FROM ghcr.io/canonical/snapcraft:${SNAPCRAFT_BASE_VERSION}" > Dockerfile
|
|
- echo "ENTRYPOINT [\"\"]" >> Dockerfile
|
|
- echo "WORKDIR $CI_PROJECT_DIR" >> Dockerfile
|
|
- echo "ENV GITLAB_CI=1" >> Dockerfile
|
|
- echo "ENV RUNNER=$RUNNER" >> Dockerfile
|
|
- echo "RUN apt-get update -y && apt-get install -y curl jq squashfs-tools sudo git locales" >> Dockerfile
|
|
- echo "RUN echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && locale-gen" >> Dockerfile
|
|
#FIXME: https://github.com/canonical/snapcraft-rocks/issues/37 and https://github.com/canonical/snapcraft-rocks/issues/33
|
|
- echo "RUN cp -r /usr/lib/python3.*/site-packages/extensions/* /usr/share/snapcraft/extensions/ && ln -s /usr/libexec/snapcraft/craftctl /usr/bin/craftctl" >> Dockerfile
|
|
- echo "RUN sh build/linux/snap/1_build-deps-snapcraft.sh --install-snaps" >> Dockerfile;
|
|
# Build babl and GEGL
|
|
- echo "FROM $CI_REGISTRY_IMAGE:build-snap-${SNAPCRAFT_BASE_VERSION}-${RUNNER}" > Dockerfile2;
|
|
- if [ "$CI_COMMIT_TAG" ]; then
|
|
echo "ENV CI_COMMIT_TAG=\"$CI_COMMIT_TAG\"" >> Dockerfile2;
|
|
fi
|
|
- echo "RUN sh build/linux/snap/1_build-deps-snapcraft.sh" >> Dockerfile2;
|
|
#FIXME: '2>&1 | grep -v STEP' since buildah is too verbose. See: https://github.com/containers/buildah/issues/6362
|
|
- buildah build --log-level error --volume $CI_PROJECT_DIR:$CI_PROJECT_DIR:Z --file $CI_PROJECT_DIR/Dockerfile --tag $CI_REGISTRY_IMAGE:build-snap-${SNAPCRAFT_BASE_VERSION}-${RUNNER} --layers --cache-from $CI_REGISTRY_IMAGE/cache --cache-to $CI_REGISTRY_IMAGE/cache --cache-ttl=120h 2>&1 | grep -v STEP && buildah push --log-level error --compression-format zstd --compression-level 3 --force-compression $CI_REGISTRY_IMAGE:build-snap-${SNAPCRAFT_BASE_VERSION}-${RUNNER} 2>&1 | grep -v STEP
|
|
- buildah build --log-level error --volume $CI_PROJECT_DIR:$CI_PROJECT_DIR:Z --file $CI_PROJECT_DIR/Dockerfile2 --no-cache 2>&1 | grep -v STEP
|
|
artifacts:
|
|
paths:
|
|
- _install-$RUNNER.tar
|
|
- _build-$RUNNER.tar
|
|
- babl-meson-log.tar
|
|
- gegl-meson-log.tar
|
|
expire_in: 2 hours
|
|
|
|
gimp-snap:
|
|
extends: .snap
|
|
needs: ["deps-snap"]
|
|
stage: build
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- sh build/linux/snap/2_build-gimp-snapcraft.sh
|
|
artifacts:
|
|
paths:
|
|
- temp*.snap
|
|
- gimp-snapcraft.log
|
|
- gimp-meson-log.tar
|
|
expire_in: 2 days
|
|
|
|
|
|
## WINDOWS pipelines (native MSYS2) ##
|
|
.win:
|
|
extends: .default
|
|
rules:
|
|
#Developers (on GNOME/gimp namespace) can create multi-arch installers (.exe or .msixbundle)
|
|
#Non developers (e.g. on MRs), however, can create x64-only installers (.exe or .msix)
|
|
- if: '$RUNNER == "windows-aarch64" && $CI_PROJECT_NAMESPACE != "GNOME"'
|
|
when: never
|
|
- if: '($CI_MERGE_REQUEST_LABELS =~ /.*Package:Windows Installer.*/ && $CI_MERGE_REQUEST_LABELS =~ /.*Package:Microsoft Store.*/) || ($CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Windows Installer.*/ && $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Microsoft Store.*/)'
|
|
interruptible: true
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
STORE_OPTION: '-Dms-store=true'
|
|
- if: '($CI_MERGE_REQUEST_LABELS =~ /.*Package:Windows Installer.*/ || $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Windows Installer.*/) && $CI_JOB_NAME !~ /.*store.*/'
|
|
interruptible: true
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
- if: '($CI_MERGE_REQUEST_LABELS =~ /.*Package:Microsoft Store.*/ || $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Microsoft Store.*/) && $CI_JOB_NAME !~ /.*eol.*/ && $CI_JOB_NAME !~ /.*installer.*/'
|
|
interruptible: true
|
|
variables:
|
|
STORE_OPTION: '-Dms-store=true'
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null && $GIMP_CI_MS_STORE != null'
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
STORE_OPTION: '-Dms-store=true'
|
|
- if: '($GIMP_CI_WIN_INSTALLER != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_WIN_INSTALLER.*/) && $CI_JOB_NAME !~ /.*store.*/'
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
- if: '($GIMP_CI_MS_STORE != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_MS_STORE.*/) && $CI_JOB_NAME !~ /.*eol.*/ && $CI_JOB_NAME !~ /.*installer.*/'
|
|
variables:
|
|
STORE_OPTION: '-Dms-store=true'
|
|
- if: '($GIMP_CI_MESON_MSVC != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_MESON_MSVC.*/) && $CI_JOB_NAME !~ /.*installer.*/ && $CI_JOB_NAME !~ /.*store.*/ && $CI_JOB_NAME !~ /.*eol.*/ && $CI_JOB_NAME !~ /.*aarch64.*/'
|
|
variables:
|
|
VCPKG_ROOT: "$CI_PROJECT_DIR/vcpkg"
|
|
VARIANT: "-msvc"
|
|
- <<: *CI_RELEASE
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
STORE_OPTION: '-Dms-store=true'
|
|
parallel:
|
|
matrix:
|
|
- RUNNER: [windows-aarch64, win32-ps]
|
|
tags:
|
|
- $RUNNER
|
|
variables:
|
|
MSYS_ROOT: 'C:/msys64'
|
|
#See: https://gitlab.gnome.org/creiter/gitlab-ci-win32-runner-v2/-/commit/5bb796c37b212b592f0c7432de44ca0ad0c41707
|
|
CC: 'cc'
|
|
CXX: 'c++'
|
|
#meson.build forces non-relocatable .pc. See: https://github.com/mesonbuild/meson/issues/14346
|
|
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
|
|
before_script:
|
|
- $GIMP_PREFIX = "$PWD\_install-$(if (-not $env:MSYSTEM_PREFIX) { $(((Get-WmiObject Win32_ComputerSystem).SystemType).Split('-')[0].Trim().ToLower()) } else { $env:MSYSTEM_PREFIX })"
|
|
- if ("$VARIANT" -eq '-msvc') { if (-not (Test-Path $env:VCPKG_ROOT)) { git clone --depth 1 https://github.com/microsoft/vcpkg; .\vcpkg\bootstrap-vcpkg.bat }; pip install meson }
|
|
- if ("$VARIANT" -eq '-msvc') { $VSINSTALLDIR = $(vswhere -products * -latest -property installationPath); Import-Module "$VSINSTALLDIR\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"; Enter-VsDevShell -VsInstallPath "$VSINSTALLDIR" -SkipAutomaticLocation -DevCmdArguments "-arch=$(((Get-WmiObject Win32_ComputerSystem).SystemType).Split('-')[0].Trim().ToLower())" }
|
|
#30min is enough only on msys2 or if no vcpkg port was updated/rebuilt, we need more time in case of port bumps
|
|
timeout: 150m
|
|
|
|
.win_environ: &WIN_ENVIRON
|
|
# See: https://testing.developer.gimp.org/core/setup/build/windows/#prepare-for-building
|
|
- Write-Output "$([char]27)[0Ksection_start:$(Get-Date -UFormat %s -Millisecond 0):win_environ[collapsed=true]$([char]13)$([char]27)[0KPreparing build environment"
|
|
## Build-time vars
|
|
- $env:PKG_CONFIG_PATH = "$GIMP_PREFIX/lib/pkgconfig;$env:VCPKG_ROOT/installed/$env:VCPKG_DEFAULT_TRIPLET/lib/pkgconfig;$env:VCPKG_ROOT/installed/$env:VCPKG_DEFAULT_TRIPLET/share/pkgconfig;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/lib/pkgconfig;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/share/pkgconfig"
|
|
- $env:XDG_DATA_DIRS = "$GIMP_PREFIX/share;$env:VCPKG_ROOT/installed/$env:VCPKG_DEFAULT_TRIPLET/share;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/share"
|
|
## Runtime vars
|
|
- $env:PATH = "$GIMP_PREFIX/bin;$env:VCPKG_ROOT/installed/$env:VCPKG_DEFAULT_TRIPLET/bin;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/bin;$env:PATH"
|
|
- $env:GI_TYPELIB_PATH = "$GIMP_PREFIX/lib/girepository-1.0;$env:VCPKG_ROOT/installed/$env:VCPKG_DEFAULT_TRIPLET/lib/girepository-1.0;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/lib/girepository-1.0"
|
|
## MSVC-specific vars
|
|
- if ($env:VCPKG_ROOT) { $env:CC='clang-cl'; $env:CXX='clang-cl'; $env:PKG_CONFIG="$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\tools\pkgconf\pkgconf.exe"; $env:PATH="$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\tools\glib;$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\tools\gdk-pixbuf;$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\tools\gettext\bin;$(Resolve-Path $env:VCPKG_ROOT\downloads\tools\perl\*.*\perl\bin -ErrorAction SilentlyContinue);$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\tools\libxml2;$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\tools\libxslt;$env:PATH"; $env:GIO_MODULE_DIR="$env:VCPKG_ROOT\installed\$env:VCPKG_DEFAULT_TRIPLET\plugins\glib-networking" }
|
|
- Write-Output "$([char]27)[0Ksection_end:$(Get-Date -UFormat %s -Millisecond 0):win_environ$([char]13)$([char]27)[0K"
|
|
|
|
deps-win:
|
|
extends: .win
|
|
stage: dependencies
|
|
script:
|
|
- build\windows\1_build-deps-msys2.ps1
|
|
artifacts:
|
|
paths:
|
|
- _install-*/
|
|
- babl/_build-*/meson-logs/meson-log.txt
|
|
- gegl/_build-*/meson-logs/meson-log.txt
|
|
expire_in: 2 hours
|
|
|
|
gimp-win:
|
|
extends: .win
|
|
needs:
|
|
- job: deps-win
|
|
#to allow running outside 'GNOME/gimp' namespace (on MRs)
|
|
optional: true
|
|
stage: build
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- build\windows\2_build-gimp-msys2.ps1
|
|
artifacts:
|
|
paths:
|
|
- gimp-*n*/
|
|
- _build-*/meson-logs/meson-log.txt
|
|
- _build-*/done-dll.list
|
|
# Needed by dist-installer-weekly and dist-store-weekly
|
|
- _build-*/config.h
|
|
- _build-*/plug-ins/file_associations.list
|
|
- _build-*/build/windows/installer/
|
|
- _build-*/build/windows/store/
|
|
expire_in: 2 days
|
|
|
|
|
|
## WINDOWS x86 legacy CI (native MSYS2) ##
|
|
.win-eol:
|
|
extends: .win
|
|
parallel:
|
|
matrix:
|
|
- RUNNER: [win32-ps]
|
|
variables:
|
|
MSYSTEM_PREFIX: mingw32
|
|
MINGW_PACKAGE_PREFIX: mingw-w64-i686
|
|
|
|
deps-win-eol:
|
|
extends: .win-eol
|
|
stage: !reference [deps-win, stage]
|
|
script:
|
|
- !reference [deps-win, script]
|
|
artifacts: !reference [deps-win, artifacts]
|
|
|
|
gimp-win-eol:
|
|
extends: .win-eol
|
|
needs: ["deps-win-eol"]
|
|
stage: !reference [gimp-win, stage]
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- $env:PATH = "C:/msys64/usr/bin;" + $env:PATH
|
|
- !reference [gimp-win, script]
|
|
artifacts: !reference [gimp-win, artifacts]
|
|
|
|
|
|
## macOS pipelines (MacPorts) ##
|
|
.macos-inhouse:
|
|
extends: .default
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:Macos Dmg.*/ || $CI_MERGE_REQUEST_DESCRIPTION =~ /.*Package:Macos Dmg.*/'
|
|
interruptible: true
|
|
variables:
|
|
OPT_PREFIX: /opt/macports
|
|
DMG_OPTION: '-Ddmg=true'
|
|
- if: '$GIMP_CI_MACOS != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_MACOS.*/'
|
|
variables:
|
|
OPT_PREFIX: /opt/macports
|
|
DMG_OPTION: '-Ddmg=true'
|
|
- if: '($GIMP_CI_MESON_APPLECLANG != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_MESON_APPLECLANG.*/) && $CI_JOB_NAME !~ /.*-part.*/ && $CI_JOB_NAME !~ /.*dist-mac-.*/'
|
|
variables:
|
|
OPT_PREFIX: /opt/homebrew
|
|
VARIANT: -homebrew
|
|
tags:
|
|
- macos
|
|
variables:
|
|
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
|
|
before_script:
|
|
- export GIMP_PREFIX="$PWD/_install-$(uname -m)"
|
|
- export PATH="$OPT_PREFIX/bin:$PATH"
|
|
timeout: 150m
|
|
|
|
.macos_environ: &MAC_ENVIRON
|
|
- printf "\e[0Ksection_start:`date +%s`:macos_environ[collapsed=true]\r\e[0KPreparing build environment\n"
|
|
## Build-time vars
|
|
- export PKG_CONFIG_PATH="${GIMP_PREFIX}/lib/pkgconfig:${OPT_PREFIX}/lib/pkgconfig:${OPT_PREFIX}/opt/libarchive/lib/pkgconfig"
|
|
- export XDG_DATA_DIRS="${GIMP_PREFIX}/share:${OPT_PREFIX}/share"
|
|
## Runtime vars
|
|
- export PATH="${GIMP_PREFIX}/bin:${OPT_PREFIX}/bin:$PATH"
|
|
- export GI_TYPELIB_PATH="${GIMP_PREFIX}/lib/girepository-1.0:${OPT_PREFIX}/lib/girepository-1.0"
|
|
- printf "\e[0Ksection_end:`date +%s`:macos_environ\r\e[0K\n"
|
|
|
|
deps-macos-inhouse-part1:
|
|
#This splitted job is needed to rebuild 'vala' in time when it is bumped
|
|
extends: .macos-inhouse
|
|
stage: dependencies
|
|
cache:
|
|
- key: $CI_PROJECT_NAMESPACE
|
|
paths:
|
|
- macports-cached
|
|
policy: pull
|
|
script:
|
|
# Do not call sh since it is old bash on macOS, not the default zsh
|
|
- zsh build/macos/1_build-deps-macports.sh --part1
|
|
artifacts:
|
|
paths:
|
|
- macports
|
|
expire_in: 2 hours
|
|
|
|
deps-macos-inhouse-part2:
|
|
#This splitted job is needed to rebuild 'rust' in time when it is bumped
|
|
extends: .macos-inhouse
|
|
needs: ["deps-macos-inhouse-part1"]
|
|
stage: dependencies
|
|
script:
|
|
# Do not call sh since it is old bash on macOS, not the default zsh
|
|
- zsh build/macos/1_build-deps-macports.sh --part2
|
|
artifacts:
|
|
paths:
|
|
- macports
|
|
expire_in: 2 hours
|
|
|
|
deps-macos-inhouse:
|
|
extends: .macos-inhouse
|
|
needs:
|
|
- job: deps-macos-inhouse-part2
|
|
#to allow running the Homebrew builds which use precompiled binaries
|
|
optional: true
|
|
stage: dependencies
|
|
cache:
|
|
- key: $CI_PROJECT_NAMESPACE
|
|
paths:
|
|
- macports-cached
|
|
policy: push
|
|
script:
|
|
# Do not call sh since it is old bash on macOS, not the default zsh
|
|
- zsh build/macos/1_build-deps-macports.sh
|
|
artifacts:
|
|
paths:
|
|
- macports
|
|
- _install-*
|
|
# The full build dir is needed due to its .o for .dSYM creation on next job
|
|
- babl/_build-*
|
|
- gegl/_build-*
|
|
expire_in: 2 hours
|
|
|
|
gimp-macos-inhouse:
|
|
extends: .macos-inhouse
|
|
needs: ["deps-macos-inhouse"]
|
|
stage: build
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
# Do not call sh since it is old bash on macOS, not the default zsh
|
|
- zsh build/macos/2_build-gimp-macports.sh
|
|
artifacts:
|
|
paths:
|
|
- gimp-*.app
|
|
- _build*/meson-logs/meson-log.txt
|
|
- _build*/done-dylib.list
|
|
# Needed by dist-mac-weekly
|
|
- _build-*/config.h
|
|
- _build-*/plug-ins/file_associations_mac.list
|
|
- _build-*/gimp-data/images/logo/gimp-dmg.png
|
|
- _build-*/build/macos/.VolumeIcon.icns
|
|
expire_in: 2 days
|
|
|
|
|
|
## Analysis ##
|
|
|
|
file-plug-in-tests:
|
|
# FIXME: Do we need another job testing this under Windows? MSYS2 usually has
|
|
# the latest deps. It might be a good idea to test that too, maybe weekly?
|
|
extends: .debian-nonreloc
|
|
rules:
|
|
# Don't run on release since the plug-in doesn't get installed in releases
|
|
- <<: *CI_MERGE
|
|
- <<: *CI_COMMIT
|
|
needs: ["gimp-debian-nonreloc"]
|
|
stage: analysis
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
GIMP_TESTS_DATA_FOLDER: "$CI_PROJECT_DIR/_data/gimp-test-images/"
|
|
GIMP_TESTS_LOG_FILE: "$CI_PROJECT_DIR/_log/import-tests.log"
|
|
REGRESSION_STRING: "Total number of regressions: 0"
|
|
script:
|
|
- API_VER=$(grep GIMP_PKGCONFIG_VERSION _build*/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/')
|
|
- APP_VER=$(grep GIMP_APP_VERSION _build*/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/')
|
|
- *ENVIRON
|
|
- pkg-config --variable=gimplibdir gimp-${API_VER} 2>/dev/null | grep . && PLUG_IN_DIR=$(echo $(pkg-config --variable=gimplibdir gimp-${API_VER})'/plug-ins/')
|
|
- export PYTHONPATH="${PLUG_IN_DIR}test-file-plug-ins"
|
|
- export GIMP_TESTS_CONFIG_FILE="${PLUG_IN_DIR}test-file-plug-ins/tests/batch-config.ini"
|
|
- mkdir _log
|
|
- mkdir _data && cd _data
|
|
- git clone --depth=${GIT_DEPTH} https://gitlab.gnome.org/Infrastructure/gimp-test-images.git gimp-test-images
|
|
- cd ..
|
|
- cat ${PLUG_IN_DIR}test-file-plug-ins/batch-import-tests.py | gimp-console-${APP_VER} -idf --batch-interpreter python-fu-eval -b - --quit
|
|
- if [ $(grep -c "${REGRESSION_STRING}" "${GIMP_TESTS_LOG_FILE}") -ne 1 ]; then
|
|
printf "There are file import regressions. Check the log at ${GIMP_TESTS_LOG_FILE}!\n";
|
|
exit 1;
|
|
fi
|
|
# FIXME No export testing for now until it's more developed. A limited test
|
|
# can be done from the plug-in for bmp export.
|
|
artifacts:
|
|
paths:
|
|
- _log/
|
|
reports:
|
|
junit: "_log/import-tests.xml"
|
|
expire_in: 2 days
|
|
timeout: 30m
|
|
|
|
meson-health:
|
|
extends: .default
|
|
rules:
|
|
- <<: *CI_MERGE
|
|
- <<: *CI_COMMIT
|
|
stage: analysis
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
script:
|
|
- apt-get update -qq
|
|
- apt-get install -qq -y --no-install-recommends git shellcheck devscripts
|
|
- sh .gitlab/run_meson_health_diff.sh
|
|
allow_failure: true
|
|
|
|
clang-format:
|
|
extends: .default
|
|
rules:
|
|
- <<: *CI_MERGE
|
|
stage: analysis
|
|
script:
|
|
- apt-get update
|
|
- apt-get install -y clang-format
|
|
git
|
|
- sh .gitlab/run_style_check_diff.sh
|
|
allow_failure: true
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- fetch_upstream.log
|
|
- fetch_origin.log
|
|
expire_in: 2 days
|
|
|
|
branches-check:
|
|
extends: .default
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS == null && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH'
|
|
stage: analysis
|
|
variables:
|
|
GIT_DEPTH: "0"
|
|
script:
|
|
- apt-get update -qq
|
|
- apt-get install -qq -y --no-install-recommends git
|
|
- sh .gitlab/check_dead_branches.sh
|
|
allow_failure: true
|
|
|
|
cppcheck:
|
|
extends: .default
|
|
rules:
|
|
- if: '$GIMP_CI_CPPCHECK != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_CPPCHECK.*/'
|
|
stage: analysis
|
|
script:
|
|
- apt-get update
|
|
- apt-get install -y cppcheck
|
|
- cppcheck -q -j8 --enable=all --force --output-file=cppcheck.xml --xml --xml-version=2
|
|
-i _build -i babl -i gegl -i _install .
|
|
- mkdir report
|
|
- cppcheck-htmlreport --source-dir=. --title=gimp --file=cppcheck.xml --report-dir=report
|
|
artifacts:
|
|
paths:
|
|
- report/
|
|
expire_in: 8 days
|
|
|
|
|
|
## Ready-to-distribute ##
|
|
|
|
sources-debian:
|
|
extends: .default
|
|
rules:
|
|
# Don't run on MRs since non-merged/non-upstream code can't be distributed by us
|
|
- <<: *CI_COMMIT
|
|
- <<: *CI_RELEASE
|
|
needs: ["gimp-debian-nonreloc"]
|
|
stage: distribution
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
script:
|
|
- mv _build*/meson-dist/gimp-*.tar.xz .
|
|
- FILENAME=`ls gimp-*.tar.xz` &&
|
|
sha256sum gimp-*.tar.xz > ${FILENAME}.SHA256SUMS &&
|
|
sha512sum gimp-*.tar.xz > ${FILENAME}.SHA512SUMS
|
|
artifacts:
|
|
paths:
|
|
- gimp-*.tar.xz
|
|
- gimp-*.tar.xz.SHA256SUMS
|
|
- gimp-*.tar.xz.SHA512SUMS
|
|
expire_in: 2 days
|
|
|
|
dev-docs:
|
|
extends: .default
|
|
rules:
|
|
# Don't run on MRs since non-merged/non-upstream code can't be distributed by us
|
|
- <<: *CI_COMMIT
|
|
- <<: *CI_RELEASE
|
|
needs: ["deps-debian-nonreloc", "gimp-debian-nonreloc"]
|
|
stage: distribution
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
script:
|
|
- apt-get update
|
|
- apt-get install -y xz-utils
|
|
- export GIMP_PREFIX=$(echo $PWD/_install*)
|
|
- BABL_VER=$(grep BABL_VERSION babl/_build*/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/') &&
|
|
BABL_API_VER=$(grep BABL_API_VERSION babl/_build*/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/') &&
|
|
DIR_NAME=babl-api-docs-$BABL_VER &&
|
|
mkdir $DIR_NAME &&
|
|
mv "${GIMP_PREFIX}/share/doc/babl-$BABL_API_VER" $DIR_NAME/ &&
|
|
TAR_NAME="$DIR_NAME.tar.xz" &&
|
|
tar --dereference -cJf ${TAR_NAME} $DIR_NAME &&
|
|
sha256sum $TAR_NAME > ${TAR_NAME}.SHA256SUMS &&
|
|
sha512sum $TAR_NAME > ${TAR_NAME}.SHA512SUMS
|
|
- GEGL_MAJ_VER=$(grep GEGL_MAJOR_VERSION gegl/_build*/config.h |head -1 |sed 's/^[^0-9]*\([0-9]*\).*$/\1/') &&
|
|
GEGL_MIN_VER=$(grep GEGL_MINOR_VERSION gegl/_build*/config.h |head -1 |sed 's/^[^0-9]*\([0-9]*\).*$/\1/') &&
|
|
GEGL_MIC_VER=$(grep GEGL_MICRO_VERSION gegl/_build*/config.h |head -1 |sed 's/^[^0-9]*\([0-9]*\).*$/\1/') &&
|
|
GEGL_VER="$GEGL_MAJ_VER.$GEGL_MIN_VER.$GEGL_MIC_VER" &&
|
|
GEGL_API_VER="$GEGL_MAJ_VER.$GEGL_MIN_VER" &&
|
|
DIR_NAME=gegl-api-docs-$GEGL_VER &&
|
|
mkdir $DIR_NAME &&
|
|
mv "${GIMP_PREFIX}/share/doc/gegl-$GEGL_API_VER" $DIR_NAME/ &&
|
|
TAR_NAME="$DIR_NAME.tar.xz" &&
|
|
tar --dereference -cJf ${TAR_NAME} $DIR_NAME &&
|
|
sha256sum $TAR_NAME > ${TAR_NAME}.SHA256SUMS &&
|
|
sha512sum $TAR_NAME > ${TAR_NAME}.SHA512SUMS
|
|
- GIMP_VER=$(grep GIMP_VERSION _build*/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/') &&
|
|
API_VER=$(grep GIMP_PKGCONFIG_VERSION _build*/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/') &&
|
|
DIR_NAME=gimp-api-docs-$GIMP_VER &&
|
|
mkdir $DIR_NAME &&
|
|
mv "${GIMP_PREFIX}/share/doc/gimp-$API_VER" $DIR_NAME/reference &&
|
|
TAR_NAME="$DIR_NAME.tar.xz" &&
|
|
tar --dereference -cJf ${TAR_NAME} $DIR_NAME &&
|
|
sha256sum $TAR_NAME > ${TAR_NAME}.SHA256SUMS &&
|
|
sha512sum $TAR_NAME > ${TAR_NAME}.SHA512SUMS
|
|
artifacts:
|
|
paths:
|
|
- babl-api-docs-*.tar.xz
|
|
- babl-api-docs-*.tar.xz.SHA256SUMS
|
|
- babl-api-docs-*.tar.xz.SHA512SUMS
|
|
- gegl-api-docs-*.tar.xz
|
|
- gegl-api-docs-*.tar.xz.SHA256SUMS
|
|
- gegl-api-docs-*.tar.xz.SHA512SUMS
|
|
- gimp-api-docs-*.tar.xz
|
|
- gimp-api-docs-*.tar.xz.SHA256SUMS
|
|
- gimp-api-docs-*.tar.xz.SHA512SUMS
|
|
expire_in: 2 days
|
|
|
|
dist-appimage-weekly:
|
|
extends: .default
|
|
rules:
|
|
- !reference [.debian, rules]
|
|
needs: ["gimp-debian"]
|
|
stage: distribution
|
|
script:
|
|
- sh build/linux/appimage/3_dist-gimp-goappimage.sh
|
|
artifacts:
|
|
expose_as: 'Linux appimage'
|
|
paths:
|
|
- build/linux/appimage/_Output/
|
|
expire_in: 8 days
|
|
|
|
include:
|
|
project: GNOME/citemplates
|
|
file: flatpak/flatpak_ci_initiative.yml
|
|
ref: 42fbc2526a7680b6a4f284a210e63e3973ea6dae
|
|
|
|
dist-flatpak-weekly:
|
|
extends:
|
|
- .default
|
|
- .publish_nightly
|
|
rules:
|
|
- !reference [.flatpak, rules]
|
|
needs: ["gimp-flatpak"]
|
|
stage: distribution
|
|
script:
|
|
- sh build/linux/flatpak/3_dist-gimp-flatpakbuilder.sh
|
|
artifacts:
|
|
expose_as: 'Linux flatpak'
|
|
paths:
|
|
- build/linux/flatpak/_Output/
|
|
expire_in: 8 days
|
|
|
|
dist-snap-weekly:
|
|
extends: .default
|
|
rules:
|
|
- !reference [.snap, rules]
|
|
needs: ["gimp-snap"]
|
|
stage: distribution
|
|
image: !reference [.snap, image]
|
|
variables: !reference [.snap, variables]
|
|
script:
|
|
- sh build/linux/snap/3_dist-gimp-snapcraft.sh
|
|
artifacts:
|
|
expose_as: 'Linux snap'
|
|
paths:
|
|
- build/linux/snap/_Output/
|
|
expire_in: 8 days
|
|
|
|
dist-installer-weekly:
|
|
extends: .default
|
|
rules:
|
|
- !reference [.win, rules]
|
|
needs:
|
|
- job: gimp-win
|
|
#to allow running outside 'GNOME/gimp' namespace (on MRs)
|
|
optional: true
|
|
- job: gimp-win-eol
|
|
stage: distribution
|
|
tags:
|
|
- win32-ps
|
|
variables:
|
|
MSYS_ROOT: 'C:/msys64'
|
|
script:
|
|
- build\windows\installer\3_dist-gimp-inno.ps1
|
|
artifacts:
|
|
expose_as: 'Windows exe'
|
|
paths:
|
|
- build/windows/installer/_Output/
|
|
- inno.log
|
|
expire_in: 8 days
|
|
|
|
dist-store-weekly:
|
|
extends: .default
|
|
rules:
|
|
- !reference [.win, rules]
|
|
needs:
|
|
- job: gimp-win
|
|
#to allow running outside 'GNOME/gimp' namespace (on MRs)
|
|
optional: true
|
|
stage: distribution
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- build\windows\store\3_dist-gimp-winsdk.ps1
|
|
artifacts:
|
|
expose_as: 'Windows msix'
|
|
paths:
|
|
- build/windows/store/_Output/
|
|
- winsdk.log
|
|
expire_in: 8 days
|
|
|
|
dist-mac-weekly:
|
|
extends: .default
|
|
rules:
|
|
- !reference [.macos-inhouse, rules]
|
|
needs: ["gimp-macos-inhouse"]
|
|
stage: distribution
|
|
tags:
|
|
- macos
|
|
script:
|
|
# Do not call sh since it is old bash on macOS, not the default zsh
|
|
- zsh build/macos/dmg/3_dist-gimp-apple.sh
|
|
artifacts:
|
|
expose_as: 'macOS dmg'
|
|
paths:
|
|
- build/macos/dmg/_Output/
|
|
expire_in: 8 days
|