mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-10-05 21:02:42 +02:00
904 lines
34 KiB
YAML
904 lines
34 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)
|
|
- 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_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:
|
|
- 'runner_system_failure'
|
|
- '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"
|
|
# 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
|
|
- echo "RUN printf \"\e[0Ksection_start:0000000001:deps_install[collapsed=true]\r\e[0KInstalling dependencies provided by Debian $DEB_VERSION\n\"" >> Dockerfile
|
|
- echo "RUN apt-get update -qq" >> Dockerfile
|
|
## 'ca-certificates' is NOT a gimp dep, it is installed only to our Docker image work
|
|
- echo "RUN apt-get install -qq -y --no-install-recommends ca-certificates" >> Dockerfile
|
|
## Build-time only dependencies
|
|
- echo "RUN apt-get install -qq -y --no-install-recommends \\" >> Dockerfile
|
|
- 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 "RUN apt-get install -qq -y --no-install-recommends \\" >> Dockerfile
|
|
- echo "at-spi2-core
|
|
ffmpeg
|
|
gettext
|
|
gjs
|
|
glib-networking
|
|
graphviz
|
|
graphviz-dev
|
|
gvfs
|
|
iso-codes
|
|
libaa1-dev
|
|
libappstream-dev
|
|
libarchive-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
|
|
mypaint-brushes
|
|
poppler-data
|
|
python3
|
|
python3-gi
|
|
python3-gi-cairo" >> Dockerfile
|
|
- echo "RUN printf \"\e[0Ksection_end:0000000002:deps_install\r\e[0K\n\"" >> 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}\" $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}\" $PKGCONF_RELOCATABLE_OPTION -Dworkshop=true" >> 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
|
|
- 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 $CI_REGISTRY_IMAGE:build-debian-${DEB_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}/
|
|
- 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 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.*/'
|
|
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
|
|
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}"
|
|
-Dgi-docgen=disabled
|
|
-Dpkgconfig.relocatable=true
|
|
-Drelocatable-bundle=yes
|
|
-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 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.*/'
|
|
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.tar.zst
|
|
- babl-meson-log.tar
|
|
- gegl-meson-log.tar
|
|
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.tar
|
|
expire_in: 2 days
|
|
|
|
|
|
## Snap CI (Ubuntu) ##
|
|
.snap:
|
|
extends: .default
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:Snap.*/'
|
|
interruptible: true
|
|
- if: '$GIMP_CI_SNAP != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_SNAP.*/'
|
|
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" >> Dockerfile
|
|
- echo "RUN apt-get install -y curl jq squashfs-tools sudo" >> Dockerfile
|
|
# https://github.com/canonical/snapcraft-rocks/issues/37
|
|
- echo "RUN cp -r /usr/lib/python3.*/site-packages/extensions/* /usr/share/snapcraft/extensions/" >> Dockerfile
|
|
# https://github.com/canonical/snapcraft-rocks/issues/33
|
|
- echo "RUN 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;
|
|
- 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 $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.*/'
|
|
interruptible: true
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
STORE_OPTION: '-Dms-store=true'
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:Windows Installer.*/ && $CI_JOB_NAME !~ /.*store.*/'
|
|
interruptible: true
|
|
variables:
|
|
INSTALLER_OPTION: '-Dwindows-installer=true'
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:Microsoft Store.*/ && $CI_JOB_NAME !~ /.*mingw32.*/ && $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 !~ /.*mingw32.*/ && $CI_JOB_NAME !~ /.*installer.*/'
|
|
variables:
|
|
STORE_OPTION: '-Dms-store=true'
|
|
- <<: *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'
|
|
#meson.build forces non-relocatable .pc. See: https://github.com/mesonbuild/meson/issues/14346
|
|
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
|
|
before_script:
|
|
- if (-not $env:MSYSTEM_PREFIX) { $env:MSYSTEM_PREFIX = if ((Get-WmiObject Win32_ComputerSystem).SystemType -like 'ARM64*') { 'clangarm64' } else { 'clang64' }}
|
|
- $GIMP_PREFIX = "$PWD\_install-$env:MSYSTEM_PREFIX"
|
|
timeout: 30m
|
|
|
|
.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:MSYS_ROOT/$env:MSYSTEM_PREFIX/lib/pkgconfig;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/share/pkgconfig"
|
|
- $env:XDG_DATA_DIRS = "$GIMP_PREFIX/share;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/share"
|
|
## Runtime vars
|
|
- $env:PATH = "$GIMP_PREFIX/bin;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/bin;$env:PATH"
|
|
- $env:GI_TYPELIB_PATH = "$GIMP_PREFIX/lib/girepository-1.0;$env:MSYS_ROOT/$env:MSYSTEM_PREFIX/lib/girepository-1.0"
|
|
- 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-*/
|
|
- _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]
|
|
|
|
|
|
## 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/') &&
|
|
APP_VER=$(echo $GIMP_VER | sed 's/\([0-9]\+\.[0-9]\+\)\..*/\1/') &&
|
|
DIR_NAME=gimp-api-docs-$GIMP_VER &&
|
|
mkdir $DIR_NAME &&
|
|
mv "${GIMP_PREFIX}/share/doc/gimp-$APP_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
|