# Default commit CI should only run the following pipelines: # - Linux native CLang build (base & fast) # - Win64 crossbuild (base & fast) # Scheduled CI ($CI_PIPELINE_SOURCE == "schedule") will run regularly: # - Linux native GCC build (rare usefulness) # - Win Aarch64/64/32 native builds (base but slow) # - Flatpak build (slow and doesn't need constant publishing) # - cppcheck (static code analysis) # Releases ($CI_COMMIT_TAG != null) should run only: # - Win Aarch64/64/32 native builds (Inno Windows installer creation) # # To force step-specific pipelines without waiting for commits and/or # pipelines, these are the variable you should set: # - GIMP_CI_MESON_CLANG: trigger the Debian clang build. # - GIMP_CI_MESON_GCC: trigger the Debian gcc build. # - GIMP_CI_RASTER_ICONS: trigger the Debian build without vector icons. # - GIMP_CI_CROSSROAD_WIN64: trigger the crossroad build for Win 64-bit. # - GIMP_CI_MSYS2_WIN_AARCH64: trigger the native MSYS2 build for Win Aarch64. # - GIMP_CI_MSYS2_WIN64: trigger the native MSYS2 build for Win 64-bit. # - GIMP_CI_MSYS2_WIN32: trigger the native MSYS2 build for Win 32-bit. # - GIMP_CI_SOURCES: trigger the Debian build and the source tarball job. # - GIMP_CI_FLATPAK: trigger the (normally) weekly flatpak build and publishing. # - GIMP_CI_WIN_INSTALLER: trigger all native MSYS2 builds then creates Inno Windows installer. # - GIMP_CI_CPPCHECK: trigger cppcheck static analysis. image: debian:bookworm stages: - prepare - dependencies - gimp - packaging - distribution - analysis # GitLab "default:" is buggy so let's use extensions and references .default: # Caching support variables: CCACHE_BASEDIR: "$CI_PROJECT_DIR" CCACHE_DIR: "$CI_PROJECT_DIR/_ccache" CC: "ccache clang" CXX: "ccache clang++" cache: key: $CI_JOB_NAME paths: - _ccache/ # Universal variables (works in all POSIX OSes and archs) before_script: - export PATH="$GIMP_PREFIX/bin:$PATH" - gcc -print-multi-os-directory | grep . && LIB_DIR=$(gcc -print-multi-os-directory | sed 's/\.\.\///g') || LIB_DIR="lib" - gcc -print-multiarch | grep . && LIB_SUBDIR=$(echo $(gcc -print-multiarch)'/') - export PKG_CONFIG_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" - export LD_LIBRARY_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" - export XDG_DATA_DIRS="${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}" - export GI_TYPELIB_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}" # Common artifacts behavior artifacts: name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}" when: always variables: GIT_DEPTH: "1" ARTIFACTS_SUFFIX: "-x64" GIMP_PREFIX: "${CI_PROJECT_DIR}/_install${ARTIFACTS_SUFFIX}" ## prepare docker images ## image-debian-x64: rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MESON_CLANG != null' - if: '$GIMP_CI_MESON_GCC != null' - if: '$GIMP_CI_RASTER_ICONS != null' - if: '$GIMP_CI_CROSSROAD_WIN64 != null' - if: '$GIMP_CI_SOURCES != null' - if: '$GIMP_CI_FLATPAK != null' # On merge requests and commits. - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "push"' # On releases. - if: '$CI_COMMIT_TAG != null' stage: prepare image: name: gcr.io/kaniko-project/executor:debug entrypoint: [""] variables: GIT_STRATEGY: none cache: {} script: - export container=docker - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - echo "FROM debian:bookworm" > Dockerfile - echo "RUN apt-get update" >> Dockerfile - echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile # libjxl uses C++ features that require posix threads so we install # specifically g++-mingw-w64-x86-64-posix and gcc-mingw-w64-x86-64-posix. # Note that we can't install both the -posix and -win32 versions since # update gcc-mingw-w64 (25). This is for crossroad builds only - echo "appstream at-spi2-core build-essential ccache clang cpio desktop-file-utils ffmpeg g++-mingw-w64-x86-64-posix gcc-mingw-w64-x86-64-posix gettext ghostscript gi-docgen git glib-networking gobject-introspection graphviz graphviz-dev hicolor-icon-theme iso-codes libaa1-dev libappstream-glib-dev libbz2-dev libcfitsio-dev libdbus-glib-1-dev libexif-dev libgexiv2-dev libgirepository1.0-dev libgs-dev libgtk-3-bin libgtk-3-dev libgudev-1.0-dev libheif-dev libjson-glib-dev libjxl-dev liblcms2-dev liblzma-dev libmng-dev libmypaint-dev libomp-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 python3-distutils python3-docutils python3-gi python3-pip python3-zstandard rpm valac xauth xsltproc xvfb xz-utils yelp-tools" >> Dockerfile - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:build-debian-latest --cache=true --cache-ttl=120h ## GNU/Linux 64-bit CIs (Debian bookworm) ## .deps-debian-base: extends: .default needs: ["image-debian-x64"] stage: dependencies image: $CI_REGISTRY_IMAGE:build-debian-latest script: # Clone babl and GEGL - if [ "$CI_COMMIT_TAG" != "" ]; then repo=https://gitlab.gnome.org/GNOME/babl.git; babl_tag=$(git ls-remote --tags --exit-code --refs "$repo" | grep -oi "BABL_[0-9]*_[0-9]*_[0-9]*" | sort --version-sort | tail -1); babl_branch="--branch=$babl_tag"; repo=https://gitlab.gnome.org/GNOME/gegl.git; gegl_tag=$(git ls-remote --tags --exit-code --refs "$repo" | grep -oi "GEGL_[0-9]*_[0-9]*_[0-9]*" | sort --version-sort | tail -1); gegl_branch="--branch=$gegl_tag"; fi - git clone $babl_branch --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/babl.git _babl - git clone $gegl_branch --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/gegl.git _gegl # Build babl and GEGL - mkdir _babl/_build${ARTIFACTS_SUFFIX} && cd _babl/_build${ARTIFACTS_SUFFIX} - meson setup .. -Dprefix="${GIMP_PREFIX}" - ninja - ninja install - ccache --show-stats - mkdir ../../_gegl/_build${ARTIFACTS_SUFFIX} && cd ../../_gegl/_build${ARTIFACTS_SUFFIX} - meson setup .. -Dprefix="${GIMP_PREFIX}" - ninja - ninja install - ccache --show-stats artifacts: paths: - _install${ARTIFACTS_SUFFIX}/ - _babl/_build${ARTIFACTS_SUFFIX}/ - _gegl/_build${ARTIFACTS_SUFFIX}/ expire_in: 2 hours deps-debian-x64: extends: .deps-debian-base rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MESON_CLANG != null' - if: '$GIMP_CI_RASTER_ICONS != null' - if: '$GIMP_CI_CROSSROAD_WIN64 != null' - if: '$GIMP_CI_SOURCES != null' - if: '$GIMP_CI_FLATPAK != null' # On merge requests and commits. - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "push"' # On releases. - if: '$CI_COMMIT_TAG != null' # GitLab "rules:variables:" is buggy so let's use jobs deps-debian-gcc: extends: .deps-debian-base rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MESON_GCC != null' variables: CC: "ccache gcc" CXX: "ccache gcc" .gimp-debian-base: extends: .default needs: ["deps-debian-x64"] stage: gimp image: $CI_REGISTRY_IMAGE:build-debian-latest before_script: # Universal variables - !reference [.default, before_script] - git submodule update --init - mkdir -p _build${ARTIFACTS_SUFFIX} && cd _build${ARTIFACTS_SUFFIX} after_script: - ccache --show-stats artifacts: paths: - _install${ARTIFACTS_SUFFIX}/ - _build${ARTIFACTS_SUFFIX}/ expire_in: 1 days gimp-debian-x64: extends: .gimp-debian-base rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MESON_CLANG != null' - if: '$GIMP_CI_CROSSROAD_WIN64 != null' - if: '$GIMP_CI_SOURCES != null' - if: '$GIMP_CI_FLATPAK != null' # On merge requests and commits. - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "push"' # On releases. - if: '$CI_COMMIT_TAG != null' script: - meson setup .. -Dprefix="${GIMP_PREFIX}" -Dgi-docgen=enabled -Dg-ir-doc=true - ninja - ninja test # The src should not be changed by the build. If it is, something is # wrong. Let's print out the diff for debugging in such case, and # exit to fail the CI. - if [ $(git diff |wc -l) -ne 0 ]; then git diff; exit 1; fi - ninja dist - ninja install artifacts: paths: - _install${ARTIFACTS_SUFFIX}/ - _build${ARTIFACTS_SUFFIX}/config.h - _build${ARTIFACTS_SUFFIX}/meson-dist/ - _build${ARTIFACTS_SUFFIX}/devel-docs/ - _build${ARTIFACTS_SUFFIX}/build/flatpak/ - _build${ARTIFACTS_SUFFIX}/meson-logs/ reports: junit: "_build${ARTIFACTS_SUFFIX}/meson-logs/testlog.junit.xml" gimp-debian-gcc: extends: .gimp-debian-base rules: # Custom builds only (web GUI, API or schedules). - if: '$GIMP_CI_MESON_GCC != null' needs: ["deps-debian-gcc"] variables: CC: "ccache gcc" CXX: "ccache gcc" script: - meson setup .. -Dprefix="${GIMP_PREFIX}" - ninja - ninja test gimp-debian-raster-icons: extends: .gimp-debian-base rules: # Custom builds only (web GUI, API or schedules). - if: '$GIMP_CI_RASTER_ICONS != null' script: - meson setup .. -Dprefix="${GIMP_PREFIX}" -Dvector-icons=false - ninja - ninja test include: 'https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml' packaging-flatpak-x64: # See: https://gitlab.gnome.org/GNOME/Initiatives/-/wikis/DevOps-with-Flatpak # XXX This job is mostly the same as .flatpak job of # flatpak_ci_initiative.yml so far, except that we removed the # automatic tests since rebuilding plug-ins was not working and # one of the test (save-and-export) requires plug-ins to be built. extends: .default 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.*/' needs: ["gimp-debian-x64"] stage: packaging tags: - flatpak image: 'quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master' 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" cache: - key: "$CI_JOB_NAME" paths: - '.flatpak-builder/downloads' - '.flatpak-builder/git' - key: "$CI_JOB_NAME" paths: - '.flatpak-builder/cache' - '.flatpak-builder/ccache' script: # Report the installed versions of the runtime - flatpak info org.gnome.Platform - flatpak info org.gnome.Sdk # Install LLVM/Clang - flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak install --user flathub org.freedesktop.Sdk.Extension.llvm17 -y # Print the date, since appstream depends on local timezone - date && date -u # Get pre-configured manifest from Debian job - cp _build${ARTIFACTS_SUFFIX}/build/flatpak/*json build/flatpak/ # GNOME script to customize the manifest - rewrite-flatpak-manifest ${MANIFEST_PATH} ${FLATPAK_MODULE} ${CONFIG_OPTS} # Build deps and GIMP # (Our script is too long for Gitlab and no complete output would 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} 2>&1 | tee flatpak-builder.log # Generate a Flatpak bundle - flatpak build-bundle repo ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APP_ID} ${BRANCH} - tar cf repo.tar repo/ artifacts: expose_as: 'Linux flatpak' paths: - flatpak-builder.log # These are the same as flatpak_ci_initiative.yml as according to # docs, key values are not merged but replaced. - gimp-git.flatpak - repo.tar - '.flatpak-builder/build/gimp/_flatpak_build/meson-logs/meson-log.txt' - '.flatpak-builder/build/gimp/_flatpak_build/meson-logs/testlog.txt' expire_in: 1 week ## WINDOWS 64-bit CI (cross-build crossroad) ## .win-cross: extends: .default variables: BUILD_TYPE: "CI_CROSS" # Needed because by default, Debian has now changed # "sysconfig.get_default_scheme()" from "posix_prefix" to "posix_local" which # adds a local/ folder to the install prefix of setup.py. This environment # variable overrides this behavior. DEB_PYTHON_INSTALL_LAYOUT: "deb" PATH: "$CI_PROJECT_DIR/.local/bin:$CI_PROJECT_DIR/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" XDG_DATA_HOME: "$CI_PROJECT_DIR/.local/share/" XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache/" cache: key: $CI_JOB_NAME paths: - .cache/crossroad/ # TODO: Crossroads handling of universal variables still not perfect before_script: [] .win-x64-cross: rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_CROSSROAD_WIN64 != null' # On merge requests. - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # On commits except tags. - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null' deps-win-x64-cross: extends: .win-cross rules: - !reference [.win-x64-cross, rules] needs: ["image-debian-x64"] stage: dependencies image: $CI_REGISTRY_IMAGE:build-debian-latest script: - bash -x build/windows/gitlab-ci/1_build-deps-crossroad.sh - crossroad w64 gimp --run="build/windows/gitlab-ci/1_build-deps-crossroad.sh" artifacts: paths: - .local/ - _deps/_babl/_build-x64-cross/ - _deps/_gegl/_build-x64-cross/ expire_in: 2 hours gimp-win-x64-cross: extends: .win-cross rules: - !reference [.win-x64-cross, rules] needs: ["deps-win-x64-cross", "gimp-debian-x64"] stage: gimp image: $CI_REGISTRY_IMAGE:build-debian-latest script: - bash -x build/windows/gitlab-ci/2_build-gimp-crossroad.sh - crossroad w64 gimp --run="build/windows/gitlab-ci/2_build-gimp-crossroad.sh" artifacts: paths: - _install-x64-cross/ - _build-x64-cross/ expire_in: 1 day packaging-win-x64-nightly: extends: .win-cross rules: - !reference [.win-x64-cross, rules] needs: ["gimp-win-x64-cross"] stage: packaging variables: CROSSROAD_PLATFORM: "w64" cache: [] script: - apt-get update - apt-get install -y --no-install-recommends binutils binutils-mingw-w64-x86-64 file libglib2.0-bin python3 - bash -x build/windows/gitlab-ci/3_package-gimp-uni_base.sh - cd gimp-x64 - bash -x ../build/windows/gitlab-ci/3_package-gimp-uni_sym.sh artifacts: expose_as: 'Windows zip' paths: - gimp-x64/ - done-dll.list expire_in: 2 days ## WINDOWS Aarch64 CI (native MSYS2) ## .win: extends: .default rules: # 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.*/' # On releases. - if: '$CI_COMMIT_TAG != null' variables: BUILD_TYPE: "CI_NATIVE" CHERE_INVOKING: "yes" # We use the same universal variables but not directly from PS before_script: [] .win-a64: extends: .win rules: - !reference [.win, rules] # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MSYS2_WIN_AARCH64 != null' tags: - windows-aarch64 variables: MSYSTEM: "CLANGARM64" before_script: # Verification to prevent the job from failing because stuck pacman (ARM only) - $stuck = Test-Path -Path "C:\msys64\var\lib\pacman\db.lck" -PathType Leaf - if ($stuck -eq "True") { Remove-Item -Force -Path "C:\msys64\var\lib\pacman\db.lck"; Write-Output "Cleaned previous stuck pacman" } - taskkill /F /FI "MODULES eq msys-2.0.dll" - Start-Job -ScriptBlock{sleep 90; taskkill /t /F /IM "pacman.exe"} deps-win-a64: extends: .win-a64 rules: - !reference [.win-a64, rules] needs: [] stage: dependencies script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/1_build-deps-msys2.sh" artifacts: paths: - _install-a64/ expire_in: 2 hours gimp-win-a64: extends: .win-a64 rules: - !reference [.win-a64, rules] needs: ["deps-win-a64"] stage: gimp script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/2_build-gimp-msys2.sh" artifacts: paths: - _install-a64/ - _build-a64/build/windows/installer/ - _build-a64/meson-*/ # Needed by 4_dist-gimp-inno.ps1 in dist-installer-weekly - _build-a64/config.h expire_in: 1 day packaging-win-a64: extends: .win-a64 rules: - !reference [.win-a64, rules] needs: ["gimp-win-a64"] stage: packaging cache: [] script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/3_package-gimp-uni_base.sh" - cd gimp-a64 - C:\msys64\usr\bin\bash -lc "bash -x ../build/windows/gitlab-ci/3_package-gimp-uni_sym.sh" artifacts: paths: - gimp-a64/ # Just passing-through splash and language files for the Windows installer. - _build-a64/build/windows/installer/ # Needed by 4_dist-gimp-inno.ps1 in dist-installer-weekly - _build-a64/config.h - done-dll.list expire_in: 1 day ## WINDOWS x86_64 CI (native MSYS2) ## .win-x64: extends: .win rules: - !reference [.win, rules] # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MSYS2_WIN64 != null' tags: - win32-ps variables: MSYSTEM: "CLANG64" deps-win-x64: extends: .win-x64 rules: - !reference [.win-x64, rules] needs: [] stage: dependencies script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/1_build-deps-msys2.sh" artifacts: paths: - _install-x64/ expire_in: 2 hours gimp-win-x64: extends: .win-x64 rules: - !reference [.win-x64, rules] needs: ["deps-win-x64"] stage: gimp script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/2_build-gimp-msys2.sh" artifacts: paths: - _install-x64/ - _build-x64/meson-*/ expire_in: 1 day packaging-win-x64: extends: .win-x64 rules: - !reference [.win-x64, rules] needs: ["gimp-win-x64"] stage: packaging cache: [] script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/3_package-gimp-uni_base.sh" - cd gimp-x64 - C:\msys64\usr\bin\bash -lc "bash -x ../build/windows/gitlab-ci/3_package-gimp-uni_sym.sh" artifacts: paths: - gimp-x64/ - done-dll.list expire_in: 1 day ## WINDOWS x86 CI (native MSYS2) ## .win-x86: extends: .win rules: - !reference [.win, rules] # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_MSYS2_WIN32 != null' tags: - win32-ps variables: MSYSTEM: "MINGW32" CC: "ccache cc" CXX: "ccache c++" deps-win-x86: extends: .win-x86 rules: - !reference [.win-x86, rules] needs: [] stage: dependencies script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/1_build-deps-msys2.sh" artifacts: paths: - _install-x86/ expire_in: 2 hours gimp-win-x86: extends: .win-x86 rules: - !reference [.win-x86, rules] needs: ["deps-win-x86"] stage: gimp script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/2_build-gimp-msys2.sh" artifacts: paths: - _install-x86/ - _build-x86/meson-*/ expire_in: 1 day packaging-win-x86: extends: .win-x86 rules: - !reference [.win-x86, rules] needs: ["gimp-win-x86"] stage: packaging cache: [] script: - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/3_package-gimp-uni_base.sh" - cd gimp-x86 - C:\msys64\usr\bin\bash -lc "bash -x ../build/windows/gitlab-ci/3_package-gimp-uni_sym.sh" artifacts: paths: - gimp-x86/ - done-dll.list expire_in: 1 day ## Ready-to-distribute ## sources-debian: extends: .default rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_SOURCES != null' # On commits. - if: '$CI_PIPELINE_SOURCE == "push"' # On releases. - if: '$CI_COMMIT_TAG != null' needs: ["gimp-debian-x64"] stage: distribution cache: [] script: - mv _build${ARTIFACTS_SUFFIX}/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: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_SOURCES != null' # On commits. - if: '$CI_PIPELINE_SOURCE == "push"' # On releases. - if: '$CI_COMMIT_TAG != null' needs: ["deps-debian-x64", "gimp-debian-x64"] stage: distribution image: $CI_REGISTRY_IMAGE:build-debian-latest cache: [] script: - BABL_VER=$(grep BABL_VERSION _babl/_build${ARTIFACTS_SUFFIX}/config.h | head -1 | sed 's/^.*"\([^"]*\)"$/\1/') && BABL_API_VER=$(grep BABL_API_VERSION _babl/_build${ARTIFACTS_SUFFIX}/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${ARTIFACTS_SUFFIX}/config.h |head -1 |sed 's/^[^0-9]*\([0-9]*\).*$/\1/') && GEGL_MIN_VER=$(grep GEGL_MINOR_VERSION _gegl/_build${ARTIFACTS_SUFFIX}/config.h |head -1 |sed 's/^[^0-9]*\([0-9]*\).*$/\1/') && GEGL_MIC_VER=$(grep GEGL_MICRO_VERSION _gegl/_build${ARTIFACTS_SUFFIX}/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${ARTIFACTS_SUFFIX}/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 && mv _build${ARTIFACTS_SUFFIX}/devel-docs/g-ir-docs $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 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-flatpak-weekly: extends: '.publish_nightly' rules: # Custom builds though web GUI, API or schedules. - if: '$GIMP_CI_FLATPAK != null' needs: ["packaging-flatpak-x64"] stage: distribution dist-installer-weekly: extends: .win rules: - !reference [.win, rules] needs: ["packaging-win-a64", "packaging-win-x64", "packaging-win-x86"] stage: distribution tags: - win32-ps script: - build/windows/gitlab-ci/4_dist-gimp-inno.ps1 | Out-File -FilePath installer.log artifacts: expose_as: 'Windows exe' paths: - build/windows/installer/_Output/ - installer.log expire_in: 1 week ## Analysis ## clang-format: only: - merge_requests needs: [] stage: analysis script: - apt-get update - apt-get install -y clang-format git - .gitlab/run_style_check_diff.sh allow_failure: true artifacts: when: on_failure paths: ['fetch_upstream.log', 'fetch_origin.log'] expire_in: 1 week cppcheck: extends: .default rules: # Custom builds only (web GUI, API or schedules). - if: '$GIMP_CI_CPPCHECK != null' needs: [] stage: analysis cache: [] 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-x64 -i _build-x86 -i _deps -i _install-x64 -i _install-x86 -i .local -i .cache . - mkdir report - cppcheck-htmlreport --source-dir=. --title=gimp --file=cppcheck.xml --report-dir=report artifacts: paths: - report expire_in: 1 week