From c46d30f7b979172780cacfd2743621e242ab636e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?PontualTech=20/=20Karl=C3=A3o?= Date: Mon, 27 Apr 2026 18:57:01 -0300 Subject: [PATCH] =?UTF-8?q?feat(legal+ci):=20termos=20de=20uso=20+=20workf?= =?UTF-8?q?low=20Forgejo=20Actions=20pra=20build=20Android=20autom=C3=A1ti?= =?UTF-8?q?co?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LEGAL - GET /termos: termos de uso completos (11 seções) com aviso CRÍTICO de limitação de responsabilidade pra navegação náutica (não substitui chartplotter/cartas/atenção do skipper) - Reembolso CDC art. 49 (7 dias arrependimento) explicito - Lei aplicável Brasil + foro SP CI/CD - .forgejo/workflows/build-android.yml: pipeline completo (checkout → JDK17 → Android SDK → npm install mobile/ → cap sync → gradle bundleRelease + assembleRelease → upload artifacts → release no manual) - .forgejo/workflows/README.md: como configurar runner Forgejo no Coolify, secrets necessários (KEYSTORE_BASE64, KEYSTORE_PWD, FORGEJO_TOKEN), alternativas (Codemagic, GitHub Actions) - Trigger automático em push em app/, mobile/, scripts/sync-html.mjs - Trigger manual via botão Forgejo VALIDADO - Bundletool 1.17.2 instalado em ~/bundletool/ - AAB validado: arquivos OK - APK por device gerado: 2.8-2.9 MB (vs 3.4 MB universal — Play Store entrega menor) - ~/Downloads/Shivao-v1.2.0.apks (12MB, contém splits por arquitetura) Co-Authored-By: Claude Opus 4.7 (1M context) --- .forgejo/workflows/README.md | 63 ++++++++++++++++++ .forgejo/workflows/build-android.yml | 97 ++++++++++++++++++++++++++++ server/src/index.js | 90 ++++++++++++++++++++++++++ 3 files changed, 250 insertions(+) create mode 100644 .forgejo/workflows/README.md create mode 100644 .forgejo/workflows/build-android.yml diff --git a/.forgejo/workflows/README.md b/.forgejo/workflows/README.md new file mode 100644 index 0000000..057444a --- /dev/null +++ b/.forgejo/workflows/README.md @@ -0,0 +1,63 @@ +# Forgejo Actions — CI/CD do Shivao + +## Como ativar (uma vez) + +### 1. Configure um runner Forgejo no Coolify + +```bash +# Sub-domínio sugerido: actions.pontualtech.work (DNS A → Hetzner) +# Sobe via Coolify usando docker-compose: +``` + +```yaml +# Cole no Coolify → Pontualtech → New Resource → Docker Compose Empty +services: + forgejo-runner: + image: code.forgejo.org/forgejo/runner:6 + restart: unless-stopped + environment: + FORGEJO_INSTANCE_URL: https://git.pontualtech.work + FORGEJO_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN} # pega em git.pontualtech.work/admin/runners + volumes: + - runner_data:/data + - /var/run/docker.sock:/var/run/docker.sock +volumes: + runner_data: +``` + +### 2. Configure secrets no Forgejo + +`git.pontualtech.work/karlao/shivao-projeto/settings/actions/secrets` + +| Secret | Como obter | +|---|---| +| `SHIVAO_KEYSTORE_BASE64` | `base64 -w0 ~/Downloads/Shivao-keystore-backup/shivao-release-CAPACITOR.keystore` | +| `SHIVAO_KEYSTORE_PWD` | `ShivaoKeystore2026!` (a senha que você definiu) | +| `FORGEJO_TOKEN` | Settings → Applications → Generate New Token (permissions: write:repository) | + +### 3. Triggers do workflow + +- **Auto:** push em `master` que toque em `app/`, `mobile/` ou `scripts/sync-html.mjs` +- **Manual:** botão "Run workflow" no painel Forgejo Actions + +## Output + +Cada build gera: +- APK assinado: `Shivao-v{X.Y.Z}.apk` +- AAB assinado: `Shivao-v{X.Y.Z}.aab` +- Anexados como artifact (download via UI Forgejo) +- Se trigger for manual: cria release `v{X.Y.Z}-ci` no repo + +## Vantagens vs build local + +- ✅ Zero setup local — Karlão pode editar HTML do iPad e o build roda no servidor +- ✅ Imutável e reproduzível +- ✅ Self-hosted (alinhado com `feedback_self_hosted.md`) +- ✅ Logs centralizados +- ⚠️ Custo: 1 container Coolify rodando (low-resource, ~50MB RAM idle) + +## Alternativas se runner não funcionar + +- **Codemagic:** 500min grátis/mês, conecta ao Forgejo via webhook +- **GitHub Actions (free tier):** mirror do repo no GitHub → workflow padrão +- **Build local:** `cd mobile && npm run android:build:aab` (já documentado em mobile/README.md) diff --git a/.forgejo/workflows/build-android.yml b/.forgejo/workflows/build-android.yml new file mode 100644 index 0000000..70e0326 --- /dev/null +++ b/.forgejo/workflows/build-android.yml @@ -0,0 +1,97 @@ +name: Build Android (APK + AAB) + +on: + push: + branches: [master] + paths: + - 'app/**' + - 'mobile/**' + - 'scripts/sync-html.mjs' + - '.forgejo/workflows/build-android.yml' + workflow_dispatch: {} # botão manual no painel Forgejo + +jobs: + build-android: + runs-on: ubuntu-latest + permissions: + contents: write # pra upload de release + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Setup JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + with: + packages: 'platforms;android-34 build-tools;34.0.0 platform-tools' + + - name: Install root deps (sync script) + run: | + cd "${{ github.workspace }}" + # Sem package.json no root, script é puro Node ESM + node --version + + - name: Sync HTML (1 fonte → server + mobile) + run: node scripts/sync-html.mjs + + - name: Install Capacitor deps + working-directory: mobile + run: npm ci --ignore-scripts + + - name: Capacitor sync + working-directory: mobile + run: npx cap sync android + + - name: Decode keystore from secrets + run: | + echo "${{ secrets.SHIVAO_KEYSTORE_BASE64 }}" | base64 --decode > mobile/android/app/shivao-release.keystore + ls -lh mobile/android/app/shivao-release.keystore + + - name: Build APK + AAB (release, signed) + working-directory: mobile/android + env: + SHIVAO_KEYSTORE_PWD: ${{ secrets.SHIVAO_KEYSTORE_PWD }} + run: | + chmod +x ./gradlew + ./gradlew bundleRelease assembleRelease --no-daemon --stacktrace + + - name: Rename artifacts with version + run: | + VERSION=$(grep "versionName" mobile/android/app/build.gradle | head -1 | grep -oE '"[^"]+"' | tr -d '"') + echo "Version: $VERSION" + cp mobile/android/app/build/outputs/apk/release/app-release.apk Shivao-v${VERSION}.apk + cp mobile/android/app/build/outputs/bundle/release/app-release.aab Shivao-v${VERSION}.aab + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Upload APK + AAB as artifacts (CI) + uses: actions/upload-artifact@v3 + with: + name: shivao-android-${{ env.VERSION }} + path: | + Shivao-v${{ env.VERSION }}.apk + Shivao-v${{ env.VERSION }}.aab + + - name: Create Forgejo release + if: github.event_name == 'workflow_dispatch' + uses: actions/forgejo-release@v2 + with: + direction: upload + tag: v${{ env.VERSION }}-ci + title: "Shivao v${{ env.VERSION }} (CI build)" + files: | + Shivao-v${{ env.VERSION }}.apk + Shivao-v${{ env.VERSION }}.aab + token: ${{ secrets.FORGEJO_TOKEN }} + url: https://git.pontualtech.work + repo: karlao/shivao-projeto diff --git a/server/src/index.js b/server/src/index.js index c99c5b5..7a84b2e 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -263,6 +263,96 @@ app.get('/.well-known/assetlinks.json', (req, res) => { }]); }); +// Termos de Uso +app.get('/termos', (req, res) => { + res.type('html').send(`Termos de Uso · Shivao +

Termos de Uso — Shivao

+

Última atualização: 27 de abril de 2026 · Versão 1.0

+ +

Ao usar o aplicativo Shivao (operado por PontualTech, CNPJ 32.772.178/0001-47), você concorda com estes termos. Leia com atenção.

+ +

1. Aceitação

+

O uso do app implica aceitação completa destes termos. Se não concorda, não use.

+ +

2. Cadastro e conta

+ + +

3. Planos, pagamentos e renovação

+ + +

4. Uso permitido

+ + +

5. Uso PROIBIDO

+ + +

6. Limitação de responsabilidade — IMPORTANTE

+
⚠️ AVISO CRÍTICO PARA NAVEGAÇÃO: +

O Shivao é uma FERRAMENTA AUXILIAR de navegação e segurança. NÃO substitui:

+
    +
  • Equipamentos náuticos certificados (chartplotter, AIS, VHF, balsas).
  • +
  • Cartas náuticas oficiais (Marinha do Brasil, NOAA).
  • +
  • Atenção do skipper.
  • +
  • Comunicação com a Capitania dos Portos.
  • +
+

Não nos responsabilizamos por:

+
    +
  • Decisões tomadas com base no app (rota, fundeio, meteorologia).
  • +
  • Falha de GPS, internet, sensores ou notificações.
  • +
  • Danos materiais, pessoais ou ambientais decorrentes do uso.
  • +
  • Perda de dados (faça backups regulares).
  • +
+

O comandante da embarcação é o único responsável pela segurança a bordo.

+ +

7. Propriedade intelectual

+ + +

8. Suspensão e cancelamento

+ + +

9. Mudanças nos termos

+

Notificaremos por e-mail mudanças materiais com 30 dias de antecedência. Versão atual em shivao.pontualtech.work/termos.

+ +

10. Lei aplicável e foro

+

Estes termos seguem a lei brasileira. Foro: comarca de São Paulo/SP. Disputas de consumo podem usar consumidor.gov.br antes de judicializar.

+ +

11. Contato

+

Suporte: contato@pontualtech.com.br
+Privacidade/LGPD: dpo@pontualtech.com.br

+ +
+

Shivao · Diário de Bordo · PontualTech · ${new Date().getFullYear()}

+`); +}); + // Política de Privacidade (URL pública obrigatória pra Play Store + LGPD) app.get('/politica', (req, res) => { res.type('html').send(`Política de Privacidade · Shivao