281 lines
9.9 KiB
YAML
281 lines
9.9 KiB
YAML
name: Windows 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: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [release, debug]
|
|
steps:
|
|
- name: Checkout source
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Install dependencies
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
location: C:\msys2
|
|
update: true
|
|
msystem: MINGW64
|
|
install: |
|
|
git
|
|
intltool
|
|
pacboy: |
|
|
cc:p
|
|
pkgconf:p
|
|
cmake:p
|
|
ninja:p
|
|
gtkmm3:p
|
|
lcms2:p
|
|
fftw:p
|
|
lensfun:p
|
|
libiptcdata:p
|
|
libjxl:p
|
|
exiv2:p
|
|
|
|
- name: Configure build
|
|
run: |
|
|
export REF_NAME_FILTERED="$(echo '${{github.ref_name}}' | sed 's/[^A-z0-9_.-]//g')"
|
|
|
|
if [ '${{github.ref_type}}' == 'tag' ]; then
|
|
export CACHE_SUFFIX=""
|
|
else
|
|
echo "Setting cache suffix."
|
|
export CACHE_SUFFIX="5-$REF_NAME_FILTERED"
|
|
echo "Cache suffix is '$CACHE_SUFFIX'."
|
|
fi
|
|
|
|
echo "Running CMake configure."
|
|
cmake \
|
|
-G "Ninja" \
|
|
-DCMAKE_BUILD_TYPE='${{matrix.build_type}}' \
|
|
-DCACHE_NAME_SUFFIX="$CACHE_SUFFIX" \
|
|
-DPROC_TARGET_NUMBER="1" \
|
|
-DLENSFUNDBDIR="share/lensfun" \
|
|
-S . -B build
|
|
|
|
echo "Recording filtered ref name."
|
|
echo "REF_NAME_FILTERED=$REF_NAME_FILTERED" >> "$(cygpath -u $GITHUB_ENV)"
|
|
|
|
- name: Build RawTherapee
|
|
run: |
|
|
echo "Running CMake install."
|
|
cmake --build build --target install
|
|
|
|
- name: Include Lensfun
|
|
run: |
|
|
echo "Updating Lensfun database."
|
|
lensfun-update-data
|
|
echo "Creating Lensfun directory in the build directory."
|
|
mkdir -p 'build/${{matrix.build_type}}/share'
|
|
echo "Copying Lensfun database to the build directory."
|
|
cp -R "/C/msys2/msys64/mingw64/var/lib/lensfun-updates/version_1" 'build/${{matrix.build_type}}/share/lensfun'
|
|
|
|
- name: Bundle dependencies
|
|
run: |
|
|
echo "Listing shared library dependencies."
|
|
ldd "./build/${{matrix.build_type}}/rawtherapee.exe"
|
|
echo "Finding DLLs to include."
|
|
DLLS=($(ldd "./build/${{matrix.build_type}}/rawtherapee.exe" | grep '/mingw64/bin/' | awk '{print($1)'}))
|
|
echo "Required DLLs are: ${DLLS[*]}"
|
|
|
|
echo "Getting workspace path."
|
|
export BUILD_DIR="$(pwd)/build/${{matrix.build_type}}"
|
|
echo "Build directory is '$BUILD_DIR'."
|
|
echo "Changing working directory to MSYS2 MINGW64."
|
|
cd "/C/msys2/msys64/mingw64"
|
|
echo "Copying DLLs and EXEs."
|
|
|
|
cd ./bin
|
|
cp \
|
|
"gdbus.exe" \
|
|
"gspawn-win64-helper.exe" \
|
|
"gspawn-win64-helper-console.exe" \
|
|
${DLLS[*]} \
|
|
"$BUILD_DIR"
|
|
cd -
|
|
|
|
echo "Copying Adwaita theme."
|
|
mkdir -p "$BUILD_DIR/share/icons/Adwaita"
|
|
cd 'share/icons/Adwaita/'
|
|
mkdir -p "$BUILD_DIR/share/icons/Adwaita/symbolic"
|
|
cp -r \
|
|
"symbolic/actions" \
|
|
"symbolic/devices" \
|
|
"symbolic/mimetypes" \
|
|
"symbolic/places" \
|
|
"symbolic/status" \
|
|
"symbolic/ui" \
|
|
"$BUILD_DIR/share/icons/Adwaita/symbolic"
|
|
cp 'index.theme' "$BUILD_DIR/share/icons/Adwaita"
|
|
cd -
|
|
|
|
echo "Copying GDK pixbuf."
|
|
mkdir -p "$BUILD_DIR/lib"
|
|
cp -r 'lib/gdk-pixbuf-2.0' "$BUILD_DIR/lib/gdk-pixbuf-2.0"
|
|
|
|
echo "Copying GLib schemas."
|
|
mkdir -p "$BUILD_DIR/share/glib-2.0/schemas"
|
|
cp 'share/glib-2.0/schemas/gschemas.compiled' "$BUILD_DIR/share/glib-2.0/schemas"
|
|
|
|
echo "Creating GTK settings.ini."
|
|
mkdir -p "$BUILD_DIR/share/gtk-3.0/"
|
|
echo -e '[Settings]\ngtk-button-images=1' > "$BUILD_DIR/share/gtk-3.0/settings.ini"
|
|
|
|
- name: Create installer
|
|
if: ${{matrix.build_type == 'release' && (github.ref_type == 'tag' || github.ref_name == 'dev')}}
|
|
working-directory: build/${{matrix.build_type}}
|
|
shell: pwsh
|
|
run: |
|
|
echo "Installing Inno Setup."
|
|
choco install innosetup
|
|
echo "Setup file:"
|
|
type "WindowsInnoSetup.iss"
|
|
echo "Creating installer from script."
|
|
iscc /F"installer" "WindowsInnoSetup.iss"
|
|
|
|
- name: Prepare artifact name
|
|
run: |
|
|
if [ '${{github.ref_type}}' == 'tag' ]; then
|
|
ARTIFACT_NAME="RawTherapee_${REF_NAME_FILTERED}_win64_${{matrix.build_type}}"
|
|
else
|
|
echo "Getting RawTherapee version."
|
|
export VERSION="$(grep -m 1 '^Version: .*$' './build/${{matrix.build_type}}/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}_win64_${{matrix.build_type}}"
|
|
fi
|
|
echo "Artifact name is '$ARTIFACT_NAME'."
|
|
|
|
echo "Recording artifact name."
|
|
echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> "$(cygpath -u $GITHUB_ENV)"
|
|
echo "Recording RawTherapee version."
|
|
echo "RT_VERSION=$VERSION" >> "$(cygpath -u $GITHUB_ENV)"
|
|
|
|
echo "Renaming artifact."
|
|
mv './build/${{matrix.build_type}}' "./build/$ARTIFACT_NAME"
|
|
if [ -e './build/installer.exe' ]; then
|
|
echo "Renaming installer."
|
|
mv './build/installer.exe' "./build/$ARTIFACT_NAME.exe"
|
|
fi
|
|
|
|
- name: Create ZIP archive
|
|
shell: cmd
|
|
working-directory: ./build
|
|
run: |
|
|
echo "Zipping artifact."
|
|
7z a -tzip "%ARTIFACT_NAME%.zip" "./%ARTIFACT_NAME%"
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{env.ARTIFACT_NAME}}
|
|
path: build\${{env.ARTIFACT_NAME}}
|
|
|
|
- name: Upload installer
|
|
if: ${{matrix.build_type == 'release' && (github.ref_type == 'tag' || github.ref_name == 'dev')}}
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{env.ARTIFACT_NAME}}.exe
|
|
path: build\${{env.ARTIFACT_NAME}}.exe
|
|
|
|
- name: Prepare for publishing
|
|
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}}
|
|
run: |
|
|
echo "Setting publish name."
|
|
PUBLISH_NAME="RawTherapee_${REF_NAME_FILTERED}_win64_${{matrix.build_type}}"
|
|
echo "Publish name is '$PUBLISH_NAME'."
|
|
if [ "$ARTIFACT_NAME" != "$PUBLISH_NAME" ]; then
|
|
echo "Renaming ZIP file."
|
|
cp "build/$ARTIFACT_NAME.zip" "build/$PUBLISH_NAME.zip"
|
|
if [ -e "./build/$ARTIFACT_NAME.exe" ]; then
|
|
echo "Renaming installer."
|
|
mv "./build/$ARTIFACT_NAME.exe" "./build/$PUBLISH_NAME.exe"
|
|
fi
|
|
fi
|
|
echo "Creating version file."
|
|
cp "build/$ARTIFACT_NAME/AboutThisBuild.txt" "build/$PUBLISH_NAME-AboutThisBuild.txt"
|
|
|
|
echo "Recording publish name."
|
|
echo "PUBLISH_NAME=$PUBLISH_NAME" >> "$(cygpath -u $GITHUB_ENV)"
|
|
|
|
- name: Publish artifacts
|
|
uses: softprops/action-gh-release@v1
|
|
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}}
|
|
with:
|
|
tag_name: nightly-github-actions
|
|
files: |
|
|
build/${{env.PUBLISH_NAME}}.zip
|
|
build/${{env.PUBLISH_NAME}}-AboutThisBuild.txt
|
|
|
|
- name: Publish installer
|
|
uses: softprops/action-gh-release@v1
|
|
if: ${{matrix.build_type == 'release' && (github.ref_type == 'tag' || github.ref_name == 'dev')}}
|
|
with:
|
|
tag_name: nightly-github-actions
|
|
files: build/${{env.PUBLISH_NAME}}.exe
|
|
|
|
- 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}_win64_${{matrix.build_type}}"
|
|
echo "Publish name is '$PUBLISH_NAME'."
|
|
if [ "$ARTIFACT_NAME" != "$PUBLISH_NAME" ]; then
|
|
echo "Renaming ZIP file."
|
|
cp "build/$ARTIFACT_NAME.zip" "build/$PUBLISH_NAME.zip"
|
|
if [ -e "./build/$ARTIFACT_NAME.exe" ]; then
|
|
echo "Renaming installer."
|
|
mv "./build/$ARTIFACT_NAME.exe" "./build/$PUBLISH_NAME.exe"
|
|
fi
|
|
fi
|
|
echo "Creating version file."
|
|
cp "build/$ARTIFACT_NAME/AboutThisBuild.txt" "build/$PUBLISH_NAME-AboutThisBuild.txt"
|
|
|
|
echo "Recording publish name."
|
|
echo "PUBLISH_NAME=$PUBLISH_NAME" >> "$(cygpath -u $GITHUB_ENV)"
|
|
|
|
- name: Publish pre-dev artifacts
|
|
uses: softprops/action-gh-release@v1
|
|
if: ${{steps.prepare-publish-pre-dev.outcome == 'success'}}
|
|
with:
|
|
tag_name: pre-dev-github-actions
|
|
files: |
|
|
build/${{env.PUBLISH_NAME}}.zip
|
|
build/${{env.PUBLISH_NAME}}-AboutThisBuild.txt
|
|
|
|
- name: Publish pre-dev installer
|
|
uses: softprops/action-gh-release@v1
|
|
if: ${{steps.prepare-publish-pre-dev.outcome == 'success' && matrix.build_type == 'release'}}
|
|
with:
|
|
tag_name: pre-dev-github-actions
|
|
files: build/${{env.PUBLISH_NAME}}.exe
|