Skip to content

feat(v1.0.0): SSH Output — SFTP/sudo-tee upload, vault SSH, wizard, pipeline renderer#13

Merged
AlexArtaud-Dev merged 3 commits into
masterfrom
feature/v1.0.0-ssh-output
Jun 16, 2026
Merged

feat(v1.0.0): SSH Output — SFTP/sudo-tee upload, vault SSH, wizard, pipeline renderer#13
AlexArtaud-Dev merged 3 commits into
masterfrom
feature/v1.0.0-ssh-output

Conversation

@AlexArtaud-Dev

Copy link
Copy Markdown
Owner

Summary

  • Backend : module SshOutputConfig complet (CRUD, migration Prisma 20260615120000) + provider SshOutputProvider avec upload SFTP et sudo-tee, flag isValidation déclenche deleteRemoteFile après upload, connectionTimeoutMs en module settings
  • Frontend : pages list/create/edit SSH Output, composants partagés SshBrowserBase + SshFolderPickerDialog, étape wizard StepOutputs avec validation pathOverride bloquante tant que non testé, renderer pipeline SshOutputDetail + SshInputDetail
  • Tests : 10 cas ssh-output.provider.spec (dont isValidation), 20 cas pipelineRenderers.test, correctifs ssh-input.provider.spec + input.service.spec

Test plan

  • prisma migrate dev pour appliquer 20260615120000_v0_9_5_ssh_output_config
  • Créer un vault SSH (user/password ou clé PEM) via la page Vault
  • Créer une config SSH Output (liste → Nouveau), tester la connexion depuis le formulaire
  • Intégrer le SSH Output dans un backup via le wizard — vérifier que pathOverride est bloqué tant que non testé
  • Lancer un backup → vérifier l'upload sur le serveur distant
  • Vérifier l'affichage du nœud SSH dans le pipeline visualizer
  • pnpm lint && pnpm exec tsc --noEmit && pnpm test backend/frontend — 0 erreur

…kup, tests

Backend:
- Nouveau provider input SSH (ssh2/SFTP) : test connexion par source (stat, readdir,
  permissions), fetch avec filtrage namePattern (glob/regex/date vars)
- Vault SSH-Remote : CRUD chiffré, test connexion en 3 étapes (connexion/path/write),
  browse répertoire SFTP, résolution de patterns de date {YYYY}/{MM}/{DD}/{HH}
- Output SSH : envoi d'archives via SFTP avec pathOverride par sortie
- Migration Prisma : champ pathOverride sur BackupOutput
- Tests : SshInputProvider (test + fetch), VaultService.resolveSshDatePattern

Frontend:
- Pages SSH Input : liste, création (layout 2 colonnes SshFileBrowser + SshSourcesList),
  édition — pattern provider existant
- Pages Vault SSH-Remote : liste, création, édition avec test connexion live
- Backup wizard : icône + sous-titre typés pour inputs SSH, logique canNoArchive extraite
  dans computeNoArchiveState (utils testable), blocage multi-sources SSH
- i18n fr/en : clés SSH Input, SSH Remote, noArchive SSH
- Tests : StepZip (canNoArchive/noArchiveReason), backupWizard.utils (computeNoArchiveState)
…ipeline renderer, tests

- Backend: SshOutputConfig CRUD module (controller, service, DTOs, Prisma migration)
- Provider: SshOutputProvider with SFTP and sudo-tee upload modes, isValidation cleanup
- Provider: isValidation flag triggers deleteRemoteFile after upload (connection test flow)
- Module settings: connectionTimeoutMs for ssh-output (default 30 000 ms)
- Frontend: SSH Output list/create/edit pages, SshBrowserBase + SshFolderPickerDialog shared components
- Frontend: pipeline renderer for SSH output (SshOutputDetail card, registry entry)
- Frontend: pipeline renderer for SSH input (SshInputDetail with source paths)
- Frontend: BackupWizard StepOutputs with pathOverride validation (blocked until tested)
- i18n: en + fr keys for output.ssh.*
- Tests: ssh-output.provider.spec (10 cases incl. isValidation), pipelineRenderers.test (20 cases)
- Tests: ssh-input.provider.spec + input.service.spec fixed (ModuleSettingsService mock)
…l conflicts

All conflicts resolved in favour of the feature branch (complete v1.0.0
implementation with SshOutputConfig entity, ModuleSettingsService timeout,
clean provider without debug logs, SshBrowserBase refactor).
@AlexArtaud-Dev
AlexArtaud-Dev merged commit 1624d3d into master Jun 16, 2026
10 checks passed
@AlexArtaud-Dev
AlexArtaud-Dev deleted the feature/v1.0.0-ssh-output branch June 16, 2026 08:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant