name: update-samples description: Update the samples data file by fetching sample metadata from the microsoft/aspire-samples GitHub repository. Use when adding new samples, refreshing sample data, or ensuring samples.json stays in sync with the upstream repo.
Update Samples Data
This skill synchronizes the samples data file with the microsoft/aspire-samples GitHub repository. It enumerates all sample projects in the samples/ directory, fetches each sample's README.md, and generates a structured JSON catalog.
Overview
The aspire.dev site maintains a data file for samples:
src/frontend/src/data/samples.json— Sample metadata including titles, descriptions, tags, deep links, and README content extracted from the upstream repo.
This skill keeps that file in sync with the microsoft/aspire-samples repository on GitHub.
Prerequisites
- Node.js installed and available on
PATH - Working directory is the repository root
- The frontend project dependencies are installed (
pnpm installinsrc/frontend/) - Optional:
GITHUB_TOKENenvironment variable for higher GitHub API rate limits
Step-by-Step Process
1. Run the update script
Fetch the latest sample data from the GitHub API:
cd src/frontend && node scripts/update-samples.js
This writes updated sample metadata to src/frontend/src/data/samples.json. The script queries the GitHub Contents API for directories in microsoft/aspire-samples/samples/, fetches each sample's README.md, and extracts structured metadata.
2. What the script does
For each subdirectory in samples/:
-
Lists directories — Calls the GitHub Contents API to enumerate entries in
samples/and filters to directories only (skipping files likeglobal.json,Directory.Build.props). -
Fetches README.md — Downloads the raw README.md for each sample directory.
-
Extracts metadata from the README:
name— The directory name (e.g.,aspire-shop)title— Extracted from the first# headingin the READMEdescription— The first paragraph of body text after the title (before any##heading)
href— Deep link to the sample on GitHub:https://github.com/microsoft/aspire-samples/tree/main/samples/{name}readme— The full Markdown content of the README.md, with image paths rewritten to local assets (see below)tags— Auto-detected tags based on technologies, languages, services, and features mentioned in the README and directory namethumbnail— Local asset path to the first image referenced in the README (if any), ornull
-
Downloads images — For each image referenced in the README (
):- Resolves the remote URL (relative paths are resolved against the GitHub raw content URL)
- Downloads the image to
src/frontend/src/assets/samples/{name}/{filename} - Rewrites the image reference in the README to use the local asset path:
~/assets/samples/{name}/{filename} - This ensures images are bundled with the site and served locally rather than hotlinked from GitHub
-
Writes output — Saves the result as a sorted JSON array to
src/frontend/src/data/samples.json.
3. Tag detection
Tags are automatically inferred from the README content and sample name. The script detects:
Languages
| Tag | Matched by |
|---|---|
csharp | C#, .NET references |
python | Python references |
javascript | JavaScript references |
node | Node.js references |
go | Go/Golang references |
Services & Technologies
| Tag | Matched by |
|---|---|
redis | Redis references |
postgresql | PostgreSQL, Postgres, Npgsql references |
sql-server | SQL Server, MSSQL references |
mysql | MySQL references |
mongodb | MongoDB references |
rabbitmq | RabbitMQ references |
kafka | Kafka references |
prometheus | Prometheus references |
grafana | Grafana references |
docker | Docker, container references |
Azure Services
| Tag | Matched by |
|---|---|
azure | Azure references |
azure-functions | Azure Functions references |
azure-storage | Azure Storage references |
azure-service-bus | Azure Service Bus references |
Frameworks & Features
| Tag | Matched by |
|---|---|
blazor | Blazor references |
orleans | Orleans references |
grpc | gRPC references |
ef-core | Entity Framework Core references |
metrics | Metrics, OpenTelemetry references |
health-checks | Health check references |
containers | Container build/deployment references |
databases | Database-related references |
migrations | Database migration references |
volumes | Volume mount references |
dashboard | Dashboard references |
4. Output format
The output samples.json is a JSON array with entries like:
[
{
"name": "aspire-shop",
"title": "Aspire Shop",
"description": "The app consists of four .NET services including a Blazor frontend, catalog API, catalog database manager, and basket service.",
"href": "https://github.com/microsoft/aspire-samples/tree/main/samples/aspire-shop",
"readme": "# Aspire Shop\n\n...",
"tags": ["csharp", "blazor", "postgresql", "redis", "grpc", "ef-core"],
"thumbnail": "~/assets/samples/aspire-shop/aspireshop-frontend-complete.png"
}
]
5. Manual review
After running the script:
- Review new entries — Verify titles and descriptions are meaningful
- Check tags — The auto-detection may miss niche technologies; manually add tags if needed
- Verify thumbnails — Ensure image URLs resolve correctly
- Remove stale samples — The script automatically handles this since it rebuilds from source
6. Environment variables
| Variable | Required | Description |
|---|---|---|
GITHUB_TOKEN | No | GitHub personal access token for higher API rate limits (60 → 5000 requests/hour) |
7. Integration with build
The script is registered as an npm script in src/frontend/package.json:
pnpm update:samples
It is also included in the update:all aggregate script so it runs alongside other data updates during builds.