diff --git a/docs/build-desktop.md b/docs/build-desktop.md new file mode 100644 index 00000000..9b9dba8d --- /dev/null +++ b/docs/build-desktop.md @@ -0,0 +1,56 @@ +# Gerar o instalador do app desktop + +O workflow **`.github/workflows/release.yml`** (herdado do upstream) já compila +para macOS, Windows e Linux e publica os instaladores como release. Ele dispara +ao empurrar uma tag `v*`. + +Não foi preciso escrever workflow novo — foi preciso **adaptá-lo ao fork**. + +## Por que GitHub e não Gitea + +O Gitea desta instância não tem Actions habilitado, e mesmo habilitado ele +**não oferece máquinas hospedadas**: seria preciso registrar um PC Windows +como runner e mantê-lo ligado. O GitHub fornece runners Windows prontos, que é +exatamente o que falta — o módulo nativo do compartilhamento de áudio usa +WASAPI e só compila no Windows, com o compilador da Microsoft. + +O Gitea continua sendo o repositório principal. O GitHub entra apenas como +espelho para compilar. + +## Passos (uma vez) + +1. Criar um repositório no GitHub — o `electron-builder.yml` está apontado para + `devsyncwrld/backspace`. **Se o seu for outro nome, ajuste lá.** +2. Adicionar o espelho e empurrar: + ``` + cd /opt/backspace + git remote add github git@github.com:devsyncwrld/backspace.git + git push github main + ``` +3. Marcar uma versão e empurrar a tag — é ela que dispara a compilação: + ``` + git tag v1.0.1 && git push github v1.0.1 + ``` +4. Os instaladores aparecem na aba Releases do GitHub em ~15 minutos. + +## O que isso resolve de quebra + +O `electron-updater` já estava instalado no projeto mas **sem feed** — o app +não se atualizava sozinho. Como o `publish` agora aponta para as releases do +fork, o app passa a encontrar versões novas por conta própria. Ninguém do grupo +precisa reinstalar na mão de novo. + +## Adaptações feitas para o fork + +| O quê | Por quê | +|---|---| +| `publish.owner` → `devsyncwrld` | Apontava para o repositório do upstream | +| `postinstall` reconstrói também `electron-native-screenshare` | Rodava `electron-rebuild` só no `uiohook-napi`. O módulo novo seria compilado para a ABI do Node em vez da do Electron e falharia ao carregar — e como o carregamento degrada em silêncio, o sintoma seria "compartilha sem som", sem erro visível | +| Nota sobre `asarUnpack` | O `uiohook-napi` tem `build/` excluído do asar porque distribui binários prontos. O módulo novo **não** distribui: `build/Release/*.node` é a única cópia e não pode ser excluída | + +## Detalhe herdado que vale preservar + +O runner do Windows está fixado em `windows-2022`, não `windows-latest`. O +comentário no workflow explica: a imagem `latest` traz o Visual Studio 18, que +o node-gyp embutido no `electron-rebuild` não detecta ("unknown version +undefined"). Não mude isso sem testar. diff --git a/packages/desktop/electron-builder.yml b/packages/desktop/electron-builder.yml index 79b8d355..85a32865 100644 --- a/packages/desktop/electron-builder.yml +++ b/packages/desktop/electron-builder.yml @@ -14,13 +14,18 @@ files: - "!**/node_modules/uiohook-napi/build/**" - "!**/node_modules/uiohook-napi/build.bak/**" - "!**/node_modules/uiohook-napi/bin/**" + # electron-native-screenshare has no prebuilds — build/Release/*.node is the + # only copy, so it must NOT be excluded the way uiohook-napi's is. asarUnpack + # below takes it out of the archive so the loader can find it. asarUnpack: - "**/*.node" npmRebuild: false afterPack: ./scripts/afterPack.js publish: + # Fork: releases (and therefore the electron-updater feed) come from this + # repository, not upstream's. - provider: github - owner: TheZwiss + owner: devsyncwrld repo: backspace protocols: - name: Backspace diff --git a/packages/desktop/package.json b/packages/desktop/package.json index c4f77e30..d7156173 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -18,7 +18,7 @@ "clean": "rm -rf dist dist-electron", "test": "vitest run", "test:watch": "vitest", - "postinstall": "electron-rebuild -f -w uiohook-napi || node -e \"console.warn('[desktop] uiohook-napi native rebuild skipped - needs build tools (make, g++, python3). Only required to RUN the desktop app; the server, web client, and Docker image are unaffected.')\"" + "postinstall": "electron-rebuild -f -w uiohook-napi -w electron-native-screenshare || node -e \"console.warn('[desktop] uiohook-napi native rebuild skipped - needs build tools (make, g++, python3). Only required to RUN the desktop app; the server, web client, and Docker image are unaffected.')\"" }, "dependencies": { "electron-native-screenshare": "^1.2.0",