Files
labstream-desktop/.github/workflows/build.yml
2026-09-15 07:25:34 -05:00

84 líneas
2.9 KiB
YAML

name: Publicar app de escritorio (Windows + macOS)
# Se dispara al publicar una etiqueta de versión (ej. v1.0.0) y también a mano desde la
# pestaña Actions (workflow_dispatch). Construye el .exe (Windows) y el .dmg universal
# (macOS), los firma para el updater y publica todo —incluido latest.json— en un Release.
on:
push:
tags:
- "v*"
workflow_dispatch:
permissions:
contents: write # crear/actualizar el Release con los instaladores
jobs:
publish:
strategy:
fail-fast: false
matrix:
include:
# macOS → .dmg universal (Intel + Apple Silicon)
- platform: macos-latest
args: "--target universal-apple-darwin"
# Windows → instalador .exe (NSIS)
- platform: windows-latest
args: ""
runs-on: ${{ matrix.platform }}
steps:
- name: Clonar repo
uses: actions/checkout@v4
- name: Instalar Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Instalar Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Cache de Rust
uses: swatinem/rust-cache@v2
with:
workspaces: src-tauri
- name: Instalar dependencias
run: npm install
- name: Generar iconos (desde app-icon.png)
run: npm run icons
- name: Probar el cliente
run: npm test
- name: Construir, firmar y publicar
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Firma del updater: la clave privada y su contraseña van como secrets del repo.
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
# En un tag usa su nombre (v1.0.0); en ejecución manual, deriva vX.Y.Z de la versión.
tagName: ${{ github.ref_type == 'tag' && github.ref_name || 'v__VERSION__' }}
releaseName: "Labstream OS Desktop __VERSION__"
releaseBody: "Instaladores de escritorio de Labstream OS.\n\n- Windows: el archivo `.exe` (NSIS).\n- macOS: el archivo `.dmg` universal (Intel + Apple Silicon).\n\nActualización automática activada: las apps ya instaladas se actualizan solas al publicar una versión nueva."
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
activar:
needs: publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Publicar solo cuando ambos instaladores estan completos
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION=$(node -p "require('./package.json').version")
gh release edit "v$VERSION" --draft=false --latest