diff --git a/.github/ISSUE_TEMPLATE/Bug_Report.yml b/.github/ISSUE_TEMPLATE/Bug_Report.yml
new file mode 100644
index 00000000..a8159048
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Bug_Report.yml
@@ -0,0 +1,68 @@
+name: "Report a bug 🐛"
+description: Report errors or unexpected behavior
+labels: [Issue-Bug]
+body:
+- type: markdown
+ attributes:
+ value: |
+ Please make sure to [search for existing issues](https://github.com/microsoft/devhomegithubextension/issues) before filing a new one!
+
+- id: version
+ type: input
+ attributes:
+ label: Dev Home version
+ placeholder: "0.1.3651.0"
+ description:
+ validations:
+ required: false
+
+- id: windowsversion
+ type: input
+ attributes:
+ label: Windows build number
+ placeholder: "10.0.23400.0"
+ description: |
+ Please run `ver` or `[Environment]::OSVersion`.
+ validations:
+ required: false
+
+- id: othersoftware
+ type: textarea
+ attributes:
+ label: Other software
+ description: If you're reporting a bug about our interaction with other software, what software? What versions?
+ placeholder:
+ validations:
+ required: false
+
+- id: repro
+ type: textarea
+ attributes:
+ label: Steps to reproduce the bug
+ placeholder: Enter detailed steps to tell us what you were doing when you encountered the bug.
+ validations:
+ required: true
+
+- id: expectedbehavior
+ type: textarea
+ attributes:
+ label: Expected result
+ description: If you want to include screenshots, paste them into the markdown editor below.
+ placeholder: Tell us what you were expecting to happen.
+ validations:
+ required: false
+
+- id: actualbehavior
+ type: textarea
+ attributes:
+ label: Actual result
+ placeholder: Tell us what happened.
+ validations:
+ required: true
+
+- id: includedsysinfo
+ type: textarea
+ attributes:
+ label: Included System Information
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/Documentation_Issue.yml b/.github/ISSUE_TEMPLATE/Documentation_Issue.yml
new file mode 100644
index 00000000..fd1ecb82
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Documentation_Issue.yml
@@ -0,0 +1,11 @@
+name: "Documentation issue 📄"
+description: Report issues on our documentation
+labels:
+- Issue-Docs
+body:
+- type: textarea
+ attributes:
+ label: Provide a description of requested docs changes
+ placeholder: Briefly describe which document needs to be corrected and why.
+ validations:
+ required: true
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/Feature_Request.yml b/.github/ISSUE_TEMPLATE/Feature_Request.yml
new file mode 100644
index 00000000..ec26691e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Feature_Request.yml
@@ -0,0 +1,33 @@
+name: "Suggest a new feature or improvement 🚀"
+description: Suggest a new feature or improvement (this does not mean you have to implement
+ it)
+labels:
+- Issue-Feature
+body:
+- id: description
+ type: textarea
+ attributes:
+ label: Suggested new feature or improvement
+ placeholder: Tell us about the new feature or improvement you'd like to see.
+ validations:
+ required: true
+
+- id: scenario
+ type: textarea
+ attributes:
+ label: Scenario
+ placeholder: How could this new feature be used? Feel free to provide examples.
+ validations:
+ required: true
+
+- id: supportinginfo
+ type: textarea
+ attributes:
+ label: Additional details
+ placeholder: Enter more info or links to give us more details.
+ validations:
+ required: false
+
+- type: markdown
+ attributes:
+ value: Please limit one request per issue.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/Translation_Issue.yml b/.github/ISSUE_TEMPLATE/Translation_Issue.yml
new file mode 100644
index 00000000..438ebf7e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Translation_Issue.yml
@@ -0,0 +1,56 @@
+name: "Report a translation problem 🌐"
+description: Report incorrect translations
+labels:
+- Issue-Translation
+
+body:
+- type: markdown
+ attributes:
+ value: Please make sure to [search for existing issues](https://github.com/microsoft/devhomegithubextension/issues) before filing a new one!
+
+- id: devhomeversion
+ type: input
+ attributes:
+ label: Dev Home version
+ placeholder: "0.1.3651.0"
+ description:
+ validations:
+ required: false
+
+- id: githubextensionversion
+ type: input
+ attributes:
+ label: GitHub Extension (for Dev Home) version
+ placeholder: "0.1.3651.0"
+ description:
+ validations:
+ required: false
+
+- id: languageaffected
+ type: input
+ attributes:
+ label: 🌐 Language
+ placeholder: "Example: German"
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: ❌ Actual phrase(s)
+ placeholder: What is there? Please include a screenshot - it's very helpful to us!
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: ✔️ Expected phrase(s)
+ placeholder: What phrase was expected?
+ validations:
+ required: false
+
+- type: textarea
+ attributes:
+ label: Why is the current translation wrong
+ placeholder: Why do you feel this translation is incorrect?
+ validations:
+ required: true
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000..60f96c53
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,7 @@
+blank_issues_enabled: true
+
+contact_links:
+ - name: Microsoft Security Response Center 🔐
+ url: https://msrc.microsoft.com/create-report
+ about: Please report security vulnerabilities here.
+
\ No newline at end of file
diff --git a/.github/fabricbot.json b/.github/fabricbot.json
new file mode 100644
index 00000000..05368a5b
--- /dev/null
+++ b/.github/fabricbot.json
@@ -0,0 +1,829 @@
+{
+ "version": "1.0",
+ "tasks": [
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssuesOnlyResponder",
+ "version": "1.0",
+ "config": {
+ "taskName": "Add needs triage label to new issues",
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "isAction",
+ "parameters": {
+ "action": "opened"
+ }
+ },
+ {
+ "operator": "not",
+ "operands": [
+ {
+ "name": "isPartOfProject",
+ "parameters": {}
+ }
+ ]
+ },
+ {
+ "operator": "not",
+ "operands": [
+ {
+ "name": "isAssignedToSomeone",
+ "parameters": {}
+ }
+ ]
+ }
+ ]
+ },
+ "actions": [
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Needs-Triage"
+ }
+ }
+ ],
+ "eventType": "issue",
+ "eventNames": [
+ "issues",
+ "project_card"
+ ]
+ },
+ "id": "eUOhvA_62"
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "config": {
+ "taskName": "Replace needs author feedback label with needs attention label when the author comments on an issue",
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "isAction",
+ "parameters": {
+ "action": "created"
+ }
+ },
+ {
+ "name": "isActivitySender",
+ "parameters": {
+ "user": {
+ "type": "author"
+ }
+ }
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Needs-Author-Feedback"
+ }
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ }
+ ]
+ },
+ "actions": [
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Needs-Triage"
+ }
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Author-Feedback"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Needs-Team-Response"
+ }
+ }
+ ],
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ]
+ },
+ "id": "kgfxdBIu_9"
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssuesOnlyResponder",
+ "version": "1.0",
+ "config": {
+ "taskName": "Remove no recent activity label from issues",
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "operator": "not",
+ "operands": [
+ {
+ "name": "isAction",
+ "parameters": {
+ "action": "closed"
+ }
+ }
+ ]
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ }
+ ]
+ },
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ }
+ ],
+ "eventType": "issue",
+ "eventNames": [
+ "issues",
+ "project_card"
+ ]
+ },
+ "id": "eR-TaGJJzW",
+ "disabled": false
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "config": {
+ "taskName": "Remove no recent activity label when an issue is commented on",
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ }
+ ]
+ },
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ }
+ ],
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ]
+ },
+ "id": "tXKeoDht_g",
+ "disabled": false
+ },
+ {
+ "taskType": "scheduled",
+ "capabilityId": "ScheduledSearch",
+ "subCapability": "ScheduledSearch",
+ "version": "1.1",
+ "config": {
+ "taskName": "Close stale issues",
+ "frequency": [
+ {
+ "weekDay": 0,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ },
+ {
+ "weekDay": 1,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ },
+ {
+ "weekDay": 2,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ },
+ {
+ "weekDay": 3,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ },
+ {
+ "weekDay": 4,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ },
+ {
+ "weekDay": 5,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ },
+ {
+ "weekDay": 6,
+ "hours": [
+ 1,
+ 7,
+ 13,
+ 19
+ ]
+ }
+ ],
+ "searchTerms": [
+ {
+ "name": "isIssue",
+ "parameters": {}
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Needs-Author-Feedback"
+ }
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ },
+ {
+ "name": "noActivitySince",
+ "parameters": {
+ "days": 5
+ }
+ }
+ ],
+ "actions": [
+ {
+ "name": "closeIssue",
+ "parameters": {}
+ }
+ ]
+ },
+ "id": "8yr-nVZj9k",
+ "disabled": false
+ },
+ {
+ "taskType": "scheduled",
+ "capabilityId": "ScheduledSearch",
+ "subCapability": "ScheduledSearch",
+ "version": "1.1",
+ "config": {
+ "taskName": "Add no recent activity label to issues",
+ "frequency": [
+ {
+ "weekDay": 0,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ },
+ {
+ "weekDay": 1,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ },
+ {
+ "weekDay": 2,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ },
+ {
+ "weekDay": 3,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ },
+ {
+ "weekDay": 4,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ },
+ {
+ "weekDay": 5,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ },
+ {
+ "weekDay": 6,
+ "hours": [
+ 2,
+ 8,
+ 14,
+ 20
+ ]
+ }
+ ],
+ "searchTerms": [
+ {
+ "name": "isIssue",
+ "parameters": {}
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Needs-Author-Feedback"
+ }
+ },
+ {
+ "name": "noActivitySince",
+ "parameters": {
+ "days": 5
+ }
+ },
+ {
+ "name": "noLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ }
+ ],
+ "actions": [
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Status-No recent activity"
+ }
+ },
+ {
+ "name": "addReply",
+ "parameters": {
+ "comment": "This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for **5 days**. It will be closed if no further activity occurs **within 5 days of this comment**."
+ }
+ }
+ ]
+ },
+ "id": "DAhxoYjVcq",
+ "disabled": false
+ },
+ {
+ "taskType": "scheduled",
+ "capabilityId": "ScheduledSearch",
+ "subCapability": "ScheduledSearch",
+ "version": "1.1",
+ "config": {
+ "taskName": "Close duplicate issues",
+ "frequency": [
+ {
+ "weekDay": 0,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ },
+ {
+ "weekDay": 1,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ },
+ {
+ "weekDay": 2,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ },
+ {
+ "weekDay": 3,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ },
+ {
+ "weekDay": 4,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ },
+ {
+ "weekDay": 5,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ },
+ {
+ "weekDay": 6,
+ "hours": [
+ 3,
+ 9,
+ 15,
+ 21
+ ]
+ }
+ ],
+ "searchTerms": [
+ {
+ "name": "isIssue",
+ "parameters": {}
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Resolution-Duplicate"
+ }
+ },
+ {
+ "name": "noActivitySince",
+ "parameters": {
+ "days": 1
+ }
+ }
+ ],
+ "actions": [
+ {
+ "name": "addReply",
+ "parameters": {
+ "comment": "This issue has been marked as duplicate and has not had any activity for **1 day**. It will be closed for housekeeping purposes."
+ }
+ },
+ {
+ "name": "closeIssue",
+ "parameters": {}
+ }
+ ]
+ },
+ "id": "xGhARy1H0w"
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "id": "bvMkigH2HPgUniYFCNco9",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "commentContains",
+ "parameters": {
+ "isRegex": true,
+ "commentPattern": "\\/feedback[H|h]ub"
+ }
+ },
+ {
+ "operator": "or",
+ "operands": [
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "OWNER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "MEMBER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "COLLABORATOR"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ],
+ "taskName": "Helper to mark as feedback hub",
+ "actions": [
+ {
+ "name": "addReply",
+ "parameters": {
+ "comment": "Hi! We've identified this issue that best is suited for Windows Feedback Hub. To do this on Windows, WinKey+F will bring it up!"
+ }
+ },
+ {
+ "name": "closeIssue",
+ "parameters": {}
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Triage"
+ }
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Team-Response"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Resolution-Please File on Feedback Hub"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "id": "bvMkigH2HPgUniYFCNco8",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "commentContains",
+ "parameters": {
+ "isRegex": true,
+ "commentPattern": "\\/dup(licate|e)?(\\s+of)?\\s+(#[\\d]+|https)"
+ }
+ },
+ {
+ "operator": "or",
+ "operands": [
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "OWNER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "MEMBER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "COLLABORATOR"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ],
+ "taskName": "Helper to mark as duplicate",
+ "actions": [
+ {
+ "name": "addReply",
+ "parameters": {
+ "comment": "Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!"
+ }
+ },
+ {
+ "name": "closeIssue",
+ "parameters": {}
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Triage"
+ }
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Team-Response"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Resolution-Duplicate"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "id": "mgZxIoqeF7GWUo7-tZF56",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "commentContains",
+ "parameters": {
+ "commentPattern": "\\/needinfo",
+ "isRegex": true
+ }
+ },
+ {
+ "operator": "or",
+ "operands": [
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "OWNER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "MEMBER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "COLLABORATOR"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ],
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Triage"
+ }
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Team-Response"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Needs-Author-Feedback"
+ }
+ }
+ ],
+ "taskName": "Author Response needed"
+ }
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "id": "mgZxIoqeF7GWUo7-t3773",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "commentContains",
+ "parameters": {
+ "commentPattern": "\\/loc\\b",
+ "isRegex": true
+ }
+ },
+ {
+ "operator": "or",
+ "operands": [
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "OWNER"
+ }
+ },
+ {
+ "name": "activitySenderHasAssociation",
+ "parameters": {
+ "association": "MEMBER"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ],
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Needs-Triage"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Loc-Sent To Team"
+ }
+ },
+ {
+ "name": "addReply",
+ "parameters": {
+ "comment": "Hi! Thanks for making us aware of the problem. We raised the issue with our internal localization team. This issue should be fixed hopefully in the next version of DevHome."
+ }
+ }
+ ],
+ "taskName": "Filed ADO item with Localization team"
+ }
+ }
+ ],
+ "userGroups": []
+ }
+
\ No newline at end of file
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000..a0190f1c
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,12 @@
+## Summary of the pull request
+
+## References and relevant issues
+
+## Detailed description of the pull request / Additional comments
+
+## Validation steps performed
+
+## PR checklist
+- [ ] Closes #xxx
+- [ ] Tests added/passed
+- [ ] Documentation updated
diff --git a/.github/workflows/GitHubExt-CI.yml b/.github/workflows/GitHubExt-CI.yml
new file mode 100644
index 00000000..612d8d8c
--- /dev/null
+++ b/.github/workflows/GitHubExt-CI.yml
@@ -0,0 +1,75 @@
+#
+# This workflow will build and run all unit tests.
+#
+
+name: GitHubExt-CI
+on:
+ pull_request:
+ push:
+ branches: [ "main", "feature*" ]
+
+jobs:
+ build-and-test:
+ strategy:
+ matrix:
+ configuration: [Release, Debug]
+ platform: [x64, x86, arm64]
+ os: [windows-latest]
+ dotnet-version: ['6.0.x']
+ exclude:
+ - configuration: Debug
+ platform: x64
+ - configuration: Release
+ platform: x86
+ - configuration: Debug
+ platform: arm64
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ clean: true
+
+ - name: Setup .NET SDK ${{ matrix.dotnet-version }}
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: ${{ matrix.dotnet-version }}
+ env:
+ NUGET_AUTH_TOKEN: ${{ secrets.GPR_READ_TOKEN }}
+
+ - name: Add MSBuild to PATH
+ uses: microsoft/setup-msbuild@v1.1
+ with:
+ vs-version: '17.5'
+
+ - name: Download nuget
+ run: |
+ mkdir ".\.nuget"
+ Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile ".\.nuget\nuget.exe"
+
+ - name: Find VsDevCmd.bat
+ run: |
+ $VSDevCmd = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere" -latest -find Common7\tools\VSDevCmd.bat
+ if (!$VSDevCmd) { exit 1 }
+ echo "Using VSDevCmd: ${VSDevCmd}"
+ Add-Content $env:GITHUB_ENV "VSDevCmd=$VSDevCmd"
+
+ - name: Restore dependencies
+ run: dotnet restore GITServices.sln -p:PublishReadyToRun=true
+
+ - name: Restore nuget packages
+ run: cmd /c "$env:VSDevCmd" "&" nuget restore GITServices.sln
+
+ - name: Build_DevHomeGitHubExtension
+ run: cmd /c "$env:VSDevCmd" "&" msbuild /m /p:Configuration=${{ matrix.configuration }},Platform=${{ matrix.platform }} /restore GITServices.sln
+
+ - name: Find vstest.console.exe
+ if: ${{ matrix.platform != 'arm64' }}
+ run: |
+ $VSDevTestCmd = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere" -latest -prerelease -products * -find **\TestPlatform\vstest.console.exe
+ if (!$VSDevTestCmd) { exit 1 }
+ echo "Using VSDevTestCmd: ${VSDevTestCmd}"
+ Add-Content $env:GITHUB_ENV "VSDevTestCmd=$VSDevTestCmd"
+
+ - name: DevHome UnitTests
+ if: ${{ matrix.platform != 'arm64' }}
+ run: cmd /c "$env:VSDevTestCmd" /Platform:${{ matrix.platform }} /TestCaseFilter:"TestCategory!=LiveData" BuildOutput\\${{ matrix.configuration }}\\${{ matrix.platform }}\\GitHubPlugin.Test\\GitHubPlugin.Test.dll
diff --git a/CODEOWNERS b/CODEOWNERS
index 3f569e16..6f6baec6 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -1 +1 @@
-* @chendrixson @mathewleeza @EricJohnson327 @cinnamon-msft
+* @microsoft/DevHome-Admin
\ No newline at end of file
diff --git a/README.md b/README.md
index 4073debd..fa4ade3a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-![image](https://github.com/microsoft/devhomegithubextension/assets/48369326/59a0a369-f166-4287-90e7-f89b7b6b5eb8)
+![image](https://github.com/microsoft/devhomegithubextension/blob/main/src/GithubPluginServer/Assets/StoreDisplay-150.png)
# Welcome to the Dev Home GitHub Extension repo
diff --git a/build/azure-pipelines.yml b/build/azure-pipelines.yml
index 16d10710..50062b1f 100644
--- a/build/azure-pipelines.yml
+++ b/build/azure-pipelines.yml
@@ -23,7 +23,7 @@ parameters:
- release
variables:
- MSIXVersion: '0.137'
+ MSIXVersion: '0.200'
solution: '**/GITServices.sln'
appxPackageDir: 'AppxPackages'
testOutputArtifactDir: 'TestResults'
@@ -36,57 +36,6 @@ resources:
ref: refs/heads/main
stages:
-- stage: SourceAnalysis
- # This stage is expected to run in parallel with BuildWindowsAppSDK-Stages.
- dependsOn: []
- jobs:
- - job: SDLSourcesScanning
- steps:
- # Required by the Packaged ES SDL Templates.
- - checkout: self
-
- # Typically this has been done.
- - task: NodeTool@0
- displayName: 'Use Node >=8.6.0'
- inputs:
- versionSpec: '>=8.6.0'
-
- - template: v2/Steps/PackageES/Windows.SDL.Sources.Analysis.OS.Undocked.yml@templates_onebranch
- parameters:
- globalsdl:
- tsa:
- # Not filing bugs for issues found by the scans just yet.
- #enabled: true
- enabled: false
- codeql:
- # We currently don't disable other scans that are enabled by default. Just ensure that
- # scans that we are interested in are enabled.
- psscriptanalyzer:
- enable: true
- break: true
- credscan:
- enable: true
- break: true
- policheck:
- enable: true
- break: true
- antimalwarescan:
- enable: true
- break: true
- armory:
- enable: true
- break: true
- eslint:
- enable: true
- break: true
-
- - task: Flawfinder@2
- displayName: 'Run Flawfinder'
- inputs:
- targetFlawfinderPattern: '$(Build.SourcesDirectory)'
- minRiskLevel: 2
- onlyInputs: false
-
- stage: Build_Msix
dependsOn: []
jobs:
@@ -105,6 +54,14 @@ stages:
inputs:
filePath: 'build/scripts/Unstub.ps1'
+ - task: PowerShell@2
+ displayName: Use internal nuget feed
+ inputs:
+ targetType: inline
+ script: >-
+ Copy-Item (Join-Path $(Build.SourcesDirectory) "build\nuget.config.internal") -Destination (Join-Path $(Build.SourcesDirectory) "nuget.config")
+ pwsh: true
+
- task: NuGetCommand@2
inputs:
command: 'restore'
@@ -282,6 +239,57 @@ stages:
SymbolServerType: TeamServices
SymbolsProduct: DevHomeGitHubExtension
+- stage: SourceAnalysis
+ # This stage is expected to run in parallel with BuildWindowsAppSDK-Stages.
+ dependsOn: []
+ jobs:
+ - job: SDLSourcesScanning
+ steps:
+ # Required by the Packaged ES SDL Templates.
+ - checkout: self
+
+ # Typically this has been done.
+ - task: NodeTool@0
+ displayName: 'Use Node >=8.6.0'
+ inputs:
+ versionSpec: '>=8.6.0'
+
+ - template: v2/Steps/PackageES/Windows.SDL.Sources.Analysis.OS.Undocked.yml@templates_onebranch
+ parameters:
+ globalsdl:
+ tsa:
+ # Not filing bugs for issues found by the scans just yet.
+ #enabled: true
+ enabled: false
+ codeql:
+ # We currently don't disable other scans that are enabled by default. Just ensure that
+ # scans that we are interested in are enabled.
+ psscriptanalyzer:
+ enable: true
+ break: true
+ credscan:
+ enable: true
+ break: true
+ policheck:
+ enable: true
+ break: true
+ antimalwarescan:
+ enable: true
+ break: true
+ armory:
+ enable: true
+ break: true
+ eslint:
+ enable: true
+ break: true
+
+ - task: Flawfinder@2
+ displayName: 'Run Flawfinder'
+ inputs:
+ targetFlawfinderPattern: '$(Build.SourcesDirectory)'
+ minRiskLevel: 2
+ onlyInputs: false
+
- stage: Build_MsixBundle
dependsOn: Build_Msix
condition: in(dependencies.Build_Msix.result, 'Succeeded')
@@ -374,7 +382,7 @@ stages:
displayName: 'Create Staging StoreBroker Package'
condition: eq(variables['BuildingBranch'], 'staging')
inputs:
- serviceEndpoint: 'DevHomeCanary StoreBroker'
+ serviceEndpoint: 'DevHomeGitHubExtensionCanary StoreBroker'
sbConfigPath: '$(System.DefaultWorkingDirectory)\build\store\canary\SBConfig.json'
sourceFolder: 'StorePublish'
contents: '*.msixbundle'
diff --git a/build/nuget.config.internal b/build/nuget.config.internal
new file mode 100644
index 00000000..80f7c0ea
--- /dev/null
+++ b/build/nuget.config.internal
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/scripts/Build.ps1 b/build/scripts/Build.ps1
index 23e23502..d005ff33 100644
--- a/build/scripts/Build.ps1
+++ b/build/scripts/Build.ps1
@@ -73,6 +73,10 @@ else {
Write-Host "ClientSecret not found at Build-time"
}
+if ($IsAzurePipelineBuild) {
+ Copy-Item (Join-Path $env:Build_RootDirectory "build\nuget.config.internal") -Destination (Join-Path $env:Build_RootDirectory "nuget.config")
+}
+
$msbuildPath = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
$ErrorActionPreference = "Stop"
diff --git a/build/scripts/CreateBuildInfo.ps1 b/build/scripts/CreateBuildInfo.ps1
index 425178a7..8b3664ed 100644
--- a/build/scripts/CreateBuildInfo.ps1
+++ b/build/scripts/CreateBuildInfo.ps1
@@ -5,7 +5,7 @@ Param(
)
$Major = "0"
-$Minor = "1"
+$Minor = "2"
$Patch = "99" # default to 99 for local builds
$versionSplit = $Version.Split(".");
diff --git a/nuget.config b/nuget.config
index 80f7c0ea..6285fe02 100644
--- a/nuget.config
+++ b/nuget.config
@@ -7,7 +7,7 @@
-
+
diff --git a/src/GithubPlugin/Providers/RepositoryProvider.cs b/src/GithubPlugin/Providers/RepositoryProvider.cs
index 3e175092..b373d13a 100644
--- a/src/GithubPlugin/Providers/RepositoryProvider.cs
+++ b/src/GithubPlugin/Providers/RepositoryProvider.cs
@@ -54,12 +54,12 @@ public RepositoryProvider()
{
if (e is Octokit.NotFoundException)
{
- Log.Logger()?.ReportDebug($"Can't find {owner}/{repoName}");
+ Log.Logger()?.ReportError($"Can't find {owner}/{repoName}");
}
if (e is Octokit.ForbiddenException)
{
- Log.Logger()?.ReportDebug($"Forbidden access to {owner}/{repoName}");
+ Log.Logger()?.ReportError($"Forbidden access to {owner}/{repoName}");
}
if (e is Octokit.RateLimitExceededException)
@@ -82,13 +82,13 @@ public RepositoryProvider()
{
if (e is Octokit.NotFoundException)
{
- Log.Logger()?.ReportDebug($"DeveloperId {loggedInDeveloperId.LoginId} did not find {owner}/{repoName}");
+ Log.Logger()?.ReportError($"DeveloperId {loggedInDeveloperId.LoginId} did not find {owner}/{repoName}");
continue;
}
if (e is Octokit.ForbiddenException)
{
- Log.Logger()?.ReportDebug($"DeveloperId {loggedInDeveloperId.LoginId} has forbidden access to {owner}/{repoName}");
+ Log.Logger()?.ReportError($"DeveloperId {loggedInDeveloperId.LoginId} has forbidden access to {owner}/{repoName}");
continue;
}