Действия Github И Кроссплатформенность

Привет, Хабр.

Эта статья о том, как настроить сборку на всех платформах с помощью действий 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 с содержимым

  
  
  
   

name: CI on: release

Ну думаю понятно, что это рабочий процесс CI и его запустят при релизе, а теперь самое главное задание

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 #кроссплатформенность
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.