Nightly PKG #1971
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Nightly PKG | |
| on: | |
| schedule: | |
| - cron: "0 0 * * *" | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| actions: write # We need this to be able to cancel workflow if job fails | |
| jobs: | |
| AppImage: | |
| if: github.repository == 'darktable-org/darktable' || github.event_name == 'workflow_dispatch' | |
| name: Nightly darktable AppImage | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-22.04, ubuntu-24.04-arm] | |
| branch: | |
| - { code: master, label: gitmaster } | |
| include: | |
| - os: ubuntu-22.04 | |
| compiler: { compiler: GNU12, CC: gcc-12, CXX: g++-12, packages: gcc-12 g++-12 } | |
| - os: ubuntu-24.04-arm | |
| compiler: { compiler: GNU14, CC: gcc-14, CXX: g++-14, packages: gcc-14 g++-14 } | |
| env: | |
| CC: ${{ matrix.compiler.CC }} | |
| CXX: ${{ matrix.compiler.CXX }} | |
| SRC_DIR: ${{ github.workspace }}/src | |
| BUILD_DIR: ${{ github.workspace }}/build | |
| INSTALL_PREFIX: ${{ github.workspace }}/AppDir/usr | |
| CMAKE_BUILD_TYPE: ${{ matrix.btype }} | |
| GENERATOR: ${{ matrix.generator }} | |
| TARGET: ${{ matrix.target }} | |
| BRANCH: ${{ matrix.branch.code }} | |
| BUILD_NAME: ${{ matrix.branch.label }} | |
| steps: | |
| - name: Install compiler ${{ matrix.compiler.compiler }} | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get -y install \ | |
| ${{ matrix.compiler.packages }} | |
| - name: Install Base Dependencies | |
| run: | | |
| sudo apt-get -y install \ | |
| build-essential \ | |
| appstream-util \ | |
| desktop-file-utils \ | |
| gettext \ | |
| git \ | |
| gdb \ | |
| intltool \ | |
| libatk1.0-dev \ | |
| libcairo2-dev \ | |
| libcolord-dev \ | |
| libcolord-gtk-dev \ | |
| libcups2-dev \ | |
| libcurl4-gnutls-dev \ | |
| libimage-exiftool-perl \ | |
| libfuse2 \ | |
| libgdk-pixbuf2.0-dev \ | |
| libglib2.0-dev \ | |
| libgmic-dev \ | |
| libgraphicsmagick1-dev \ | |
| libgtk-3-dev \ | |
| libinih-dev \ | |
| libjson-glib-dev \ | |
| liblcms2-dev \ | |
| liblensfun-dev \ | |
| liblensfun-bin \ | |
| liblensfun-data-v1 \ | |
| liblensfun1 \ | |
| libosmgpsmap-1.0-dev \ | |
| libpango1.0-dev \ | |
| libpng-dev \ | |
| libportmidi-dev \ | |
| libpotrace-dev \ | |
| libpugixml-dev \ | |
| librsvg2-dev \ | |
| libsaxon-java \ | |
| libsdl2-dev \ | |
| libsecret-1-dev \ | |
| libsqlite3-dev \ | |
| libtiff5-dev \ | |
| libwebp-dev \ | |
| libx11-dev \ | |
| libxml2-dev \ | |
| libxml2-utils \ | |
| ninja-build \ | |
| perl \ | |
| po4a \ | |
| python3-jsonschema \ | |
| xsltproc \ | |
| zlib1g-dev \ | |
| appstream | |
| - name: Add PPA for newer multimedia libs (x86_64 only) | |
| if: runner.arch != 'ARM64' | |
| run: | | |
| sudo add-apt-repository -y ppa:savoury1/graphics | |
| sudo add-apt-repository -y ppa:savoury1/ffmpeg4 | |
| sudo add-apt-repository -y ppa:savoury1/display | |
| sudo apt-get update | |
| - name: Install extra dependencies | |
| run: | | |
| sudo apt-get -y install \ | |
| aom-tools \ | |
| libaom-dev \ | |
| libavif-dev \ | |
| libgphoto2-dev \ | |
| libde265-dev \ | |
| libimath-dev \ | |
| libjpeg-turbo8-dev \ | |
| libjxl-dev \ | |
| libopenexr-dev \ | |
| libopenh264-dev \ | |
| libopenjp2-7-dev \ | |
| libsharpyuv-dev \ | |
| libx265-dev \ | |
| libwebm-dev \ | |
| x11proto-dev \ | |
| libxfixes-dev | |
| - name: Build and install fresh libheif with built-in decoders | |
| run: | | |
| git clone --branch v1.21.2 --depth 1 https://github.com/strukturag/libheif src-libheif | |
| cd src-libheif | |
| cmake -S . -B build -G Ninja \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DENABLE_PLUGIN_LOADING=OFF \ | |
| -DWITH_LIBDE265=ON \ | |
| -DWITH_AOM_DECODER=ON \ | |
| -DWITH_AOM_ENCODER=ON \ | |
| -DWITH_OpenH264_DECODER=ON \ | |
| -DWITH_JPEG_DECODER=ON \ | |
| -DWITH_OpenJPEG_DECODER=ON \ | |
| -DWITH_LIBSHARPYUV=ON \ | |
| -DCMAKE_INSTALL_PREFIX=/usr | |
| ninja -C build | |
| sudo ninja -C build install | |
| cd .. | |
| - name: Build and install a more recent version of exiv2 | |
| run: | | |
| git clone --branch v0.28.8 --depth 1 https://github.com/Exiv2/exiv2 src-exiv2 | |
| cd src-exiv2 | |
| cmake -S . -B build -G Ninja \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DBUILD_SHARED_LIBS=ON \ | |
| -DEXIV2_ENABLE_NLS=ON \ | |
| -DEXIV2_ENABLE_VIDEO=OFF \ | |
| -DCMAKE_INSTALL_PREFIX=/usr | |
| cmake --build build | |
| sudo cmake --install build | |
| cd .. | |
| - name: Cancel workflow if job fails | |
| if: ${{ failure() }} | |
| uses: andymckay/cancel-action@0.5 | |
| - name: Checkout darktable master branch | |
| run: | | |
| # Note that we can't make a shallow clone to reduce clone traffic and time, as we have to | |
| # fetch the entire history to correctly generate the version for the AppImage filename | |
| git clone -b ${{ github.ref_name }} https://github.com/${{ github.repository }} src | |
| pushd src | |
| git submodule init | |
| git config submodule.src/tests/integration.update none | |
| git submodule update | |
| popd | |
| - name: Update Lensfun data | |
| run: | | |
| sudo lensfun-update-data | |
| - name: Build and Install | |
| run: | | |
| cd src | |
| bash tools/appimage-build-script.sh | |
| - name: Package upload | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: ${{ github.workspace }}/src/build/Darktable-*.AppImage* | |
| name: artifact-appimage-${{ runner.arch }} | |
| retention-days: 1 | |
| Windows: | |
| if: github.repository == 'darktable-org/darktable' || github.event_name == 'workflow_dispatch' | |
| name: Nightly darktable Windows | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| btype: | |
| - Release | |
| msystem: | |
| - UCRT64 | |
| - CLANGARM64 | |
| target: | |
| - skiptest | |
| generator: | |
| - Ninja | |
| eco: [-DBINARY_PACKAGE_BUILD=ON] | |
| include: | |
| - msystem: UCRT64 | |
| os: windows-latest | |
| - msystem: CLANGARM64 | |
| os: windows-11-arm | |
| defaults: | |
| run: | |
| shell: msys2 {0} | |
| env: | |
| SRC_DIR: ${{ github.workspace }}/src | |
| BUILD_DIR: ${{ github.workspace }}/build | |
| INSTALL_PREFIX: ${{ github.workspace }}/install | |
| ECO: ${{ matrix.eco }} | |
| CMAKE_BUILD_TYPE: ${{ matrix.btype }} | |
| TARGET: ${{ matrix.target }} | |
| GENERATOR: ${{ matrix.generator }} | |
| steps: | |
| - uses: msys2/setup-msys2@v2 | |
| with: | |
| msystem: ${{ matrix.msystem }} | |
| install: >- | |
| git | |
| intltool | |
| po4a | |
| pacboy: >- | |
| cc:p | |
| cmake:p | |
| libxslt:p | |
| ninja:p | |
| python-jsonschema:p | |
| curl:p | |
| drmingw:p | |
| gcc-libs:p | |
| gettext:p | |
| gmic:p | |
| graphicsmagick:p | |
| gtk3:p | |
| icu:p | |
| imath:p | |
| iso-codes:p | |
| lcms2:p | |
| lensfun:p | |
| libavif:p | |
| libgphoto2:p | |
| libheif:p | |
| libjpeg-turbo:p | |
| libjxl:p | |
| libpng:p | |
| librsvg:p | |
| libsecret:p | |
| libtiff:p | |
| libwebp:p | |
| libxml2:p | |
| lua:p | |
| omp:p | |
| openexr:p | |
| openjpeg2:p | |
| osm-gps-map:p | |
| portmidi:p | |
| potrace:p | |
| pugixml:p | |
| SDL2:p | |
| sqlite3:p | |
| webp-pixbuf-loader:p | |
| zlib:p | |
| update: false | |
| - name: Build and install the latest compatible version of exiv2 | |
| run: | | |
| git clone --branch v0.27.7 --depth 1 https://github.com/Exiv2/exiv2 src-exiv2 | |
| cd src-exiv2 | |
| cmake -S . -B build -G Ninja \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DBUILD_SHARED_LIBS=ON \ | |
| -DEXIV2_ENABLE_BMFF=ON \ | |
| -DEXIV2_ENABLE_NLS=ON \ | |
| -DEXIV2_ENABLE_VIDEO=OFF \ | |
| -DEXIV2_ENABLE_WIN_UNICODE=ON \ | |
| -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} | |
| cmake --build build | |
| cmake --install build | |
| cd .. | |
| - name: Cancel workflow if job fails | |
| if: ${{ failure() }} | |
| uses: andymckay/cancel-action@0.5 | |
| - run: git config --global core.autocrlf input | |
| shell: bash | |
| - name: Checkout darktable master branch | |
| run: | | |
| # Note that we can't make a shallow clone to reduce clone traffic and time, as we have to | |
| # fetch the entire history to correctly generate the version for the installation package filename | |
| git clone -b ${{ github.ref_name }} https://github.com/${{ github.repository }} src | |
| pushd src | |
| git submodule init | |
| git config submodule.src/tests/integration.update none | |
| git submodule update | |
| popd | |
| - name: Update Lensfun data | |
| run: | | |
| lensfun-update-data | |
| - name: Build and Install | |
| run: | | |
| cmake -E make_directory "${BUILD_DIR}" | |
| cmake -E make_directory "${INSTALL_PREFIX}" | |
| $(cygpath ${SRC_DIR})/.ci/ci-script.sh | |
| - name: Create multi-resolution icon file | |
| run: | | |
| # Create multi-resolution .ico file expected by the .iss script for use as setup file icon. | |
| # Use MSYS2 ImageMagick as pre-installed IM is not working on the WoA runner. | |
| pacboy --noconfirm -S --needed imagemagick:p | |
| magick "${SRC_DIR}"/data/pixmaps/256x256/darktable.png -define icon:auto-resize="256,128,64,48,32,16" "${INSTALL_PREFIX}"/dt_logo_multiresolution.ico | |
| - name: Create Inno Setup installer | |
| shell: pwsh | |
| run: | | |
| choco upgrade innosetup --no-progress | |
| cd ${{ env.INSTALL_PREFIX }} | |
| cp ${{ env.BUILD_DIR }}/darktable.iss ./ | |
| iscc "darktable.iss" | |
| mv Output/*.exe ${{ env.BUILD_DIR }}/ | |
| - name: Create NSIS installer | |
| if: runner.arch != 'ARM64' | |
| run: | | |
| pacboy --noconfirm -S --needed nsis:p | |
| cd "${BUILD_DIR}" | |
| cmake --build "${BUILD_DIR}" --target package | |
| - name: Get version info | |
| run: | | |
| cd ${SRC_DIR} | |
| echo "VERSION=$(git describe --tags --match release-* | sed 's/^release-//;s/-/+/;s/-/~/;s/rc/~rc/')" >> $GITHUB_ENV | |
| ([[ ${MSYSTEM_CARCH} == x86_64 ]] && echo "SYSTEM=win64" || echo "SYSTEM=woa64") >> $GITHUB_ENV | |
| - name: Package upload | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: ${{ env.BUILD_DIR }}/*.exe | |
| name: artifact-windows-${{ runner.arch }} | |
| retention-days: 2 | |
| macOS: | |
| if: github.repository == 'darktable-org/darktable' || github.event_name == 'workflow_dispatch' | |
| name: Nightly darktable macOS | |
| runs-on: ${{ matrix.build.os }} | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| build: | |
| - { os: macos-14, xcode: 16.2, deployment: 14.0 } # AppleClang 16, arm64 | |
| - { os: macos-15-intel, xcode: 26.2, deployment: 15.0 } # AppleClang 17, x86_64 | |
| compiler: | |
| - { compiler: XCode, CC: cc, CXX: c++ } | |
| btype: [ Release ] | |
| eco: [-DBINARY_PACKAGE_BUILD=ON -DBUILD_CURVE_TOOLS=ON -DBUILD_NOISE_TOOLS=ON -DUSE_GRAPHICSMAGICK=ON -DUSE_IMAGEMAGICK=OFF] | |
| target: | |
| - skiptest | |
| generator: | |
| - Ninja | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_${{ matrix.build.xcode }}.app/Contents/Developer | |
| CC: ${{ matrix.compiler.CC }} | |
| CXX: ${{ matrix.compiler.CXX }} | |
| MACOSX_DEPLOYMENT_TARGET: ${{ matrix.build.deployment }} | |
| SRC_DIR: ${{ github.workspace }}/src | |
| BUILD_DIR: ${{ github.workspace }}/src/build | |
| INSTALL_PREFIX: ${{ github.workspace }}/src/build/macosx | |
| ECO: ${{ matrix.eco }} | |
| CMAKE_BUILD_TYPE: ${{ matrix.btype }} | |
| GENERATOR: ${{ matrix.generator }} | |
| TARGET: ${{ matrix.target }} | |
| steps: | |
| - name: Checkout darktable master branch | |
| run: | | |
| # Note that we can't make a shallow clone to reduce clone traffic and time, as we have to | |
| # fetch the entire history to correctly generate the version for the disk image filename | |
| git clone -b ${{ github.ref_name }} https://github.com/${{ github.repository }} src | |
| pushd src | |
| git submodule init | |
| git config submodule.src/tests/integration.update none | |
| git submodule update | |
| popd | |
| - name: Install Base Dependencies | |
| run: | | |
| brew update > /dev/null || true | |
| cd src/.ci | |
| export HOMEBREW_NO_INSTALL_UPGRADE=1 | |
| brew bundle --verbose || true | |
| # rebuild graphicsmagick for macOS bundling | |
| export HOMEBREW_NO_INSTALL_FROM_API=1 | |
| gm_formula=`brew edit --print-path graphicsmagick` | |
| cat $gm_formula | sed 's/--with-modules/--disable-installed/1' > gm_formula.tmp | |
| mv gm_formula.tmp $gm_formula | |
| brew reinstall --build-from-source --force graphicsmagick | |
| # handle keg-only libs | |
| brew link --force libomp | |
| brew link --force libsoup | |
| - name: Cancel workflow if job fails | |
| if: ${{ failure() }} | |
| uses: andymckay/cancel-action@0.5 | |
| - name: Build and Install | |
| run: | | |
| cmake -E make_directory "${BUILD_DIR}"; | |
| cmake -E make_directory "${INSTALL_PREFIX}"; | |
| ./src/.ci/ci-script.sh; | |
| - name: Build macOS package | |
| run: | | |
| ./src/packaging/macosx/3_make_hb_darktable_package.sh | |
| - name: Create DMG file | |
| run: | | |
| ./src/packaging/macosx/4_make_hb_darktable_dmg.sh | |
| - name: Get version info | |
| run: | | |
| cd ${SRC_DIR} | |
| echo "VERSION=$(git describe --tags --match release-* | sed 's/^release-//;s/-/+/;s/-/~/;s/rc/~rc/')" >> $GITHUB_ENV | |
| echo "ARCHITECTURE=$(uname -m)" >> $GITHUB_ENV | |
| - name: Package upload | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: ${{ env.INSTALL_PREFIX }}/darktable-${{ env.VERSION }}-${{ env.ARCHITECTURE }}.dmg | |
| name: artifact-macos-${{ runner.arch }} | |
| retention-days: 2 | |
| upload_to_release: | |
| permissions: | |
| # We need write permission to update the nightly tag | |
| contents: write | |
| runs-on: ubuntu-latest | |
| needs: [AppImage, Windows, macOS] | |
| steps: | |
| - name: Checkout master to update 'nightly' tag | |
| if: github.ref_name == 'master' # will be true only for nightly builds | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: master | |
| submodules: false | |
| path: src | |
| fetch-depth: 1 | |
| - name: Force move 'nightly' tag | |
| if: github.ref_name == 'master' # will be true only for nightly builds | |
| run: | | |
| pushd src | |
| git tag --force nightly | |
| git push origin nightly --force | |
| popd | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v8 | |
| - name: Get current date and set as environment variable | |
| run: | | |
| # Format date as YYYYMMDD | |
| NOW=$(date +'%Y%m%d') | |
| # Set the environment variable for subsequent steps | |
| echo "RELEASE_DATE=$NOW" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Create GitHub release | |
| uses: ncipollo/release-action@v1.20.0 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| allowUpdates: true # required to allow nightly release updates | |
| removeArtifacts: true # we don't want to pile up old artifacts in the nightly release | |
| tag: nightly | |
| prerelease: true | |
| # We don't want a stable release that is in the process of being prepared | |
| # and not yet ready for publication to be visible | |
| draft: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| name: 'Darktable nightly build ${{ env.RELEASE_DATE }}' | |
| # Please do not modify the body text by adding line breaks in paragraphs, as this text should display well on screens of different widths | |
| body: | | |
| This is a nightly build of Darktable. | |
| You can use this if you want to try new features without waiting for releases. From time to time, in development builds, old difficult-to-reproduce bugs are fixed, but it is also true that in the development process with the introduction of new complex code, the stability of the program may suffer compared to official releases, so **use it with caution**! | |
| Also, new versions can make changes to the database schema, so it's best to run them with a separate library. | |
| The `*-x86_64.AppImage` package is compatible with distribution releases that have glibc version 2.35 or higher. For example, if we consider some popular distributions, Ubuntu 22.04, Debian 12, Fedora 36 and newer releases are compatible. The `*-aarch64.AppImage` package requires glibc 2.39 or higher (e.g. Ubuntu 24.04, Debian 13, Fedora 40 and newer). | |
| The `*.AppImage.zsync` file is not intended to be downloaded and used locally. Just ignore it. This file contains technical information required by AppImage auto-updaters such as [AppImageUpdate](https://appimage.github.io/AppImageUpdate/). | |
| The Windows package `*-win64.exe` requires Windows with UCRT (Universal C Runtime), which is shipped with Windows 10+. Darktable should also work on Windows 8.1 [on condition that you install this runtime yourself](https://support.microsoft.com/en-us/topic/update-for-universal-c-runtime-in-windows-c0514201-7fe6-95a3-b0a5-287930f3560c). The `*-woa64.exe` package requires at least Windows 11. | |
| The macOS package `*-arm64.dmg` requires at least macOS 14.0 (Sonoma). The `*-x86_64.dmg` package requires at least macOS 15.0 (Sequoia). | |
| __Please help us improve Darktable by reporting any issues you encounter!__ :wink: | |
| artifacts: | | |
| artifact-appimage-*/* | |
| artifact-windows-*/* | |
| artifact-macos-*/* |