From b7c3b47ad72b931bc8895d12d4d5916d0f2f736f Mon Sep 17 00:00:00 2001 From: Lawrence37 <45837045+Lawrence37@users.noreply.github.com> Date: Sun, 13 Feb 2022 11:41:55 -0800 Subject: [PATCH] Improve AppImage build (#6427) Publish AboutThisBuild.txt for AppImage builds. Make AppImage name consistent with Windows builds. Port Windows build enhancements to AppImage build. Cache AppImage tools in build workflow. Fix AppImage publishing script. Remove "WinVista" from build artifact name. --- .github/workflows/appimage.yml | 110 +++++++++++++++++++++++---------- .github/workflows/windows.yml | 4 +- 2 files changed, 79 insertions(+), 35 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 2f048456d..e8e9f44a1 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -3,6 +3,8 @@ on: push: branches: - dev + tags: + - '[0-9]+.*' pull_request: branches: - dev @@ -10,30 +12,45 @@ on: jobs: build: runs-on: ubuntu-18.04 + strategy: + fail-fast: false + matrix: + build_type: [release] steps: - name: Checkout source uses: actions/checkout@v2 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 + - name: Configure build run: | - echo "Getting branch name." - BRANCH="$(git branch --show-current)" - echo "Branch name is '$BRANCH'." + 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="release" \ - -DCACHE_NAME_SUFFIX="5-$BRANCH-AppImage" \ + -DCMAKE_BUILD_TYPE='${{matrix.build_type}}' \ + -DCACHE_NAME_SUFFIX="$CACHE_SUFFIX" \ -DPROC_TARGET_NUMBER="1" \ -DBUILD_BUNDLE="ON" \ -DBUNDLE_BASE_INSTALL_DIR="/" \ @@ -45,6 +62,10 @@ jobs: -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: | @@ -52,6 +73,7 @@ jobs: 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 "Updating Lensfun database." @@ -60,7 +82,18 @@ jobs: 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: Restore AppImage tools from cache + id: appimage-tools-cache + uses: actions/cache@v2 + with: + key: appimage-tools + 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." @@ -69,52 +102,63 @@ jobs: curl --location 'https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh' > linuxdeploy-plugin-gtk.sh echo "Setting execute bit on all AppImage tools." chmod u+x linuxdeploy-* + - name: Package AppImage working-directory: ./build run: | - echo "Getting RawTherapee version." - export VERSION="$(grep -m 1 '^Version: .*$' AboutThisBuild.txt | sed 's/^Version: \(.\+\)$/\1/')" - echo "Version is '$VERSION'." + 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." - FILTERED_VERSION="$(echo "$VERSION" | sed 's/[^A-z0-9_.-]//g')" - export OUTPUT="RawTherapee-$FILTERED_VERSION-x86_64.AppImage" + 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 RawTherapee version." - echo "RT_VERSION=$VERSION" >> $GITHUB_ENV - echo "Recording AppImage file name." - echo "APPIMAGE_NAME=$OUTPUT" >> $GITHUB_ENV + + echo "Recording artifact name." + echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV + - name: Upload artifacts uses: actions/upload-artifact@v2 with: - name: ${{env.APPIMAGE_NAME}} - path: ${{github.workspace}}/build/${{env.APPIMAGE_NAME}} + 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 dev AppImage file name." - APPIMAGE_DEV_NAME="RawTherapee-dev-x86_64.AppImage" - echo "dev AppImage file name is '$APPIMAGE_DEV_NAME'." - echo "Renaming dev AppImage." - cp "build/$APPIMAGE_NAME" "$APPIMAGE_DEV_NAME" - echo "Recording dev AppImage file name." - echo "APPIMAGE_DEV_NAME=$APPIMAGE_DEV_NAME" >> $GITHUB_ENV - echo "Setting dev AppImage version file name." - APPIMAGE_DEV_VERSION_NAME="RawTherapee-dev-x86_64-version.txt" - echo "dev AppImage version file name is '$APPIMAGE_DEV_VERSION_NAME'." - echo "Creating dev AppImage version file." - echo "$RT_VERSION" > "$APPIMAGE_DEV_VERSION_NAME" - echo "Recording dev AppImage version file name." - echo "APPIMAGE_DEV_VERSION_NAME=$APPIMAGE_DEV_VERSION_NAME" >> $GITHUB_ENV + 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@v1 - if: ${{github.ref == 'refs/heads/dev'}} + if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}} with: tag_name: nightly-github-actions files: | - ${{env.APPIMAGE_DEV_NAME}} - ${{env.APPIMAGE_DEV_VERSION_NAME}} + ${{env.PUBLISH_NAME}}.AppImage + ${{env.PUBLISH_NAME}}-AboutThisBuild.txt diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4e00dbcd3..0696b06c6 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -236,13 +236,13 @@ jobs: - name: Prepare artifact name run: | if [ '${{github.ref_type}}' == 'tag' ]; then - ARTIFACT_NAME="RawTherapee_${REF_NAME_FILTERED}_WinVista_64_${{matrix.build_type}}" + 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}_WinVista_64_${{matrix.build_type}}" + ARTIFACT_NAME="RawTherapee_${REF_NAME_FILTERED}_${FILTERED_VERSION}_win64_${{matrix.build_type}}" fi echo "Artifact name is '$ARTIFACT_NAME'."