gimp/.gitlab-ci.yml

559 lines
19 KiB
YAML
Raw Normal View History

image: debian:testing
2019-08-21 19:54:38 +08:00
stages:
- prepare
- dependencies
- gimp
- analysis
- distribution
variables:
GIT_DEPTH: "1"
INSTALL_DIR: "_install"
2019-08-21 19:54:38 +08:00
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:
2019-08-21 19:54:38 +08:00
- "${INSTALL_DIR}"
- _babl/_build
- _gegl/_build
before_script:
- git clone --depth=${GIT_DEPTH} https://gitlab.gnome.org/GNOME/babl.git _babl
2019-08-21 19:54:38 +08:00
- 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
2019-08-21 19:54:38 +08:00
- 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:
2019-08-21 19:54:38 +08:00
- mkdir _build
- cd _build
- ../autogen.sh
2019-08-21 19:54:38 +08:00
--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
2019-08-09 22:18:43 +08:00
script:
- meson _build
--prefix="${INSTALL_PREFIX}"
- ninja -C _build
- ninja -C _build test
2019-08-09 22:18:43 +08:00
gimp-clang-debian:
rules:
- if: '$CI_COMMIT_TAG == null'
extends: .gimp-debian-base
2020-01-03 07:19:10 +08:00
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
2020-01-03 07:19:10 +08:00
- meson _build
--prefix="${INSTALL_PREFIX}"
- ninja -C _build
- ninja -C _build test
2020-01-03 07:19:10 +08:00
## 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) ##
2019-11-26 02:16:40 +08:00
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"]
2019-11-26 02:16:40 +08:00
gimp-win64:
rules:
- if: '$CI_COMMIT_TAG == null'
stage: gimp
image: $CI_REGISTRY_IMAGE:build-win64-latest
dependencies:
2019-11-26 02:16:40 +08:00
- 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="-"
2019-11-26 02:16:40 +08:00
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) ##
2019-11-26 02:16:40 +08:00
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"]
2019-11-26 02:16:40 +08:00
gimp-win32:
rules:
- if: '$CI_COMMIT_TAG == null'
stage: gimp
image: $CI_REGISTRY_IMAGE:build-win32-latest
dependencies:
2019-11-26 02:16:40 +08:00
- 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="-"
2019-11-26 02:16:40 +08:00
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
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
- 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/
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
# 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/
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
# 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
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
- 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/
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
# 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/
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
# I fail to install wine32 inside the Gitlab runner. So instead, I
# just reuse the loaders.cache generated in the deps-win64 job as
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
# 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
build: (Windows) glib-compile-schemas and gdk-pixbuf-query-loaders in… … the CI. There are 2 finale steps before finale binary distribution on Windows. We must compile the GSettings XML schema files and register GdkPixbuf loaders (for file format support in the GUI). I used to provide a wrapper to be run inside Windows before first GIMP run. Never did I realize that I can compile the distributed GSettings schemas with the native `glib-compile-schemas` (works fine in my tests). As for the GdkPixbuf loaders, we inspect DLL libraries, hence we do require the target `gdk-pixbuf-query-loaders` which is unfortunately a Windows executable. Yet it seems to work fine with Wine, so let's be done with it in the CI instead of requiring manual steps from testers of the CI builds. Then a few `sed` calls are enough to make the path in the produced text file relative instead of absolute (which works fine, again in my tests at least). This means that I don't have to distribute the 2 binaries and the DLLs they depend on anymore. Moreover let's remove the wrapper (but still generate one which just calls GIMP so that we call it from the tree root, where it's much less messy). Note: I failed to install wine32 (32-bit Wine) on the Gitlab runner. After following all instructions, I encountered weird errors. So instead, I just make the win32-nightly job depend on win64-nightly and copy `loaders.cache` from one to another, as it is a platform-independent text file (as long as we provide the same GdkPixbuf loaders on both of course, which we do).
2020-10-02 18:46:32 +08:00
# 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"]