Repository navigation
feat: show SSH config items, check them with real OpenSSH in CI - #110
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Plan 16 Task 3 (
docs/plans/2026-11-05-16-ssh-config.md): the desktop app shows SSH config items, CI loads the prepared and restored SSH config with real OpenSSH on each OS, and the READMEs and site list the SSH client config. Core and CLI landed in #109.Type
Changes
Category'ssh'(sidebar after Shell, key icon),FindingKindkeyFile/externalInclude(serde names frommodel.rs), finding text instrings.tsand all four locales (category.ssh,finding.keyFile,finding.externalInclude). "With warnings only" ignores anexternalIncludefinding (nothing for the user to do) and still countskeyFile, as the plan says.category.sshstays "SSH" in every locale (added to the locale test's same-everywhere list).ui_fixture.rsscans the plan's example~/.ssh/config+config.d/work;scan.jsonregenerated. New Vitest tests: warnings filter (external Include alone vs key path), SSH category order and counts, detail panel text for both findings.scriptsjob:render_sampleswritessamples/ssh-config-{macos,linux,windows}throughprepare_configfrom a macOS source. Each runner runsssh -G -F <file> github-workon its own copy and expects exit 0; Ubuntu and Windows also run the unprepared macOS file and expect it to fail (control, so the 255 check proves something).smoke_exportnow restores an SSH config too. Bash checks~/.sshis 700 and~/.ssh/configis 600 viastat, resolvesgithub-workwithssh -G -F, and expectsalready done: copy ~/.ssh/configon the second run. Windows runsssh -G github-workon the default path (includes OpenSSH's owner/ACL check) and checks thatssh -vlogsidentity fileunder%USERPROFILE%. Win32-OpenSSH 9.5 logs that line only after it connects, so the step gives it a localTcpListenerport that accepts and closes the connection.tools.groups.ssh/tools.sshin four locales with the same key icon. Plan 16 Task 3 boxes ticked except thetauri devcheck.Deviation, recorded in the plan:
ssh -GprintsIdentityFileunexpanded (~/.ssh/..., checked with OpenSSH 10.5 here), so the Windows smoke reads the expanded path fromssh -vinstead (first CI run showed Win32-OpenSSH needs a connection for that, hence the local listener). The extrasamples/ssh-config-macosis the negative control.Checks
cargo fmt --checkcargo clippy --workspace --all-targets -- -D warningscargo test --workspacepnpm --filter @repot/desktop typecheck/test/build--example scan/--example export, ortauri dev)ssh -Gon the prepared files and the macOS control), the Windows restored-config step (default path ACL check,identity fileunder%USERPROFILE%), the Linux bash smokestat -cbranch. All threescriptsjobs passed on 3fb0750 (Windows log:identity file C:\\Users\\runneradmin/.ssh/work_ed25519, OpenSSH_for_Windows_9.5p2; Ubuntu OpenSSH 9.6p1).Also run:
cargo test -p repot-core --example e2e_export --example smoke_export --example cross_os_e2e --example render_samples,actionlint,pnpm exec biome ci .,node --test scripts/*.test.mjs scripts/package-map-gen/*.test.mjs,pnpm --filter @repot/site typecheck/test/build.On this Mac:
ssh -G -Fexits 0 for all three rendered samples, and the bash smoke steps (restore into a tempHOME,stat700/600,ssh -G -F … github-work,already done: copy ~/.ssh/configon the second run) pass. Instead oftauri dev, the review screen and the SSH detail panel were rendered with the built CSS in headless Chrome (throwaway test, deleted) in all four locales.Spec and generated files
scan.json,snapshots/,icons/)Boundaries
repot-coredoes not depend on Tauri and does no network callsEnv; tests useFakeEnvand fixtures, not real tools