image: debian:testing stages: - prepare - dependencies - gimp - analysis - distribution 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: 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: - if: '$CI_COMMIT_TAG == 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-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: - if: '$CI_COMMIT_TAG == 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: 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-autotools-debian: extends: .gimp-debian-base script: - mkdir _build - cd _build - ../autogen.sh --prefix="${INSTALL_PREFIX}" --enable-debug - make -j "$(nproc)" - make check gimp-distcheck-debian: extends: .gimp-debian-base script: - mkdir _build - cd _build - ../autogen.sh --prefix="${INSTALL_PREFIX}" --enable-debug --enable-gtk-doc - make -j "$(nproc)" - make -j "$(nproc)" distcheck gimp-meson-debian: rules: - if: '$CI_COMMIT_TAG == null' extends: .gimp-debian-base script: - meson _build --prefix="${INSTALL_PREFIX}" - ninja -C _build - ninja -C _build test gimp-clang-debian: rules: - if: '$CI_COMMIT_TAG == 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: stage: dependencies variables: MSYSTEM: "MINGW64" CHERE_INVOKING: "yes" tags: - win32-ps cache: paths: - _install/ 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 needs: [] gimp-win64-native: 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: 2 days paths: - _install cache: paths: - _ccache/ needs: ["deps-win64-native"] ## WINDOWS 64-bit CI (cross-build crossroad) ## deps-win64: rules: - if: '$CI_COMMIT_TAG == 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" - 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: - if: '$CI_COMMIT_TAG == 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 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: - if: '$CI_COMMIT_TAG == 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: - if: '$CI_COMMIT_TAG == 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 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/ cppcheck: 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 ## sources: 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: - if: '$CI_COMMIT_TAG == 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: - if: '$CI_COMMIT_TAG == 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"]