This workaround was placed to mitigate race condition.
It was useful for the time being, but not anymore.
Better solution will be introduced in following commit.
Reverting changes introduced in 9c6776fb.
895 lines
31 KiB
YAML
895 lines
31 KiB
YAML
# Default commit CI should only run the following pipelines:
|
|
# - Linux autotools and meson (base & fast)
|
|
# - Win64 crossbuild (base & fast)
|
|
# Scheduled CI ($CI_PIPELINE_SOURCE == "schedule") will run regularly:
|
|
# - Win 32/64 native builds (base but slow)
|
|
# - Win32 crossbuilds (rare usefulness)
|
|
# - Linux CLang (rare usefulness)
|
|
# - cppcheck (static code analysis)
|
|
# - Flatpak build (slow and doesn't need constant publishing)
|
|
# Releases ($CI_COMMIT_TAG != null) should run only:
|
|
# - Linux autotools (distcheck source tarball)
|
|
# - Win 32/64 native builds (Windows installer creation)
|
|
#
|
|
# To force step-specific pipelines without waiting for commits and/or
|
|
# pipelines, these are the variable you should set:
|
|
# - GIMP_CI_AUTOTOOLS: trigger the autotools/gcc build.
|
|
# - GIMP_CI_MESON_GCC: trigger the meson/gcc build.
|
|
# - GIMP_CI_MESON_CLANG: trigger the meson/clang build.
|
|
# - GIMP_CI_CROSSROAD_WIN32: trigger the crossroad/meson build for Win 32-bit.
|
|
# - GIMP_CI_CROSSROAD_WIN64: trigger the crossroad/meson build for Win 64-bit.
|
|
# - GIMP_CI_MSYS2_WIN32: trigger the native MSYS2 build for Win 32-bit.
|
|
# - GIMP_CI_MSYS2_WIN64: trigger the native MSYS2 build for Win 64-bit.
|
|
# - GIMP_CI_WIN_INSTALLER: trigger both native MSYS2 builds then creates Windows installer.
|
|
# - GIMP_CI_SOURCES: trigger the autotools/gcc build and the source tarball job.
|
|
# - GIMP_CI_CPPCHECK: trigger cppcheck static analysis.
|
|
# - GIMP_CI_FLATPAK: trigger the nightly flatpak build and publishing.
|
|
|
|
include: 'https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml'
|
|
|
|
image: debian:testing
|
|
|
|
stages:
|
|
- prepare
|
|
- dependencies
|
|
- gimp
|
|
- packaging
|
|
- distribution
|
|
- analysis
|
|
|
|
variables:
|
|
GIT_DEPTH: "1"
|
|
INSTALL_DIR: "_install"
|
|
INSTALL_PREFIX: "${CI_PROJECT_DIR}/${INSTALL_DIR}"
|
|
APT_CACHE: "${CI_PROJECT_DIR}/apt-cache"
|
|
|
|
## prepare docker images ##
|
|
|
|
build-image:
|
|
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_AUTOTOOLS != null'
|
|
- if: '$GIMP_CI_SOURCES != null'
|
|
- if: '$GIMP_CI_MESON_GCC != null'
|
|
- if: '$GIMP_CI_MESON_CLANG != null'
|
|
stage: prepare
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
cache: {}
|
|
image:
|
|
name: gcr.io/kaniko-project/executor:debug
|
|
entrypoint: [""]
|
|
script:
|
|
- mkdir -p /kaniko/.docker
|
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
|
|
- echo "FROM debian:testing" > Dockerfile
|
|
- echo "RUN apt-get update" >> Dockerfile
|
|
- echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile
|
|
- echo "at-spi2-core build-essential desktop-file-utils ffmpeg ghostscript git glib-networking gobject-introspection graphviz graphviz-dev gtk-doc-tools hicolor-icon-theme intltool iso-codes libappstream-glib-dev libbz2-dev libdbus-glib-1-dev libexif-dev libgexiv2-dev libgirepository1.0-dev libgtk-3-bin libgtk-3-dev libgudev-1.0-dev libjson-glib-dev liblcms2-dev liblzma-dev libmng-dev libmypaint-dev libopenexr-dev libpoppler-glib-dev libraw-dev libraw20 librsvg2-dev libspiro-dev libsuitesparse-dev libtiff-dev libtiff5-dev libtool libumfpack5 libwebp-dev libwmf-dev libxmu-dev libxpm-dev luajit meson mypaint-brushes poppler-data python3 valac xauth xvfb" >> Dockerfile
|
|
|
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:build-debian-latest --cache=true --cache-ttl=120h
|
|
|
|
|
|
build-image-win64:
|
|
rules:
|
|
# On commits except tags.
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null'
|
|
# On merge requests.
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
|
|
stage: prepare
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
cache: {}
|
|
image:
|
|
name: gcr.io/kaniko-project/executor:debug
|
|
entrypoint: [""]
|
|
script:
|
|
- mkdir -p /kaniko/.docker
|
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
|
|
- echo "FROM debian:testing" > Dockerfile
|
|
- echo "RUN apt-get update" >> Dockerfile
|
|
- echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile
|
|
- echo "build-essential cmake cpio g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 git intltool libgdk-pixbuf2.0-dev libglib2.0-bin meson pkg-config python3 python3-distutils python3-docutils python3-pip rpm xsltproc" >> Dockerfile
|
|
|
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:build-win64-latest --cache=true --cache-ttl=120h
|
|
|
|
|
|
build-image-win32:
|
|
rules:
|
|
# Custom builds only (web GUI, API or schedules).
|
|
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
|
|
stage: prepare
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
cache: {}
|
|
image:
|
|
name: gcr.io/kaniko-project/executor:debug
|
|
entrypoint: [""]
|
|
script:
|
|
- mkdir -p /kaniko/.docker
|
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
|
|
- echo "FROM debian:testing" > Dockerfile
|
|
- echo "RUN apt-get update" >> Dockerfile
|
|
- echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile
|
|
- echo "build-essential cpio g++-mingw-w64-i686 gcc-mingw-w64-i686 git intltool libgdk-pixbuf2.0-dev libglib2.0-bin meson pkg-config python3 python3-distutils python3-docutils python3-pip rpm xsltproc" >> Dockerfile
|
|
|
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:build-win32-latest --cache=true --cache-ttl=120h
|
|
|
|
|
|
## GNU/Linux 64-bit CIs (Debian testing) ##
|
|
|
|
deps-debian:
|
|
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_AUTOTOOLS != null'
|
|
- if: '$GIMP_CI_SOURCES != null'
|
|
- if: '$GIMP_CI_MESON_GCC != null'
|
|
- if: '$GIMP_CI_MESON_CLANG != null'
|
|
stage: dependencies
|
|
image: $CI_REGISTRY_IMAGE:build-debian-latest
|
|
cache:
|
|
paths:
|
|
- apt-cache
|
|
artifacts:
|
|
expire_in: 2 hours
|
|
when: always
|
|
paths:
|
|
- "${INSTALL_DIR}"
|
|
- _babl/_build
|
|
- _gegl/_build
|
|
before_script:
|
|
- git clone --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/babl.git _babl
|
|
- git clone --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/gegl.git _gegl
|
|
- export PKG_CONFIG_PATH="${INSTALL_PREFIX}/lib/pkgconfig"
|
|
- export PKG_CONFIG_PATH="${INSTALL_PREFIX}/lib/`gcc -print-multiarch`/pkgconfig/:$PKG_CONFIG_PATH"
|
|
- export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH}"
|
|
- export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib/`gcc -print-multiarch`:$LD_LIBRARY_PATH"
|
|
- export XDG_DATA_DIRS="${INSTALL_PREFIX}/share:/usr/local/share:/usr/share"
|
|
script:
|
|
- cd _babl
|
|
- meson -Dprefix="${INSTALL_PREFIX}" _build
|
|
- ninja -C _build
|
|
- ninja -C _build install
|
|
- cd ../_gegl
|
|
- meson --prefix="${INSTALL_PREFIX}" _build
|
|
- ninja -C _build
|
|
- ninja -C _build install
|
|
needs: ["build-image"]
|
|
|
|
.gimp-debian-base:
|
|
stage: gimp
|
|
image: $CI_REGISTRY_IMAGE:build-debian-latest
|
|
dependencies:
|
|
- deps-debian
|
|
cache:
|
|
paths:
|
|
- apt-cache
|
|
artifacts:
|
|
expire_in: 1 days
|
|
when: always
|
|
name: "app-build-${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
paths:
|
|
- _build
|
|
#- "${INSTALL_DIR}"
|
|
before_script:
|
|
- export PKG_CONFIG_PATH="${INSTALL_PREFIX}/lib/pkgconfig:${INSTALL_PREFIX}/share/pkgconfig"
|
|
- export PKG_CONFIG_PATH="${INSTALL_PREFIX}/lib/`gcc -print-multiarch`/pkgconfig/:$PKG_CONFIG_PATH"
|
|
- export PKG_CONFIG_PATH="${INSTALL_PREFIX}/share/`gcc -print-multiarch`/pkgconfig/:$PKG_CONFIG_PATH"
|
|
- export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH}"
|
|
- export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib/`gcc -print-multiarch`:$LD_LIBRARY_PATH"
|
|
- export XDG_DATA_DIRS="${INSTALL_PREFIX}/share:/usr/local/share:/usr/share"
|
|
- export PATH="${INSTALL_PREFIX}/bin:$PATH"
|
|
needs: ["deps-debian"]
|
|
|
|
gimp-distcheck-debian:
|
|
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_AUTOTOOLS != null'
|
|
- if: '$GIMP_CI_SOURCES != null'
|
|
extends: .gimp-debian-base
|
|
script:
|
|
- mkdir _build
|
|
- cd _build
|
|
- ../autogen.sh
|
|
--prefix="${INSTALL_PREFIX}"
|
|
--enable-debug
|
|
--enable-gtk-doc
|
|
--enable-windows-installer
|
|
- make -j "$(nproc)"
|
|
- make -j "$(nproc)" check
|
|
- make -j "$(nproc)" distcheck
|
|
|
|
gimp-meson-debian:
|
|
rules:
|
|
# On commits except tags.
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null'
|
|
# On merge requests.
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_MESON_GCC != null'
|
|
extends: .gimp-debian-base
|
|
script:
|
|
- meson _build
|
|
--prefix="${INSTALL_PREFIX}"
|
|
- ninja -C _build
|
|
- ninja -C _build test
|
|
|
|
gimp-clang-debian:
|
|
rules:
|
|
# Custom builds only (web GUI, API or schedules).
|
|
- if: '$GIMP_CI_MESON_CLANG != null'
|
|
extends: .gimp-debian-base
|
|
variables:
|
|
CC: "clang"
|
|
CXX: "clang++"
|
|
script:
|
|
- mkdir -p "$APT_CACHE"
|
|
- apt-get install -y --no-install-recommends -o dir::cache::archives="$APT_CACHE"
|
|
clang libomp-dev
|
|
- meson _build
|
|
--prefix="${INSTALL_PREFIX}"
|
|
- ninja -C _build
|
|
- ninja -C _build test
|
|
|
|
## WINDOWS 64-bit CI (native MSYS2) ##
|
|
|
|
deps-win64-native:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_MSYS2_WIN64 != null'
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
stage: dependencies
|
|
variables:
|
|
MSYSTEM: "MINGW64"
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/build-deps-msys2.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 2 hours
|
|
paths:
|
|
- _install-w64
|
|
- aalib-1.4.0/_build
|
|
needs: []
|
|
|
|
gimp-win64-native:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_MSYS2_WIN64 != null'
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
stage: gimp
|
|
variables:
|
|
MSYSTEM: "MINGW64"
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/build-gimp-msys2.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 day
|
|
paths:
|
|
- _install-w64
|
|
- _build-w64/build/windows/installer/lang/
|
|
- _build-w64/config.log
|
|
cache:
|
|
paths:
|
|
- _ccache/
|
|
needs: ["deps-win64-native"]
|
|
|
|
packaging-win64-native:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
stage: packaging
|
|
variables:
|
|
MSYSTEM: "MINGW64"
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/package-gimp-msys2.sh"
|
|
- cd gimp-w64
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ../build/windows/gitlab-ci/split-debug-msys2.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 day
|
|
paths:
|
|
- gimp-w64
|
|
- _build-w64/build/windows/installer/lang/
|
|
needs: ["gimp-win64-native"]
|
|
|
|
## WINDOWS 32-bit CI (native MSYS2) ##
|
|
|
|
deps-win32-native:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_MSYS2_WIN32 != null'
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
stage: dependencies
|
|
variables:
|
|
MSYSTEM: "MINGW32"
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/build-deps-msys2.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 2 hours
|
|
paths:
|
|
- _install-w32
|
|
needs: []
|
|
|
|
gimp-win32-native:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_MSYS2_WIN32 != null'
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
stage: gimp
|
|
variables:
|
|
MSYSTEM: "MINGW32"
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/build-gimp-msys2.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 day
|
|
paths:
|
|
- _install-w32
|
|
- _build-w32/config.log
|
|
cache:
|
|
paths:
|
|
- _ccache/
|
|
needs: ["deps-win32-native"]
|
|
|
|
packaging-win32-native:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
stage: packaging
|
|
variables:
|
|
MSYSTEM: "MINGW32"
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/package-gimp-msys2.sh"
|
|
- cd gimp-w32
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ../build/windows/gitlab-ci/split-debug-msys2.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 day
|
|
paths:
|
|
- gimp-w32
|
|
needs: ["gimp-win32-native"]
|
|
|
|
## WINDOWS 64-bit CI (cross-build crossroad) ##
|
|
|
|
deps-win64:
|
|
rules:
|
|
# On commits except tags.
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null'
|
|
# On merge requests.
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
|
|
stage: dependencies
|
|
image: $CI_REGISTRY_IMAGE:build-win64-latest
|
|
variables:
|
|
XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache/"
|
|
XDG_DATA_HOME: "$CI_PROJECT_DIR/.local/share/"
|
|
cache:
|
|
paths:
|
|
- .cache/crossroad/
|
|
- apt-cache
|
|
before_script:
|
|
- apt-get update
|
|
- apt-get install -y --no-install-recommends wine wine64
|
|
|
|
- git clone --depth=${GIT_DEPTH} git://git.tuxfamily.org/gitroot/crossroad/crossroad.git
|
|
- cd crossroad
|
|
- ./setup.py install --prefix=`pwd`/../.local
|
|
- cd ..
|
|
- pip3 install zstandard
|
|
script:
|
|
- export PATH="`pwd`/.local/bin:$PATH"
|
|
# libjxl uses C++ features that require posix threads
|
|
- update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
|
|
- update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
|
|
- crossroad w64 gimp --run="build/windows/gitlab-ci/build-deps-crossroad.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 2 hours
|
|
paths:
|
|
- .local/
|
|
- _deps/
|
|
needs: ["build-image-win64"]
|
|
|
|
gimp-win64:
|
|
rules:
|
|
# On commits except tags.
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null'
|
|
# On merge requests.
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
|
|
stage: gimp
|
|
image: $CI_REGISTRY_IMAGE:build-win64-latest
|
|
dependencies:
|
|
- deps-win64
|
|
variables:
|
|
XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache/"
|
|
XDG_DATA_HOME: "$CI_PROJECT_DIR/.local/share/"
|
|
cache:
|
|
paths:
|
|
- .cache/crossroad/
|
|
- apt-cache
|
|
script:
|
|
- export PATH="`pwd`/.local/bin:$PATH"
|
|
- mkdir _build && cd _build
|
|
- echo 'crossroad meson ..
|
|
-Dgtk-doc=false && ninja && ninja install &&
|
|
cp -fr $CROSSROAD_PREFIX/ ../gimp-prefix/
|
|
' |
|
|
crossroad w64 gimp --run="-"
|
|
needs: ["deps-win64"]
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 day
|
|
paths:
|
|
- _build/
|
|
- gimp-prefix/
|
|
|
|
## WINDOWS 32-bit CI (cross-build crossroad) ##
|
|
|
|
deps-win32:
|
|
rules:
|
|
# Custom builds only (web GUI, API or schedules).
|
|
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
|
|
stage: dependencies
|
|
image: $CI_REGISTRY_IMAGE:build-win32-latest
|
|
variables:
|
|
XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache/"
|
|
XDG_DATA_HOME: "$CI_PROJECT_DIR/.local/share/"
|
|
cache:
|
|
paths:
|
|
- .cache/crossroad/
|
|
- apt-cache
|
|
before_script:
|
|
- git clone --depth=${GIT_DEPTH} git://git.tuxfamily.org/gitroot/crossroad/crossroad.git
|
|
- cd crossroad
|
|
- ./setup.py install --prefix=`pwd`/../.local
|
|
- cd ..
|
|
- pip3 install zstandard
|
|
script:
|
|
- export PATH="`pwd`/.local/bin:$PATH"
|
|
- crossroad w32 gimp --run="build/windows/gitlab-ci/build-deps-crossroad.sh"
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 2 hours
|
|
paths:
|
|
- .local/
|
|
- _deps/
|
|
needs: ["build-image-win32"]
|
|
|
|
gimp-win32:
|
|
rules:
|
|
# Custom builds only (web GUI, API or schedules).
|
|
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
|
|
stage: gimp
|
|
image: $CI_REGISTRY_IMAGE:build-win32-latest
|
|
dependencies:
|
|
- deps-win32
|
|
variables:
|
|
XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache/"
|
|
XDG_DATA_HOME: "$CI_PROJECT_DIR/.local/share/"
|
|
cache:
|
|
paths:
|
|
- .cache/crossroad/
|
|
- apt-cache
|
|
script:
|
|
- export PATH="`pwd`/.local/bin:$PATH"
|
|
- mkdir _build && cd _build
|
|
- echo 'crossroad meson ..
|
|
-Dwmf=disabled -Dmng=disabled -Dgtk-doc=false && ninja && ninja install &&
|
|
cp -fr $CROSSROAD_PREFIX/ ../gimp-prefix/
|
|
' |
|
|
crossroad w32 gimp --run="-"
|
|
needs: ["deps-win32"]
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 day
|
|
paths:
|
|
- _build/
|
|
- gimp-prefix/
|
|
|
|
|
|
## Linux Flatpak nightly CI ##
|
|
|
|
## To learn more about the CI, go to https://gitlab.gnome.org/GNOME/Initiatives/-/wikis/DevOps-with-Flatpak
|
|
|
|
flatpak:
|
|
image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master'
|
|
stage: gimp
|
|
tags:
|
|
- flatpak
|
|
needs: []
|
|
rules:
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_FLATPAK != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Flatpak package.*/'
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: normal
|
|
|
|
# Replace with your manifest path
|
|
MANIFEST_PATH: "build/flatpak/org.gimp.GIMP-nightly.json"
|
|
RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo"
|
|
# Replace with your application name, as written in the manifest
|
|
FLATPAK_MODULE: "gimp"
|
|
APP_ID: "org.gimp.GIMP"
|
|
BUNDLE: "gimp-git.flatpak"
|
|
script:
|
|
# Report the installed versions of the runtime
|
|
- flatpak info org.gnome.Platform
|
|
- flatpak info org.gnome.Sdk
|
|
|
|
# Print the date, since appstream depends on local timezone
|
|
- date && date -u
|
|
|
|
- rewrite-flatpak-manifest ${MANIFEST_PATH} ${FLATPAK_MODULE} ${CONFIG_OPTS}
|
|
# Our script is too long for Gitlab and ends up with:
|
|
# > Job's log exceeded limit of 16777216 bytes.
|
|
# > Job execution will continue but no more output will be collected.
|
|
# To make debugging actually possible, let's save logs as a file.
|
|
- flatpak-builder --user --disable-rofiles-fuse flatpak_app --repo=repo ${BRANCH:+--default-branch=$BRANCH} ${MANIFEST_PATH}
|
|
> flatpak-builder.log 2>&1
|
|
# Generate a Flatpak bundle
|
|
- flatpak build-bundle repo ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APP_ID} ${BRANCH}
|
|
- tar cf repo.tar repo/
|
|
|
|
# XXX This job is mostly the same as .flatpak job of
|
|
# flatpak_ci_initiative.yml so far, except that I removed the
|
|
# automatic tests inside the Flatpak env at the end. The reason is
|
|
# that this part suddenly stopped working (even though the flatpak
|
|
# itself is functional) because the rebuild somehow was not
|
|
# rebuilding plug-ins. Yet one of the test (save-and-export)
|
|
# requires plug-ins to be built.
|
|
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- flatpak-builder.log
|
|
# These are the same as flatpak_ci_initiative.yml as according to
|
|
# docs, key values are not merged but replaced.
|
|
- "${BUNDLE}"
|
|
- 'repo.tar'
|
|
- '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/meson-log.txt'
|
|
- '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/testlog.txt'
|
|
expire_in: 1 week
|
|
cache:
|
|
- key: "$CI_JOB_NAME"
|
|
paths:
|
|
- '.flatpak-builder/downloads'
|
|
- '.flatpak-builder/git'
|
|
- key: "$CI_JOB_NAME"
|
|
paths:
|
|
- '.flatpak-builder/cache'
|
|
- '.flatpak-builder/ccache'
|
|
|
|
cppcheck:
|
|
rules:
|
|
# Custom builds only (web GUI, API or schedules).
|
|
- if: '$GIMP_CI_CPPCHECK != null'
|
|
stage: analysis
|
|
before_script:
|
|
- apt-get update
|
|
- apt-get install -y cppcheck
|
|
script:
|
|
- cppcheck -q -j8 --enable=all --force --output-file=cppcheck.xml --xml --xml-version=2
|
|
-i _build -i _deps -i gimp-prefix -i .local -i .cache .
|
|
- mkdir report
|
|
- cppcheck-htmlreport --source-dir=. --title=gimp --file=cppcheck.xml --report-dir=report
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
expire_in: 1 week
|
|
when: always
|
|
paths:
|
|
- report
|
|
needs: []
|
|
|
|
## Ready-to-distribute ##
|
|
|
|
win-installer-nightly:
|
|
rules:
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_WIN_INSTALLER != null'
|
|
# Merge requests with appropriate label.
|
|
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/'
|
|
variables:
|
|
CHERE_INVOKING: "yes"
|
|
tags:
|
|
- win32-ps
|
|
stage: distribution
|
|
dependencies:
|
|
- packaging-win64-native
|
|
- packaging-win32-native
|
|
artifacts:
|
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}"
|
|
when: always
|
|
expire_in: 1 week
|
|
paths:
|
|
- build/windows/installer/_Output
|
|
- installer.log
|
|
script:
|
|
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
- C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/installer-gimp-msys2.sh > installer.log 2>&1"
|
|
needs: ["packaging-win32-native", "packaging-win64-native"]
|
|
|
|
sources:
|
|
rules:
|
|
# On commits.
|
|
- if: '$CI_PIPELINE_SOURCE == "push"'
|
|
# On releases.
|
|
- if: '$CI_COMMIT_TAG != null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_SOURCES != null'
|
|
stage: distribution
|
|
dependencies:
|
|
- gimp-distcheck-debian
|
|
artifacts:
|
|
name: "GIMP-sources-${CI_COMMIT_SHORT_SHA}"
|
|
when: always
|
|
expire_in: 2 days
|
|
paths:
|
|
- gimp-*.tar.bz2
|
|
- gimp-*.tar.bz2.SHA256SUMS
|
|
- gimp-*.tar.bz2.SHA512SUMS
|
|
script:
|
|
- mv _build/gimp-*.tar.bz2 .
|
|
- FILENAME=`ls gimp-*.tar.bz2` &&
|
|
sha256sum gimp-*.tar.bz2 > ${FILENAME}.SHA256SUMS &&
|
|
sha512sum gimp-*.tar.bz2 > ${FILENAME}.SHA512SUMS
|
|
needs: ["gimp-distcheck-debian"]
|
|
|
|
win64-nightly:
|
|
rules:
|
|
# On commits except tags.
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null'
|
|
# Custom builds though web GUI, API or schedules.
|
|
- if: '$GIMP_CI_CROSSROAD_WIN64 != null'
|
|
stage: distribution
|
|
dependencies:
|
|
- gimp-win64
|
|
variables:
|
|
GIMP_PREFIX: "gimp-prefix"
|
|
GIMP_DISTRIB: "gimp-w64"
|
|
artifacts:
|
|
name: "GIMP-Win64-CI-${CI_COMMIT_SHORT_SHA}"
|
|
when: always
|
|
expire_in: 2 days
|
|
paths:
|
|
- gimp-w64
|
|
script:
|
|
- apt-get update
|
|
- apt-get install -y --no-install-recommends
|
|
python3 binutils-mingw-w64-x86-64 file
|
|
libglib2.0-bin
|
|
|
|
# Package ressources.
|
|
- mkdir -p ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/etc ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/include ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/ssl ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/share ${GIMP_DISTRIB}
|
|
|
|
# Package executables.
|
|
- mkdir ${GIMP_DISTRIB}/bin
|
|
- cp -fr ${GIMP_PREFIX}/bin/gimp*.exe ${GIMP_DISTRIB}/bin/
|
|
|
|
- mkdir ${GIMP_DISTRIB}/libexec
|
|
- cp -fr ${GIMP_PREFIX}/libexec/gimp*.exe ${GIMP_DISTRIB}/libexec/
|
|
|
|
# Add a wrapper at tree root, less messy than having to look for the
|
|
# binary inside bin/, in the middle of all the DLLs.
|
|
- echo "bin\gimp-2.99.exe" > ${GIMP_DISTRIB}/gimp.cmd
|
|
|
|
# Package library data and modules.
|
|
- mkdir ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gimp ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gio ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gdk-pixbuf-2.0 ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gegl-0.4 ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/babl-0.1 ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/girepository-1.0 ${GIMP_DISTRIB}/lib/
|
|
|
|
# Generate share/glib-2.0/schemas/gschemas.compiled
|
|
- glib-compile-schemas --targetdir=${GIMP_DISTRIB}/share/glib-2.0/schemas ${GIMP_DISTRIB}/share/glib-2.0/schemas
|
|
|
|
# Package needed DLLs only
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-console-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-test-clipboard-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimptool-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
|
|
- for dll in ${GIMP_DISTRIB}/lib/babl-0.1/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gegl-0.4/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gio/modules/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gimp/2.99/modules/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gimp/2.99/plug-ins/*/*.exe; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
needs: ["gimp-win64"]
|
|
|
|
win32-nightly:
|
|
rules:
|
|
# Custom builds only (web GUI, API or schedules).
|
|
- if: '$GIMP_CI_CROSSROAD_WIN32 != null'
|
|
stage: distribution
|
|
dependencies:
|
|
- gimp-win32
|
|
- deps-win64
|
|
variables:
|
|
GIMP_PREFIX: "gimp-prefix"
|
|
GIMP_DISTRIB: "gimp-w32"
|
|
XDG_DATA_HOME: "$CI_PROJECT_DIR/.local/share/"
|
|
artifacts:
|
|
name: "GIMP-Win32-${CI_COMMIT_SHORT_SHA}"
|
|
when: always
|
|
expire_in: 2 days
|
|
paths:
|
|
- gimp-w32
|
|
script:
|
|
- apt-get update
|
|
- apt-get install -y --no-install-recommends
|
|
python3 binutils-mingw-w64-i686 file
|
|
libglib2.0-bin
|
|
|
|
# Package ressources.
|
|
- mkdir -p ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/etc ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/include ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/ssl ${GIMP_DISTRIB}
|
|
- cp -fr ${GIMP_PREFIX}/share ${GIMP_DISTRIB}
|
|
|
|
# Package executables.
|
|
- mkdir ${GIMP_DISTRIB}/bin
|
|
- cp -fr ${GIMP_PREFIX}/bin/gimp*.exe ${GIMP_DISTRIB}/bin/
|
|
|
|
- mkdir ${GIMP_DISTRIB}/libexec
|
|
- cp -fr ${GIMP_PREFIX}/libexec/gimp*.exe ${GIMP_DISTRIB}/libexec/
|
|
|
|
# Add a wrapper at tree root, less messy than having to look for the
|
|
# binary inside bin/, in the middle of all the DLLs.
|
|
- echo "bin\gimp-2.99.exe" > ${GIMP_DISTRIB}/gimp.cmd
|
|
|
|
# Package library data and modules.
|
|
- mkdir ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gimp ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gio ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gdk-pixbuf-2.0 ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/gegl-0.4 ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/babl-0.1 ${GIMP_DISTRIB}/lib/
|
|
- cp -fr ${GIMP_PREFIX}/lib/girepository-1.0 ${GIMP_DISTRIB}/lib/
|
|
|
|
# I fail to install wine32 inside the Gitlab runner. So instead, I
|
|
# just reuse the loaders.cache generated in the deps-win64 job as
|
|
# they should be the same (text format).
|
|
- cp ${XDG_DATA_HOME}/crossroad/roads/w64/gimp/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache ${GIMP_DISTRIB}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
|
|
|
|
# Generate share/glib-2.0/schemas/gschemas.compiled
|
|
- glib-compile-schemas --targetdir=${GIMP_DISTRIB}/share/glib-2.0/schemas ${GIMP_DISTRIB}/share/glib-2.0/schemas
|
|
|
|
# Package needed DLLs only.
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-console-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-test-clipboard-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
- python3 build/windows/gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimptool-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
|
|
|
|
- for dll in ${GIMP_DISTRIB}/lib/babl-0.1/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gegl-0.4/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gio/modules/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gimp/2.99/modules/*.dll; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
- for dll in ${GIMP_DISTRIB}/lib/gimp/2.99/plug-ins/*/*.exe; do
|
|
python3 build/windows/gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
|
|
done
|
|
needs: ["gimp-win32", "deps-win64"]
|
|
|
|
flatpak-nightly:
|
|
extends: '.publish_nightly'
|
|
stage: distribution
|
|
only:
|
|
variables:
|
|
# Custom builds though web GUI, API or schedules.
|
|
# I don't use 'rules:' because .publish_nightly template uses an
|
|
# 'only:' already which clashes with 'rules:'.
|
|
- $GIMP_CI_FLATPAK != null
|
|
needs: ["flatpak"]
|
|
dependencies:
|
|
- 'flatpak'
|