Actions Github et construction multiplateforme

Salut, Habr. Cet article explique comment configurer la création sur toutes les plates-formes à l'aide d'actions github.


Contexte


J'ai écrit une application simple sur électron, j'ai moi-même utilisé linux, mais mon ami a préféré les macos. Quand j'ai essayé de compiler pour macOS sur mon ordinateur et remis le paquet à mon ami - Cela n'a pas commencé. En conséquence, il s'est avéré que la seule option pour compiler une application pour macos était de la compiler sur macos. Pour simplifier au maximum la tâche, j'ai créé trois scripts: build: linux, build: mac, build: win. Par conséquent, après la compilation, les fichiers suivants ont été obtenus: linux.deb, linux.AppImage, mac.pkg, win.exe. Mais il restait un problème qui devait être compilé sur différents systèmes. Et puis le salut des actions gihub.


Comment tout devrait fonctionner


J'appuie sur le nouveau bouton de libération sur github, puis la magie démarre le flux de travail sur les actions de github, il se compile sur tous les systèmes d'exploitation et ajoute des binaires à la version


J'ai utilisé https://github.com/JasonEtco/upload-to-releas pour ajouter des fichiers à publier, mais il y avait un problème avec cette action. Il s'agit d'une action de conteneur, et dans les actions github, les actions de conteneur sont uniquement disponibles sur Linux. Par conséquent, il a été décidé d'utiliser quatre tâches, 3 pour la compilation et 1 pour le chargement. Puisque l'environnement n'est pas enregistré pour chaque travail, c'est pourquoi des artefacts sont utilisés pour échanger entre eux


Pratique


Tout d'abord, dans le dossier .github / workflows / workflow.yml avec le contenu


name: CI on: release 

Eh bien, je pense qu'il est clair que c'est le flux de travail CI et qu'il sera lancé à la sortie, et maintenant le travail le plus important


 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 

Les étapes des travaux: c'est tout le travail, build-linux: c'est le travail avec le nom build-linux, runs-on: ubuntu-latest dit que vous devez tout exécuter sous le dernier ubuntu


Et puis les étapes les plus intéressantes: et tout ce qui est en dessous c'est ce que notre travail fera


Premièrement - utilise: ations / checkout @ v1 clone le référentiel afin que nous puissions l'utiliser. L'étape suivante Installer bluetooth installe bluetooth car le projet l'utilise. Ensuite, les dépendances sont établies et une génération se produit. Depuis la création, dans le dossier dist, il n'y a pas seulement des fichiers binaires, mais aussi des déchets inutiles, donc l'étape suivante consiste à créer un autre dossier dans lequel se trouvent uniquement les fichiers binaires, puis à les charger dans des artefacts.


Presque la même chose pour gagner avec des macos


  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 

Cependant, il convient de noter certaines différences. Tout d'abord, vous n'avez pas besoin d'installer le bluetooth, il est déjà installé, cependant, vous devez installer nodejs pour cela, utilisez actions / setup-node. En outre, Windows utilise d'autres commandes à l'étape Création.


Et bien sûr, la dernière étape consiste à télécharger des fichiers vers la version


 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/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: linux/linux.deb application/vnd.debian.binary-package - name: Upload to Release AppImage uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: linux/linux.AppImage application/x-executable - name: Upload to Release pkg uses: JasonEtco/upload-to-release@v0.31.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: mac/mac.pkg application/x-xar - name: Upload to Release exe uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: win/win.exe application/octet-stream 

La partie très importante est que les besoins, cette ligne dit que vous devez commencer à travailler uniquement après toutes les versions (si les versions vont en parallèle), puis nous téléchargeons d'abord les artefacts, puis ajoutons les binaires d'eux à la version


Les références


Fichier workflow.yml résultant


Dépôt


En savoir plus sur les actions github


Merci de votre attention!

Source: https://habr.com/ru/post/fr466501/


All Articles