Skip to content

Commit 9391ffe

Browse files
committed
skills catalog
1 parent f9769ad commit 9391ffe

690 files changed

Lines changed: 65398 additions & 2376 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.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: Catalog maintenance
2+
description: Propose an update to an existing catalog package, skill, agent, manifest, or contributor-facing docs.
3+
title: "[catalog-maintenance] "
4+
labels:
5+
- catalog
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
Use this form for updates to existing catalog content.
11+
12+
Quick routing:
13+
14+
- package metadata and upstream links -> `catalog/<type>/<package>/manifest.json`
15+
- skill metadata -> `catalog/<type>/<package>/skills/<skill>/manifest.json`
16+
- skill guidance -> `catalog/<type>/<package>/skills/<skill>/SKILL.md`
17+
- repo-owned routing agent -> `catalog/<type>/<package>/agents/<agent>/AGENT.md`
18+
- contributor workflow or site wording -> `README.md`, `CONTRIBUTING.md`, `scripts/generate_pages.py`, or GitHub templates
19+
- type: input
20+
id: package_path
21+
attributes:
22+
label: Catalog package path
23+
description: Example: `catalog/Tools/Roslynator/`
24+
placeholder: catalog/<type>/<package>/
25+
validations:
26+
required: true
27+
- type: dropdown
28+
id: change_kind
29+
attributes:
30+
label: What needs to change
31+
options:
32+
- manifest metadata
33+
- skill guidance
34+
- repo-owned agent
35+
- contributor docs
36+
- public site wording
37+
- upstream watch
38+
- other
39+
validations:
40+
required: true
41+
- type: textarea
42+
id: requested_change
43+
attributes:
44+
label: Requested change
45+
description: Be explicit about what is wrong today and what the corrected catalog shape should be.
46+
validations:
47+
required: true
48+
- type: textarea
49+
id: manifest_details
50+
attributes:
51+
label: Manifest details, if relevant
52+
description: Mention package `links.repository`, `links.docs`, `links.nuget`, or sibling skill/agent `version` / `category` / `packages` / `package_prefix` changes here.
53+
- type: checkboxes
54+
id: rules
55+
attributes:
56+
label: Rules acknowledged
57+
options:
58+
- label: I will not put `version`, `category`, `packages`, or `package_prefix` in `SKILL.md` frontmatter
59+
required: true
60+
- label: I understand that the scanned `catalog/<type>/<package>/` tree is the source of truth
61+
required: true

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: true
2+
contact_links:
3+
- name: Contribution guide
4+
url: https://github.com/managedcode/dotnet-skills/blob/main/CONTRIBUTING.md
5+
about: Read the catalog structure, manifest rules, and validation workflow before opening a contribution issue or PR.
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: New catalog package
2+
description: Propose a new package folder under catalog/<type>/<package>/ for a library, framework, tool, testing surface, or platform skill.
3+
title: "[catalog-package] "
4+
labels:
5+
- catalog
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
Use this form when you want to add a new package to the catalog.
11+
12+
Canonical structure:
13+
14+
- `catalog/<type>/<package>/manifest.json` stores package metadata and upstream links
15+
- `catalog/<type>/<package>/skills/<skill>/SKILL.md` stores routing and implementation guidance
16+
- `catalog/<type>/<package>/skills/<skill>/manifest.json` stores `version`, `category`, `packages`, or `package_prefix` for that concrete skill
17+
- `catalog/<type>/<package>/agents/<agent>/AGENT.md` is optional for repo-owned routing agents
18+
19+
Keep `version`, `category`, `packages`, and `package_prefix` in `manifest.json`, not in `SKILL.md` frontmatter.
20+
- type: dropdown
21+
id: package_type
22+
attributes:
23+
label: Package type
24+
options:
25+
- Frameworks
26+
- Libraries
27+
- Tools
28+
- Testing
29+
- Platform
30+
validations:
31+
required: true
32+
- type: input
33+
id: package_folder
34+
attributes:
35+
label: Package folder name
36+
description: Example: `Roslynator`, `Semantic-Kernel`, `Entity-Framework-Core`
37+
placeholder: Package folder
38+
validations:
39+
required: true
40+
- type: input
41+
id: skill_ids
42+
attributes:
43+
label: Skill ids
44+
description: Comma-separated `dotnet-*` ids you expect under this package
45+
placeholder: dotnet-example, dotnet-example-advanced
46+
validations:
47+
required: true
48+
- type: input
49+
id: repository_url
50+
attributes:
51+
label: Upstream repository URL
52+
description: Put this in the package-level `links.repository`
53+
placeholder: https://github.com/owner/repo
54+
validations:
55+
required: true
56+
- type: input
57+
id: docs_url
58+
attributes:
59+
label: Primary docs URL
60+
description: Put this in the package-level `links.docs`
61+
placeholder: https://learn.microsoft.com/... or project docs URL
62+
- type: input
63+
id: nuget_url
64+
attributes:
65+
label: Representative NuGet package URL
66+
description: Put this in the package-level `links.nuget`
67+
placeholder: https://www.nuget.org/packages/Package.Id
68+
- type: textarea
69+
id: scope
70+
attributes:
71+
label: Why this package needs a dedicated catalog entry
72+
description: Explain the main use cases, boundaries, and why an existing package is not enough.
73+
validations:
74+
required: true
75+
- type: textarea
76+
id: triggers
77+
attributes:
78+
label: Auto-install triggers
79+
description: List the exact NuGet packages or a package prefix that should live in each skill's sibling `manifest.json`.
80+
placeholder: |
81+
dotnet-example -> packages: Example.Core, Example.Hosting
82+
dotnet-example-advanced -> package_prefix: Example.Advanced
83+
validations:
84+
required: true
85+
- type: checkboxes
86+
id: checklist
87+
attributes:
88+
label: Checklist
89+
options:
90+
- label: I checked whether the capability already exists in the catalog
91+
required: true
92+
- label: I understand that package links belong in the package manifest, while trigger metadata belongs in sibling skill manifests
93+
required: true
94+
- label: I understand that `SKILL.md` should focus on routing, workflow, deliverables, and validation
95+
required: true

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## Summary
2+
3+
Describe the catalog change and the user-facing outcome.
4+
5+
## Package Scope
6+
7+
- Catalog package path:
8+
- Skills touched:
9+
- Agents touched:
10+
11+
## Manifest Notes
12+
13+
- package `manifest.json` updates:
14+
- `links.repository`:
15+
- `links.docs`:
16+
- `links.nuget`:
17+
- sibling `skills/<skill>/manifest.json` or `agents/<agent>/manifest.json` changes:
18+
19+
## Validation
20+
21+
- [ ] The change stays inside `catalog/<type>/<package>/` for package-owned content
22+
- [ ] `SKILL.md` frontmatter does not declare `version`, `category`, `packages`, or `package_prefix`
23+
- [ ] Package metadata lives in the package `manifest.json`
24+
- [ ] Skill- or agent-specific metadata lives in the nearest sibling `manifest.json`
25+
- [ ] Agents, if any, live in `catalog/<type>/<package>/agents/<agent>/AGENT.md`
26+
- [ ] I ran `python3 scripts/generate_catalog.py --validate-only`
27+
- [ ] I ran `python3 scripts/generate_agent_catalog.py --validate-only` if agents changed
28+
- [ ] I ran `python3 scripts/generate_pages.py` if contributor-facing site content changed
29+
- [ ] I ran `dotnet build dotnet-skills.slnx -c Release`
30+
- [ ] I ran `dotnet test dotnet-skills.slnx -c Release`
31+
32+
## Contributor Checklist
33+
34+
- [ ] I updated `README.md` or `CONTRIBUTING.md` if the contributor workflow or catalog structure changed
35+
- [ ] I added or updated upstream watch entries if the package needs release or docs monitoring

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
Use `AGENTS.md` as the repository-wide source of truth for workflow, catalog structure, release policy, and skill maintenance rules.
44

5-
This repository's canonical skill source lives in `skills/`. When project-local Copilot skills are installed, they should be placed in `.github/skills/`.
5+
This repository's human-maintained catalog source lives under `catalog/<type>/<package>/` with package `manifest.json`, nested `skills/*/SKILL.md`, and nested `agents/*/AGENT.md`. When project-local Copilot skills are installed, they should be placed in `.github/skills/`.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
{
2+
"github_releases": [],
3+
"documentation": [
4+
{
5+
"id": "dotnet-skills-main-head",
6+
"source": "https://api.github.com/repos/dotnet/skills/commits/main",
7+
"name": "dotnet/skills main branch",
8+
"issue_key": "official-dotnet-skills-upstream",
9+
"issue_name": "Review official dotnet/skills upstream update",
10+
"notes": "Review vendir.lock.yml, sync upstreams/dotnet-skills via vendir, rerun scripts/import_external_catalog_sources.py, then regenerate catalog outputs and verify the imported official skills and agents.",
11+
"skills": [
12+
"configuring-opentelemetry-dotnet",
13+
"minimal-api-file-upload",
14+
"dotnet-maui-doctor",
15+
"maui-app-lifecycle",
16+
"maui-collectionview",
17+
"maui-data-binding",
18+
"maui-dependency-injection",
19+
"maui-safe-area",
20+
"maui-shell-navigation",
21+
"maui-theming",
22+
"optimizing-ef-core-queries",
23+
"csharp-scripts",
24+
"dotnet-pinvoke",
25+
"nuget-trusted-publishing",
26+
"mcp-csharp-create",
27+
"mcp-csharp-debug",
28+
"mcp-csharp-publish",
29+
"mcp-csharp-test",
30+
"technology-selection",
31+
"exp-assertion-quality",
32+
"exp-dotnet-test-frameworks",
33+
"exp-mock-usage-analysis",
34+
"exp-simd-vectorization",
35+
"exp-test-gap-analysis",
36+
"exp-test-maintainability",
37+
"exp-test-smell-detection",
38+
"exp-test-tagging",
39+
"dotnet-aot-compat",
40+
"migrate-dotnet10-to-dotnet11",
41+
"migrate-dotnet8-to-dotnet9",
42+
"migrate-dotnet9-to-dotnet10",
43+
"migrate-nullable-references",
44+
"thread-abort-migration",
45+
"code-testing-agent",
46+
"coverage-analysis",
47+
"crap-score",
48+
"dotnet-test-frameworks",
49+
"filter-syntax",
50+
"migrate-mstest-v1v2-to-v3",
51+
"migrate-mstest-v3-to-v4",
52+
"migrate-vstest-to-mtp",
53+
"migrate-xunit-to-xunit-v3",
54+
"mtp-hot-reload",
55+
"platform-detection",
56+
"run-tests",
57+
"test-anti-patterns",
58+
"writing-mstest-tests",
59+
"analyzing-dotnet-performance",
60+
"android-tombstone-symbolication",
61+
"clr-activation-debugging",
62+
"dotnet-trace-collect",
63+
"dump-collect",
64+
"microbenchmarking",
65+
"binlog-failure-analysis",
66+
"binlog-generation",
67+
"build-parallelism",
68+
"build-perf-baseline",
69+
"build-perf-diagnostics",
70+
"check-bin-obj-clash",
71+
"directory-build-organization",
72+
"eval-performance",
73+
"including-generated-files",
74+
"incremental-build",
75+
"msbuild-antipatterns",
76+
"msbuild-modernization",
77+
"msbuild-server",
78+
"resolve-project-references",
79+
"convert-to-cpm",
80+
"template-authoring",
81+
"template-discovery",
82+
"template-instantiation",
83+
"template-validation"
84+
]
85+
}
86+
]
87+
}

.github/workflows/catalog-check.yml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,21 @@ jobs:
1818
python-version: "3.12"
1919

2020
- name: Validate automation scripts
21-
run: python3 -m py_compile scripts/generate_catalog.py scripts/generate_agent_catalog.py scripts/generate_release_notes.py scripts/upstream_watch.py
21+
run: python3 -m py_compile scripts/generate_catalog.py scripts/generate_catalog_definitions.py scripts/generate_agent_catalog.py scripts/generate_release_notes.py scripts/import_external_catalog_sources.py scripts/upstream_watch.py
22+
23+
- name: Validate external catalog source config
24+
run: python3 scripts/import_external_catalog_sources.py --validate-config
25+
26+
- name: Normalize vendored external sources
27+
run: python3 scripts/import_external_catalog_sources.py
28+
29+
- name: Verify imported external sources are committed
30+
run: git diff --exit-code -- catalog
2231

2332
- name: Validate catalog source metadata
2433
run: |
2534
python3 scripts/generate_catalog.py --validate-only
26-
python3 scripts/generate_agent_catalog.py --output /tmp/dotnet-agents-manifest.json
35+
python3 scripts/generate_agent_catalog.py --validate-only
2736
2837
- name: Validate upstream watch config
2938
run: python3 scripts/upstream_watch.py --validate-config

.github/workflows/publish-catalog.yml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ env:
2525
DOTNET_SKILLS_SITE_URL: https://skills.managed-code.com/
2626
DOTNET_VERSION: "10.0.x"
2727
SOLUTION_FILE: "dotnet-skills.slnx"
28-
TOOL_PROJECTS: "tools/ManagedCode.DotnetSkills/ManagedCode.DotnetSkills.csproj tools/ManagedCode.DotnetAgents/ManagedCode.DotnetAgents.csproj tools/ManagedCode.Agents/ManagedCode.Agents.csproj"
28+
TOOL_PROJECTS: "cli/ManagedCode.DotnetSkills/ManagedCode.DotnetSkills.csproj cli/ManagedCode.DotnetAgents/ManagedCode.DotnetAgents.csproj cli/ManagedCode.Agents/ManagedCode.Agents.csproj"
2929
PACKAGE_SOURCE: "https://api.nuget.org/v3/index.json"
3030
PACKAGE_OUTPUT_GLOB: "artifacts/nuget/*.nupkg"
3131

@@ -232,13 +232,12 @@ jobs:
232232
shell: bash
233233
run: |
234234
rm -rf artifacts/catalog-release artifacts/catalog-payload
235-
mkdir -p artifacts/catalog-release artifacts/catalog-payload/catalog
236-
cp -R skills artifacts/catalog-payload/skills
237-
cp catalog/skills.json artifacts/catalog-payload/catalog/skills.json
238-
cp catalog/skills.json artifacts/catalog-release/dotnet-skills-manifest.json
235+
mkdir -p artifacts/catalog-release artifacts/catalog-payload
236+
python3 scripts/generate_catalog.py --manifest-output artifacts/catalog-release/dotnet-skills-manifest.json
237+
cp -R catalog artifacts/catalog-payload/catalog
239238
(
240239
cd artifacts/catalog-payload
241-
zip -r ../catalog-release/dotnet-skills-catalog.zip skills catalog
240+
zip -r ../catalog-release/dotnet-skills-catalog.zip catalog
242241
)
243242
244243
- name: Upload packaged catalog artifacts
@@ -331,9 +330,6 @@ jobs:
331330
- name: Generate GitHub Pages payload
332331
run: python3 scripts/generate_catalog.py
333332

334-
- name: Generate agent catalog
335-
run: python3 scripts/generate_agent_catalog.py
336-
337333
- name: Render GitHub Pages
338334
env:
339335
DOTNET_SKILLS_RELEASE_VERSION: ${{ needs.release.outputs.catalog_version }}

0 commit comments

Comments
 (0)