From 5388759ef53cdf4e69afca9c9c3a8e6934263b59 Mon Sep 17 00:00:00 2001 From: Jammyjamjamman Date: Sun, 22 Sep 2024 00:03:54 +0100 Subject: [PATCH 01/26] Create new appimage workflow Supports more architectures + means some workflow jobs can be removed. --- .github/workflows/appimage.yml | 63 ++++++++++++++++++++++++ CMakeLists.txt | 7 +-- mk/linux/build-appimage.sh | 90 +++++++++++++++++++--------------- 3 files changed, 118 insertions(+), 42 deletions(-) create mode 100644 .github/workflows/appimage.yml diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml new file mode 100644 index 000000000..f9ca58915 --- /dev/null +++ b/.github/workflows/appimage.yml @@ -0,0 +1,63 @@ +name: Build MG AppImage +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +on: + workflow_dispatch: + push: + branches: develop + pull_request: + branches: develop + path: + - '**appimage.yml' +env: + VERSION: 1 + +jobs: + build-mg-appimage: + runs-on: ubuntu-latest + strategy: + matrix: + platform: + - linux/amd64 + - linux/arm64 + - linux/arm/v7 + + steps: + - name: Checkout MegaGlest + uses: actions/checkout@v4 + + - if: ${{ ! contains(matrix.platform, 'amd64') }} + uses: docker/setup-qemu-action@v3 + + - name: Set variables + run: | + if [ -z "$VERSION" ]; then + echo "VERSION=${{ github.sha }}" >> $GITHUB_ENV + fi + + - name: Build AppImage + run: | + docker run -t \ + --rm \ + --platform=${{ matrix.platform }} \ + -e HOSTUID=$(id -u) \ + -e VERSION \ + -v $GITHUB_WORKSPACE:/workspace \ + -w /workspace \ + andy5995/linuxdeploy:latest mk/linux/build-appimage.sh + + - name: Create sha256sum + run: | + IMAGE_FILENAME=$(basename `find out/*AppImage`) + echo "IMAGE_FILENAME=$IMAGE_FILENAME" >> $GITHUB_ENV + cd out + sha256sum "$IMAGE_FILENAME" > "$IMAGE_FILENAME.sha256sum" + + - name: Upload AppImage + uses: actions/upload-artifact@v4 + with: + name: ${{ env.IMAGE_FILENAME }} + path: ./out/* + if-no-files-found: error diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ce01f0be..7006742ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,7 @@ OPTION(BUILD_MEGAGLEST_MODEL_VIEWER "Build model viewer" ON) OPTION(BUILD_MEGAGLEST_MAP_EDITOR "Build map editor" ON) OPTION(BUILD_MEGAGLEST "Build MegaGlest" ON) OPTION(BUILD_MEGAGLEST_TESTS "Build MegaGlest Unit Tests" OFF) +OPTION(INCLUDE_DATA "Include Game Data in build. If true but no data present, data will be skipped." ON) OPTION(WANT_SINGLE_INSTALL_DIRECTORY "Use single install directory for everything. It is useful for example for MacOS cpack bundles." OFF) OPTION(WANT_APPIMAGE "Enable AppImage compatibility" ON) OPTION(WANT_STATIC_LIBS "Builds as many static libs as possible." OFF) @@ -157,7 +158,7 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW OR MSVC) IF(NOT WANT_APPIMAGE) MESSAGE(STATUS "**Disable appimage code.") ADD_DEFINITIONS(-DNO_APPIMAGE) - ELSEIF((NOT EXISTS "${PROJECT_SOURCE_DIR}/data/glest_game/CMakeLists.txt") AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + ELSEIF((NOT INCLUDE_DATA OR NOT EXISTS "${PROJECT_SOURCE_DIR}/data/glest_game/CMakeLists.txt") AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") MESSAGE(STATUS "**AppImage compatiblity + nodata wanted. Adding flag \"APPIMAGE_NODATA\".") ADD_DEFINITIONS(-DAPPIMAGE_NODATA) ENDIF() @@ -509,7 +510,7 @@ IF(EXISTS "${PROJECT_SOURCE_DIR}/source/") ENDIF() # Check if data exist -IF(EXISTS "${PROJECT_SOURCE_DIR}/data/glest_game/CMakeLists.txt") +IF(INCLUDE_DATA AND EXISTS "${PROJECT_SOURCE_DIR}/data/glest_game/CMakeLists.txt") MESSAGE(STATUS "**Found game data.") ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/data/glest_game ) ENDIF() @@ -526,7 +527,7 @@ IF(NOT DEFINED CPACK_GENERATOR) ENDIF() # CPack configuration shared accross platforms SET(CPACK_PACKAGE_NAME ${PKG_NAME}) -IF(EXISTS "${PROJECT_SOURCE_DIR}/data/glest_game/others/megaglest-long-description.txt.in") +IF(INCLUDE_DATA AND EXISTS "${PROJECT_SOURCE_DIR}/data/glest_game/others/megaglest-long-description.txt.in") FILE(READ "${PROJECT_SOURCE_DIR}/data/glest_game/others/megaglest-long-description.txt.in" MEGAGLEST_LONG_DESCRIPTION) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${MEGAGLEST_LONG_DESCRIPTION}") ELSE() diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index e04ab8ca6..cebc37752 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -1,23 +1,34 @@ #!/bin/sh -set -e - -# SCRIPTLOC=$(dirname "$0") -SCRIPTLOC="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" - -if [ ! -f $TOOLS_DIR/squashfs-root/AppRun ]; then - echo "Please specify the path to the extracted linuxdeploy (squashfs-root) using \$TOOLS_DIR env variable." - exit -1 +set -ev + +# Set default workspace if not provided +WORKSPACE=${WORKSPACE:-$(pwd)} +# Check if the workspace path is absolute +if [[ "$WORKSPACE" != /* ]]; then + echo "The workspace path must be absolute" + exit 1 +fi +test -d "$WORKSPACE" + +# Set default source root if not provided +SOURCE_ROOT=${SOURCE_ROOT:-$WORKSPACE} +# Check if the source root path is absolute +if [[ "$SOURCE_ROOT" != /* ]]; then + echo "The source root path must be absolute" + exit 1 fi -mkdir -p $SCRIPTLOC/BuildAppImage/game -cd $SCRIPTLOC/BuildAppImage/game +mkdir -p $SOURCE_ROOT/BuildAppImage/game +cd $SOURCE_ROOT/BuildAppImage/game -if [ -d $SCRIPTLOC/BuildAppImage/game/AppDir ]; then - rm -r $SCRIPTLOC/BuildAppImage/game/AppDir +if [ -d $SOURCE_ROOT/BuildAppImage/game/AppDir ]; then + rm -r $SOURCE_ROOT/BuildAppImage/game/AppDir fi + +sudo DEBIAN_FRONTEND=noninteractive apt install -y build-essential libcurl4-gnutls-dev libsdl2-dev libopenal-dev liblua5.3-dev libjpeg-dev libpng-dev libfreetype6-dev libwxgtk3.0-gtk3-dev libcppunit-dev libfribidi-dev libftgl-dev libglew-dev libogg-dev libvorbis-dev libminiupnpc-dev libircclient-dev libxml2-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev librtmp-dev libkrb5-dev libldap2-dev libidn2-dev libpsl-dev libgnutls28-dev libnghttp2-dev libssh-dev libbrotli-dev p7zip-full imagemagick -cmake ../../../.. -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF +cmake $SOURCE_ROOT -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF make DESTDIR=AppDir -j$(nproc) install strip AppDir/usr/local/bin/megaglest @@ -36,21 +47,26 @@ fi convert AppDir/usr/local/share/megaglest/megaglest.ico megaglest.png mv megaglest-2.png megaglest.png -$TOOLS_DIR/squashfs-root/AppRun -d AppDir/usr/local/share/applications/megaglest.desktop \ +LINUXDEPLOY_OUTPUT_VERSION="$VERSION" + +linuxdeploy -d AppDir/usr/local/share/applications/megaglest.desktop \ --icon-file=megaglest.png \ - --icon-filename=megaglest --executable AppDir/usr/local/bin/megaglest --appdir AppDir --output appimage + --icon-filename=megaglest \ + --executable AppDir/usr/local/bin/megaglest \ + --appdir AppDir \ + --output appimage -mv MegaGlest*.AppImage $SCRIPTLOC +mv MegaGlest*.AppImage $WORKSPACE # MapEditor -mkdir -p $SCRIPTLOC/BuildAppImage/mapeditor -cd $SCRIPTLOC/BuildAppImage/mapeditor +mkdir -p $SOURCE_ROOT/BuildAppImage/mapeditor +cd $SOURCE_ROOT/BuildAppImage/mapeditor -if [ -d $SCRIPTLOC/BuildAppImage/mapeditor/AppDir ]; then - rm -r $SCRIPTLOC/BuildAppImage/mapeditor/AppDir +if [ -d $SOURCE_ROOT/BuildAppImage/mapeditor/AppDir ]; then + rm -r $SOURCE_ROOT/BuildAppImage/mapeditor/AppDir fi -cmake ../../../.. -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF +cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF make DESTDIR=AppDir -j$(nproc) install strip AppDir/usr/local/bin/megaglest_editor @@ -67,23 +83,21 @@ mv editor-2.png editor.png # Another stupid hack to fix icons. sed -i 's#Icon=megaglest#Icon=editor#' AppDir/usr/local/share/applications/megaglest_editor.desktop -ln -s $TOOLS_DIR/linuxdeploy-plugin-gtk.sh . - -$TOOLS_DIR/squashfs-root/AppRun -d AppDir/usr/local/share/applications/megaglest_editor.desktop \ +linuxdeploy -d AppDir/usr/local/share/applications/megaglest_editor.desktop \ --icon-file=editor.png \ --icon-filename=editor --executable AppDir/usr/local/bin/megaglest_editor --appdir AppDir --plugin gtk --output appimage -mv MegaGlest*.AppImage $SCRIPTLOC +mv MegaGlest*.AppImage $WORKSPACE # G3D viewer -mkdir -p $SCRIPTLOC/BuildAppImage/g3dviewer -cd $SCRIPTLOC/BuildAppImage/g3dviewer +mkdir -p $SOURCE_ROOT/BuildAppImage/g3dviewer +cd $SOURCE_ROOT/BuildAppImage/g3dviewer -if [ -d $SCRIPTLOC/BuildAppImage/g3dviewer/AppDir ]; then - rm -r $SCRIPTLOC/BuildAppImage/g3dviewer/AppDir +if [ -d $SOURCE_ROOT/BuildAppImage/g3dviewer/AppDir ]; then + rm -r $SOURCE_ROOT/BuildAppImage/g3dviewer/AppDir fi -cmake ../../../.. -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=ON -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF +cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=ON -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF make DESTDIR=AppDir -j$(nproc) install strip AppDir/usr/local/bin/megaglest_g3dviewer @@ -100,21 +114,19 @@ mv g3dviewer-2.png g3dviewer.png # Another stupid hack to fix icons. sed -i 's#Icon=megaglest#Icon=g3dviewer#' AppDir/usr/local/share/applications/megaglest_g3dviewer.desktop -ln -s $TOOLS_DIR/linuxdeploy-plugin-gtk.sh . - -$TOOLS_DIR/squashfs-root/AppRun -d AppDir/usr/local/share/applications/megaglest_g3dviewer.desktop \ +linuxdeploy -d AppDir/usr/local/share/applications/megaglest_g3dviewer.desktop \ --icon-file=g3dviewer.png \ --icon-filename=g3dviewer --executable AppDir/usr/local/bin/megaglest_g3dviewer --appdir AppDir --plugin gtk --output appimage -mv MegaGlest*.AppImage $SCRIPTLOC +mv MegaGlest*.AppImage $WORKSPACE # Tools -mkdir -p $SCRIPTLOC/BuildAppImage/tools -cd $SCRIPTLOC/BuildAppImage/tools +mkdir -p $SOURCE_ROOT/BuildAppImage/tools +cd $SOURCE_ROOT/BuildAppImage/tools -cmake ../../../.. -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON +cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON make -j$(nproc) strip source/tools/glexemel/g2xml source/tools/glexemel/xml2g -mv source/tools/glexemel/g2xml $SCRIPTLOC -mv source/tools/glexemel/xml2g $SCRIPTLOC +mv source/tools/glexemel/g2xml $WORKSPACE +mv source/tools/glexemel/xml2g $WORKSPACE From 790a98196b1d96779af66e10d07e6695e4929800 Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Tue, 24 Sep 2024 17:36:30 -0500 Subject: [PATCH 02/26] Don't use 'out' directory (#279) --- .github/workflows/appimage.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index f9ca58915..03a3a37ee 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -9,7 +9,7 @@ on: branches: develop pull_request: branches: develop - path: + path: - '**appimage.yml' env: VERSION: 1 @@ -27,7 +27,7 @@ jobs: steps: - name: Checkout MegaGlest uses: actions/checkout@v4 - + - if: ${{ ! contains(matrix.platform, 'amd64') }} uses: docker/setup-qemu-action@v3 @@ -50,7 +50,7 @@ jobs: - name: Create sha256sum run: | - IMAGE_FILENAME=$(basename `find out/*AppImage`) + IMAGE_FILENAME=$(ls *AppImage) echo "IMAGE_FILENAME=$IMAGE_FILENAME" >> $GITHUB_ENV cd out sha256sum "$IMAGE_FILENAME" > "$IMAGE_FILENAME.sha256sum" @@ -59,5 +59,5 @@ jobs: uses: actions/upload-artifact@v4 with: name: ${{ env.IMAGE_FILENAME }} - path: ./out/* + path: ./*AppImage* if-no-files-found: error From dd76ad7a1a7dce0cdbfd3c5684c013c0ae81bdc3 Mon Sep 17 00:00:00 2001 From: James Sherratt Date: Wed, 25 Sep 2024 00:09:34 +0100 Subject: [PATCH 03/26] remove "cd out" from appimage.yml --- .github/workflows/appimage.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 03a3a37ee..dcef957e3 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -52,7 +52,6 @@ jobs: run: | IMAGE_FILENAME=$(ls *AppImage) echo "IMAGE_FILENAME=$IMAGE_FILENAME" >> $GITHUB_ENV - cd out sha256sum "$IMAGE_FILENAME" > "$IMAGE_FILENAME.sha256sum" - name: Upload AppImage From 34c4d758830fdf579748bdfb2160480d7678b6c6 Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Wed, 25 Sep 2024 15:18:23 -0500 Subject: [PATCH 04/26] Generate multiple checksums (#280) --- .github/workflows/appimage.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index dcef957e3..09e169790 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -50,13 +50,13 @@ jobs: - name: Create sha256sum run: | - IMAGE_FILENAME=$(ls *AppImage) - echo "IMAGE_FILENAME=$IMAGE_FILENAME" >> $GITHUB_ENV - sha256sum "$IMAGE_FILENAME" > "$IMAGE_FILENAME.sha256sum" + for file in *.AppImage; do + sha256sum "$file" > "$file.sha256sum"; + done - name: Upload AppImage uses: actions/upload-artifact@v4 with: - name: ${{ env.IMAGE_FILENAME }} + name: AppImages-${${{ matrix.platform }}//\//-} path: ./*AppImage* if-no-files-found: error From 81a1c37771701b137c1574a500eda60acec22ee9 Mon Sep 17 00:00:00 2001 From: James Sherratt Date: Wed, 25 Sep 2024 23:22:11 +0100 Subject: [PATCH 05/26] Fix artifact naming bug in appimage.yml --- .github/workflows/appimage.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 09e169790..812d7a090 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -9,7 +9,7 @@ on: branches: develop pull_request: branches: develop - path: + paths: - '**appimage.yml' env: VERSION: 1 @@ -54,9 +54,14 @@ jobs: sha256sum "$file" > "$file.sha256sum"; done + - name: Artifact Filename + run: | + PLATFORM=${{ matrix.platform }} + echo "ARTIFACT_NAME=AppImages-${PLATFORM//\//-}" >> $GITHUB_ENV + - name: Upload AppImage uses: actions/upload-artifact@v4 with: - name: AppImages-${${{ matrix.platform }}//\//-} + name: ${{ env.ARTIFACT_NAME }} path: ./*AppImage* if-no-files-found: error From ec37f15b726fb1807736970c952125ddfc0b4e34 Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Thu, 26 Sep 2024 13:46:50 -0500 Subject: [PATCH 06/26] Use curl, and more variables (#281) --- .gitignore | 8 +++ mk/linux/build-appimage.sh | 134 +++++++++++++++++++++---------------- 2 files changed, 84 insertions(+), 58 deletions(-) diff --git a/.gitignore b/.gitignore index 9bcf66be0..9ec5c4c69 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,14 @@ Session.vim # Emacs \#*\# +# AppImage +CMakeFiles/ +_build_appimage/ + +# These are output to the source root when the appimage script is run: +#/xml2g +#/g2xml + ## macOS *.DS_Store Icon diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index cebc37752..141e31b07 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -19,114 +19,132 @@ if [[ "$SOURCE_ROOT" != /* ]]; then exit 1 fi -mkdir -p $SOURCE_ROOT/BuildAppImage/game -cd $SOURCE_ROOT/BuildAppImage/game - -if [ -d $SOURCE_ROOT/BuildAppImage/game/AppDir ]; then - rm -r $SOURCE_ROOT/BuildAppImage/game/AppDir -fi - -sudo DEBIAN_FRONTEND=noninteractive apt install -y build-essential libcurl4-gnutls-dev libsdl2-dev libopenal-dev liblua5.3-dev libjpeg-dev libpng-dev libfreetype6-dev libwxgtk3.0-gtk3-dev libcppunit-dev libfribidi-dev libftgl-dev libglew-dev libogg-dev libvorbis-dev libminiupnpc-dev libircclient-dev libxml2-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev librtmp-dev libkrb5-dev libldap2-dev libidn2-dev libpsl-dev libgnutls28-dev libnghttp2-dev libssh-dev libbrotli-dev p7zip-full imagemagick +APPIMAGE_BUILD_DIR="$SOURCE_ROOT/_build_appimage" + +#if [ -n "$DO_CLEAN_BUILD" ] && [ -d $APPIMAGE_BUILD_DIR ]; then + #rm -rf $APPIMAGE_BUILD_DIR +#fi + +GAME_BUILD_DIR="$APPIMAGE_BUILD_DIR/game" +MAP_EDITOR_BUILD_DIR="$APPIMAGE_BUILD_DIR/mapeditor" +G3DVIEWER_BUILD_DIR="$APPIMAGE_BUILD_DIR/g3dviewer" +for dir in "$GAME_BUILD_DIR" "$MAP_EDITOR_BUILD_DIR" "$G3DVIEWER_BUILD_DIR"; do + if [ ! -d "$dir" ]; then + mkdir -p "$dir" + fi + if [ -d "$dir/AppDir" ]; then + rm -rf "$dir/AppDir" + fi +done + +cd $GAME_BUILD_DIR + +sudo DEBIAN_FRONTEND=noninteractive -i sh -c \ + "apt update && + apt upgrade -y && + apt install -y build-essential libcurl4-gnutls-dev libsdl2-dev libopenal-dev liblua5.3-dev libjpeg-dev libpng-dev libfreetype6-dev libwxgtk3.0-gtk3-dev libcppunit-dev libfribidi-dev libftgl-dev libglew-dev libogg-dev libvorbis-dev libminiupnpc-dev libircclient-dev libxml2-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev librtmp-dev libkrb5-dev libldap2-dev libidn2-dev libpsl-dev libgnutls28-dev libnghttp2-dev libssh-dev libbrotli-dev p7zip-full imagemagick" cmake $SOURCE_ROOT -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -make DESTDIR=AppDir -j$(nproc) install -strip AppDir/usr/local/bin/megaglest +make DESTDIR=$GAME_BUILD_DIR/AppDir -j$(nproc) install +# strip AppDir/usr/local/bin/megaglest -if [ ! -d AppDir/usr/bin ]; then - mkdir -p AppDir/usr/bin +if [ ! -d "$GAME_BUILD_DIR/AppDir/usr/bin" ]; then + mkdir -p "$GAME_BUILD_DIR/AppDir/usr/bin" fi -cp $(whereis 7z | awk -F ' ' '{print $2;}') AppDir/usr/bin/ +cp $(whereis 7z | awk -F ' ' '{print $2;}') $GAME_BUILD_DIR/AppDir/usr/bin/ # Hacky workaround to use internal 7z. sed -i 's#=7z#=$APPLICATIONPATH/7z#' AppDir/usr/local/share/megaglest/glest.ini -if [ ! -f AppDir/usr/local/share/applications/megaglest.desktop ]; then - wget -P AppDir/usr/local/share/applications/ https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest.desktop; +GAME_DESKTOP_DEST="$GAME_BUILD_DIR/AppDir/usr/local/share/applications" + +if [ ! -d "$GAME_DESKTOP_DEST" ]; then + mkdir -p "$GAME_DESKTOP_DEST" fi -convert AppDir/usr/local/share/megaglest/megaglest.ico megaglest.png +if [ ! -f "$GAME_DESKTOP_DEST/megaglest.desktop" ]; then + curl -Lo $GAME_DESKTOP_DEST/megaglest.desktop https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest.desktop +fi + +convert $GAME_BUILD_DIR/AppDir/usr/local/share/megaglest/megaglest.ico megaglest.png mv megaglest-2.png megaglest.png LINUXDEPLOY_OUTPUT_VERSION="$VERSION" -linuxdeploy -d AppDir/usr/local/share/applications/megaglest.desktop \ +linuxdeploy -d $GAME_DESKTOP_DEST/megaglest.desktop \ --icon-file=megaglest.png \ --icon-filename=megaglest \ - --executable AppDir/usr/local/bin/megaglest \ - --appdir AppDir \ + --executable $GAME_BUILD_DIR/AppDir/usr/local/bin/megaglest \ + --appdir $GAME_BUILD_DIR/AppDir \ --output appimage mv MegaGlest*.AppImage $WORKSPACE -# MapEditor -mkdir -p $SOURCE_ROOT/BuildAppImage/mapeditor -cd $SOURCE_ROOT/BuildAppImage/mapeditor +cd $MAP_EDITOR_BUILD_DIR -if [ -d $SOURCE_ROOT/BuildAppImage/mapeditor/AppDir ]; then - rm -r $SOURCE_ROOT/BuildAppImage/mapeditor/AppDir +cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF +make DESTDIR=$MAP_EDITOR_BUILD_DIR/AppDir -j$(nproc) install +# strip AppDir/usr/local/bin/megaglest_editor + +if [ ! -d $MAP_EDITOR_BUILD_DIR/AppDir/usr/bin ]; then + mkdir -p $MAP_EDITOR_BUILD_DIR/AppDir/usr/bin fi -cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF -make DESTDIR=AppDir -j$(nproc) install -strip AppDir/usr/local/bin/megaglest_editor +MAP_EDITOR_DESKTOP_DEST="$MAP_EDITOR_BUILD_DIR/AppDir/usr/local/share/applications" -if [ ! -d AppDir/usr/bin ]; then - mkdir -p AppDir/usr/bin +if [ ! -d "$MAP_EDITOR_DESKTOP_DEST" ]; then + mkdir -p "$MAP_EDITOR_DESKTOP_DEST" fi -if [ ! -f AppDir/usr/local/share/applications/megaglest_editor.desktop ]; then - wget -P AppDir/usr/local/share/applications/ https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest_editor.desktop; +if [ ! -f "$MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop" ]; then + curl -Lo "$MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop" https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest_editor.desktop + # Another stupid hack to fix icons. + sed -i 's#Icon=megaglest#Icon=editor#' $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop fi -convert AppDir/usr/local/share/megaglest/editor.ico editor.png +convert $MAP_EDITOR_BUILD_DIR/AppDir/usr/local/share/megaglest/editor.ico editor.png mv editor-2.png editor.png -# Another stupid hack to fix icons. -sed -i 's#Icon=megaglest#Icon=editor#' AppDir/usr/local/share/applications/megaglest_editor.desktop -linuxdeploy -d AppDir/usr/local/share/applications/megaglest_editor.desktop \ +linuxdeploy -d $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop \ --icon-file=editor.png \ - --icon-filename=editor --executable AppDir/usr/local/bin/megaglest_editor --appdir AppDir --plugin gtk --output appimage + --icon-filename=editor --executable AppDir/usr/local/bin/megaglest_editor --appdir $MAP_EDITOR_BUILD_DIR/AppDir --plugin gtk --output appimage mv MegaGlest*.AppImage $WORKSPACE -# G3D viewer -mkdir -p $SOURCE_ROOT/BuildAppImage/g3dviewer -cd $SOURCE_ROOT/BuildAppImage/g3dviewer - -if [ -d $SOURCE_ROOT/BuildAppImage/g3dviewer/AppDir ]; then - rm -r $SOURCE_ROOT/BuildAppImage/g3dviewer/AppDir -fi +cd $G3DVIEWER_BUILD_DIR cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=ON -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF -make DESTDIR=AppDir -j$(nproc) install -strip AppDir/usr/local/bin/megaglest_g3dviewer +make DESTDIR=$G3DVIEWER_BUILD_DIR/AppDir -j$(nproc) install +# strip AppDir/usr/local/bin/megaglest_g3dviewer + +G3DVIEWER_DESKTOP_DEST="$G3DVIEWER_BUILD_DIR/AppDir/usr/local/share/applications" -if [ ! -d AppDir/usr/bin ]; then - mkdir -p AppDir/usr/bin +if [ ! -d "$G3DVIEWER_DESKTOP_DEST" ]; then + mkdir -p "$G3DVIEWER_DESKTOP_DEST" fi -if [ ! -f AppDir/usr/local/share/applications/megaglest_g3dviewer.desktop ]; then - wget -P AppDir/usr/local/share/applications/ https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest_g3dviewer.desktop; +if [ ! -f "$G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop" ]; then + curl -Lo "$G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop" https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest_g3dviewer.desktop + # Another stupid hack to fix icons. + sed -i 's#Icon=megaglest#Icon=g3dviewer#' $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop fi -convert AppDir/usr/local/share/megaglest/g3dviewer.ico g3dviewer.png +convert $G3DVIEWER_BUILD_DIR/AppDir/usr/local/share/megaglest/g3dviewer.ico g3dviewer.png mv g3dviewer-2.png g3dviewer.png -# Another stupid hack to fix icons. -sed -i 's#Icon=megaglest#Icon=g3dviewer#' AppDir/usr/local/share/applications/megaglest_g3dviewer.desktop -linuxdeploy -d AppDir/usr/local/share/applications/megaglest_g3dviewer.desktop \ +linuxdeploy -d $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop \ --icon-file=g3dviewer.png \ - --icon-filename=g3dviewer --executable AppDir/usr/local/bin/megaglest_g3dviewer --appdir AppDir --plugin gtk --output appimage + --icon-filename=g3dviewer --executable $G3DVIEWER_BUILD_DIR/AppDir/usr/local/bin/megaglest_g3dviewer --appdir AppDir --plugin gtk --output appimage mv MegaGlest*.AppImage $WORKSPACE # Tools -mkdir -p $SOURCE_ROOT/BuildAppImage/tools -cd $SOURCE_ROOT/BuildAppImage/tools +mkdir -p $APPIMAGE_BUILD_DIR/tools +cd $APPIMAGE_BUILD_DIR/tools cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON make -j$(nproc) strip source/tools/glexemel/g2xml source/tools/glexemel/xml2g -mv source/tools/glexemel/g2xml $WORKSPACE -mv source/tools/glexemel/xml2g $WORKSPACE +mv source/tools/glexemel/g2xml $WORKSPACE +mv source/tools/glexemel/xml2g $WORKSPACE From b6e698efbc3b36d43838d6eb26f6686dafbe1906 Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Fri, 4 Oct 2024 14:25:55 -0500 Subject: [PATCH 07/26] Set install prefix, prevent duplicates (#282) * Set install prefix, prevent duplicates * Exit if VERSION is not set --- mk/linux/build-appimage.sh | 65 ++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index 141e31b07..d8840f406 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -2,6 +2,11 @@ set -ev +if [ -z "$VERSION" ]; then + echo "VERSION must be set" + exit 1 +fi + # Set default workspace if not provided WORKSPACE=${WORKSPACE:-$(pwd)} # Check if the workspace path is absolute @@ -19,7 +24,11 @@ if [[ "$SOURCE_ROOT" != /* ]]; then exit 1 fi +# Used by linuxdeploy when it sets the filename +export LINUXDEPLOY_OUTPUT_VERSION="$VERSION" + APPIMAGE_BUILD_DIR="$SOURCE_ROOT/_build_appimage" +INST_PREFIX="usr" #if [ -n "$DO_CLEAN_BUILD" ] && [ -d $APPIMAGE_BUILD_DIR ]; then #rm -rf $APPIMAGE_BUILD_DIR @@ -37,26 +46,22 @@ for dir in "$GAME_BUILD_DIR" "$MAP_EDITOR_BUILD_DIR" "$G3DVIEWER_BUILD_DIR"; do fi done -cd $GAME_BUILD_DIR - sudo DEBIAN_FRONTEND=noninteractive -i sh -c \ "apt update && apt upgrade -y && apt install -y build-essential libcurl4-gnutls-dev libsdl2-dev libopenal-dev liblua5.3-dev libjpeg-dev libpng-dev libfreetype6-dev libwxgtk3.0-gtk3-dev libcppunit-dev libfribidi-dev libftgl-dev libglew-dev libogg-dev libvorbis-dev libminiupnpc-dev libircclient-dev libxml2-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev librtmp-dev libkrb5-dev libldap2-dev libidn2-dev libpsl-dev libgnutls28-dev libnghttp2-dev libssh-dev libbrotli-dev p7zip-full imagemagick" -cmake $SOURCE_ROOT -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF +cd "$GAME_BUILD_DIR" +cmake $SOURCE_ROOT -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF make DESTDIR=$GAME_BUILD_DIR/AppDir -j$(nproc) install -# strip AppDir/usr/local/bin/megaglest - -if [ ! -d "$GAME_BUILD_DIR/AppDir/usr/bin" ]; then - mkdir -p "$GAME_BUILD_DIR/AppDir/usr/bin" -fi +# This is done by linuxdeploy +# strip AppDir/$INST_PREFIX/local/bin/megaglest -cp $(whereis 7z | awk -F ' ' '{print $2;}') $GAME_BUILD_DIR/AppDir/usr/bin/ +cp $(whereis 7z | awk -F ' ' '{print $2;}') $GAME_BUILD_DIR/AppDir/$INST_PREFIX/bin/ # Hacky workaround to use internal 7z. -sed -i 's#=7z#=$APPLICATIONPATH/7z#' AppDir/usr/local/share/megaglest/glest.ini +sed -i 's#=7z#=$APPLICATIONPATH/7z#' AppDir/$INST_PREFIX/share/megaglest/glest.ini -GAME_DESKTOP_DEST="$GAME_BUILD_DIR/AppDir/usr/local/share/applications" +GAME_DESKTOP_DEST="$GAME_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" if [ ! -d "$GAME_DESKTOP_DEST" ]; then mkdir -p "$GAME_DESKTOP_DEST" @@ -66,32 +71,23 @@ if [ ! -f "$GAME_DESKTOP_DEST/megaglest.desktop" ]; then curl -Lo $GAME_DESKTOP_DEST/megaglest.desktop https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest.desktop fi -convert $GAME_BUILD_DIR/AppDir/usr/local/share/megaglest/megaglest.ico megaglest.png +convert $GAME_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/megaglest.ico megaglest.png mv megaglest-2.png megaglest.png -LINUXDEPLOY_OUTPUT_VERSION="$VERSION" - linuxdeploy -d $GAME_DESKTOP_DEST/megaglest.desktop \ --icon-file=megaglest.png \ --icon-filename=megaglest \ - --executable $GAME_BUILD_DIR/AppDir/usr/local/bin/megaglest \ - --appdir $GAME_BUILD_DIR/AppDir \ + --executable AppDir/$INST_PREFIX/bin/megaglest \ + --appdir AppDir \ --output appimage mv MegaGlest*.AppImage $WORKSPACE cd $MAP_EDITOR_BUILD_DIR - -cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF +cmake $SOURCE_ROOT -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF make DESTDIR=$MAP_EDITOR_BUILD_DIR/AppDir -j$(nproc) install -# strip AppDir/usr/local/bin/megaglest_editor - -if [ ! -d $MAP_EDITOR_BUILD_DIR/AppDir/usr/bin ]; then - mkdir -p $MAP_EDITOR_BUILD_DIR/AppDir/usr/bin -fi - -MAP_EDITOR_DESKTOP_DEST="$MAP_EDITOR_BUILD_DIR/AppDir/usr/local/share/applications" +MAP_EDITOR_DESKTOP_DEST="$MAP_EDITOR_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" if [ ! -d "$MAP_EDITOR_DESKTOP_DEST" ]; then mkdir -p "$MAP_EDITOR_DESKTOP_DEST" fi @@ -102,23 +98,22 @@ if [ ! -f "$MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop" ]; then sed -i 's#Icon=megaglest#Icon=editor#' $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop fi -convert $MAP_EDITOR_BUILD_DIR/AppDir/usr/local/share/megaglest/editor.ico editor.png +convert $MAP_EDITOR_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/editor.ico editor.png mv editor-2.png editor.png linuxdeploy -d $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop \ --icon-file=editor.png \ - --icon-filename=editor --executable AppDir/usr/local/bin/megaglest_editor --appdir $MAP_EDITOR_BUILD_DIR/AppDir --plugin gtk --output appimage + --icon-filename=editor \ + --executable AppDir/$INST_PREFIX/bin/megaglest_editor \ + --appdir AppDir --plugin gtk --output appimage mv MegaGlest*.AppImage $WORKSPACE cd $G3DVIEWER_BUILD_DIR - -cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=ON -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF +cmake $SOURCE_ROOT -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=ON -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF make DESTDIR=$G3DVIEWER_BUILD_DIR/AppDir -j$(nproc) install -# strip AppDir/usr/local/bin/megaglest_g3dviewer - -G3DVIEWER_DESKTOP_DEST="$G3DVIEWER_BUILD_DIR/AppDir/usr/local/share/applications" +G3DVIEWER_DESKTOP_DEST="$G3DVIEWER_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" if [ ! -d "$G3DVIEWER_DESKTOP_DEST" ]; then mkdir -p "$G3DVIEWER_DESKTOP_DEST" fi @@ -129,12 +124,14 @@ if [ ! -f "$G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop" ]; then sed -i 's#Icon=megaglest#Icon=g3dviewer#' $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop fi -convert $G3DVIEWER_BUILD_DIR/AppDir/usr/local/share/megaglest/g3dviewer.ico g3dviewer.png +convert $G3DVIEWER_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/g3dviewer.ico g3dviewer.png mv g3dviewer-2.png g3dviewer.png linuxdeploy -d $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop \ --icon-file=g3dviewer.png \ - --icon-filename=g3dviewer --executable $G3DVIEWER_BUILD_DIR/AppDir/usr/local/bin/megaglest_g3dviewer --appdir AppDir --plugin gtk --output appimage + --icon-filename=g3dviewer \ + --executable AppDir/$INST_PREFIX/bin/megaglest_g3dviewer \ + --appdir AppDir --plugin gtk --output appimage mv MegaGlest*.AppImage $WORKSPACE From e83c31b23cdb0ce8a67bfe1b52cb2d28be0dd1e9 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 9 Oct 2024 08:46:51 -0500 Subject: [PATCH 08/26] Use andy5995/linuxdeploy:v2 instead of ':latest' --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 812d7a090..a2c4e2077 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -46,7 +46,7 @@ jobs: -e VERSION \ -v $GITHUB_WORKSPACE:/workspace \ -w /workspace \ - andy5995/linuxdeploy:latest mk/linux/build-appimage.sh + andy5995/linuxdeploy:v2 mk/linux/build-appimage.sh - name: Create sha256sum run: | From 82f0245236379392aa8522f60ee8dcfd6d05409b Mon Sep 17 00:00:00 2001 From: Jammyjamjamman Date: Sat, 12 Oct 2024 23:15:16 +0100 Subject: [PATCH 09/26] Add data to megaglest-game appimages --- .github/workflows/appimage.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index a2c4e2077..342e1618e 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -28,6 +28,13 @@ jobs: - name: Checkout MegaGlest uses: actions/checkout@v4 + - name: Checkout Data + uses: actions/checkout@v4 + with: + repository: "megaglest/megaglest-data" + path: "data/glest_game" + + - if: ${{ ! contains(matrix.platform, 'amd64') }} uses: docker/setup-qemu-action@v3 From f2463c777ed26dd5d2e968cc22ab14a2e9014c1e Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 16 Oct 2024 10:30:35 -0500 Subject: [PATCH 10/26] appimage.yml: Use v2-focal instead of v2 --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 342e1618e..b8ce868db 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -53,7 +53,7 @@ jobs: -e VERSION \ -v $GITHUB_WORKSPACE:/workspace \ -w /workspace \ - andy5995/linuxdeploy:v2 mk/linux/build-appimage.sh + andy5995/linuxdeploy:v2-focal mk/linux/build-appimage.sh - name: Create sha256sum run: | From 0aac2f2c3bb24f8cd27ebc4f43a3a340c037c00d Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 16 Oct 2024 10:34:55 -0500 Subject: [PATCH 11/26] appimage.yml: Assign version based on workflow dispatch input Use "snapshot" if input is not given --- .github/workflows/appimage.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index b8ce868db..3ef2fdd8a 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -5,18 +5,23 @@ concurrency: on: workflow_dispatch: + inputs: + version: + description: 'version number' + required: false + type: string push: branches: develop pull_request: branches: develop paths: - '**appimage.yml' -env: - VERSION: 1 jobs: build-mg-appimage: runs-on: ubuntu-latest + env: + VERSION: ${{ inputs.version }} strategy: matrix: platform: @@ -41,7 +46,7 @@ jobs: - name: Set variables run: | if [ -z "$VERSION" ]; then - echo "VERSION=${{ github.sha }}" >> $GITHUB_ENV + echo "VERSION=snapshot" >> $GITHUB_ENV fi - name: Build AppImage From 65db7bf20a8ec09b52785871833c9f0eb65d536b Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 16 Oct 2024 11:54:52 -0500 Subject: [PATCH 12/26] Package all 3 binaries --- mk/linux/AppRun | 22 ++++++ mk/linux/build-appimage.sh | 145 ++++++++++++++++++++----------------- 2 files changed, 102 insertions(+), 65 deletions(-) create mode 100755 mk/linux/AppRun diff --git a/mk/linux/AppRun b/mk/linux/AppRun new file mode 100755 index 000000000..3b08182e2 --- /dev/null +++ b/mk/linux/AppRun @@ -0,0 +1,22 @@ +#! /usr/bin/env bash + +set -e + +HERE="$(readlink -f "$(dirname "$0")")" + +BINARY_NAME="megaglest" + +if [ "$MG_BIN" = "editor" ]; then + BINARY_NAME="megaglest_editor" +elif [ "$MG_BIN" = "viewer" ]; then + BINARY_NAME="megaglest_g3dviewer" +fi + +echo "To invoke the map editor:" +echo "MG_BIN=editor $0" +echo "" +echo "To invoke the g3d model viewer:" +echo "MG_BIN=viewer $0" +echo "" + +exec "$HERE/usr/bin/$BINARY_NAME" "$@" diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index d8840f406..5c066e7c2 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -1,5 +1,16 @@ #!/bin/sh +# To test this script locally, you can use something like: +# docker run -it --rm -e HOSTUID=$(id -u) -e \ +# -v $PWD:/workspace -w /workspace --entrypoint=bash andy5995/linuxdeploy:v2-focal +# +# Changing entrypoint above will give you a shell when the container starts. +# Then: 'su - builder' (preserve some environmental variables with '-') +# 'bash' +# 'export VERSION=snapshot' +# 'cd /workspace' +# 'mk/linux/build-appimage.sh' + set -ev if [ -z "$VERSION" ]; then @@ -34,114 +45,118 @@ INST_PREFIX="usr" #rm -rf $APPIMAGE_BUILD_DIR #fi -GAME_BUILD_DIR="$APPIMAGE_BUILD_DIR/game" -MAP_EDITOR_BUILD_DIR="$APPIMAGE_BUILD_DIR/mapeditor" -G3DVIEWER_BUILD_DIR="$APPIMAGE_BUILD_DIR/g3dviewer" -for dir in "$GAME_BUILD_DIR" "$MAP_EDITOR_BUILD_DIR" "$G3DVIEWER_BUILD_DIR"; do - if [ ! -d "$dir" ]; then - mkdir -p "$dir" - fi - if [ -d "$dir/AppDir" ]; then - rm -rf "$dir/AppDir" - fi -done +if [ ! -d "$APPIMAGE_BUILD_DIR" ]; then + mkdir -p "$APPIMAGE_BUILD_DIR" +fi sudo DEBIAN_FRONTEND=noninteractive -i sh -c \ "apt update && apt upgrade -y && - apt install -y build-essential libcurl4-gnutls-dev libsdl2-dev libopenal-dev liblua5.3-dev libjpeg-dev libpng-dev libfreetype6-dev libwxgtk3.0-gtk3-dev libcppunit-dev libfribidi-dev libftgl-dev libglew-dev libogg-dev libvorbis-dev libminiupnpc-dev libircclient-dev libxml2-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev librtmp-dev libkrb5-dev libldap2-dev libidn2-dev libpsl-dev libgnutls28-dev libnghttp2-dev libssh-dev libbrotli-dev p7zip-full imagemagick" - -cd "$GAME_BUILD_DIR" -cmake $SOURCE_ROOT -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -make DESTDIR=$GAME_BUILD_DIR/AppDir -j$(nproc) install + apt install -y + build-essential + libcurl4-gnutls-dev + libsdl2-dev + libopenal-dev + liblua5.3-dev + libjpeg-dev + libpng-dev + libfreetype6-dev + libwxgtk3.0-gtk3-dev + libcppunit-dev + libfribidi-dev + libftgl-dev + libglew-dev + libogg-dev + libvorbis-dev + libminiupnpc-dev + libircclient-dev + libxml2-dev + libx11-dev + libgl1-mesa-dev + libglu1-mesa-dev + librtmp-dev + libkrb5-dev + libldap2-dev + libidn2-dev + libpsl-dev + libgnutls28-dev + libnghttp2-dev + libssh-dev + libbrotli-dev + p7zip-full + imagemagick" + +cd "$APPIMAGE_BUILD_DIR" +cmake $SOURCE_ROOT \ + -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX \ + -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF +make DESTDIR=$APPIMAGE_BUILD_DIR/AppDir -j$(nproc) install # This is done by linuxdeploy # strip AppDir/$INST_PREFIX/local/bin/megaglest -cp $(whereis 7z | awk -F ' ' '{print $2;}') $GAME_BUILD_DIR/AppDir/$INST_PREFIX/bin/ +cp $(whereis 7z | awk -F ' ' '{print $2;}') $APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/bin/ # Hacky workaround to use internal 7z. sed -i 's#=7z#=$APPLICATIONPATH/7z#' AppDir/$INST_PREFIX/share/megaglest/glest.ini -GAME_DESKTOP_DEST="$GAME_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" +GAME_DESKTOP_DEST="$APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" if [ ! -d "$GAME_DESKTOP_DEST" ]; then mkdir -p "$GAME_DESKTOP_DEST" fi if [ ! -f "$GAME_DESKTOP_DEST/megaglest.desktop" ]; then - curl -Lo $GAME_DESKTOP_DEST/megaglest.desktop https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest.desktop + cp "$SOURCE_ROOT/data/glest_game/others/desktop/megaglest.desktop" "$GAME_DESKTOP_DEST" fi -convert $GAME_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/megaglest.ico megaglest.png +convert $APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/megaglest.ico megaglest.png mv megaglest-2.png megaglest.png -linuxdeploy -d $GAME_DESKTOP_DEST/megaglest.desktop \ - --icon-file=megaglest.png \ - --icon-filename=megaglest \ - --executable AppDir/$INST_PREFIX/bin/megaglest \ - --appdir AppDir \ - --output appimage - -mv MegaGlest*.AppImage $WORKSPACE - -cd $MAP_EDITOR_BUILD_DIR -cmake $SOURCE_ROOT -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=ON -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF -make DESTDIR=$MAP_EDITOR_BUILD_DIR/AppDir -j$(nproc) install - -MAP_EDITOR_DESKTOP_DEST="$MAP_EDITOR_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" +MAP_EDITOR_DESKTOP_DEST="$APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" if [ ! -d "$MAP_EDITOR_DESKTOP_DEST" ]; then mkdir -p "$MAP_EDITOR_DESKTOP_DEST" fi if [ ! -f "$MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop" ]; then - curl -Lo "$MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop" https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest_editor.desktop + cp "$SOURCE_ROOT/data/glest_game/others/desktop/megaglest_editor.desktop" "$MAP_EDITOR_DESKTOP_DEST" # Another stupid hack to fix icons. sed -i 's#Icon=megaglest#Icon=editor#' $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop fi -convert $MAP_EDITOR_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/editor.ico editor.png -mv editor-2.png editor.png - -linuxdeploy -d $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop \ - --icon-file=editor.png \ - --icon-filename=editor \ - --executable AppDir/$INST_PREFIX/bin/megaglest_editor \ - --appdir AppDir --plugin gtk --output appimage - -mv MegaGlest*.AppImage $WORKSPACE +#convert $APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/editor.ico editor.png +#mv editor-2.png editor.png -cd $G3DVIEWER_BUILD_DIR -cmake $SOURCE_ROOT -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=ON -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF -DINCLUDE_DATA=OFF -make DESTDIR=$G3DVIEWER_BUILD_DIR/AppDir -j$(nproc) install - -G3DVIEWER_DESKTOP_DEST="$G3DVIEWER_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" +G3DVIEWER_DESKTOP_DEST="$APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/applications" if [ ! -d "$G3DVIEWER_DESKTOP_DEST" ]; then mkdir -p "$G3DVIEWER_DESKTOP_DEST" fi if [ ! -f "$G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop" ]; then - curl -Lo "$G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop" https://raw.githubusercontent.com/MegaGlest/megaglest-data/develop/others/desktop/megaglest_g3dviewer.desktop + cp "$SOURCE_ROOT/data/glest_game/others/desktop/megaglest_g3dviewer.desktop" "$G3DVIEWER_DESKTOP_DEST" # Another stupid hack to fix icons. sed -i 's#Icon=megaglest#Icon=g3dviewer#' $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop fi -convert $G3DVIEWER_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/g3dviewer.ico g3dviewer.png -mv g3dviewer-2.png g3dviewer.png +#convert $APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/g3dviewer.ico g3dviewer.png +#mv g3dviewer-2.png g3dviewer.png -linuxdeploy -d $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop \ - --icon-file=g3dviewer.png \ - --icon-filename=g3dviewer \ - --executable AppDir/$INST_PREFIX/bin/megaglest_g3dviewer \ - --appdir AppDir --plugin gtk --output appimage +linuxdeploy -d $GAME_DESKTOP_DEST/megaglest.desktop \ + --icon-file=megaglest.png \ + --icon-filename=megaglest \ + --custom-apprun="$SOURCE_ROOT/mk/linux/AppRun" \ + --executable AppDir/$INST_PREFIX/bin/megaglest \ + --appdir AppDir \ + --plugin gtk \ + --output appimage mv MegaGlest*.AppImage $WORKSPACE # Tools -mkdir -p $APPIMAGE_BUILD_DIR/tools -cd $APPIMAGE_BUILD_DIR/tools +#mkdir -p $APPIMAGE_BUILD_DIR/tools +#cd $APPIMAGE_BUILD_DIR/tools -cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON -make -j$(nproc) +#cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON +#make -j$(nproc) -strip source/tools/glexemel/g2xml source/tools/glexemel/xml2g -mv source/tools/glexemel/g2xml $WORKSPACE -mv source/tools/glexemel/xml2g $WORKSPACE +#strip source/tools/glexemel/g2xml source/tools/glexemel/xml2g +#mv source/tools/glexemel/g2xml $WORKSPACE +#mv source/tools/glexemel/xml2g $WORKSPACE From cd2a1c72c2a673a63cd9188848369419b6f19944 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Thu, 17 Oct 2024 10:13:25 -0500 Subject: [PATCH 13/26] build-appimage.sh: Edit test instructions [skip ci] --- mk/linux/build-appimage.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index 5c066e7c2..dad07aac5 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -1,10 +1,17 @@ #!/bin/sh -# To test this script locally, you can use something like: +# To test this script locally, from the source root directory, +# you can use: +# # docker run -it --rm -e HOSTUID=$(id -u) -e \ -# -v $PWD:/workspace -w /workspace --entrypoint=bash andy5995/linuxdeploy:v2-focal +# -v $PWD:/workspace -w /workspace andy5995/linuxdeploy:v2-focal bash +# +# Normally 'bash' can be replaced with the /path/to/script but starting +# the container from a shell means you can run the script manually in the +# container and then fix any problems, then re-run the script (hint: the +# dependencies will be installed the first time, and not have to be installed +# on subsequent attempts). # -# Changing entrypoint above will give you a shell when the container starts. # Then: 'su - builder' (preserve some environmental variables with '-') # 'bash' # 'export VERSION=snapshot' @@ -143,6 +150,7 @@ linuxdeploy -d $GAME_DESKTOP_DEST/megaglest.desktop \ --icon-file=megaglest.png \ --icon-filename=megaglest \ --custom-apprun="$SOURCE_ROOT/mk/linux/AppRun" \ + --library="SOURCE_ROOT/$APPIMAGE_BUILD_DIR/source/shared_lib/liblibmegaglest.so" \ --executable AppDir/$INST_PREFIX/bin/megaglest \ --appdir AppDir \ --plugin gtk \ From 36828502d0ffb962babf18a69128805abf4d453d Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 27 Nov 2024 16:34:17 -0600 Subject: [PATCH 14/26] Remove SOURCE_ROOT variable and experimental shared library arg --- mk/linux/build-appimage.sh | 25 ++++++++----------------- mk/linux/docker/.env | 12 ++++++++++++ mk/linux/docker/docker-compose.yml | 13 +++++++++++++ 3 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 mk/linux/docker/.env create mode 100644 mk/linux/docker/docker-compose.yml diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index dad07aac5..d8bb250f0 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -34,18 +34,10 @@ if [[ "$WORKSPACE" != /* ]]; then fi test -d "$WORKSPACE" -# Set default source root if not provided -SOURCE_ROOT=${SOURCE_ROOT:-$WORKSPACE} -# Check if the source root path is absolute -if [[ "$SOURCE_ROOT" != /* ]]; then - echo "The source root path must be absolute" - exit 1 -fi - # Used by linuxdeploy when it sets the filename export LINUXDEPLOY_OUTPUT_VERSION="$VERSION" -APPIMAGE_BUILD_DIR="$SOURCE_ROOT/_build_appimage" +APPIMAGE_BUILD_DIR="$WORKSPACE/_build_appimage" INST_PREFIX="usr" #if [ -n "$DO_CLEAN_BUILD" ] && [ -d $APPIMAGE_BUILD_DIR ]; then @@ -94,7 +86,7 @@ sudo DEBIAN_FRONTEND=noninteractive -i sh -c \ imagemagick" cd "$APPIMAGE_BUILD_DIR" -cmake $SOURCE_ROOT \ +cmake $WORKSPACE \ -DCMAKE_INSTALL_PREFIX=/$INST_PREFIX \ -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=OFF make DESTDIR=$APPIMAGE_BUILD_DIR/AppDir -j$(nproc) install @@ -112,7 +104,7 @@ if [ ! -d "$GAME_DESKTOP_DEST" ]; then fi if [ ! -f "$GAME_DESKTOP_DEST/megaglest.desktop" ]; then - cp "$SOURCE_ROOT/data/glest_game/others/desktop/megaglest.desktop" "$GAME_DESKTOP_DEST" + cp "$WORKSPACE/data/glest_game/others/desktop/megaglest.desktop" "$GAME_DESKTOP_DEST" fi convert $APPIMAGE_BUILD_DIR/AppDir/$INST_PREFIX/share/megaglest/megaglest.ico megaglest.png @@ -124,7 +116,7 @@ if [ ! -d "$MAP_EDITOR_DESKTOP_DEST" ]; then fi if [ ! -f "$MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop" ]; then - cp "$SOURCE_ROOT/data/glest_game/others/desktop/megaglest_editor.desktop" "$MAP_EDITOR_DESKTOP_DEST" + cp "$WORKSPACE/data/glest_game/others/desktop/megaglest_editor.desktop" "$MAP_EDITOR_DESKTOP_DEST" # Another stupid hack to fix icons. sed -i 's#Icon=megaglest#Icon=editor#' $MAP_EDITOR_DESKTOP_DEST/megaglest_editor.desktop fi @@ -138,7 +130,7 @@ if [ ! -d "$G3DVIEWER_DESKTOP_DEST" ]; then fi if [ ! -f "$G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop" ]; then - cp "$SOURCE_ROOT/data/glest_game/others/desktop/megaglest_g3dviewer.desktop" "$G3DVIEWER_DESKTOP_DEST" + cp "$WORKSPACE/data/glest_game/others/desktop/megaglest_g3dviewer.desktop" "$G3DVIEWER_DESKTOP_DEST" # Another stupid hack to fix icons. sed -i 's#Icon=megaglest#Icon=g3dviewer#' $G3DVIEWER_DESKTOP_DEST/megaglest_g3dviewer.desktop fi @@ -149,20 +141,19 @@ fi linuxdeploy -d $GAME_DESKTOP_DEST/megaglest.desktop \ --icon-file=megaglest.png \ --icon-filename=megaglest \ - --custom-apprun="$SOURCE_ROOT/mk/linux/AppRun" \ - --library="SOURCE_ROOT/$APPIMAGE_BUILD_DIR/source/shared_lib/liblibmegaglest.so" \ + --custom-apprun="$WORKSPACE/mk/linux/AppRun" \ --executable AppDir/$INST_PREFIX/bin/megaglest \ --appdir AppDir \ --plugin gtk \ --output appimage -mv MegaGlest*.AppImage $WORKSPACE +mv MegaGlest*.AppImage "$WORKSPACE" # Tools #mkdir -p $APPIMAGE_BUILD_DIR/tools #cd $APPIMAGE_BUILD_DIR/tools -#cmake $SOURCE_ROOT -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON +#cmake $WORKSPACE -DBUILD_MEGAGLEST=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=ON #make -j$(nproc) #strip source/tools/glexemel/g2xml source/tools/glexemel/xml2g diff --git a/mk/linux/docker/.env b/mk/linux/docker/.env new file mode 100644 index 000000000..db9d19917 --- /dev/null +++ b/mk/linux/docker/.env @@ -0,0 +1,12 @@ +# Your numeric uid and gid +HOSTUID= +HOSTGID= + +# When run from the root of your project directory, this will be +# the location in the container +WORKSPACE="/workspace" + +# Absolute or relative path to your AppImage build script +SCRIPT="mk/linux/build-appimage.sh" + +ENTRYPOINT="/entrypoint.sh" diff --git a/mk/linux/docker/docker-compose.yml b/mk/linux/docker/docker-compose.yml new file mode 100644 index 000000000..78ff1fd05 --- /dev/null +++ b/mk/linux/docker/docker-compose.yml @@ -0,0 +1,13 @@ +services: + build: + environment: + HOSTUID: ${HOSTUID} + HOSTGID: ${HOSTGID} + VERSION: ${VERSION} + image: andy5995/linuxdeploy:v2-focal + platform: ${PLATFORM:-linux/amd64} + entrypoint: $ENTRYPOINT + volumes: + - $PWD:$WORKSPACE + working_dir: $WORKSPACE + command: $SCRIPT From 750f07896be913af57e6bc86cda6b932a67af5dd Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 27 Nov 2024 16:38:19 -0600 Subject: [PATCH 15/26] Actually use the docker-compose.yml added in previous commit --- .github/workflows/appimage.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 3ef2fdd8a..3e66a8fb8 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -51,14 +51,10 @@ jobs: - name: Build AppImage run: | - docker run -t \ - --rm \ - --platform=${{ matrix.platform }} \ - -e HOSTUID=$(id -u) \ - -e VERSION \ - -v $GITHUB_WORKSPACE:/workspace \ - -w /workspace \ - andy5995/linuxdeploy:v2-focal mk/linux/build-appimage.sh + export HOSTUID=$(id -u) HOSTGID=$(id -g) + docker compose -f mk/linux/docker/docker-compose.yml run --rm build + env: + PLATFORM: ${{ matrix.platform }} - name: Create sha256sum run: | From 21448f0cec31e3758b2d36f058332464e89b9635 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 27 Nov 2024 16:56:53 -0600 Subject: [PATCH 16/26] Add comments to compose yml and .env, move vars from .env to compose --- mk/linux/docker/.env | 8 +++----- mk/linux/docker/docker-compose.yml | 10 +++++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/mk/linux/docker/.env b/mk/linux/docker/.env index db9d19917..370b68e2f 100644 --- a/mk/linux/docker/.env +++ b/mk/linux/docker/.env @@ -1,3 +1,6 @@ +# These variables can be overridden by exporting them from the +# command line when running `docker compose` +# # Your numeric uid and gid HOSTUID= HOSTGID= @@ -5,8 +8,3 @@ HOSTGID= # When run from the root of your project directory, this will be # the location in the container WORKSPACE="/workspace" - -# Absolute or relative path to your AppImage build script -SCRIPT="mk/linux/build-appimage.sh" - -ENTRYPOINT="/entrypoint.sh" diff --git a/mk/linux/docker/docker-compose.yml b/mk/linux/docker/docker-compose.yml index 78ff1fd05..7d2cf34db 100644 --- a/mk/linux/docker/docker-compose.yml +++ b/mk/linux/docker/docker-compose.yml @@ -5,9 +5,13 @@ services: HOSTGID: ${HOSTGID} VERSION: ${VERSION} image: andy5995/linuxdeploy:v2-focal - platform: ${PLATFORM:-linux/amd64} - entrypoint: $ENTRYPOINT + platform: "${PLATFORM:-linux/amd64}" + entrypoint: "${ENTRYPOINT:-/entrypoint.sh}" volumes: + # Note WORKSPACE and SCRIPT is not used by the container, therefore + # is not included within the 'environment' section above - $PWD:$WORKSPACE working_dir: $WORKSPACE - command: $SCRIPT + # Absolute path or Relative to workspace + # e.g. $WORKSPACE/path/to/script + command: "${SCRIPT:-mk/linux/build-appimage.sh}" From 058396e4d0d969a683af50152947de17acf5ee8c Mon Sep 17 00:00:00 2001 From: andy5995 Date: Wed, 27 Nov 2024 17:14:03 -0600 Subject: [PATCH 17/26] Don't bother setting WORKSPACE in the script --- mk/linux/build-appimage.sh | 2 -- mk/linux/docker/docker-compose.yml | 7 +++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index d8bb250f0..663b00295 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -25,8 +25,6 @@ if [ -z "$VERSION" ]; then exit 1 fi -# Set default workspace if not provided -WORKSPACE=${WORKSPACE:-$(pwd)} # Check if the workspace path is absolute if [[ "$WORKSPACE" != /* ]]; then echo "The workspace path must be absolute" diff --git a/mk/linux/docker/docker-compose.yml b/mk/linux/docker/docker-compose.yml index 7d2cf34db..d3b801748 100644 --- a/mk/linux/docker/docker-compose.yml +++ b/mk/linux/docker/docker-compose.yml @@ -4,14 +4,17 @@ services: HOSTUID: ${HOSTUID} HOSTGID: ${HOSTGID} VERSION: ${VERSION} + WORKSPACE: ${WORKSPACE} image: andy5995/linuxdeploy:v2-focal platform: "${PLATFORM:-linux/amd64}" entrypoint: "${ENTRYPOINT:-/entrypoint.sh}" volumes: - # Note WORKSPACE and SCRIPT is not used by the container, therefore - # is not included within the 'environment' section above - $PWD:$WORKSPACE working_dir: $WORKSPACE + + # Note that SCRIPT is not used by the container, therefore + # is not included within the 'environment' section above + # # Absolute path or Relative to workspace # e.g. $WORKSPACE/path/to/script command: "${SCRIPT:-mk/linux/build-appimage.sh}" From a20e3856f43429e6323b3e3a61650d2fca9b57ac Mon Sep 17 00:00:00 2001 From: andy5995 Date: Sat, 28 Dec 2024 22:00:04 -0600 Subject: [PATCH 18/26] Don't build on arm/v7 --- .github/workflows/appimage.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 3e66a8fb8..9d75c0c7f 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -27,7 +27,6 @@ jobs: platform: - linux/amd64 - linux/arm64 - - linux/arm/v7 steps: - name: Checkout MegaGlest From c1409acf31f6da43334668e17269a65cfc74ef40 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Sat, 28 Dec 2024 22:00:29 -0600 Subject: [PATCH 19/26] Install far few packages with --no-install-recommends --- mk/linux/build-appimage.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index 663b00295..a68ff0289 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -49,8 +49,8 @@ fi sudo DEBIAN_FRONTEND=noninteractive -i sh -c \ "apt update && apt upgrade -y && - apt install -y - build-essential + apt install --no-install-recommends -y + build-essential libcurl4-gnutls-dev libsdl2-dev libopenal-dev From e1abda7be32402f35e5ed4141e20cd90a536d4cd Mon Sep 17 00:00:00 2001 From: andy5995 Date: Sat, 28 Dec 2024 22:01:35 -0600 Subject: [PATCH 20/26] Use v3 instead of v2, remove entrypoint Using it here overrides the default set in the linuxdeploy image --- mk/linux/docker/docker-compose.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/mk/linux/docker/docker-compose.yml b/mk/linux/docker/docker-compose.yml index d3b801748..4b765c047 100644 --- a/mk/linux/docker/docker-compose.yml +++ b/mk/linux/docker/docker-compose.yml @@ -5,12 +5,11 @@ services: HOSTGID: ${HOSTGID} VERSION: ${VERSION} WORKSPACE: ${WORKSPACE} - image: andy5995/linuxdeploy:v2-focal - platform: "${PLATFORM:-linux/amd64}" - entrypoint: "${ENTRYPOINT:-/entrypoint.sh}" + image: andy5995/linuxdeploy:v3-focal + platform: ${PLATFORM} volumes: - - $PWD:$WORKSPACE - working_dir: $WORKSPACE + - ${PWD}:${WORKSPACE} + working_dir: ${WORKSPACE} # Note that SCRIPT is not used by the container, therefore # is not included within the 'environment' section above From cb3bbcc097bffe2c971a1bdb6a25cca1c1cc643c Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Fri, 24 Jan 2025 17:02:08 -0600 Subject: [PATCH 21/26] Specify v3.2.0 for qemu action --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 9d75c0c7f..b55fbc6f1 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -40,7 +40,7 @@ jobs: - if: ${{ ! contains(matrix.platform, 'amd64') }} - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v3.2.0 - name: Set variables run: | From 9a965a546c16ded5467e219859c32a76f9be157b Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Fri, 24 Jan 2025 17:57:44 -0600 Subject: [PATCH 22/26] Revert cb3bbcc --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index b55fbc6f1..9d75c0c7f 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -40,7 +40,7 @@ jobs: - if: ${{ ! contains(matrix.platform, 'amd64') }} - uses: docker/setup-qemu-action@v3.2.0 + uses: docker/setup-qemu-action@v3 - name: Set variables run: | From f40e4da07752309751c9cff350499d9a2bfcc134 Mon Sep 17 00:00:00 2001 From: Jammyjamjamman Date: Sat, 25 Jan 2025 00:47:38 +0000 Subject: [PATCH 23/26] Add CC and CXX variables docker-compose Also switch appimage workflow to clang for now (gcc breaks arm64 build) --- .github/workflows/appimage.yml | 8 ++------ mk/linux/build-appimage.sh | 1 + mk/linux/docker/docker-compose.yml | 4 +++- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 9d75c0c7f..b3350c77f 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -42,18 +42,14 @@ jobs: - if: ${{ ! contains(matrix.platform, 'amd64') }} uses: docker/setup-qemu-action@v3 - - name: Set variables - run: | - if [ -z "$VERSION" ]; then - echo "VERSION=snapshot" >> $GITHUB_ENV - fi - - name: Build AppImage run: | export HOSTUID=$(id -u) HOSTGID=$(id -g) docker compose -f mk/linux/docker/docker-compose.yml run --rm build env: PLATFORM: ${{ matrix.platform }} + CC: clang + CXX: clang++ - name: Create sha256sum run: | diff --git a/mk/linux/build-appimage.sh b/mk/linux/build-appimage.sh index a68ff0289..71a1df1a0 100755 --- a/mk/linux/build-appimage.sh +++ b/mk/linux/build-appimage.sh @@ -51,6 +51,7 @@ sudo DEBIAN_FRONTEND=noninteractive -i sh -c \ apt upgrade -y && apt install --no-install-recommends -y build-essential + $CC libcurl4-gnutls-dev libsdl2-dev libopenal-dev diff --git a/mk/linux/docker/docker-compose.yml b/mk/linux/docker/docker-compose.yml index 4b765c047..62ab8f285 100644 --- a/mk/linux/docker/docker-compose.yml +++ b/mk/linux/docker/docker-compose.yml @@ -3,8 +3,10 @@ services: environment: HOSTUID: ${HOSTUID} HOSTGID: ${HOSTGID} - VERSION: ${VERSION} + VERSION: ${VERSION:-snapshot} WORKSPACE: ${WORKSPACE} + CC: "${CC:-gcc}" + CXX: "${CXX:-g++}" image: andy5995/linuxdeploy:v3-focal platform: ${PLATFORM} volumes: From b31b0ae65421d357144a04adbf66ed89008ce9fb Mon Sep 17 00:00:00 2001 From: Andy Alt Date: Sat, 25 Jan 2025 07:43:13 -0600 Subject: [PATCH 24/26] Use jammy image instead of focal --- mk/linux/docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mk/linux/docker/docker-compose.yml b/mk/linux/docker/docker-compose.yml index 62ab8f285..cc25779a2 100644 --- a/mk/linux/docker/docker-compose.yml +++ b/mk/linux/docker/docker-compose.yml @@ -7,7 +7,7 @@ services: WORKSPACE: ${WORKSPACE} CC: "${CC:-gcc}" CXX: "${CXX:-g++}" - image: andy5995/linuxdeploy:v3-focal + image: andy5995/linuxdeploy:v3-jammy platform: ${PLATFORM} volumes: - ${PWD}:${WORKSPACE} From 4fd036465ecf6bafe44c86091166fd14cf191092 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Sat, 25 Jan 2025 11:03:17 -0600 Subject: [PATCH 25/26] Use native arm64 runner https://github.blog/changelog/2025-01-16-linux-arm64-hosted-runners-now-available-for-free-in-public-repositories-public-preview/ --- .github/workflows/appimage.yml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index b3350c77f..78d476951 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -19,14 +19,14 @@ on: jobs: build-mg-appimage: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} env: VERSION: ${{ inputs.version }} strategy: matrix: - platform: - - linux/amd64 - - linux/arm64 + os: + - ubuntu-24.04-arm + - ubuntu-24.04 steps: - name: Checkout MegaGlest @@ -38,18 +38,10 @@ jobs: repository: "megaglest/megaglest-data" path: "data/glest_game" - - - if: ${{ ! contains(matrix.platform, 'amd64') }} - uses: docker/setup-qemu-action@v3 - - name: Build AppImage run: | export HOSTUID=$(id -u) HOSTGID=$(id -g) docker compose -f mk/linux/docker/docker-compose.yml run --rm build - env: - PLATFORM: ${{ matrix.platform }} - CC: clang - CXX: clang++ - name: Create sha256sum run: | @@ -59,7 +51,7 @@ jobs: - name: Artifact Filename run: | - PLATFORM=${{ matrix.platform }} + PLATFORM=$(uname -m) echo "ARTIFACT_NAME=AppImages-${PLATFORM//\//-}" >> $GITHUB_ENV - name: Upload AppImage From 162b85dd024443d9f27ae24caa79d35d8632a09e Mon Sep 17 00:00:00 2001 From: Jammyjamjamman Date: Thu, 30 Jan 2025 19:51:23 +0000 Subject: [PATCH 26/26] New workflows for the AppImage Also add comment to explain changes to CmakeLists.txt --- .github/workflows/appimage.yml | 19 +++++-- .github/workflows/cmake.yml | 22 ++------ .github/workflows/docker.yml | 39 -------------- .github/workflows/prerelease.yml | 84 ----------------------------- .github/workflows/snapshot.yml | 93 ++++++++------------------------ CMakeLists.txt | 1 + mk/linux/Dockerfile | 57 -------------------- 7 files changed, 43 insertions(+), 272 deletions(-) delete mode 100644 .github/workflows/docker.yml delete mode 100644 .github/workflows/prerelease.yml delete mode 100644 mk/linux/Dockerfile diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 78d476951..976034dad 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -14,8 +14,6 @@ on: branches: develop pull_request: branches: develop - paths: - - '**appimage.yml' jobs: build-mg-appimage: @@ -54,9 +52,24 @@ jobs: PLATFORM=$(uname -m) echo "ARTIFACT_NAME=AppImages-${PLATFORM//\//-}" >> $GITHUB_ENV - - name: Upload AppImage + - if: ${{ github.ref != 'refs/heads/develop' }} + name: Upload AppImage uses: actions/upload-artifact@v4 with: name: ${{ env.ARTIFACT_NAME }} path: ./*AppImage* if-no-files-found: error + + - if: ${{ github.ref == 'refs/heads/develop' }} + name: 'Prerelease' + uses: ncipollo/release-action@v1 + with: + artifacts: "./*AppImage*" + body: "MegaGlest Snapshot Release" + allowUpdates: true + prerelease: true + removeArtifacts: false + replacesArtifacts: true + omitBodyDuringUpdate: true + omitNameDuringUpdate: true + tag: snapshot diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index b987573c9..474975a66 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -8,14 +8,9 @@ on: branches: [ develop ] pull_request: branches: [ develop ] - workflow_run: - workflows: [Docker Image] - types: [completed] - branches: [develop] jobs: build-linux: - if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} strategy: fail-fast: false matrix: @@ -51,7 +46,6 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} strategy: fail-fast: false matrix: @@ -121,27 +115,18 @@ jobs: $7zPath = $(Get-Command 7z).Source cp $7zPath . Remove-Item glest-dev.ini - Compress-Archive -Path *.exe,*.ini -DestinationPath megaglest-$env:VERSION-x64-windows.zip + Compress-Archive -Path *.exe,*.ini -DestinationPath megaglest-x64-windows.zip cd ../.. - name: Create MegaGlest Snapshot if: ${{ github.ref == 'refs/heads/develop' }} uses: actions/upload-artifact@v4 with: - name: megaglest-x64-windows + name: megaglest-x64-windows-archive retention-days: 1 path: mk/windoze/*.zip - on-dockerbuild-failure: - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'failure' }} - steps: - - run: | - echo 'The triggering workflow failed' - exit 1 - build-macos: - if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} strategy: fail-fast: false runs-on: macos-latest @@ -168,7 +153,7 @@ jobs: cd mk/macos ./make-binary-archive.sh cd - - mv release/mg-binary-macos*.tar.bz2 release/megaglest-$VERSION-x64-macos.tar.bz2 + mv release/mg-binary-macos*.tar.bz2 release/megaglest-x64-macos.tar.bz2 - name: Create MegaGlest Snapshot if: ${{ github.ref == 'refs/heads/develop' }} @@ -177,3 +162,4 @@ jobs: name: megaglest-x64-macos retention-days: 1 path: release/*.tar.bz2 + diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index 975f17c23..000000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Docker Image - -on: - push: - branches: - - 'master' - - 'develop' - paths: - - '.github/workflows/docker.yml' - - 'mk/linux/Dockerfile' - schedule: - - cron: '0 0 1 * *' - -jobs: - build: - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - file: mk/linux/Dockerfile - push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/megaglest-build-env:bionic - cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/megaglest-build-env:buildcache - cache-to: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/megaglest-build-env:buildcache,mode=max diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml deleted file mode 100644 index fa3c59de8..000000000 --- a/.github/workflows/prerelease.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Pre-release - -on: - workflow_run: - workflows: [Make Snapshot] - types: [completed] - branches: [develop] -jobs: - - release: - runs-on: ubuntu-latest - permissions: - contents: write - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: 'Download artifact' - uses: actions/github-script@v7 - with: - script: | - let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: context.payload.workflow_run.id, - }); - let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "megaglest-x64-windows" - })[0]; - let download = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: matchArtifact.id, - archive_format: 'zip', - }); - let fs = require('fs'); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/megaglest-x64-windows.zip`, Buffer.from(download.data)); - - matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "megaglest-x64-ubuntu" - })[0]; - download = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: matchArtifact.id, - archive_format: 'zip', - }); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/megaglest-x64-ubuntu.zip`, Buffer.from(download.data)); - - matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "megaglest-x64-macos" - })[0]; - download = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: matchArtifact.id, - archive_format: 'zip', - }); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/megaglest-x64-macos.zip`, Buffer.from(download.data)); - - - name: 'Prepare artifacts' - run: | - unzip megaglest-x64-ubuntu.zip - unzip megaglest-x64-windows.zip - unzip megaglest-x64-macos.zip - rm megaglest-x64-windows.zip megaglest-x64-ubuntu.zip megaglest-x64-macos.zip - - name: 'Prerelease' - uses: ncipollo/release-action@v1 - with: - artifacts: "*.tar.xz,*.zip,*.tar.bz2" - body: "MegaGlest Snapshot Release" - allowUpdates: true - prerelease: true - removeArtifacts: true - replacesArtifacts: true - omitBodyDuringUpdate: true - omitNameDuringUpdate: True - tag: snapshot - - on-failure: - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'failure' }} - steps: - - run: | - echo 'The triggering workflow failed' - exit 1 diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 1876c41cb..0989be9a5 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -10,38 +10,7 @@ on: # The artifact only runs on the same distro that it was built on. jobs: - appimage-snapshot: - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' }} - container: megaglest/megaglest-build-env:bionic - steps: - - uses: actions/checkout@v4 - - - name: Git Hash - run: | - # Required because docker user is root. - git config --global safe.directory $GITHUB_WORKSPACE - echo "VERSION=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - - - name: Build - run: mk/linux/build-appimage.sh - - - name: Pack - run: | - cd mk/linux/ - mv g2xml g2xml-$VERSION - mv xml2g xml2g-$VERSION - tar cfJ megaglest-$VERSION-x64-appimage.tar.xz *.AppImage g2xml-* xml2g-* - - - name: Create MegaGlest Snapshot - uses: actions/upload-artifact@v4 - with: - name: megaglest-x64-ubuntu - retention-days: 1 - path: | - mk/linux/*.tar.xz - - transfer-macos-snapshot: + release: runs-on: ubuntu-latest permissions: contents: write @@ -67,55 +36,37 @@ jobs: }); let fs = require('fs'); fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/megaglest-x64-macos.zip`, Buffer.from(download.data)); - - name: 'Prepare artifacts' - run: | - unzip megaglest-x64-macos.zip - rm megaglest-x64-macos.zip - - name: Create MegaGlest MacOS Snapshot - uses: actions/upload-artifact@v4 - with: - name: megaglest-x64-macos - retention-days: 1 - path: | - *.tar.bz2 - transfer-windows-snapshot: - runs-on: ubuntu-latest - permissions: - contents: write - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: 'Download artifact' - uses: actions/github-script@v7 - with: - script: | - let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: context.payload.workflow_run.id, - }); - let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "megaglest-x64-windows" + matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "megaglest-x64-windows-archive" })[0]; - let download = await github.rest.actions.downloadArtifact({ + download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: matchArtifact.id, archive_format: 'zip', }); - let fs = require('fs'); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/megaglest-x64-windows.zip`, Buffer.from(download.data)); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/megaglest-x64-windows-archive.zip`, Buffer.from(download.data)); + - name: 'Prepare artifacts' run: | - unzip megaglest-x64-windows.zip - rm megaglest-x64-windows.zip - - name: Create MegaGlest Windows Snapshot - uses: actions/upload-artifact@v4 + unzip megaglest-x64-windows-archive.zip + unzip megaglest-x64-macos.zip + rm megaglest-x64-windows-archive.zip megaglest-x64-macos.zip + + - name: 'Prerelease' + uses: ncipollo/release-action@v1 with: - name: megaglest-x64-windows - retention-days: 1 - path: | - *.zip + artifacts: "*.zip,*.tar.bz2" + body: "MegaGlest Snapshot Release" + allowUpdates: true + prerelease: true + removeArtifacts: false + replacesArtifacts: true + omitBodyDuringUpdate: true + omitNameDuringUpdate: true + tag: snapshot + on-failure: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index 7006742ec..5970bbf4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,6 +208,7 @@ include(CheckCCompilerFlag) # Define your extra flags in a list set(EXTRA_FLAGS + # https://github.com/MegaGlest/megaglest-source/issues/275 "-Werror=odr" "-Werror=lto-type-mismatch" "-Werror=strict-aliasing" diff --git a/mk/linux/Dockerfile b/mk/linux/Dockerfile deleted file mode 100644 index 120a269ce..000000000 --- a/mk/linux/Dockerfile +++ /dev/null @@ -1,57 +0,0 @@ -# Dockerfile for building mg appimage -FROM ubuntu:bionic - -RUN apt update \ - && apt install -y software-properties-common \ - && add-apt-repository ppa:git-core/ppa \ - && apt update && apt -y upgrade \ - && apt install -y \ - build-essential \ - cmake \ - git \ - imagemagick \ - libbrotli-dev \ - libcppunit-dev \ - libcurl4-gnutls-dev \ - libfreetype6-dev \ - libfribidi-dev \ - libftgl-dev \ - libgl1-mesa-dev \ - libglew-dev \ - libglu1-mesa-dev \ - libgnutls28-dev \ - libidn2-dev \ - libircclient-dev \ - libjpeg-dev \ - libkrb5-dev \ - libldap2-dev \ - liblua5.3-dev \ - libminiupnpc-dev \ - libnghttp2-dev \ - libogg-dev \ - libopenal-dev \ - libpng-dev \ - libpsl-dev \ - librtmp-dev \ - libsdl2-dev \ - libssh-dev \ - libvorbis-dev \ - libwxgtk3.0-gtk3-dev \ - libx11-dev \ - libxml2-dev \ - p7zip-full \ - wget \ - && rm -rf /var/lib/apt/lists - -# Install linuxdeploy -ENV TOOLS_DIR="/tools" -RUN mkdir -p $TOOLS_DIR -ARG ARCH=x86_64 -RUN /bin/bash -c 'cd $TOOLS_DIR \ - && wget https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20220822-1/linuxdeploy-${ARCH}.AppImage \ - && chmod +x linuxdeploy-${ARCH}.AppImage \ - && ./linuxdeploy-${ARCH}.AppImage --appimage-extract \ - && rm ./linuxdeploy-${ARCH}.AppImage \ - && wget -c "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh" \ - && chmod +x linuxdeploy-plugin-gtk.sh \ - && cd -'