Skip to content

Commit 11a33df

Browse files
committed
Merge remote-tracking branch 'microsoft/master'
2 parents 50960d3 + d122840 commit 11a33df

28,245 files changed

Lines changed: 592994 additions & 70970 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
Checklist for Pull Requests
2-
- [ ] Have you signed the [Contributor License Agreement](https://cla.opensource.microsoft.com/microsoft/winget-pkgs)?
3-
- [ ] Is there a linked Issue? If so, fill in the Issue number below.
4-
<!-- Example: Resolves #328283 -->
1+
<!-- PR Title Format: "New package: Publisher.Name version X.Y.Z" or "Update: Publisher.Name to X.Y.Z" -->
2+
3+
## 📖 Description
4+
<!-- Describe what this PR changes. For manifest submissions, include the package name and version. -->
5+
6+
## ✅ Checklist
7+
<!-- Place an "x" between the brackets to check an item. e.g: [x] -->
8+
9+
- [ ] Signed the [Contributor License Agreement](https://cla.opensource.microsoft.com)
10+
- [ ] Linked to an issue (if applicable)
11+
<!-- Example: Resolves #328283 -->
512
- Resolves #[Issue Number]
613

7-
Manifests
8-
- [ ] Have you checked that there aren't other open [pull requests](https://github.com/microsoft/winget-pkgs/pulls) for the same manifest update/change?
9-
- [ ] This PR only modifies one (1) manifest
10-
- [ ] Have you [validated](https://github.com/microsoft/winget-pkgs/blob/master/doc/Authoring.md#validation) your manifest locally with `winget validate --manifest <path>`?
11-
- [ ] Have you tested your manifest locally with `winget install --manifest <path>`?
12-
- [ ] Does your manifest conform to the [1.12 schema](https://github.com/microsoft/winget-pkgs/tree/master/doc/manifest/schema/1.12.0)?
14+
## 📦 Manifest Checklist
1315

14-
Note: `<path>` is the directory's name containing the manifest you're submitting.
16+
- [ ] Checked that there aren't other open [pull requests](https://github.com/microsoft/winget-pkgs/pulls) for the same manifest update/change
17+
- [ ] This PR only modifies one (1) manifest
18+
- [ ] Validated manifest locally with `winget validate --manifest <path>` ([validation guide](https://github.com/microsoft/winget-pkgs/blob/master/doc/ValidationFailureGuide.md))
19+
- [ ] Tested manifest locally with `winget install --manifest <path>`
20+
- [ ] Manifest conforms to the [1.12 schema](https://github.com/microsoft/winget-pkgs/tree/master/doc/manifest/schema/1.12.0)
1521

16-
---
22+
> **Note:** `<path>` is the directory containing the manifest you're submitting.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
automerge
22
denelon
33
dkbennett
4+
Freeware
5+
GPLv
46
Icm
7+
inno
58
LOCALAPPDATA
69
misclicks
10+
nullsoft
711
stephengillie
812
img
13+
UTF
14+
wix

.github/copilot-instructions.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Copilot Instructions for winget-pkgs
2+
3+
## Repository Overview
4+
5+
This is the **Windows Package Manager (WinGet) community repository** — a manifest-only repo containing ~415,000+ YAML files describing how to install Windows applications via `winget`. There is no application source code here. The tooling is PowerShell scripts in `Tools/`.
6+
7+
## ⚠️ Critical Performance Rule
8+
9+
**Never recursively scan or search the `manifests/` directory.** It contains hundreds of thousands of files and will cause severe performance issues. Only search within the specific package folder being modified (e.g., `manifests/m/Microsoft/WindowsTerminal/`).
10+
11+
## Manifest Structure
12+
13+
Each package version lives in `manifests/<first-letter>/<Publisher>/<Package>/<Version>/` and requires three files:
14+
15+
| File | ManifestType | Purpose |
16+
|------|-------------|---------|
17+
| `<Id>.yaml` | `version` | Version metadata, links other files |
18+
| `<Id>.installer.yaml` | `installer` | Installer URLs, SHA256 hashes, architecture, installer type |
19+
| `<Id>.locale.en-US.yaml` | `defaultLocale` | Package name, publisher, description, license |
20+
21+
Additional `<Id>.locale.<tag>.yaml` files provide optional translations.
22+
23+
**Key rules:**
24+
- File and folder names are case-sensitive and must match the `PackageIdentifier` exactly
25+
- The version folder name must match `PackageVersion` exactly
26+
- The first directory under `manifests/` is the **lowercase** first letter of the publisher
27+
- Each YAML file includes a `# yaml-language-server: $schema=...` comment pointing to its JSON schema
28+
- Recommended schema version: **1.12.0** (1.10.0 also accepted)
29+
- Supported installer types: MSIX, MSI, APPX, EXE, and font files only — no scripts
30+
31+
## PR Conventions
32+
33+
- Each PR must modify **exactly one package** (one manifest set for one version)
34+
- PRs to `manifests/` trigger an Azure DevOps validation pipeline that runs file validation, URL scanning, SmartScreen checks, manifest policy checks, installation verification, and installer metadata validation
35+
- PRs are auto-merged when the `Validation-Completed` label is applied (squash merge)
36+
- Contributors must sign the Microsoft CLA
37+
38+
## Validation and Testing Commands
39+
40+
Validate a manifest locally:
41+
```powershell
42+
winget validate --manifest <path-to-version-folder>
43+
```
44+
45+
Test installation locally:
46+
```powershell
47+
winget settings --enable LocalManifestFiles
48+
winget install --manifest <path-to-version-folder>
49+
```
50+
51+
Test in Windows Sandbox (preferred — isolated environment):
52+
```powershell
53+
.\Tools\SandboxTest.ps1 <path-to-version-folder>
54+
```
55+
56+
## Tooling
57+
58+
| Tool | Purpose |
59+
|------|---------|
60+
| `Tools/YamlCreate.ps1` | Interactive manifest creation/update helper |
61+
| `Tools/SandboxTest.ps1` | Test manifests in Windows Sandbox |
62+
| `Tools/PRTest.ps1` | PR testing utilities |
63+
| `Tools/Modules/YamlCreate/` | PowerShell module supporting YamlCreate |
64+
65+
**Manifest creation** is best done with [winget-create](https://github.com/microsoft/winget-create):
66+
```powershell
67+
wingetcreate new <InstallerURL> # New package
68+
wingetcreate update <PackageId> # Update existing package
69+
```
70+
71+
## CI/CD
72+
73+
- **GitHub Actions**: PSScriptAnalyzer (lints `*.ps1`/`*.psm1` on PR/push) and spell checking
74+
- **Azure DevOps**: Validation and publish pipelines for manifest PRs (defined in `DevOpsPipelineDefinitions/`)
75+
76+
Run PSScriptAnalyzer locally on PowerShell scripts:
77+
```powershell
78+
Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser
79+
Get-ChildItem -Recurse -Filter *.ps1 | Invoke-ScriptAnalyzer
80+
```
81+
82+
## Code Style
83+
84+
- YAML: 2-space indentation, CRLF line endings, UTF-8, trailing whitespace trimmed
85+
- YAML fields are PascalCased and must not be duplicated
86+
- PowerShell: follows PSScriptAnalyzer rules
87+
- See `.editorconfig` for full formatting rules

.github/instructions/manifests.instructions.md

Lines changed: 90 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ This is the **Windows Package Manager (WinGet)** community repository containing
1313
- **Target Runtime:** Windows 10/11, Windows Package Manager client
1414
- **Size:** Large repository with alphabetically organized manifests
1515
- **Schema:** Uses multi-file YAML manifests (version 1.12.0 recommended, 1.10.0 also supported)
16-
- **Supported Installers:** MSIX, MSI, APPX, EXE only (scripts are not supported)
16+
- **Supported Installers:** msix, appx, msi, exe, zip (with nested type), portable, font (font only in `fonts/` root)
17+
- **Scripts are expressly prohibited** as installers (`.bat`, `.ps1`, etc.)
1718

1819
## Critical: How This Repository Works
1920

@@ -34,14 +35,14 @@ For example: `manifests/m/Microsoft/WindowsTerminal/1.0.1401.0/`
3435

3536
## Instruction Priority
3637

37-
The instructions in the **Performance Rules**, **Allowed Local Searches**, and **Explicit Required Behavior** sections are **mandatory**.
38+
The instructions in the **Performance Rules**, **Allowed Local Searches**, and **Explicit Required Behavior** sections are **mandatory**.
3839
They override all other information in this file.
3940

4041
Copilot must always follow these rules when performing PR reviews, even if other documentation in this file describes general repository behavior.
4142

4243
## Performance Rules (Very Important)
4344

44-
This repository contains a very large directory: `manifests/`.
45+
This repository contains a very large directory: `manifests/`.
4546
Copilot must **never recursively scan or search the entire `manifests/` folder** during PR reviews.
4647

4748
Large-scale searches cause severe performance issues and timeouts.
@@ -109,6 +110,92 @@ When reviewing a PR:
109110

110111
---
111112

113+
## Review Guidance: What Constitutes an Actual Problem
114+
115+
This section defines what the review agent should and should not flag. The goal is high signal-to-noise — only flag real issues, not style preferences.
116+
117+
### ✅ DO Flag These as Actual Problems
118+
119+
1. **Wrong field usage**
120+
- A copyright notice (e.g., `Copyright © 2024 Contoso`) placed in the `License` field
121+
- A license name (e.g., `MIT`, `Apache 2.0`) placed in the `Copyright` field
122+
- License-like text in `Copyright`, or copyright-like text in `License`
123+
124+
2. **Mismatched identifiers or versions**
125+
- `PackageIdentifier` not matching the folder path (case-sensitive)
126+
- `PackageVersion` not matching the version folder name
127+
128+
3. **Missing or incorrect schema header** — Every manifest file must begin with a `# yaml-language-server` comment declaring its schema URL. The URL must match both the `ManifestType` and `ManifestVersion` declared in that same file. There may be other comment lines before the schema declaration. The URL format is:
129+
```
130+
# yaml-language-server: $schema=https://aka.ms/winget-manifest.<type>.<version>.schema.json
131+
```
132+
Where `<type>` corresponds to the file's `ManifestType` and `<version>` matches the file's `ManifestVersion`. Examples for `ManifestVersion: 1.12.0`:
133+
- Version file (`ManifestType: version`): `https://aka.ms/winget-manifest.version.1.12.0.schema.json`
134+
- Installer file (`ManifestType: installer`): `https://aka.ms/winget-manifest.installer.1.12.0.schema.json`
135+
- Default locale file (`ManifestType: defaultLocale`): `https://aka.ms/winget-manifest.defaultLocale.1.12.0.schema.json`
136+
- Additional locale file (`ManifestType: locale`): `https://aka.ms/winget-manifest.locale.1.12.0.schema.json`
137+
138+
4. **Singleton manifest type** — Singleton manifests (`ManifestType: singleton`) are prohibited in the community repository. Only multi-file manifests are accepted.
139+
140+
5. **Scripts as installers**`.bat`, `.cmd`, `.ps1`, `.vbs`, and other script files are expressly disallowed as installer types.
141+
142+
6. **Agreements with body text from non-verified developer** — The `Agreement` field (agreement body text) is only allowed for verified developers. Community PRs must not include `Agreement` text; only `AgreementLabel` and `AgreementUrl` are permitted.
143+
144+
7. **Installer URLs from unofficial sources** — Installer URLs should be discoverable on the publisher's official website or CDN. URLs pointing to unofficial mirrors or unrelated third-party hosts are a concern.
145+
146+
8. **Architecture mismatch** — The `Architecture` field should reflect the installed binaries, not the installer itself. An x86 installer that installs x64 binaries should declare `x64`.
147+
148+
### ❌ Do NOT Flag These (Not Actionable Issues)
149+
150+
1. **`License` not matching SPDX format** — The `License` field is free-form text. Values like `MIT`, `Apache 2.0`, `GPLv2`, `Freeware`, `Proprietary`, or `Copyright (c) Contoso` are all acceptable. Do not require exact SPDX identifiers.
151+
152+
2. **Minor formatting** — Trailing whitespace, missing periods, inconsistent casing, and similar style issues do not impact the functionality and should not be flagged in review.
153+
154+
3. **Optional fields being absent** — Many fields are optional: `Author`, `Description`, `Tags`, `ReleaseNotes`, `ReleaseNotesUrl`, `Moniker`, `LicenseUrl`, `CopyrightUrl`, `PublisherUrl`, `PublisherSupportUrl`, `PrivacyUrl`, etc. Their absence is not a problem even if previous versions had them.
155+
156+
4. **Version format style** — WinGet supports many version formats (semver, date-based, build numbers, etc.). Do not flag unconventional version strings unless they cause an actual sorting or matching issue.
157+
158+
5. **Field order within the YAML** — YAML field order within a manifest file does not need to match a specific sequence.
159+
160+
6. **Fields not nested under `Installers`** — Many installer manifest fields (e.g., `InstallerType`, `Scope`, `InstallerSwitches`, `UpgradeBehavior`, `Commands`, `FileExtensions`, `Protocols`, `InstallModes`, `ElevationRequirement`, `PackageFamilyName`, `ProductCode`, `AppsAndFeaturesEntries`, etc.) are valid at **both** the root level of the installer manifest (as defaults that apply to all entries) and within individual installer entries under `Installers`. A field placed at the root is not a mistake — it is a supported and common pattern. Before flagging any field placement as incorrect, consult the schema. If you are less than 90% certain the placement is invalid, **do not flag it** — legitimate schema violations are caught by the automated validation pipeline.
161+
162+
---
163+
164+
## Field Semantics Reference
165+
166+
### `License` vs `Copyright`
167+
168+
These are distinct and commonly confused:
169+
170+
| Field | Purpose | Examples | Common Mistake |
171+
|-------|---------|---------|---------------|
172+
| `License` | The license governing use/distribution of the software. **Free-form text, no SPDX requirement.** | `MIT`, `Apache 2.0`, `GPL-3.0`, `Freeware`, `Proprietary`, `Commercial` | Putting a copyright notice here |
173+
| `Copyright` | The copyright notice for the package. | `Copyright © 2024 Contoso Ltd.`, `Copyright (c) Contoso` | Putting the license name here |
174+
175+
> From the schema docs: *"Please note that a copyright is not considered a license. If there is no available information on a product's license, 'Proprietary' should be the value in this field."*
176+
177+
### Installer Types
178+
179+
| Type | Notes |
180+
|------|-------|
181+
| `msix` / `appx` | MSIX/APPX packages |
182+
| `msi` | Windows Installer packages |
183+
| `exe` | EXE-based installers |
184+
| `zip` | Compressed archives; requires `NestedInstallerType` and `NestedInstallerFiles` |
185+
| `portable` | Portable executables |
186+
| `font` | Font files; **only permitted in `fonts/` root, not `manifests/`** |
187+
188+
---
189+
190+
## Key Policies Summary (from doc/Policies.md and doc/Authoring.md)
191+
192+
- **Silent install required**: Installers may display a UI, but users must not need to interact with it for successful installation.
193+
- **Singleton manifests prohibited**: Multi-file format only.
194+
- **Agreements**: Manifests containing agreements require a Microsoft review. Only verified developers may include `Agreement` body text.
195+
- **Font files**: Must be submitted under the `fonts/` root, not `manifests/`.
196+
197+
---
198+
112199
## Summary
113200

114201
- Only analyze **diffs** and **local package manifests**.

0 commit comments

Comments
 (0)