summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author5an7y-Microsoft <[email protected]>2025-08-11 12:05:15 -0700
committerGitHub <[email protected]>2025-08-11 12:05:15 -0700
commitb45d3d65404ac64e3f831c56ed558754d3465e47 (patch)
tree6ffc368a386da82453e2eacf8d60cb13e3ee47c1
parent4f30b7f23e3c0c2a547a3a5cf27087f6bd95c9ad (diff)
parenta0d6b25283bcde2dd8be1ccf40ccec9040d79676 (diff)
Merge pull request #1319 from 5an7y/main
PR to test changes from original branch. No harm done since this is done to my users branch
-rw-r--r--.github/CODEOWNERS2
-rw-r--r--.github/ISSUE_TEMPLATE/sample_issue.yml75
-rw-r--r--.github/ISSUE_TEMPLATE/sample_issue_generator.py72
-rw-r--r--.github/workflows/generate-sample-issue-template.yml37
-rw-r--r--.github/workflows/tag-codeowner-on-issue.yml79
5 files changed, 265 insertions, 0 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index be83c18d..093db174 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -10,6 +10,8 @@
# Windows Implementation Library submodule
/wil/ @microsoft/driver-samples-maintainers
+# Samples
+
# Audio
/audio/ @microsoft/windowsaudio
diff --git a/.github/ISSUE_TEMPLATE/sample_issue.yml b/.github/ISSUE_TEMPLATE/sample_issue.yml
new file mode 100644
index 00000000..4597086a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/sample_issue.yml
@@ -0,0 +1,75 @@
+name: Issue with a sample
+description: Report a problem you have with a specific sample.
+title: '[path/to/sample]: '
+body:
+- type: dropdown
+ id: sample_area
+ attributes:
+ label: Which is the area where the sample lives?
+ description: Select the area where you're experiencing the problem.
+ options:
+ - /TrEE/
+ - /audio/
+ - /avstream/
+ - /bluetooth/
+ - /filesys/cdfs/
+ - /filesys/fastfat/
+ - /filesys/miniFilter/
+ - /general/DCHU/
+ - /general/PLX9x5x/
+ - /general/SimpleMediaSource/
+ - /general/SystemDma/
+ - /general/cancel/
+ - /general/echo/
+ - /general/event/
+ - /general/ioctl/
+ - /general/pcidrv/
+ - /general/perfcounters/
+ - /general/registry/
+ - /general/toaster/
+ - /general/tracing/
+ - /gnss/
+ - /gpio/
+ - /hid/
+ - /input/
+ - /network/config/
+ - /network/modem/
+ - /network/ndis/
+ - /network/radio/
+ - /network/trans/
+ - /network/wlan/
+ - /network/wsk/
+ - /network/wwan/
+ - /nfc/
+ - /pofx/PEP/
+ - /pofx/UMDF2/
+ - /pofx/WDF/
+ - /pos/
+ - /powerlimit/
+ - /print/
+ - /prm/
+ - /sd/
+ - /security/
+ - /sensors/
+ - /serial/
+ - /setup/
+ - /simbatt/
+ - /smartcrd/
+ - /spb/
+ - /storage/
+ - /thermal/
+ - /tools/
+ - /usb/
+ - /video/
+ - /wia/
+ - /wmi/wmiacpi/
+ - /wmi/wmisamp/
+ validations:
+ required: true
+- type: textarea
+ id: description
+ attributes:
+ label: Describe the issue
+ description: Provide a clear and concise description of what the issue is.
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/sample_issue_generator.py b/.github/ISSUE_TEMPLATE/sample_issue_generator.py
new file mode 100644
index 00000000..4b6eee64
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/sample_issue_generator.py
@@ -0,0 +1,72 @@
+import yaml
+import os
+
+# Read the CODEOWNERS file
+codeowners_path = os.path.join(os.path.dirname(__file__), "..", "CODEOWNERS")
+with open(codeowners_path, "r") as file:
+ lines = file.readlines()
+
+# Parse the CODEOWNERS file to extract areas and their paths
+areas = []
+sample_section_found = False
+
+for line in lines:
+ line = line.strip()
+ if line.startswith("# Samples"):
+ sample_section_found = True
+ continue
+
+ if sample_section_found:
+ if line.startswith("#"):
+ continue
+ elif line:
+ path, codeowner = line.split()
+ if path in areas:
+ raise ValueError(f"Path:{path} has been found two times inside CODEOWNERS file")
+ areas.append(path)
+
+
+# Sort the areas in lexicographical order
+areas = sorted(areas)
+
+# Generate the YAML structure
+yaml_form = {
+ "name": "Issue with a sample",
+ "description": "Report a problem you have with a specific sample.",
+ "title": "[path/to/sample]: ",
+ "body": []
+}
+
+dropdown = {
+ "type": "dropdown",
+ "id": "sample_area",
+ "attributes": {
+ "label": "Which is the area where the sample lives?",
+ "description": "Select the area where you're experiencing the problem.",
+ "options": areas
+ },
+ "validations": {
+ "required": True
+ }
+}
+
+# Add a description field
+description_field = {
+ "type": "textarea",
+ "id": "description",
+ "attributes": {
+ "label": "Describe the issue",
+ "description": "Provide a clear and concise description of what the issue is."
+ },
+ "validations": {
+ "required": True
+ }
+}
+
+yaml_form["body"].append(dropdown)
+yaml_form["body"].append(description_field)
+
+# Write the YAML to a file
+output_path = os.path.join(os.path.dirname(__file__), "sample_issue.yml")
+with open(output_path, "w") as outfile:
+ yaml.dump(yaml_form, outfile, sort_keys=False)
diff --git a/.github/workflows/generate-sample-issue-template.yml b/.github/workflows/generate-sample-issue-template.yml
new file mode 100644
index 00000000..e0a60173
--- /dev/null
+++ b/.github/workflows/generate-sample-issue-template.yml
@@ -0,0 +1,37 @@
+name: Generate Sample Issue Template
+
+on:
+ push:
+ paths:
+ - '.github/CODEOWNERS'
+ pull_request:
+ paths:
+ - '.github/CODEOWNERS'
+
+
+jobs:
+ generate-template:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install dependencies
+ run: pip install pyyaml
+
+ - name: Run the generator script
+ run: python .github/ISSUE_TEMPLATE/sample_issue_generator.py
+
+ - name: Commit and push changes
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+ git add .github/ISSUE_TEMPLATE/sample_issue.yml
+ git commit -m "Auto-generate sample issue template from CODEOWNERS" || echo "No changes to commit"
+ git push origin HEAD:${{ github.head_ref }}
diff --git a/.github/workflows/tag-codeowner-on-issue.yml b/.github/workflows/tag-codeowner-on-issue.yml
new file mode 100644
index 00000000..ec7524ac
--- /dev/null
+++ b/.github/workflows/tag-codeowner-on-issue.yml
@@ -0,0 +1,79 @@
+name: Tag Codeowner on Sample Issue
+
+on:
+ issues:
+ types: [opened]
+
+jobs:
+ tag-codeowner:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install dependencies
+ run: pip install pyyaml requests
+
+ - name: Extract selected path and tag codeowner
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ python3 - <<EOF
+ import os
+ import re
+ import requests
+
+ issue_body = """${{ github.event.issue.body }}"""
+ selected_path = None
+
+ # Try to extract the selected path from the issue body
+ match = re.search(r'### Which is the area where the sample lives\?\s*\n(.+)', issue_body, re.MULTILINE)
+ if match:
+ selected_path = match.group(1).strip()
+
+ if not selected_path:
+ print("No sample path found in issue body.")
+ exit(0)
+
+ # Read CODEOWNERS
+ with open(".github/CODEOWNERS", "r") as f:
+ lines = f.readlines()
+
+ codeowner = None
+ sample_section = False
+ for line in lines:
+ line = line.strip()
+ if line.startswith("# Samples"):
+ sample_section = True
+ continue
+ if sample_section:
+ if line.startswith("#") or not line:
+ continue
+ path, owner = line.split()
+ if path == selected_path:
+ codeowner = owner
+ break
+
+ if codeowner is None:
+ print(f"No codeowner found for path: {selected_path}")
+ exit(0)
+
+ # Post a comment tagging the owner
+ comment = f"{codeowner} can you please take a look at this issue related to {selected_path}?"
+ repo = os.environ['GITHUB_REPOSITORY']
+ token = os.environ['GITHUB_TOKEN']
+
+ url = f"https://api.github.com/repos/{repo}/issues/${{ github.event.issue.number }}/comments"
+ headers = {
+ "Authorization": f"Bearer {token}",
+ "Accept": "application/vnd.github.v3+json"
+ }
+ response = requests.post(url, headers=headers, json={"body": comment})
+ print("Comment posted:", response.status_code, response.text)
+ EOF