Lawrence Lee 2976b6f69b
Update dependencies for AppImage workflow
Upgrade the runner from Ubuntu 20.04 to 22.04.

Upgrade exiv2 from v0.28.3 to v0.28.5.

Upgrade libjxl from 0.10.3 to 0.11.1.

Use the system librsvg2.
2025-03-23 16:14:52 -07:00

261 lines
9.8 KiB
YAML

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-22.04
permissions:
contents: write
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.5'
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 ..
echo "Building and installing."
sudo make -j$(nproc) 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: RawTherapee/RawTherapee
files: |
${{env.PUBLISH_NAME}}.AppImage
${{env.PUBLISH_NAME}}-AppImage-AboutThisBuild.txt