Merge pull request #7269 from Benitoite/patch-45 #1910
This file contains 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: AppImage Build | |
on: | |
push: | |
branches: | |
- dev | |
- releases | |
- 'release-[0-9]+.*' | |
tags: | |
- '[0-9]+.*' | |
pull_request: | |
branches: | |
- dev | |
- releases | |
- 'release-[0-9]+.*' | |
workflow_dispatch: | |
env: | |
publish_pre_dev_labels: '[]' | |
jobs: | |
build: | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
build_type: [release, debug] | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install dependencies | |
run: | | |
echo "Running apt update." | |
sudo apt update | |
echo "Installing dependencies with apt." | |
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexpat1-dev libbrotli-dev zlib1g-dev libinih-dev adwaita-icon-theme-full gettext libarchive-tools zstd libgif-dev libwebp-dev libwebpdemux2 | |
- name: Install makedeb | |
run: | | |
echo "Installing makedeb..." | |
curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o makedeb.deb \ | |
"https://github.com/makedeb/makedeb/releases/download/v16.1.0-beta1/makedeb-beta_16.1.0-beta1_amd64_focal.deb" | |
DEBIAN_FRONTEND=noninteractive sudo dpkg -i makedeb.deb | |
- name: Install libjxl | |
working-directory: tools/makedeb | |
run: | | |
echo "Building and installing libjxl..." | |
makedeb -si --no-confirm -p PKGBUILD.libjxl | |
- name: Install Exiv2 | |
run: | | |
EXIV2_VERSION='v0.28.3' | |
echo "Cloning Exiv2 $EXIV2_VERSION." | |
git clone --depth 1 --branch "$EXIV2_VERSION" https://github.com/Exiv2/exiv2.git ext/exiv2 | |
echo "Configuring build." | |
mkdir ext/exiv2/build | |
cd ext/exiv2/build | |
cmake -DCMAKE_BUILD_TYPE=Release -DEXIV2_ENABLE_BMFF=ON .. | |
echo "Building and installing." | |
sudo make -j$(nproc) install | |
- name: Install Librsvg required min. version | |
# Required min. version is not available for Ubuntu 20.04 LTS (but is for 22.04 LTS) so needs to be built manually | |
run: | | |
LIBRSVG2_VERSION='2.52.2' | |
echo "Cloning Librsvg2 $LIBRSVG2_VERSION." | |
git clone --depth 1 --branch "$LIBRSVG2_VERSION" https://gitlab.gnome.org/GNOME/librsvg.git ext/librsvg2 | |
echo "Installing required dependencies with apt." | |
DEBIAN_FRONTEND=noninteractive sudo apt install -y rustc cargo gtk-doc-tools libgirepository1.0-dev | |
echo "Updating PATH." | |
export PATH="$PATH:/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0" | |
echo "Configuring build." | |
cd ext/librsvg2 | |
sh autogen.sh | |
echo "Building and installing." | |
sudo make install | |
- name: Configure build | |
run: | | |
export REF_NAME_FILTERED="$(echo '${{github.ref_name}}' | sed 's/[^A-z0-9_.-]//g')" | |
echo "Setting cache suffix." | |
if [ '${{github.ref_type}}' == 'tag' ]; then | |
export CACHE_SUFFIX="" | |
else | |
export CACHE_SUFFIX="5-$REF_NAME_FILTERED" | |
fi | |
export CACHE_SUFFIX="$CACHE_SUFFIX-AppImage" | |
echo "Cache suffix is '$CACHE_SUFFIX'." | |
echo "Making build directory." | |
mkdir build | |
echo "Changing working directory to the build directory." | |
cd build | |
echo "Running CMake configure." | |
cmake \ | |
-DCMAKE_BUILD_TYPE='${{matrix.build_type}}' \ | |
-DCACHE_NAME_SUFFIX="$CACHE_SUFFIX" \ | |
-DPROC_TARGET_NUMBER="1" \ | |
-DBUILD_BUNDLE="ON" \ | |
-DBUNDLE_BASE_INSTALL_DIR="/" \ | |
-DOPTION_OMP="ON" \ | |
-DWITH_LTO="OFF" \ | |
-DWITH_PROF="OFF" \ | |
-DWITH_SAN="OFF" \ | |
-DWITH_SYSTEM_KLT="OFF" \ | |
-DCMAKE_INSTALL_PREFIX=/usr \ | |
-DLENSFUNDBDIR="../share/lensfun/version_1" \ | |
.. | |
echo "Recording filtered ref name." | |
echo "REF_NAME_FILTERED=$REF_NAME_FILTERED" >> $GITHUB_ENV | |
- name: Build RawTherapee | |
working-directory: ./build | |
run: | | |
echo "Running make install." | |
make -j$(nproc) install DESTDIR=AppDir/usr/bin | |
echo "Moving usr/bin/share to usr/share." | |
mv AppDir/usr/bin/share AppDir/usr/ | |
- name: Include Lensfun | |
run: | | |
echo "Patching lensfun-update-data script." | |
sudo sed -i 's/HTTPError\(, ValueError\)/URLError\1/' $(which lensfun-update-data) | |
echo "Updating Lensfun database." | |
lensfun-update-data | |
echo "Creating Lensfun directory in the build directory." | |
mkdir -p build/AppDir/usr/share/lensfun | |
echo "Copying Lensfun database to the build directory." | |
cp -R ~/.local/share/lensfun/updates/* build/AppDir/usr/share/lensfun/ | |
- name: Include Adwaita icon theme (partial) | |
run: | | |
mkdir build/AppDir/usr/bin/icons/Adwaita | |
icons_dir=('actions' 'devices' 'mimetypes' 'places' 'status' 'ui' 'devices') | |
for dir in "${icons_dir[@]}"; do | |
find_res=$(find /usr/share/icons/Adwaita -name "${dir}" -type d) | |
if [ -z "$find_res" ] | |
then | |
echo "-Warning: Icons folder '"${dir}"' not found in Adwaita theme." | |
else | |
new_dir=($(echo "$find_res" | awk -F/ '{print $(NF-1)"/"$NF}')) | |
for d in "${new_dir[@]}"; do | |
echo "-Copying '"${d}"' into 'AppDir/usr/bin/icons/Adwaita'." | |
mkdir -p "build/AppDir/usr/bin/icons/Adwaita/${d}" | |
cp -R "/usr/share/icons/Adwaita/${d}/." "build/AppDir/usr/bin/icons/Adwaita/${d}" | |
done | |
fi | |
done | |
echo "-Copying 'index.theme' into 'AppDir/usr/bin/icons/Adwaita'." | |
cp /usr/share/icons/Adwaita/index.theme build/AppDir/usr/bin/icons/Adwaita | |
- name: Restore AppImage tools from cache | |
id: appimage-tools-cache | |
uses: actions/cache@v4 | |
with: | |
key: appimage-tools-1 | |
path: | | |
./build/linuxdeploy-x86_64.AppImage | |
./build/linuxdeploy-plugin-gtk.sh | |
- name: Download AppImage tools | |
if: ${{steps.appimage-tools-cache.outputs.cache-hit != 'true'}} | |
working-directory: ./build | |
run: | | |
echo "Downloading linuxdeploy." | |
curl --location 'https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage' > linuxdeploy-x86_64.AppImage | |
echo "Downloading GTK plugin for linuxdeploy." | |
curl --location 'https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh' \ | |
| sed 's/^\(export GTK_THEME\)/#\1/' \ | |
> linuxdeploy-plugin-gtk.sh | |
echo "Setting execute bit on all AppImage tools." | |
chmod u+x linuxdeploy-* | |
- name: Package AppImage | |
working-directory: ./build | |
run: | | |
echo "LD_LIBRARY_PATH is '$LD_LIBRARY_PATH'. Adding /usr/local/lib." | |
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" | |
echo "Creating artifact name." | |
if [ '${{github.ref_type}}' == 'tag' ]; then | |
ARTIFACT_NAME="RawTherapee_${REF_NAME_FILTERED}_${{matrix.build_type}}" | |
else | |
echo "Getting RawTherapee version." | |
export VERSION="$(grep -m 1 '^Version: .*$' 'AboutThisBuild.txt' | sed 's/^Version: \(.\+\)$/\1/')" | |
echo "Version is '$VERSION'." | |
FILTERED_VERSION="$(echo "$VERSION" | sed 's/[^A-z0-9_.-]//g')" | |
ARTIFACT_NAME="RawTherapee_${REF_NAME_FILTERED}_${FILTERED_VERSION}_${{matrix.build_type}}" | |
fi | |
echo "Artifact name is '$ARTIFACT_NAME'." | |
echo "Generating AppImage file name." | |
export OUTPUT="$ARTIFACT_NAME.AppImage" | |
echo "AppImage file name will be '$OUTPUT'." | |
echo "Packaging AppImage." | |
./linuxdeploy-x86_64.AppImage \ | |
--appimage-extract-and-run \ | |
--appdir AppDir \ | |
--plugin gtk \ | |
--output appimage | |
echo "Recording artifact name." | |
echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.ARTIFACT_NAME}}.AppImage | |
path: ${{github.workspace}}/build/${{env.ARTIFACT_NAME}}.AppImage | |
- name: Prepare for publishing | |
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}} | |
run: | | |
echo "Setting publish name." | |
PUBLISH_NAME="RawTherapee_${REF_NAME_FILTERED}_${{matrix.build_type}}" | |
echo "Publish name is '$PUBLISH_NAME'." | |
echo "Renaming AppImage." | |
cp "build/$ARTIFACT_NAME.AppImage" "$PUBLISH_NAME.AppImage" | |
echo "Creating version file." | |
cp "build/AboutThisBuild.txt" "$PUBLISH_NAME-AboutThisBuild.txt" | |
echo "Recording publish name." | |
echo "PUBLISH_NAME=$PUBLISH_NAME" >> $GITHUB_ENV | |
- name: Publish artifacts | |
uses: softprops/action-gh-release@v2 | |
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}} | |
with: | |
tag_name: nightly-github-actions | |
files: | | |
${{env.PUBLISH_NAME}}.AppImage | |
${{env.PUBLISH_NAME}}-AboutThisBuild.txt | |
- name: Prepare for publishing pre-dev | |
id: prepare-publish-pre-dev | |
if: ${{github.event_name == 'pull_request' && contains(fromJSON(env.publish_pre_dev_labels), github.event.pull_request.head.label)}} | |
run: | | |
echo "Making ref name." | |
REF_NAME_FILTERED="$(echo '${{github.event.pull_request.head.label}}' | tr ':' '_' | sed 's/[^A-z0-9_.-]//g')" | |
echo "Ref name is '$REF_NAME_FILTERED'." | |
echo "Setting publish name." | |
PUBLISH_NAME="RawTherapee_${REF_NAME_FILTERED}_${{matrix.build_type}}" | |
echo "Publish name is '$PUBLISH_NAME'." | |
echo "Renaming AppImage." | |
cp "build/$ARTIFACT_NAME.AppImage" "$PUBLISH_NAME.AppImage" | |
echo "Creating version file." | |
cp "build/AboutThisBuild.txt" "$PUBLISH_NAME-AppImage-AboutThisBuild.txt" | |
echo "Recording publish name." | |
echo "PUBLISH_NAME=$PUBLISH_NAME" >> $GITHUB_ENV | |
- name: Publish pre-dev artifacts | |
uses: softprops/action-gh-release@v2 | |
if: ${{steps.prepare-publish-pre-dev.outcome == 'success'}} | |
with: | |
tag_name: pre-dev-github-actions | |
repository: Beep6581/RawTherapee | |
files: | | |
${{env.PUBLISH_NAME}}.AppImage | |
${{env.PUBLISH_NAME}}-AppImage-AboutThisBuild.txt |