Привет, Хабр.
Эта статья о том, как настроить сборку на всех платформах с помощью действий github.
Фон
Написал простое приложение на электронке, сам пользовался линуксом, но друг предпочел макос.Когда я попробовал на компе скомпилировать для макоса и отдал другу пкг - он не запустился.
В итоге оказалось, что единственный вариант скомпилировать приложение под макос - это скомпилировать его на макосе.
Чтобы максимально упростить задачу, я сделал три скрипта: build:linux, build:mac, build:win. В результате после компиляции были получены следующие файлы: linux.deb, linux.AppImage, mac.pkg, win.exe. Но осталась одна проблема: его нужно было компилировать на разных системах.
И тут наступает спасение от действий гихаба.
Как все должно работать
Я нажимаю кнопку нового выпуска на github, а затем волшебство запускает рабочий процесс с действиями github, которые он компилирует во всех операционных системах и добавляет двоичные файлы в выпуск.Чтобы добавить файлы в выпуск, я использовал https://github.com/JasonEtco/upload-to-releas Однако в этом действии была одна загвоздка.
Это действие контейнера, а в действиях github действия контейнера доступны только в Linux. Поэтому было решено использовать четыре задания: 3 на компиляцию и 1 на загрузку.
Поскольку окружение не сохраняется для каждого задания, для обмена между ними используются артефакты.
Упражняться
Для начала в папке .github/workflows/workflow.yml с содержимым
Ну думаю понятно, что это рабочий процесс CI и его запустят при релизе, а теперь самое главное заданиеname: CI on: release
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install bluetooth
run: sudo apt-get install -y build-essential libbluetooth-dev
- name: Install dependencies
run: npm install
- name: Build linux
run: npm run build:linux
- name: Creating out
run: |
mkdir out
cp dist/linux.AppImage out/
cp dist/linux.deb out/
- name: Upload build
uses: actions/upload-artifact@master
with:
name: linux
path: out
Пошаговые задания: это все задания, build-linux: это задание под названием build-linux, run-on: ubuntu-latest говорит, что нужно запускать все под последней ubuntu А дальше самое интересное: а все под ним то и будет делать наша работа Во-первых, using: ations/checkout@v1 клонирует репозиторий, чтобы мы могли его использовать.
Следующий шаг «Установка Bluetooth» устанавливает Bluetooth, поскольку проект использует его.
Далее устанавливаются зависимости и происходит сборка.
Так как после построения папка dist содержит не только бинарники, но и ненужный мусор, то следующим шагом будет создание еще одной папки, в которой будут лежать только бинарники, а затем загрузка их в артефакты.
Почти то же самое для победы с макосом build-mac:
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with: node-version: '8.x'
- name: Install dependencies
run: npm install
- name: Build mac
run: npm run build:mac
- name: Creating out
run: |
mkdir out
cp dist/mac.pkg out/
- name: Upload build
uses: actions/upload-artifact@master
with:
name: mac
path: out
build-win:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with: node-version: '8.x'
- name: Install dependencies
run: npm install
- name: Build win
run: npm run build:win
- name: Creating out
run: |
mkdir out
copy dist\win.exe out\
- name: Upload build
uses: actions/upload-artifact@master
with:
name: win
path: out
Однако есть некоторые различия, которые стоит отметить.
Во-первых, вам не нужно устанавливать Bluetooth; оно уже установлено.
Однако вам необходимо установить nodejs; Для этого используется action/setup-node. Windows также использует другие команды на этапе создания проекта.
И конечно завершающий этап — загрузка файлов в релиз.
upload:
runs-on: ubuntu-latest
needs: [build-linux, build-mac, build-win]
steps:
- uses: actions/checkout@v1
- name: Download linux artifact
uses: actions/download-artifact@master
with:
name: linux
- name: Download mac artifact
uses: actions/download-artifact@master
with:
name: mac
- name: Download win artifact
uses: actions/download-artifact@master
with:
name: win
- name: Upload to Release deb
uses: JasonEtco/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: linux/linux.deb application/vnd.debian.binary-package
- name: Upload to Release AppImage
uses: JasonEtco/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: linux/linux.AppImage application/x-executable
- name: Upload to Release pkg
uses: JasonEtco/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: mac/mac.pkg application/x-xar
- name: Upload to Release exe
uses: JasonEtco/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: win/win.exe application/octet-stream
Очень важная часть - потребности, в этой строчке написано, что начинать работу нужно только после всех сборок (Если сборки идут параллельно), Затем сначала скачиваем артефакты, а потом добавляем бинарники из них в релиз
Ссылки
Окончательный файл workflow.yml Репозиторий Подробнее о действиях github Спасибо за внимание! Теги: #github #JavaScript #npm #Github Actions #Electron #кроссплатформенность-
Siri Научили Помогать Жертвам Насилия
19 Oct, 24 -
Как Ии Amazon Постепенно Захватывает Мир
19 Oct, 24 -
Кредитный Аутсорсинг Php-Проекта
19 Oct, 24 -
Животные Или Зомби
19 Oct, 24 -
Новая Система Рейтинга Хостеров
19 Oct, 24