gimp/.gitlab-ci.yml

492 lines
17 KiB
YAML

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:
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:
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:
extends: .gimp-debian-base
script:
- meson _build
--prefix="${INSTALL_PREFIX}"
- ninja -C _build
- ninja -C _build test
gimp-clang-debian:
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 ##
deps-win64:
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/crossbuild-gitlab-ci/build-deps.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:
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 ##
deps-win32:
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/crossbuild-gitlab-ci/build-deps.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:
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.*
- SHA256SUMS
script:
- mv _build/gimp-*.tar.* .
- sha256sum gimp-*.tar.* > SHA256SUMS
needs: ["gimp-distcheck-debian"]
win64-nightly:
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/crossbuild-gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
- python3 build/windows/crossbuild-gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-console-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
- python3 build/windows/crossbuild-gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-test-clipboard-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
- python3 build/windows/crossbuild-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/crossbuild-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/crossbuild-gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
done
- for dll in ${GIMP_DISTRIB}/lib/gio/modules/*.dll; do
python3 build/windows/crossbuild-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/crossbuild-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/crossbuild-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/crossbuild-gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
done
needs: ["gimp-win64"]
win32-nightly:
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/crossbuild-gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
- python3 build/windows/crossbuild-gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-console-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
- python3 build/windows/crossbuild-gitlab-ci/dll_link.py ${GIMP_DISTRIB}/bin/gimp-test-clipboard-2.99.exe ${GIMP_PREFIX}/ ${GIMP_DISTRIB}
- python3 build/windows/crossbuild-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/crossbuild-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/crossbuild-gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
done
- for dll in ${GIMP_DISTRIB}/lib/gio/modules/*.dll; do
python3 build/windows/crossbuild-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/crossbuild-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/crossbuild-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/crossbuild-gitlab-ci/dll_link.py $dll ${GIMP_PREFIX}/ ${GIMP_DISTRIB};
done
needs: ["gimp-win32", "deps-win64"]