Skip to content

Commit c4c6369

Browse files
committed
feat: add arm64 native build via matrix strategy (ubuntu-24.04-arm64 LTS)
1 parent 3779f5a commit c4c6369

1 file changed

Lines changed: 22 additions & 36 deletions

File tree

.github/workflows/build.yml

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@ on:
1010

1111
jobs:
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
@@ -57,7 +64,6 @@ jobs:
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

@@ -66,7 +72,7 @@ jobs:
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

Comments
 (0)