Skip to content

Latest commit

 

History

History
74 lines (53 loc) · 4.23 KB

CONTRIBUTING.md

File metadata and controls

74 lines (53 loc) · 4.23 KB

Contributing

Scout for WinGet is a terminal app for managing Windows packages. Contributions that fix bugs, improve parsing, sharpen the test suite, improve Terminal.Gui behavior, or add focused features are welcome.

Dev setup

git clone https://github.com/harder/wingetscout
cd wingetscout
dotnet test --project tests/WinGetScout.Tests.csproj
dotnet run -f net10.0 -- --mock           # UI iteration, any host

Building the actual AOT binary requires a Windows host with Visual Studio Build Tools (C++ workload). See Build from source.

Working on a change

  1. Add a test first when the change touches parser behavior, model semantics, or anything covered by tests/ParserTests.cs. Every existing test is anchored to a real bug — please keep that pattern.
  2. Check real WinGet output when changing parsing logic. Add representative examples and document user-facing limitations in the relevant documentation.
  3. Run the suite before opening a PR: dotnet test --project tests/WinGetScout.Tests.csproj.
  4. Check in before large new-feature PRs. Open an issue or discuss the approach first for anything sizable so the design lands before the code does. Coordinate packaging and signing changes against the current distribution plan.

The architecture guide maps the backend, UI, workflow, and release code before you change their boundaries.

The repository selects Microsoft.Testing.Platform in global.json. Pass the project with --project as shown above; the older positional dotnet test tests/...csproj form is not accepted by this runner. IDE test discovery likewise requires Microsoft.Testing.Platform support.

The same file pins the .NET SDK for reproducible locked restores. When updating that pin or the WinGet COM packages, install the new SDK and regenerate both application modes:

dotnet restore tests/WinGetScout.Tests.csproj --use-lock-file
dotnet restore WinGetScout.csproj -p:WingetComMode=Identity --use-lock-file

Commit packages.lock.json, packages.identity.lock.json, and tests/packages.lock.json if they changed. CI reads the SDK version from global.json and restores both portable and MSIX Identity graphs in locked mode.

For Windows COM changes, publish the Native AOT target for the machine's architecture and run wingetscout.exe --comdiag from the complete publish folder. The portable build needs WindowsPackageManager.dll and Microsoft.Management.Deployment.InProc.dll beside the executable; the MSIX Identity build needs package identity and Microsoft.Management.Deployment.winmd. A framework-dependent run or a mock smoke test does not validate either published activation path.

Run wingetscout.exe --comsmoke from that folder for read-only COM inventory, search, details, versions, and installer-preview checks. This diagnostic uses COM directly, returns nonzero on failure, and does not fall back to the CLI. It does not validate package installation or removal. Both diagnostics can also run from an installed Identity MSIX to check its activation path.

Filing issues

  • Bugs: include the failing scenario, OS + architecture (x64 vs arm64), and where possible a --dump trace (e.g. wingetscout --dump search vscode > dump.txt).
  • UI gaps: describe the expected behavior and include a screenshot when useful.
  • Terminal.Gui regressions: include the version you upgraded from and to. The Terminal.Gui compatibility tests in tests/ParserTests.cs should ideally catch these — if a regression slipped through, an extra test for it is highly welcome.

Code style

Mostly follow standard C# / .NET conventions. The project loosely mirrors Terminal.Gui's style — notable points:

  • Space before parens: Method (), array [i], if (...).
  • Braces on next line (Allman style).
  • var only for built-in types (int, string, bool, etc.). Explicit type for everything else.
  • Blank line before return / break / continue, after control blocks.

These aren't CI-enforced; just match the surrounding code.

License

By contributing you agree your work is licensed under the project's MIT license.