1010
1111jobs :
1212 build :
13- runs-on : ubuntu-22.04
13+ strategy :
14+ matrix :
15+ include :
16+ - arch : x86_64
17+ runner : ubuntu-22.04
18+ - arch : aarch64
19+ runner : ubuntu-24.04-arm64
20+ runs-on : ${{ matrix.runner }}
1421 permissions :
1522 contents : write
1623
@@ -28,23 +35,23 @@ jobs:
2835 uses : actions/cache@v3
2936 with :
3037 path : ~/.cache/pip
31- key : ${{ runner.os }}-pip-${{ hashFiles('**/AppImageBuilder.yml') }} # Ключ зависит от конфига, на случай изменения зависимостей
38+ key : ${{ runner.os }}-${{ matrix.arch }}- pip-${{ hashFiles('**/AppImageBuilder.yml') }}
3239 restore-keys : |
33- ${{ runner.os }}-pip-
40+ ${{ runner.os }}-${{ matrix.arch }}- pip-
3441
3542 - name : 💾 Cache appimagetool
3643 id : cache-appimagetool
3744 uses : actions/cache@v3
3845 with :
3946 path : ~/appimagetool.AppImage
40- key : appimagetool-x86_64
47+ key : appimagetool-${{ matrix.arch }}
4148
4249 - name : 💾 Cache AppImage runtime
4350 id : cache-runtime
4451 uses : actions/cache@v3
4552 with :
46- path : ~/AppImageKit-runtime-x86_64
47- key : AppImageKit-runtime-x86_64
53+ path : ~/AppImageKit-runtime-${{ matrix.arch }}
54+ key : AppImageKit-runtime-${{ matrix.arch }}
4855 # -----------------------------
4956
5057 - name : 📦 Установить AppImageBuilder
5764 if : steps.cache-appimagetool.outputs.cache-hit == 'true'
5865 run : |
5966 chmod +x ~/appimagetool.AppImage
60- # Создаем ссылку или копируем в PATH, чтобы AppImageBuilder мог его найти
6167 sudo mv ~/appimagetool.AppImage /usr/local/bin/appimagetool
6268 # ----------------------------------------------------------
6369
6672 if : steps.cache-runtime.outputs.cache-hit == 'true'
6773 run : |
6874 mkdir -p ~/.cache/appimage-builder
69- cp ~/AppImageKit-runtime-x86_64 ~/.cache/appimage-builder/runtime-x86_64
75+ cp ~/AppImageKit-runtime-${{ matrix.arch }} ~/.cache/appimage-builder/runtime-${{ matrix.arch }}
7076 # ----------------------------------------------------
7177
7278 - name : 🔨 Build Double Commander AppImage
@@ -77,38 +83,20 @@ jobs:
7783 - name : 💾 Сохранить appimagetool в кэш (если не было кэша)
7884 if : steps.cache-appimagetool.outputs.cache-hit != 'true'
7985 run : |
80- # Предполагаем, что appimagetool был скачан в ~/.local/bin или текущую директорию
81- # Нужно найти его и скопировать в кэш
82- # Обычно AppImageBuilder скачивает его в ~/.cache/appimage-builder/downloads/
83- # или временный каталог. Попробуем найти.
84- # ВАЖНО: Этот путь может меняться в зависимости от версии AppImageBuilder.
85- # Ниже приведен пример, который может потребовать адаптации.
86- # find ~/.cache/appimage-builder -name "appimagetool-*" -type f -executable 2>/dev/null | head -1 | xargs -I {} cp {} ~/appimagetool.AppImage || echo "appimagetool не найден для кэширования"
87-
88- # Более надежный способ: скачать самостоятельно, если не из кэша
8986 if [ ! -f ~/appimagetool.AppImage ]; then
9087 echo "appimagetool не найден в стандартных местах, скачиваем для кэширования..."
91- wget -O ~/appimagetool.AppImage "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64 .AppImage"
88+ wget -O ~/appimagetool.AppImage "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${{ matrix.arch }} .AppImage"
9289 chmod +x ~/appimagetool.AppImage
9390 fi
94- # Если он уже был скачан AppImageBuilder, просто переименуем/скопируем
95- # (Это может быть нетривиально, т.к. путь динамический)
96- # Для простоты, если мы сами скачали, то он уже в кэше.
9791 echo "appimagetool готов для кэширования в ~/appimagetool.AppImage"
9892 # ----------------------------------------------------------
9993
10094 # --- Сохраняем runtime в кэш, если он был скачан ---
10195 - name : 💾 Сохранить runtime в кэш (если не было кэша)
10296 if : steps.cache-runtime.outputs.cache-hit != 'true'
10397 run : |
104- # Аналогично, runtime скачивается AppImageBuilder.
105- # Найдем его в кэше AppImageBuilder и скопируем.
106- # find ~/.cache/appimage-builder -name "runtime-x86_64" -type f 2>/dev/null | head -1 | xargs -I {} cp {} ~/AppImageKit-runtime-x86_64 || echo "runtime не найден для кэширования"
107-
108- # Простой способ: если файл появился после сборки, скопируем его.
109- # Это менее надежно, но проще.
110- if [ -f ~/.cache/appimage-builder/runtime-x86_64 ]; then
111- cp ~/.cache/appimage-builder/runtime-x86_64 ~/AppImageKit-runtime-x86_64
98+ if [ -f ~/.cache/appimage-builder/runtime-${{ matrix.arch }} ]; then
99+ cp ~/.cache/appimage-builder/runtime-${{ matrix.arch }} ~/AppImageKit-runtime-${{ matrix.arch }}
112100 echo "runtime найден и скопирован для кэширования."
113101 else
114102 echo "runtime не найден в ~/.cache/appimage-builder/ для кэширования."
@@ -129,7 +117,7 @@ jobs:
129117 - name : 📤 Upload AppImage Artifact
130118 uses : actions/upload-artifact@v4
131119 with :
132- name : DoubleCommander-AppImage
120+ name : DoubleCommander-AppImage-${{ matrix.arch }}
133121 path : |
134122 *.AppImage
135123 *doublecmd*.AppImage
@@ -149,23 +137,21 @@ jobs:
149137 echo "::error::AppImage файл не найден"
150138 exit 1
151139 fi
152-
140+
153141 echo "✅ Найден AppImage файл: $FILE"
154142 echo "appimage_file=$FILE" >> $GITHUB_OUTPUT
155143
156144 VERSION=$(date +"%Y%m%d%H%M%S")
157145 echo "🔖 Установлена версия (дата/время): $VERSION"
158146 echo "version=$VERSION" >> $GITHUB_OUTPUT
159147
160-
161- - name : 🚀 Create GitHub Release (Optional)
162- # if: success() && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
148+ - name : 🚀 Create GitHub Release
163149 if : success()
164150 uses : softprops/action-gh-release@v2
165151 with :
166152 files : ${{ steps.get_version.outputs.appimage_file }}
167- tag_name : v${{ steps.get_version.outputs.version }}
168- body : " Автоматическая сборка Double Commander AppImage через AppImageBuilder"
153+ tag_name : v${{ steps.get_version.outputs.version }}-${{ matrix.arch }}
154+ body : " Автоматическая сборка Double Commander AppImage через AppImageBuilder (${{ matrix.arch }}) "
169155 draft : false
170156 prerelease : false
171157 env :
0 commit comments