# 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. # - GIMP_CI_RASTER_ICONS: trigger the autotools and meson builds without vector icons. 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' - if: '$GIMP_CI_RASTER_ICONS != null' stage: prepare variables: GIT_STRATEGY: none cache: {} image: name: gcr.io/kaniko-project/executor:debug entrypoint: [""] 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:testing" > Dockerfile - echo "RUN apt-get update" >> Dockerfile - echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile - echo "appstream at-spi2-core automake autopoint build-essential desktop-file-utils ffmpeg gettext ghostscript git glib-networking gobject-introspection graphviz graphviz-dev hicolor-icon-theme 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 libheif-dev libjson-glib-dev libjxl-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 python3-pip valac xauth xsltproc xvfb xz-utils yelp-tools" >> Dockerfile - echo "RUN pip3 install --no-cache-dir gi-docgen jinja2 Markdown markupsafe pygments toml typogrify" >> 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: - 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:testing" > Dockerfile - echo "RUN apt-get update" >> Dockerfile - echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile - echo "automake autopoint build-essential cmake cpio g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 gettext git libgdk-pixbuf2.0-dev libglib2.0-bin librsvg2-dev 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: - 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:testing" > Dockerfile - echo "RUN apt-get update" >> Dockerfile - echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile - echo "automake autopoint build-essential cpio g++-mingw-w64-i686 gcc-mingw-w64-i686 gettext git libgdk-pixbuf2.0-dev libglib2.0-bin librsvg2-dev 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' - if: '$GIMP_CI_RASTER_ICONS != 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-gi-docgen --enable-g-ir-doc --enable-windows-installer - make -j "$(nproc)" - make -j "$(nproc)" check - make -j "$(nproc)" distcheck gimp-meson-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_MESON_GCC != null' - if: '$GIMP_CI_SOURCES != null' extends: .gimp-debian-base script: - meson _build --prefix="${INSTALL_PREFIX}" -Dg-ir-doc=true -Dgi-docgen=enabled - ninja -C _build - ninja -C _build 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 -C _build dist - ninja -C _build install 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 gimp-meson-raster-icons: rules: # Custom builds only (web GUI, API or schedules). - if: '$GIMP_CI_RASTER_ICONS != null' extends: .gimp-debian-base script: - meson _build --prefix="${INSTALL_PREFIX}" -Dvector-icons=false - ninja -C _build - ninja -C _build test gimp-autotools-raster-icons: rules: # Custom builds only (web GUI, API or schedules). - if: '$GIMP_CI_RASTER_ICONS != null' extends: .gimp-debian-base script: - tools/generate-icon-makefiles.py - diff="$(git diff)" - if [ -n "$diff" ]; then echo "Outdated icon-list.mk - please run tools/generate-icon-makefiles.py"; echo "$diff"; exit 1; fi - mkdir _build - cd _build - ../autogen.sh --prefix="${INSTALL_PREFIX}" --disable-vector-icons - make -j "$(nproc)" ## 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/ - done-dll.list 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 - done-dll.list 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 .. -Dgi-docgen=disabled && 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 -Dgi_docgen=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: 'quay.io/gnome_infrastructure/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: [] clang-format: only: - merge_requests stage: analysis before_script: - apt-get update - apt-get install -y clang-format git allow_failure: true script: - .gitlab/run_style_check_diff.sh artifacts: paths: ['fetch_upstream.log', 'fetch_origin.log'] when: on_failure expire_in: 1 week 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-autotools: 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 . - BASENAME=`ls gimp-*.tar.bz2 | sed 's/.tar.bz2//'` && FILENAME="$BASENAME-autotools.tar.bz2" && mv $BASENAME.tar.bz2 $FILENAME && sha256sum gimp-*.tar.bz2 > ${FILENAME}.SHA256SUMS && sha512sum gimp-*.tar.bz2 > ${FILENAME}.SHA512SUMS needs: ["gimp-distcheck-debian"] sources-meson: 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-meson-debian artifacts: name: "GIMP-sources-meson-${CI_COMMIT_SHORT_SHA}" when: always expire_in: 2 days paths: - gimp-*.tar.xz - gimp-*.tar.xz.SHA256SUMS - gimp-*.tar.xz.SHA512SUMS script: - mv _build/meson-dist/gimp-*.tar.xz . - FILENAME=`ls gimp-*.tar.xz` && sha256sum gimp-*.tar.xz > ${FILENAME}.SHA256SUMS && sha512sum gimp-*.tar.xz > ${FILENAME}.SHA512SUMS needs: ["gimp-meson-debian"] dev-docs: 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 image: $CI_REGISTRY_IMAGE:build-debian-latest dependencies: - gimp-meson-debian artifacts: name: "GIMP-sources-${CI_COMMIT_SHORT_SHA}" when: always expire_in: 2 days paths: - gimp-api-docs-*.tar.xz - gimp-api-docs-*.tar.xz.SHA256SUMS - gimp-api-docs-*.tar.xz.SHA512SUMS script: - GIMP_VER=$(grep GIMP_VERSION _build/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 "${INSTALL_PREFIX}/share/doc/gimp-$APP_VER" $DIR_NAME/reference && mv _build/devel-docs/g-ir-docs $DIR_NAME/ && TAR_NAME="$DIR_NAME.tar.xz" && tar -cJf ${TAR_NAME} $DIR_NAME && sha256sum $TAR_NAME > ${TAR_NAME}.SHA256SUMS && sha512sum $TAR_NAME > ${TAR_NAME}.SHA512SUMS needs: ["gimp-meson-debian"] 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'