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: 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: false prerelease: false args: ${{ matrix.args }}