Skip to content

Commit

Permalink
Run WTI to automatically triage github issues (#11329)
Browse files Browse the repository at this point in the history
* Experiment with WTI and GH actions

* Remove condition

* Yml && git push origin wti

* Yml

* Yml

* Yml

* Yml

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Cleanup

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Test integration

* Reduce message size

* Reduce message size

* Clean up download logic

* Yaml

* Yaml

* Yaml

* Yaml

* Yaml

* Yaml

* Yaml

* Update .github/workflows/new_issue.yml

Co-authored-by: Craig Loewen <crloewen@microsoft.com>

* Update triage/config.yml

Co-authored-by: Craig Loewen <crloewen@microsoft.com>

* Review feedback

* Update triggers

---------

Co-authored-by: Craig Loewen <crloewen@microsoft.com>
  • Loading branch information
OneBlue and craigloewen-msft authored Mar 25, 2024
1 parent 6fa4010 commit f558725
Show file tree
Hide file tree
Showing 7 changed files with 708 additions and 34 deletions.
44 changes: 44 additions & 0 deletions .github/actions/triage/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Run automated triage


inputs:
issue:
required: false
type: string
similar_issues_text:
required: false
type: string
comment:
required: false
type: string
token:
required: false
type: string

runs:
using: "composite"
steps:
- name: 'Run WTI'
if: ${{ !contains(inputs.similar_issues_text, '''@') }} # Skip this step if the description contains a string that will break the here document
shell: pwsh
run: |
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Stop
$message = @'
${{ inputs.similar_issues_text }}
'@
$maybe_message = @()
if (![string]::IsNullOrEmpty($message))
{
$maybe_message = @("--default-message-stdin")
}
$maybe_comment = @()
if (![string]::IsNullOrEmpty("${{ inputs.comment }}"))
{
$maybe_comment = @("--comment", "${{ inputs.comment }}")
}
curl.exe -L https://github.com/OneBlue/wti/releases/download/v0.1.1/wti.exe -o triage/wti.exe
cd triage && echo -n $message | .\wti.exe --issue ${{ inputs.issue }} --config config.yml --github-token "${{ inputs.token }}" --ignore-tags @maybe_message @maybe_comment
38 changes: 38 additions & 0 deletions .github/workflows/new_issue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Process new issue

on:
issues:
types: [opened]

jobs:
getSimilarIssues:
runs-on: ubuntu-latest
outputs:
message: ${{ steps.getBody.outputs.message }}
steps:
- uses: actions/checkout@v2
- id: getBody
uses: craigloewen-msft/GitGudSimilarIssues@main
with:
issueTitle: ${{ github.event.issue.title }}
issueBody: ${{ github.event.issue.body }}
repository: ${{ github.repository }}
similarityTolerance: "0.7"
commentBody: |
# View similar issues
Please view the issues below to see if they solve your problem, and if the issue describes your problem please consider closing this one and thumbs upping the other issue to help us prioritize it!
wti:
name: Run wti
needs: getSimilarIssues
runs-on: windows-2022
permissions:
issues: write
steps:
- name: Checkout repo
uses: actions/checkout@v4

- uses: ./.github/actions/triage
with:
similar_issues_text: "${{ needs.getSimilarIssues.outputs.message }}"
issue: "${{ github.event.issue.number }}"
token: ${{ secrets.GITHUB_TOKEN }}
22 changes: 22 additions & 0 deletions .github/workflows/new_issue_comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Process new comment on issue

on:
issue_comment:
types: [created]

jobs:
wti:
name: Run wti
runs-on: windows-2022
permissions:
issues: write
if: ${{ !github.event.issue.pull_request && github.event.issue.user.id == github.event.comment.user.id }}
steps:
- name: Checkout repo
uses: actions/checkout@v4

- uses: ./.github/actions/triage
with:
issue: '${{ github.event.issue.number }}'
comment: '${{ github.event.comment.id }}'
token: ${{ secrets.GITHUB_TOKEN }}
34 changes: 0 additions & 34 deletions .github/workflows/similarissues.yml

This file was deleted.

193 changes: 193 additions & 0 deletions triage/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
wpa_profile: no-filter.wpaProfile

logs_rules:
missing_logs_message: |
# Logs are required for review from WSL team
If this a feature request, please reply with '/feature'. If this is a question, reply with '/question'.
**Otherwise please attach logs by following the instructions below**, your issue will not be reviewed unless they are added. These logs will help us understand what is going on in your machine.
<details>
<summary>How to collect WSL logs</summary>
Download and execute [collect-wsl-logs.ps1](https://github.com/Microsoft/WSL/blob/master/diagnostics/collect-wsl-logs.ps1) in an **administrative powershell prompt**:
```
Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/WSL/master/diagnostics/collect-wsl-logs.ps1" -OutFile collect-wsl-logs.ps1
Set-ExecutionPolicy Bypass -Scope Process -Force
.\collect-wsl-logs.ps1
```
The scipt will output the path of the log file once done.
Once completed please upload the output files to this Github issue.
[Click here for more info on logging](https://github.com/microsoft/WSL/blob/master/CONTRIBUTING.md#8-collect-wsl-logs-recommended-method)
If you choose to email these logs instead of attaching to the bug, please send them to wsl-gh-logs@microsoft.com with the number of the github issue in the subject, and in the message a link to your comment in the github issue and reply with '/emailed-logs'.
</details>
missing_logs_add_tags: ['needs-author-feedback']
skip_tags: ['feature', 'question', 'emailed-logs', 'network']

tags_rules:
- contains: '/question'
tag: 'question'

- contains: '/feature'
tag: 'feature'

- contains: '/emailed-logs'
tag: 'emailed-logs'

rules:
- logline:
provider: Microsoft.Windows.Lxss.Manager
task: GuestLog
field1:
contains: 'brd: module loaded'
set: booting

- logline:
provider: Microsoft.Windows.Lxss.Manager
task: GuestLog
field1:
contains: 'oom-kill'
set:
name: oom
capture:
field1: oom-error

- logline:
provider: Microsoft.Windows.Lxss.Manager
task: GuestLog
field1:
contains: 'Kernel panic'
set:
name: kernel-panic
capture:
field1: kmsg

- logline:
provider: Microsoft.Windows.Lxss.Manager
task: GuestLog
field1:
regex: 'WSL (.*) ERROR'
set: init-error

- logline:
provider: Microsoft.Windows.Subsystem.Lxss
task: UserVisibleError
set:
name: user-visible-error
capture:
field3: error

- logline:
provider: Microsoft-Windows-Hyper-V-Chipset
field1:
regex: '.*biosdevice.*80070057.*' # 80070057 = E_INVALIDARG
set: corrupted-initramfs

- logline:
provider: Microsoft.Windows.Lxss.Manager
task: FailedToStartVm
set:
name: vm-failed-to-start
capture:
field4: error

- logline:
provider: Microsoft.Windows.Lxss.Manager
set: service-running
oneshot: true

- logline:
provider: Microsoft.Windows.Subsystem.Lxss
task: LxssException
field7:
regex: '.*0x80070422.*'
set: service-disabled-error

- logline:
provider: Microsoft.Windows.Subsystem.Lxss
task: UserVisibleError
field3: {regex: '.*/ConfigureNetworking/HNS/.*'}
set:
name: hns-fatal-error
capture:
field3: error


- logline:
provider: Microsoft.Windows.Hyper.V.NetMgmt
task: NetMgmt::CreateVirtualSwitch
field4: '0x80041002'
set:
name: vmswitch-known-issue
capture:
field4: error

- logline:
provider: Microsoft.Windows.Lxss.Manager
task: GuestLog
field1:
contains: 'EXT4-fs error'
set:
name: ext4-error
capture:
field1: error
actions:
- foreach:
var: user-visible-error
debug_message: 'Detected user visible error: $error'

- when:
condition: 'kernel-panic'
debug_message: 'Found evidence of kernel panic: $kmsg'

- when:
condition:
and: ['oom', 'booting']
user_message: 'The logs show that WSL2 ran out of memory. Try increasing wsl2.memory in .wslconfig and see if that solves the issue.'
debug_message: 'Found evidence of OOM kill: $oom-error'
tag: needs-author-feedback

- when:
condition:
and: ['vm-failed-to-start', 'hyperv-firmware-expired']
user_message: 'The logs show that your Hyper-V firmware is expired. Please update your Windows build and see if that solves the issue'
tag: needs-author-feedback

- when:
condition:
and: ['vm-failed-to-start', 'corrupted-initramfs']
user_message: 'Your WSL installation seems corrupted. Please try to download and install the [latest WSL release](https://github.com/microsoft/WSL/releases/latest)'
tag: needs-author-feedback

- when:
condition:
and: [{not: 'service-running'}, 'service-disabled-error']
user_message: 'The logs show that wslservice is disabled. Try to run (elevated command prompt): `sc.exe config wslservice start= demand` and see if that solves the issue'
tag: needs-author-feedback

- when:
condition:
and: ['vm-failed-to-start', 'hns-fatal-error']
user_message: 'An HNS error seems to be causing WSL2 to fail to start. Adding network tag'
debug_message: 'Found HNS error: $error'
tag: 'network'

- when:
condition:
and: ['vm-failed-to-start', 'vmswitch-known-issue']
user_message: 'Known vmswitch issue found (error: $error). Adding network tag'
debug_message: 'Found evidence of vmswitch error: $error'
tag: 'network'

- when:
condition: 'ext4-error'
user_message: 'The logs shows that a disk mount error occured. Try to [follow these repair instructions](https://learn.microsoft.com/en-us/windows/wsl/disk-space#how-to-repair-a-vhd-mounting-error) and see if that solves the issue.'
debug_message: 'Found evidence of ext4 error: $error'
tag: 'needs-author-feedback'
Loading

0 comments on commit f558725

Please sign in to comment.