Acciones de Github y construcción multiplataforma

Hola Habr Este artículo trata sobre cómo configurar la construcción en todas las plataformas utilizando acciones de github.


Antecedentes


Escribí una aplicación simple en electron, yo mismo usé linux, pero mi amigo prefirió macos. Cuando traté de compilar macos en mi computadora y le entregué el paquete a mi amigo, no comenzó. Como resultado, resultó que la única opción para compilar una aplicación para macos era compilarla en macos. Para simplificar la tarea tanto como sea posible, hice tres scripts: build: linux, build: mac, build: win. Como resultado, después de la compilación, se obtuvieron los siguientes archivos: linux.deb, linux.AppImage, mac.pkg, win.exe. Pero quedaba un problema que debía compilarse en diferentes sistemas. Y luego la salvación de las acciones gihub.


Cómo debería funcionar todo


Presiono el nuevo botón de lanzamiento en github, y luego la magia comienza el flujo de trabajo en las acciones de github, se compila en todos los sistemas operativos y agrega binarios a la versión


Usé https://github.com/JasonEtco/upload-to-releas para agregar archivos para liberar, sin embargo, hubo una trampa con esta acción. Esta es una acción de contenedor, y en las acciones de github, las acciones de contenedor solo están disponibles en Linux. Por lo tanto, se decidió utilizar cuatro trabajos, 3 para compilar y 1 para cargar. Dado que el entorno no se guarda para cada trabajo, esta es la razón por la cual los artefactos se utilizan para intercambiar entre ellos


Practica


Primero, en la carpeta .github / workflows / workflow.yml con el contenido


name: CI on: release 

Bueno, creo que está claro que este es el flujo de trabajo de CI y se lanzará en el lanzamiento, y ahora es el trabajo más importante


 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 

Los pasos de los trabajos: este es todo el trabajo, build-linux: este es el trabajo con el nombre build-linux, corre: ubuntu-latest dice que necesita ejecutar todo bajo el último ubuntu


Y luego los pasos más interesantes: y todo lo que hay debajo es lo que hará nuestro trabajo


En primer lugar, utiliza: ations / checkout @ v1 clona el repositorio para que podamos usarlo. El siguiente paso Instalar bluetooth instala bluetooth porque el proyecto lo usa. A continuación, se establecen dependencias y se produce una compilación. Dado que después de construir en la carpeta dist no solo hay archivos binarios, sino también basura innecesaria, el siguiente paso es crear otra carpeta en la que solo se encuentren los archivos binarios y luego cargarlos en artefactos.


Casi lo mismo para ganar con 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 

Sin embargo, vale la pena señalar algunas diferencias. En primer lugar, no necesita instalar bluetooth, ya está instalado, sin embargo, necesita instalar nodejs para esto, use actions / setup-node. Además, Windows usa otros comandos en la etapa de creación.


Y, por supuesto, la etapa final es subir archivos a la versión


 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 parte muy importante es que necesita, esta línea dice que debe comenzar a trabajar solo después de todas las compilaciones (si las compilaciones van en paralelo), luego primero descargamos los artefactos y luego agregamos los binarios de ellos al lanzamiento


Referencias


Archivo resultante workflow.yml


Repositorio


Más información sobre las acciones de github


Gracias por su atencion!

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


All Articles