Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<!-- Link related issues, PRs, or docs. Use "Resolves #1234" to auto-close. -->

## πŸ” Validation
<!-- How did you test? List manual steps or note automated test coverage. -->
<!-- How did you test? List manual steps or note automated test coverage. If applicable, include a screenshot or short recording demonstrating the change working. -->

## βœ… Checklist
<!-- Place an "x" between the brackets to check an item. e.g: [x] -->
Expand All @@ -14,8 +14,14 @@
- [ ] Linked to an issue
- [ ] Updated [Release Notes](../doc/ReleaseNotes.md) (if applicable)
- [ ] Updated documentation (if applicable)
- [ ] Added or updated tests (or noted why not applicable)
- [ ] Updated [Copilot instructions](.github/copilot-instructions.md) (if build, architecture, or conventions changed)

## πŸ€– AI Assistance
<!-- Check one -->
- [ ] AI assistance was used and has been disclosed in this PR
- [ ] No AI assistance was used

## πŸ“‹ Issue Type
<!-- Select the type that best describes this PR -->
- [ ] Bug fix
Expand Down
3 changes: 3 additions & 0 deletions .github/actions/spelling/expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ admx
AFAIK
aicli
AICLIC
Allman
allusers
alreadyinstalled
AMap
Expand Down Expand Up @@ -148,6 +149,7 @@ DMC
dnld
Dns
Dobbeleer
Downcasting
DONOT
dsc
dupenv
Expand Down Expand Up @@ -398,6 +400,7 @@ NOUPDATE
nowarn
npmjs
nsis
NRVO
NTFS
objbase
objidl
Expand Down
15 changes: 11 additions & 4 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,16 +105,16 @@ void WorkflowTask(Execution::Context& context)
{
// Check if already terminated
AICLI_RETURN_IF_TERMINATED(context);

// Access data
auto& data = context.Get<Data::Installer>();

// Report to user
context.Reporter.Info() << "Doing something";

// Store data for next workflow
context.Add<Data::SomeResult>(result);

// Terminate on error
if (failed)
{
Expand Down Expand Up @@ -161,6 +161,13 @@ void WorkflowTask(Execution::Context& context)
- Follow existing code style (see `stylecop.json`)
- CI runs on Azure Pipelines (`azure-pipelines.yml`)

### Pull Request Expectations

- PRs must follow the repository PR template and keep its sections and checklist intact
- AI assistance is allowed, but contributors are fully accountable for AI-assisted output as if they wrote it themselves.
- Unless explicitly directed otherwise, confirm with the user that they have reviewed the submission.
- When raising a PR, include a brief disclosure in the PR description and identify which parts were assisted.

## Useful Commands

```powershell
Expand Down
26 changes: 25 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ Therefore, if you do file issues, or create PRs, please keep an eye on your GitH

**Please do not report security vulnerabilities through public GitHub issues.** Instead, please report them to the Microsoft Security Response Center (MSRC). See [SECURITY.md](./SECURITY.md) for more information.

## AI-assisted contributions

AI assistance is welcome, but contributors remain fully responsible for the submitted work. If AI contributes to a change, you are accountable for that content exactly as if you wrote it yourself: you must understand it, ensure it follows project conventions, and provide the same testing and validation evidence expected for any other contribution.

When opening or updating a PR, disclose material AI-generated assistance and briefly describe which parts were assisted.

Opening a PR requires real engineering review time. Please keep this in mind and submit contributions that are complete, reviewed, and ready for meaningful feedback. Low-effort, unreviewed, or unverifiable AI-generated submissions may be closed at maintainer discretion.

## Before you start, file an issue

Please follow this simple rule to help us eliminate any unnecessary wasted effort & frustration, and ensure an efficient and effective use of everyone's time - yours, ours, and other community members':
Expand Down Expand Up @@ -116,9 +124,25 @@ Once you've discussed your proposed feature/fix/etc. with a team member, and you
1. Work on your changes.
1. Build and see if it works.

### Coding Standards

Before writing code, review [doc/Standards.md](./doc/Standards.md) for the conventions used in this codebase β€” naming, formatting, error handling, casts, `std::move()` usage, and resource strings. PRs that diverge from these conventions will be asked to bring their changes into line before review completes.

### Testing

Testing is a key component in the development workflow.
Testing is a key part of getting a change ready for review.

If your contribution changes behavior or implementation, please plan to add or update automated tests alongside the code.

As a quick rule of thumb: unit tests in `AppInstallerCLITests` focus on the code and logic, while end-to-end tests in `AppInstallerCLIE2ETests` focus on actual `winget` command behavior and the resulting system outcomes.

For non-trivial code changes, the bar is high. Where practical, include both unit tests and end-to-end coverage. If you believe that tests aren't needed for your change, please call that out in your PR and explain why.

Documentation-only updates and non-functional metadata changes generally do not require new tests.

For build and test execution details, see [Running Unit Tests](./doc/Developing.md#running-unit-tests) and [Running End-to-End Tests](./doc/Developing.md#running-end-to-end-tests) in [doc/Developing.md](./doc/Developing.md).

PRs without appropriate coverage may be asked to add tests before review completes.

### Code Review

Expand Down
18 changes: 18 additions & 0 deletions doc/Developing.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Developer guidance

## Coding Standards

For naming, formatting, error handling, casts, `std::move()` usage, and resource string requirements, see [doc/Standards.md](./Standards.md).

## Prerequisites

* Windows 10 1809 (17763) or later
Expand Down Expand Up @@ -47,6 +51,20 @@ The unit tests are located inside the `AppInstallerCLITests` project. When the s
> [!TIP]
> If you just want to run a particular test, you can specify the test name as an argument to the executable. For example, `AppInstallerCLITests.exe EnsureSortedErrorList`.

> [!TIP]
> For local debugging, you can increase test output detail and include timing information by running `AppInstallerCLITests.exe -d yes -v high`.

## Running End-to-End Tests

The end-to-end tests are located in the `AppInstallerCLIE2ETests` project and are executed with NUnit.

For setup details (including `Test.runsettings`, local test source setup, and localhost web server usage), see [`src/AppInstallerCLIE2ETests/README.md`](../src/AppInstallerCLIE2ETests/README.md).

A typical local workflow is:
1. Build the solution.
2. Configure `src/AppInstallerCLIE2ETests/Test.runsettings` for your environment.
3. Run `AppInstallerCLIE2ETests` from Test Explorer, or run `dotnet test src\AppInstallerCLIE2ETests\AppInstallerCLIE2ETests.csproj --settings src\AppInstallerCLIE2ETests\Test.runsettings`.

## Localization

The English resource strings are the source of truth and live in:
Expand Down
Loading
Loading