Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions .github/skills/weekly-demo-video/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
name: weekly-demo-video
license: MIT
metadata:
version: "1.0"
description: >-
Generate narrated weekly demo videos for azd features. Pulls latest commits,
identifies demo-worthy features, researches PRs, and produces MP4 videos with
dark-themed slides and neural TTS narration.

INVOKES: Python, Pillow, ffmpeg, edge-tts, explore sub-agents, ask_user.

USE FOR: weekly demo, generate demo video, demo video, sprint demo, create demo,
make demo video, demo for LT, weekly demo video, azd demo.
DO NOT USE FOR: general video editing, non-azd demos, slide decks without video,
weekly reports (use weekly-report).
---

# Weekly Demo Video Generator

Generates narrated MP4 demo videos for azd features using Python + Pillow + edge-tts + ffmpeg.

## Prerequisites

Ensure these tools are installed:

| Tool | Purpose |
|------|---------|
| Python 3 | Script execution |
| Pillow | Slide generation (`pip install Pillow`) |
| ffmpeg | Video/audio stitch |
| edge-tts | Neural TTS (`pip install edge-tts`) |

Verify prerequisites (bash):

```bash
python3 -c "from PIL import Image; print('ok')"
ffmpeg -version
edge-tts --list-voices > /dev/null
```

## Execution Flow

### Step 1: Pull latest

```bash
cd <repo-root> # the azure-dev repository root
git checkout main && git pull --rebase
```

### Step 2: Find commits for the week

Replace the dates below with the actual week range:

```bash
git log --oneline --since="YYYY-MM-DD" --until="YYYY-MM-DD" --no-merges
```

Use the current week window (7 days). For sprint demos, use a 2-week window.

### Step 3: Identify demo-worthy features

Group related commits. Skip: typos, CI fixes, test-only, deps bumps, docs-only.
Look for: new commands, UX improvements, perf gains, new flags, agent features.

Use explore agents in parallel to research each feature group (give them specific commit SHAs).

### Step 4: Confirm with user

Present a table of proposed demos. Ask user to confirm or adjust before generating.

### Step 5: Generate videos

Follow the conventions strictly:

{{ references/CONVENTIONS.md }}

### Step 6: Report

List generated videos with filenames and durations. Offer short descriptions for docs.

## Error Handling

- **edge-tts failure**: Retry once. If it fails again, log the error and skip that slide's audio — notify the user.
- **ffmpeg failure**: Check the ffmpeg error output. Common issues: missing codec, invalid image path. Print the error and stop — don't produce a partial video.
- **Font not found**: Falls back to `ImageFont.load_default()` automatically. Warn the user that slides may look different.

## Output

All videos go to: `<repo-root>/demo-video/`

> **Note:** `demo-video/` is listed in `.gitignore` to prevent accidental commits.

## Demo Naming

- **Weekly demos**: `azd_weekly_demo_{date}_{name}.mp4` (e.g. `azd_weekly_demo_may_07_exegraph.mp4`)
- **Sprint demos**: `azd_sprint_demo_{date}_{name}.mp4` (e.g. `azd_sprint_demo_apr_28_agent_sessions.mp4`)

83 changes: 83 additions & 0 deletions .github/skills/weekly-demo-video/references/CONVENTIONS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Video Conventions

These rules MUST be followed for all demo videos.

## Pipeline

| Step | Tool | Details |
|------|------|---------|
| Slides | Python + Pillow | Generate 1920×1080 PNG images |
| Narration | `edge-tts` | `--voice en-US-GuyNeural --rate=+5%`, free neural TTS, no API key |
| Audio convert | `ffmpeg` | MP3 → WAV per slide |
| Per-slide video | `ffmpeg` | `-loop 1 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p` |
| Concatenate | `ffmpeg` | `-f concat -safe 0` with file list |

Pronunciation fix: `re.sub(r'\bazd\b', 'AZ-D', text, flags=re.IGNORECASE)` — applied to narration strings ONLY.

## Video Rules

| Rule | Details |
|------|---------|
| Resolution | 1920×1080 |
| Duration | Under 2-3 minutes |
| Audio padding | +0.8s silence after each slide's narration |
| PR references | NEVER mention PR numbers in videos |
| End slide | Always end with "Give it a try." + links |
| --no-prompt | Frame as built for AI agents (Copilot CLI, Claude, Gemini), NOT generic CI |
| Slide text | Lowercase `azd` always (phonetic `AZ-D` in narration only) |

## Color Palette

| Name | RGB | Usage |
|------|-----|-------|
| Background | `(15, 17, 23)` | Slide background |
| Text | `(230, 237, 243)` | Body text |
| Accent blue | `(88, 166, 255)` | Titles, labels, `→` lines |
| Green | `(63, 185, 80)` | Success, `$` prompts, `✓` lines, terminal dot |
| Red | `(248, 81, 73)` | Errors, terminal dot |
| Yellow | `(210, 153, 34)` | Warnings, section headers (`##`), terminal dot |
| Dim | `(125, 133, 144)` | Subtitles, comments, footers |
| Code BG | `(22, 27, 34)` | Code block background |
| Divider | `(48, 54, 61)` | Horizontal rule on content slides |

## Fonts

| Platform | Body | Code |
|----------|------|------|
| macOS | `/System/Library/Fonts/SFNS.ttf` | `/System/Library/Fonts/SFNSMono.ttf` |
| Windows | `C:/Windows/Fonts/arial.ttf` | `C:/Windows/Fonts/consola.ttf` |
| Fallback | `ImageFont.load_default()` | `ImageFont.load_default()` |

## Code Block Rendering

- Rounded rectangle with `radius=12`, filled with Code BG
- Terminal dots at top-left (red, yellow, green circles, 14px, spaced 22px)
- Syntax coloring by line prefix:
- `#` or `//` → Dim (comment)
- `$` → Green (shell prompt)
- `error`/`fail` → Red
- `warning` → Yellow
- `✓`/`success` → Green
- `>`/`→` → Accent blue
- Mono font at 18px, line height 28px

## Slide Types

### Title Slide
- "azure developer cli" label top center (accent blue, font 22)
- Large title centered (text color, font 52)
- Subtitle in dim (font 26)
- Optional bullet items with `→` prefix (font 28, 50px spacing)
- Date footer bottom center (dim, font 20)

### Content Slide
- Title top-left in accent blue (font 40)
- Horizontal divider line at y=115
- Bullet points with `•` prefix (font 24, 42px spacing)
- Lines starting with `##` render as yellow section headers (font 26)
- Optional code block positioned at bottom (min y=480)

### End Slide
- Title in accent blue centered (font 48)
- "Give it a try." below (text color, font 36)
- `aka.ms/azd • github.com/Azure/azure-dev` footer (dim, font 22)
109 changes: 109 additions & 0 deletions .github/skills/weekly-report/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
---
name: weekly-report
license: MIT
metadata:
version: "1.0"
description: >-
Generate weekly executive reports for the azd team. Pulls PR/issue/release
data from GitHub, reads changelogs, combines with team notes, and produces
a polished markdown report.

INVOKES: gh CLI, jq, git CLI, explore sub-agents, ask_user.

USE FOR: weekly report, exec report, status update, team update, weekly
summary, generate report, report time.
DO NOT USE FOR: demo videos (use weekly-demo-video), release changelogs
(use changelog-generation), general docs, PRs.
---

# Weekly Executive Report Generator

Generates weekly executive reports for the Azure Developer CLI (azd) team leadership.

## Prerequisites

| Tool | Purpose |
|------|---------|
| `gh` | GitHub CLI — authenticated with repo access |
| `jq` | JSON filtering for release queries |
| `git` | Repository data |

## Report Format (strict order)

```
📝 TLDR
📊 Metrics
⚠️ Risks + Blockers
🎯 Changelog
📋 This Week
🔜 Next Week
🚩 Learnings
🔥 Demos/Links
```

## Execution Flow

### Step 1: Confirm date range

Cadence is **Thursday to Thursday**. Confirm with the user if unclear.

### Step 2: Pull repo data

Replace `START` and `END` below with the dates from Step 1.

```bash
cd <repo-root> # the azure-dev repository root
git checkout main && git pull --rebase
```

**PRs merged:**
```bash
gh pr list --repo Azure/azure-dev --state merged --search "merged:START..END" --limit 200 --json number,title,mergedAt
```

**Issues closed:**
```bash
gh issue list --repo Azure/azure-dev --state closed --search "closed:START..END" --limit 200 --json number,title,closedAt
```

**Releases:**
```bash
gh api repos/Azure/azure-dev/releases --paginate | jq '[.[] | select(.published_at >= "START" and .published_at <= "END") | {name, tag_name, published_at}]'
```
Comment thread
rajeshkamal5050 marked this conversation as resolved.

### Step 3: Read changelogs

Changelog data is maintained by the `changelog-generation` skill.

- Core: `cli/azd/CHANGELOG.md`
- Agents: `cli/azd/extensions/azure.ai.agents/CHANGELOG.md`
- Finetuning: `cli/azd/extensions/azure.ai.models/CHANGELOG.md`

### Step 4: Wait for team notes

Do NOT assemble the report until the user provides team notes from emails, Teams, meetings, etc.
Only product and engineering content.

### Step 5: Assemble report

Combine repo data with team notes. Follow all rules below.

### Step 6: Iterate

Expect 5–15 rounds of edits. Apply changes surgically. After removals, check for related content elsewhere (risks → next week → learnings → TLDR) and offer to clean up.

## Output

Save reports to the Copilot CLI session workspace (`~/.copilot/session-state/<session-id>/files/`) as `weekly-report-{month}{startday}-{endday}.md`.

## Section Rules

{{ references/SECTION-RULES.md }}

## Tone and Style

{{ references/TONE-RULES.md }}

## Example Report

Use the latest completed report in the session files as a format reference.
56 changes: 56 additions & 0 deletions .github/skills/weekly-report/references/SECTION-RULES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Section Rules

## 📝 TLDR
- **Single paragraph**, narrative style. Not bullets or headlines.
- Lead with what matters most that week.
- Include feature/extension shipping highlights.
- End with numbers (PRs, issues, releases).
- Don't claim things are "shipped" when they're WIP/exploratory.
- Don't overstate commitment level (e.g., "targeting Build" → "being explored").

## 📊 Metrics
- Always placeholder: `_// metrics owner to add_`

## ⚠️ Risks + Blockers
- Start with 2–3 items. Expect the user to trim.
- Don't overstate risks. Don't include risks from other teams.
- Distinguish GA blockers from future improvements.

## 🎯 Changelog

Structure:
1. **Releases table** — Release name, version, date
2. **By the numbers** — core releases, extension releases, issues closed, PRs merged
3. **Key Changes** — grouped by area (Core, Extension Framework, Extensions — Agents, Extensions — Finetuning, Quality & CI, Docs)

Rules:
- Keep it short, only highlighting important changes.
- Include PR links: `[#NNNN](https://github.com/Azure/azure-dev/pull/NNNN)`

## 📋 This Week

Subsections (use what's relevant):
- Core
- Extensions — Agents
- Extensions — Finetuning
- Extension Framework
- Bugs & Reliability
- Testing
- Docs & Content
- Planning & Priorities ← **always last**

Rules:
- "Agent Developer Experience" is the correct naming (not "Agent UX").
- Planning items framed as WIP discussions, not firm decisions.

## 🔜 Next Week
- Highlight priorities from team notes and iteration board.
- Tag GA priorities explicitly.

## 🚩 Learnings
- 2–3 items. Practical, not aspirational.
- Expect the user to add/remove.

## 🔥 Demos/Links
- Format: Bold title on one line, `[Demo Recording](url)` on next line.
- Wait for the user to provide demo links.
12 changes: 12 additions & 0 deletions .github/skills/weekly-report/references/TONE-RULES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Tone and Style Rules

| Rule | Details |
|------|---------|
| Voice | Clear and direct. Short sentences. Avoid AI-generated tone. |
| Names | No individual names in the report. |
| Scope | Only product and engineering content. |
| Shipped vs WIP | Be precise. Don't claim features are shipped when they're exploratory or WIP. |
| Hype words | Avoid: "turning point", "game changer", "material", "meaningful", "significant milestone". |
| Severity | Don't overstate. If something is a concern but not critical, say so. |
| Commitment | Use "being explored" not "targeting". "Early discussions" not "decided". |
| Framing | Planning items are discussions in progress, not firm decisions. |
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,6 @@ cli/azd/cover_*
review-*.diff

.playwright-mcp/

# Demo video output
demo-video/