diff --git a/.github/policies/auto-merge.yml b/.github/policies/auto-merge.yml
index 49ac7b15fa..f3af703973 100644
--- a/.github/policies/auto-merge.yml
+++ b/.github/policies/auto-merge.yml
@@ -8,7 +8,7 @@ where:
configuration:
resourceManagementConfiguration:
eventResponderTasks:
- - description: Auto-squash-merge PRs to main labeled with auto-merge
+ - description: Approve and auto-squash-merge PRs to main labeled with 'auto-merge'
triggerOnOwnActions: true
if:
- payloadType: Pull_Request
@@ -19,8 +19,10 @@ configuration:
then:
- enableAutoMerge:
mergeMethod: Squash
+ - approvePullRequest:
+ comment: "Approved; this PR will merge when all status checks pass."
- - description: Auto-merge PRs to live labeled with auto-merge
+ - description: Auto-merge PRs to live labeled with 'auto-merge'
triggerOnOwnActions: true
if:
- payloadType: Pull_Request
@@ -32,10 +34,11 @@ configuration:
- enableAutoMerge:
mergeMethod: Merge
- - description: Don't auto-merge PRs with auto-merge label removed
+ - description: Don't auto-merge PRs with 'auto-merge' label removed
if:
- payloadType: Pull_Request
- labelRemoved:
label: ':octocat: auto-merge'
then:
- disableAutoMerge
+
diff --git a/.github/policies/close-issues.yml b/.github/policies/close-issues.yml
new file mode 100644
index 0000000000..fdcebf4cb0
--- /dev/null
+++ b/.github/policies/close-issues.yml
@@ -0,0 +1,21 @@
+name: Stale issues
+description: Close needs-more-info issues that haven't had a response in 14 days
+resource: repository
+where:
+configuration:
+ resourceManagementConfiguration:
+ scheduledSearches:
+ - frequencies:
+ - daily:
+ time: 12:00
+ filters:
+ - isIssue
+ - isOpen
+ - hasLabel:
+ label: needs-more-info
+ - noActivitySince:
+ days: 14
+ actions:
+ - addReply:
+ reply: This issue has been automatically closed due to no response from the original author. Feel free to reopen it if you have more information that can help us investigate the issue further.
+ - closeIssue
diff --git a/.github/policies/label-issues.yml b/.github/policies/label-issues.yml
index 237d6ad667..7ced254b88 100644
--- a/.github/policies/label-issues.yml
+++ b/.github/policies/label-issues.yml
@@ -6,60 +6,69 @@ resource: repository
disabled: false
where:
configuration:
- resourceManagementConfiguration:
- scheduledSearches:
- - description: Label doc-bug issues with okr-health (scheduled search)
- frequencies:
- - hourly:
- hour: 3
- filters:
- - isIssue
- - isOpen
- - hasLabel:
- label: doc-bug
- - isNotLabeledWith:
- label: okr-health
- actions:
- - addLabel:
- label: okr-health
-
- eventResponderTasks:
- - description: Label issues with okr-health (event-based)
- if:
- - payloadType: Issues
- - or:
- - hasLabel:
- label: doc-bug
- - titleContains:
- pattern: freshness
- isRegex: False
- - titleContains:
- pattern: out( |-)of( |-)date
- isRegex: True
- then:
- - addLabel:
- label: okr-health
+ resourceManagementConfiguration:
+ scheduledSearches:
+ - description: Label doc-bug issues with okr-quality (scheduled search)
+ frequencies:
+ - hourly:
+ hour: 3
+ filters:
+ - isIssue
+ - isOpen
+ - hasLabel:
+ label: doc-bug
+ - isNotLabeledWith:
+ label: okr-quality
+ actions:
+ - addLabel:
+ label: okr-quality
- - description: Add in-pr label to issues
- if:
- - payloadType: Pull_Request
- then:
- - inPrLabel:
- label: in-pr
+ eventResponderTasks:
+ - description: Add in-pr label to issues
+ if:
+ - payloadType: Pull_Request
+ then:
+ - inPrLabel:
+ label: in-pr
- - description: Label typo issues
- if:
- - payloadType: Issues
- - isAction:
- action: Opened
- - titleContains:
- pattern: (T|t)ypo
- isRegex: True
- then:
- - addLabel:
- label: doc-bug
- - addLabel:
- label: help wanted
- - addLabel:
- label: good first issue
+ - description: Synchronize OKR and release labels from PRs to closing issues
+ if:
+ - payloadType: Pull_Request
+ then:
+ - labelSync:
+ pattern: okr-
+ - labelSync:
+ pattern: ":checkered_flag: Release"
+ - description: Label issues with okr-freshness (event-based)
+ if:
+ - payloadType: Issues
+ - or:
+ - titleContains:
+ pattern: freshness
+ isRegex: False
+ - titleContains:
+ pattern: out( |-)of( |-)date
+ isRegex: True
+ - titleContains:
+ pattern: stale
+ isRegex: False
+ then:
+ - addLabel:
+ label: okr-freshness
+
+ - description: Label typo issues
+ if:
+ - payloadType: Issues
+ - isAction:
+ action: Opened
+ - titleContains:
+ pattern: (T|t)ypo
+ isRegex: True
+ then:
+ - addLabel:
+ label: doc-bug
+ - addLabel:
+ label: help wanted
+ - addLabel:
+ label: good first issue
diff --git a/.github/policies/label-prs.yml b/.github/policies/label-prs.yml
index f0deb7211b..899b2bf015 100644
--- a/.github/policies/label-prs.yml
+++ b/.github/policies/label-prs.yml
@@ -8,88 +8,94 @@ where:
configuration:
resourceManagementConfiguration:
eventResponderTasks:
- - description: Label community PRs
- if:
- - payloadType: Pull_Request
- - isAction:
- action: Opened
- - and:
- - not:
- activitySenderHasPermission:
- permission: Admin
- - not:
- activitySenderHasPermission:
- permission: Write
- - not:
- isActivitySender:
- user: github-actions[bot]
- issueAuthor: False
- - not:
- isActivitySender:
- user: github-actions
- issueAuthor: False
- - not:
- isActivitySender:
+ - description: Label community PRs
+ if:
+ - payloadType: Pull_Request
+ - isAction:
+ action: Opened
+ - and:
+ - not:
+ activitySenderHasPermission:
+ permission: Admin
+ - not:
+ activitySenderHasPermission:
+ permission: Write
+ - not:
+ isActivitySender:
+ user: github-actions[bot]
+ - not:
+ isActivitySender:
+ user: github-actions
+ - not:
+ isActivitySender:
+ user: azure-sdk
+ - not:
+ isActivitySender:
+ user: dependabot
+ then:
+ - addLabel:
+ label: community-contribution
+
+ - description: Label publish PRs from the dotnet-policy-service bot
+ triggerOnOwnActions: true
+ if:
+ - payloadType: Pull_Request
+ - isAction:
+ action: Opened
+ - isActivitySender:
+ user: dotnet-policy-service[bot]
+ - titleContains:
+ pattern: Merge main into live
+ isRegex: False
+ then:
+ - addLabel:
+ label: ":octocat: auto-merge"
+
+ - description: Label PRs from the Azure SDK bot
+ if:
+ - payloadType: Pull_Request
+ - isActivitySender:
user: azure-sdk
- issueAuthor: False
- - not:
- isActivitySender:
- user: dependabot
- issueAuthor: False
- then:
- - addLabel:
- label: community-contribution
+ then:
+ - addLabel:
+ label: ":octocat: auto-merge"
- - description: Label publish PRs from dotnet-policy-service bot
- triggerOnOwnActions: true
- if:
- - payloadType: Pull_Request
- - isAction:
- action: Opened
- - isActivitySender:
- user: dotnet-policy-service[bot]
- - titleContains:
- pattern: Merge main into live
- isRegex: False
- then:
- - addLabel:
- label: ':octocat: auto-merge'
+ - description: Label PRs from dependabot/dependabot[bot]
+ if:
+ - payloadType: Pull_Request
+ - or:
+ - isActivitySender:
+ user: dependabot
+ - isActivitySender:
+ user: dependabot[bot]
+ then:
+ - addLabel:
+ label: ":octocat: auto-merge"
- - description: Label PRs from the Azure SDK bot
- if:
- - payloadType: Pull_Request
- - isActivitySender:
- user: azure-sdk
- then:
- - approvePullRequest:
- comment: "Approved; this PR will merge when all status checks pass."
- - addLabel:
- label: ':octocat: auto-merge'
+ - description: Label PRs with okr-quality
+ if:
+ - payloadType: Pull_Request
+ - or:
+ - titleContains:
+ pattern: build warning
+ isRegex: False
+ - bodyContains:
+ pattern: build warning
+ isRegex: False
+ then:
+ - addLabel:
+ label: okr-quality
- - description: Label PRs with okr-health
- if:
- - payloadType: Pull_Request
- - or:
- - titleContains:
- pattern: build warning
- isRegex: False
- - bodyContains:
- pattern: build warning
- isRegex: False
- then:
- - addLabel:
- label: okr-health
-
- - description: Label PRs with okr-freshness
- if:
- - payloadType: Pull_Request
- - or:
- - titleContains:
- pattern: freshness
- isRegex: False
- - bodyContains:
- pattern: freshness
- isRegex: False
- then:
- - addLabel:
- label: okr-freshness
+ - description: Label PRs with okr-freshness
+ if:
+ - payloadType: Pull_Request
+ - or:
+ - titleContains:
+ pattern: freshness
+ isRegex: False
+ - bodyContains:
+ pattern: freshness
+ isRegex: False
+ then:
+ - addLabel:
+ label: okr-freshness
diff --git a/.github/policies/scheduled-pr.yml b/.github/policies/scheduled-pr.yml
index fb69d2df16..c9fd2d9907 100644
--- a/.github/policies/scheduled-pr.yml
+++ b/.github/policies/scheduled-pr.yml
@@ -1,9 +1,7 @@
-id:
-name: GitOps.PullRequestIssueManagement
-description: GitOps.PullRequestIssueManagement primitive
-owner:
+name: GitOps.PullRequestIssueManagement - Scheduled PRs
+description: Creates pull requests on a schedule
resource: repository
-disabled: false
+
where:
configuration:
resourceManagementConfiguration:
diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml
deleted file mode 100644
index cd8490e1ee..0000000000
--- a/.github/workflows/no-response.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: No Response
-
-# Both `issue_comment` and `scheduled` event types are required for this Action
-# to work properly.
-on:
- issue_comment:
- types: [created]
- schedule:
- # Schedule every day at 00:05
- - cron: '5 0 * * *'
-
-jobs:
- noResponse:
- permissions:
- issues: write
- pull-requests: write
- runs-on: ubuntu-latest
- steps:
- - uses: lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb
- with:
- token: ${{ github.token }}
- responseRequiredLabel: needs-more-info
- daysUntilClose: 14
- closeComment: >
- This issue has been automatically closed due to no response from the original author.
- Please feel free to reopen it if you have more information that can help us investigate the issue further.
diff --git a/.repoman.yml b/.repoman.yml
index 1d04cc58f7..4f011bb8d0 100644
--- a/.repoman.yml
+++ b/.repoman.yml
@@ -1,5 +1,5 @@
-revision: 2
-schema-version: 1
+revision: 4
+schema-version: 5
owner-ms-alias: adegeo
config:
@@ -15,47 +15,72 @@ config:
issues:
unlabeled: "labeled"
-
+
labeled:
- # MapQuest
+ # Temporary label to mark issues as updated for Quest. The label is instantly removed
- check:
- type: query
- value: "length(Issue.labels[?name == ':world_map: mapQUEST']) != `0`"
+ value: "length(Issue.Labels[?Name == ':world_map: mapQUEST']) != `0`"
pass:
- labels-remove: [":world_map: mapQUEST"]
- # Handle issues with /prod /tech labels from label bot
- # Manages the Not Triaged label for issues missing/having an org category issue
+ # Handle issues with /svc /subsvc labels from label bot
+
- check:
- type: query
- value: "length(Issue.labels[?contains(name, '/svc') || contains(name, '/subsvc')]) != `0`"
+ value: "length(Issue.Labels[?contains(Name, '/svc') || contains(Name, '/subsvc')]) != `0`"
+
+ # If the issue has a /svc or /subsvc label, it must be categorized otherwise it's considered untriaged
pass:
- check:
- type: query
- value: "length(Issue.labels[?name == ':pushpin: seQUESTered' || name == ':world_map: reQUEST' || name == 'doc-enhancement' || name == 'product-question' || name == 'in-progress' || name == 'test-issue' || name == 'kudos' || name == 'loc' || name == 'doc-bug' || name == 'product-feedback' || name == 'code-of-conduct' || name == 'support-request' || name == 'duplicate' || name == 'resolved-by-customer' || name == 'docs-experience' || name == 'doc-provided' || name == 'doc-idea' || name == 'needs-more-info']) != `0`"
+ value: "length(Issue.Labels[?Name == ':pushpin: seQUESTered' || Name == ':world_map: reQUEST' || Name == 'training-module' || Name == 'doc-enhancement' || Name == 'product-question' || Name == 'in-progress' || Name == 'test-issue' || Name == 'kudos' || Name == 'loc' || Name == 'doc-bug' || Name == 'product-feedback' || Name == 'code-of-conduct' || Name == 'support-request' || Name == 'duplicate' || Name == 'resolved-by-customer' || Name == 'docs-experience' || Name == 'doc-provided' || Name == 'doc-idea' || Name == 'needs-more-info']) != `0`"
pass:
- labels-remove: [":watch: Not Triaged"]
fail:
- labels-add: [":watch: Not Triaged"]
+
+ # Not an doc issue specifically
fail:
+
+ # If the issue is open, then we'll allow some further processing on it. If it's closed, ignore it and let the user do what they want.
- check:
- type: query
- value: "length(Issue.labels[?name == ':pushpin: seQUESTered' || name == ':world_map: reQUEST']) != `0`"
+ value: "Issue.State.StringValue == 'open'"
+
pass:
- - labels-remove: [":watch: Not Triaged"]
- fail:
- - labels-add: [":watch: Not Triaged"]
+ - check:
+ - type: query
+ value: "length(Issue.Labels[?Name == ':pushpin: seQUESTered' || Name == ':world_map: reQUEST' || Name == 'training-module' || Name == 'video-content'] || Name == 'test-issue') != `0`"
+ pass:
+ - labels-remove: [":watch: Not Triaged"]
+ fail:
+ - labels-add: [":watch: Not Triaged"]
+
+ # Checks for binary/source incompatible checkboxes and adds a label
+ - check:
+ - type: query
+ value: "contains(InstanceData.IssuePrBody, '- [x] **Binary incompatible**') == `true` || contains(InstanceData.IssuePrBody, '- [X] **Binary incompatible**') == `true`"
+ pass:
+ - labels-add: ["binary incompatible"]
+
+ - check:
+ - type: query
+ value: "contains(InstanceData.IssuePrBody, '- [x] **Source incompatible**') == `true` || contains(InstanceData.IssuePrBody, '- [X] **Source incompatible**') == `true`"
+ pass:
+ - labels-add: ["source incompatible"]
opened:
# New issue opened, add Not Triaged
- labels-add: [":watch: Not Triaged"]
+ # Dependabot opened issue, label it
- check:
- - type: metadata-exists
-
+ - type: query
+ value: "Issue.User.Login == 'dependabot'"
pass:
- - prod_tech_labels: true
+ - labels-add: ["dependencies"]
# Try to detect an empty issue
- check:
@@ -63,8 +88,17 @@ issues:
value: "### Description[\\n\\r]+\\[Enter feedback here\\][\\n\\r]+###"
pass:
- labels-add: ["needs-more-info"]
+ - labels-remove: [":watch: Not Triaged"]
- close
+ # Add links to related issues if it's a doc issue
+ - check:
+ - type: metadata-exists
+ - type: variable-exists
+ name: "document_version_independent_id"
+ pass:
+ - link-related-issues
+
reopened:
# Remove won't fix label
@@ -75,6 +109,14 @@ issues:
# Issue closed, remove in-progress and not triaged labels
- labels-remove: ["in-progress", ":watch: Not Triaged"]
+ # Check if the issue was closed by the user who opened it
+ - check:
+ - type: query
+ value: "Issue.User.Id == EventPayload.sender.id"
+ pass:
+ - labels-add: ["resolved-by-customer"]
+ - labels-remove: [":watch: Not Triaged"]
+
pull_request:
reopened: opened
@@ -86,7 +128,7 @@ pull_request:
- check:
- type: query
- value: "PullRequest.base.ref != 'live'"
+ value: "PullRequest.Base.Ref != 'live'"
pass:
- files-changed:
- path: "(?i).*dotnet-desktop-guide\/framework\/wpf.*"
@@ -105,6 +147,12 @@ pull_request:
run:
- labels-add: ["dotnet-desktop/svc", "winforms/subsvc"]
+projects_v2_item:
+
+ reordered:
+
+ - labels-add: [":world_map: mapQUEST"]
+
issue_comment:
created:
@@ -112,7 +160,7 @@ issue_comment:
# someone creates a comment with #please-review in it, add changes-addressed label
- check:
- type: query
- value: "Issue.state == 'open' && Issue.user.id == Comment.user.id"
+ value: "Issue.State.StringValue == 'open' && Issue.User.Id == Comment.User.Id"
- type: comment-body
value: ^#please-review$
pass:
diff --git a/dotnet-desktop-guide/framework/wpf/advanced/table-overview.md b/dotnet-desktop-guide/framework/wpf/advanced/table-overview.md
index 8260db46eb..3298e4c61e 100644
--- a/dotnet-desktop-guide/framework/wpf/advanced/table-overview.md
+++ b/dotnet-desktop-guide/framework/wpf/advanced/table-overview.md
@@ -19,7 +19,7 @@ description: Learn how the Table is a block level element that supports grid-bas
- [Table Basics](#table_basics)
-- [How is Table Different then Grid?](#table_vs_Grid)
+- [How is Table Different than Grid?](#table_vs_Grid)
- [Basic Table Structure](#basic_table_structure)
@@ -41,9 +41,9 @@ description: Learn how the Table is a block level element that supports grid-bas
-### How is Table Different then Grid?
+### How is Table Different than Grid?
- and share some common functionality, but each is best suited for different scenarios. A is designed for use within flow content (see [Flow Document Overview](flow-document-overview.md) for more information on flow content). Grids are best used inside of forms (basically anywhere outside of flow content). Within a , supports flow content behaviors like pagination, column reflow, and content selection while a does not. A on the other hand is best used outside of a for many reasons including adds elements based on a row and column index, does not. The element allows layering of child content, allowing more than one element to exist within a single "cell." does not support layering. Child elements of a can be absolutely positioned relative to the area of their "cell" boundaries. does not support this feature. Finally, a requires less resources then a so consider using a to improve performance.
+ and share some common functionality, but each is best suited for different scenarios. A is designed for use within flow content (see [Flow Document Overview](flow-document-overview.md) for more information on flow content). Grids are best used inside of forms (basically anywhere outside of flow content). Within a , supports flow content behaviors like pagination, column reflow, and content selection while a does not. A on the other hand is best used outside of a for many reasons including adds elements based on a row and column index, does not. The element allows layering of child content, allowing more than one element to exist within a single "cell." does not support layering. Child elements of a can be absolutely positioned relative to the area of their "cell" boundaries. does not support this feature. Finally, a requires less resources than a so consider using a to improve performance.
diff --git a/dotnet-desktop-guide/net/wpf/overview/index.md b/dotnet-desktop-guide/net/wpf/overview/index.md
index 06d8ea5d45..8905b99b32 100644
--- a/dotnet-desktop-guide/net/wpf/overview/index.md
+++ b/dotnet-desktop-guide/net/wpf/overview/index.md
@@ -86,7 +86,7 @@ The following figure shows the user interface (UI) that is defined by the XAML i
:::image type="content" source="media/index/markup-window-button.png" alt-text="A window that contains a button":::
-Since XAML is XML-based, the UI that you compose with it's assembled in a hierarchy of nested elements that is known as an [element tree](../../../framework/wpf/advanced/trees-in-wpf.md). The element tree provides a logical and intuitive way to create and manage UIs.
+Since XAML is XML-based, the UI that you compose with it is assembled in a hierarchy of nested elements that is known as an [element tree](../../../framework/wpf/advanced/trees-in-wpf.md). The element tree provides a logical and intuitive way to create and manage UIs.
### Code-behind