From c02d49315b27a507fd3f8334c56e226fb66df400 Mon Sep 17 00:00:00 2001 From: qurious-pixel <62252937+qurious-pixel@users.noreply.github.com> Date: Wed, 2 Aug 2023 06:40:57 -0700 Subject: [PATCH] [CI] AppImage CPACK (#1161) * Generate AppImage CPACK * Generate AppImage Artifact --- .github/workflows/main.yml | 8 +++++++ CMakeLists.txt | 47 +++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dedf609a..23c73d54 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -103,6 +103,14 @@ jobs: cd build cpack + - name: Upload AppImage + uses: actions/upload-artifact@v3 + with: + name: Woof-AppImage + path: | + build/*.appimage + if: runner.os == 'Linux' + cppcheck: name: Cppcheck runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index fd88ef49..ca68d740 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,10 +123,55 @@ endif() # Generate distribution packages with CPack. if(WIN32) set(CPACK_GENERATOR ZIP) +elseif(LINUX) + set(CPACK_GENERATOR External) + set(CPACK_EXTERNAL_ENABLE_STAGING YES) + set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake") + + file(GENERATE + OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake" + CONTENT [[ + include(CMakePrintHelpers) + cmake_print_variables(CPACK_TEMPORARY_DIRECTORY) + cmake_print_variables(CPACK_TOPLEVEL_DIRECTORY) + cmake_print_variables(CPACK_PACKAGE_DIRECTORY) + cmake_print_variables(CPACK_PACKAGE_FILE_NAME) + + find_program(LINUXDEPLOY_EXECUTABLE + NAMES linuxdeploy linuxdeploy-x86_64.AppImage + PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy) + + if (NOT LINUXDEPLOY_EXECUTABLE) + message(STATUS "Downloading linuxdeploy") + set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy) + file(DOWNLOAD + https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + ${LINUXDEPLOY_EXECUTABLE} + INACTIVITY_TIMEOUT 10 + LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/download.log + STATUS LINUXDEPLOY_DOWNLOAD) + execute_process(COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT) + endif() + + execute_process( + COMMAND + ${CMAKE_COMMAND} -E env + OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage + VERSION=$,${CPACK_PACKAGE_VERSION},0.1.0> + ${LINUXDEPLOY_EXECUTABLE} + --appimage-extract-and-run + --appdir=${CPACK_TEMPORARY_DIRECTORY} + --executable=$ + --desktop-file=${CPACK_TEMPORARY_DIRECTORY}/share/applications/woof.desktop + --icon-file=${CPACK_TEMPORARY_DIRECTORY}/share/icons/hicolor/128x128/apps/woof.png + --output=appimage + # --verbosity=2 + ) + ]]) else() set(CPACK_GENERATOR TGZ) endif() -set(CPACK_SOURCE_GENERATOR TGZ ZIP) +set(CPACK_SOURCE_GENERATOR TGZ ZIP EXTERNAL) set(CPACK_SOURCE_IGNORE_FILES "/.git/;/build;/.vs/;/out/;CMakeSettings.json") set(CPACK_STRIP_FILES TRUE) include(CPack)