Skip to content

Refactor download handling and improve test management - #26

Merged
MathCunha16 merged 4 commits into
mainfrom
fix/corrupted-download-and-app-relaunch
Jul 26, 2026
Merged

Refactor download handling and improve test management#26
MathCunha16 merged 4 commits into
mainfrom
fix/corrupted-download-and-app-relaunch

Conversation

@MathCunha16

@MathCunha16 MathCunha16 commented Jul 26, 2026

Copy link
Copy Markdown
Owner

This pull request introduces several improvements and fixes to the update and installation flows, enhances test isolation, and polishes the frontend update modal for a better user experience. The backend now uses standard output streams for file downloads and allows overriding the temp directory for tests. The frontend update modal now renders rich Markdown release notes and improves version display formatting.

Backend improvements:

  • Switched from AsynchronousFileChannel to OutputStream for file downloads in DownloadUpdateImpl, simplifying buffer handling and ensuring proper resource cleanup. [1] [2] [3] [4]
  • Added support for overriding the temp directory via the devaulty.temp.dir system property in ReleaseTempFolder, enabling better test isolation and flexibility.
  • Updated Linux and Mac installer scripts in InstallUpdateImpl to always relaunch the app after installation attempts, ensuring the user is not left without a running instance. [1] [2]
  • Bumped backend version to 0.1.5-alpha in application.yaml.

Test enhancements:

  • Updated tests for DownloadUpdateImpl and InstallUpdateImpl to use a temporary directory isolated per test run, leveraging the new devaulty.temp.dir property for safety and reliability. [1] [2] [3] [4] [5] [6]

Frontend improvements:

  • The update modal now renders release notes as sanitized Markdown using marked and DOMPurify, supporting links, lists, code, and more, with improved styling for readability. [1] [2] [3] [4]
  • Version tags are now consistently formatted using a utility function in both the update modal and sidebar, improving clarity and UX. [1] [2] [3] [4]

These changes collectively improve robustness, testability, and the user interface for update-related workflows.

Summary by CodeRabbit

  • Novos Recursos

    • As notas de versão agora são exibidas em Markdown, com conteúdo sanitizado (links, listas e trechos de código).
    • Versões “Current”/“New” e mensagens de atualização passam a usar formatação padronizada com prefixo v.
  • Correções

    • Download do arquivo de atualização foi aprimorado, com melhor acompanhamento de progresso e gerenciamento de recursos.
    • O aplicativo volta a iniciar automaticamente após instalação no Linux e macOS.
    • Diretório temporário pode ser sobrescrito via configuração; validações foram adicionadas.
  • Atualização

    • Versão do app atualizada para 0.1.5-alpha.
  • Testes

    • Atualizados para usar diretórios temporários dedicados.

@MathCunha16 MathCunha16 self-assigned this Jul 26, 2026
@MathCunha16 MathCunha16 added enhancement New feature or request Frontend Frontend feature or modification Backend Backend feature or modification labels Jul 26, 2026
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: ab04c235-1696-490e-bbe4-414e8cb1edda

📥 Commits

Reviewing files that changed from the base of the PR and between 154ee7d and 44913c7.

📒 Files selected for processing (5)
  • backend/src/main/java/com/devaulty/backend/application/impl/release/DownloadUpdateImpl.java
  • backend/src/main/java/com/devaulty/backend/application/impl/release/InstallUpdateImpl.java
  • backend/src/main/java/com/devaulty/backend/application/impl/release/ReleaseTempFolder.java
  • backend/src/test/java/com/devaulty/backend/application/impl/release/InstallUpdateImplTest.java
  • frontend/src/utils/versionUtils.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • backend/src/main/java/com/devaulty/backend/application/impl/release/ReleaseTempFolder.java
  • backend/src/main/java/com/devaulty/backend/application/impl/release/InstallUpdateImpl.java
  • backend/src/test/java/com/devaulty/backend/application/impl/release/InstallUpdateImplTest.java
  • backend/src/main/java/com/devaulty/backend/application/impl/release/DownloadUpdateImpl.java

📝 Walkthrough

Walkthrough

O PR altera o download de atualizações, configura diretórios temporários, ajusta o relançamento em Linux e macOS, atualiza a versão para 0.1.5-alpha e renderiza versões e notas de release formatadas no frontend.

Changes

Fluxo de atualização

Layer / File(s) Summary
Armazenamento do download e diretório temporário
backend/src/main/java/com/devaulty/backend/application/impl/release/DownloadUpdateImpl.java, backend/src/main/java/com/devaulty/backend/application/impl/release/ReleaseTempFolder.java, backend/src/test/java/com/devaulty/backend/application/impl/release/DownloadUpdateImplTest.java
O download grava chunks em OutputStream, libera buffers explicitamente, fecha o stream com flush e aceita devaulty.temp.dir; os testes usam @TempDir.
Relançamento do instalador e testes isolados
backend/src/main/java/com/devaulty/backend/application/impl/release/InstallUpdateImpl.java, backend/src/test/java/com/devaulty/backend/application/impl/release/InstallUpdateImplTest.java
Os scripts de Linux e macOS ajustam o relançamento, scheduleApplicationShutdown torna-se protegido e os testes usam diretório temporário controlado pelo JUnit.
Versões e notas de release no frontend
frontend/src/utils/versionUtils.ts, frontend/src/components/RootLayout.tsx, frontend/src/features/releases/components/UpdateModal.tsx, frontend/src/features/releases/components/UpdateModal.module.css, backend/src/main/resources/application.yaml
A formatação de versões é centralizada, as notas Markdown são sanitizadas antes da renderização, o conteúdo recebe estilos formatados e a versão passa para 0.1.5-alpha.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant UpdateModal
  participant marked
  participant DOMPurify
  UpdateModal->>marked: converte as notas Markdown em HTML
  marked-->>UpdateModal: retorna HTML
  UpdateModal->>DOMPurify: sanitiza o HTML
  DOMPurify-->>UpdateModal: retorna HTML sanitizado
  UpdateModal->>UpdateModal: renderiza as notas de release
Loading

Possibly related PRs

Suggested labels: Desktop

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed O título é relevante e resume bem parte central da PR, especialmente a refatoração do download e os ajustes de testes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
backend/src/test/java/com/devaulty/backend/application/impl/release/DownloadUpdateImplTest.java (1)

49-57: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

@TempDir não isola uma propriedade de sistema compartilhada.

Se as classes rodarem em paralelo, uma sobrescreve devaulty.temp.dir da outra e os testes passam a usar o diretório incorreto.

  • backend/src/test/java/com/devaulty/backend/application/impl/release/DownloadUpdateImplTest.java#L49-L57: adicione @ResourceLock(Resources.SYSTEM_PROPERTIES) ou injete o resolvedor de diretório.
  • backend/src/test/java/com/devaulty/backend/application/impl/release/InstallUpdateImplTest.java#L36-L44: aplique o mesmo bloqueio/abstração.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@backend/src/test/java/com/devaulty/backend/application/impl/release/DownloadUpdateImplTest.java`
around lines 49 - 57, Os testes compartilham a propriedade de sistema
devaulty.temp.dir e não são seguros em execução paralela. Em
DownloadUpdateImplTest.java (linhas 49-57) e InstallUpdateImplTest.java (linhas
36-44), adicione o bloqueio JUnit ResourceLock para Resources.SYSTEM_PROPERTIES
aos testes ou classes que configuram essa propriedade, preservando a
configuração e limpeza existentes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@backend/src/main/java/com/devaulty/backend/application/impl/release/DownloadUpdateImpl.java`:
- Around line 104-127: Move the blocking outputStream.write operation in the
downloadAsset concatMap within DownloadUpdateImpl to
Schedulers.boundedElastic(), while preserving concatMap’s sequential chunk
ordering and DataBufferUtils.release cleanup. Keep progress accounting and error
propagation intact.

In
`@backend/src/main/java/com/devaulty/backend/application/impl/release/ReleaseTempFolder.java`:
- Around line 18-24: Valide o diretório configurado no fluxo de customDir antes
de retorná-lo: após mkdirs(), confirme que tempDir existe e é um diretório,
tratando falha de criação ou caminho apontando para arquivo com a mesma
estratégia de fallback/erro já usada pelo método ReleaseTempFolder. Não retorne
tempDir enquanto essa validação não for satisfeita.

In
`@backend/src/test/java/com/devaulty/backend/application/impl/release/InstallUpdateImplTest.java`:
- Around line 30-34: Atualize o setup de InstallUpdateImplTest para criar o spy
de InstallUpdateImpl somente após a inicialização dos `@Mock`, garantindo que
applicationContext seja injetado corretamente. Abstraia ou injete o mecanismo de
shutdown usado por InstallUpdateImpl e substitua-o no teste por uma
implementação controlada, evitando agendar System.exit em uma thread que possa
encerrar a JVM do runner.

In `@frontend/src/utils/versionUtils.ts`:
- Around line 7-12: Atualize a lógica de normalização de versão para remover
espaços externos, tratar entradas compostas apenas por espaços como vazias e
eliminar todos os prefixos iniciais “v” sem diferenciar maiúsculas de minúsculas
antes de adicionar exatamente um “v” minúsculo. Preserve o retorno vazio para
valores ausentes e normalize casos como “ V0.1 ” e “vv0.1” para o formato
esperado.

---

Nitpick comments:
In
`@backend/src/test/java/com/devaulty/backend/application/impl/release/DownloadUpdateImplTest.java`:
- Around line 49-57: Os testes compartilham a propriedade de sistema
devaulty.temp.dir e não são seguros em execução paralela. Em
DownloadUpdateImplTest.java (linhas 49-57) e InstallUpdateImplTest.java (linhas
36-44), adicione o bloqueio JUnit ResourceLock para Resources.SYSTEM_PROPERTIES
aos testes ou classes que configuram essa propriedade, preservando a
configuração e limpeza existentes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: e258f2cd-1c10-4f5e-8463-421a9518004b

📥 Commits

Reviewing files that changed from the base of the PR and between d938d51 and 154ee7d.

📒 Files selected for processing (10)
  • backend/src/main/java/com/devaulty/backend/application/impl/release/DownloadUpdateImpl.java
  • backend/src/main/java/com/devaulty/backend/application/impl/release/InstallUpdateImpl.java
  • backend/src/main/java/com/devaulty/backend/application/impl/release/ReleaseTempFolder.java
  • backend/src/main/resources/application.yaml
  • backend/src/test/java/com/devaulty/backend/application/impl/release/DownloadUpdateImplTest.java
  • backend/src/test/java/com/devaulty/backend/application/impl/release/InstallUpdateImplTest.java
  • frontend/src/components/RootLayout.tsx
  • frontend/src/features/releases/components/UpdateModal.module.css
  • frontend/src/features/releases/components/UpdateModal.tsx
  • frontend/src/utils/versionUtils.ts

Comment thread frontend/src/utils/versionUtils.ts Outdated
@MathCunha16
MathCunha16 merged commit e674354 into main Jul 26, 2026
2 checks passed
@MathCunha16
MathCunha16 deleted the fix/corrupted-download-and-app-relaunch branch July 26, 2026 11:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Backend Backend feature or modification enhancement New feature or request Frontend Frontend feature or modification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant