Skip to content

devartifex/copilot-updates

Repository files navigation


Copilot Updates

Turn GitHub changelog articles into polished, presentation-ready slides — automatically.


Built with GitHub Copilot Python 3.11+ License: MIT


GitHub stars GitHub last commit GitHub issues


Fetch · Summarize · Translate · Present — in under 5 minutes.


Why  ·   How  ·   Demo  ·   Quick Start  ·   Usage  ·   Config  ·   Contribute


🎯 The Opportunity

GitHub ships product updates every single week — across Copilot, Actions, Security, and more.

For any team that tracks these changes, the same recurring challenge surfaces: how do you stay on top of everything, and share what matters with your audience in a meaningful way?

Today, the answer is usually manual:

  • 📰 Someone reads through dozens of changelog articles
  • 🔍 Picks what's relevant for their team or audience
  • ✍️ Writes summaries, formats slides, repeats this every week

That's hours of low-leverage work — done by people who should be doing something harder.


✨ How It Works

This repository is a working AI pipeline powered by a Copilot agent that orchestrates everything — it calls Python scripts for deterministic work (scraping, validation, indexing, slide generation) and uses AI only for what requires it: writing structured summaries and speaker notes. The result is a polished, multilingual PowerPoint presentation — automatically.

  ┌──────────────────────────────────────┐
  │        Copilot Agent 🤖              │
  │        (orchestrator)                │
  │                                      │
  │  1. fetch_articles.py                │
  │     └─ scrape github.blog/changelog  │
  │                                      │
  │  2. process_articles.py --prepare    │
  │     └─ plan batch from raw articles  │
  │                                      │
  │  3. AI summarization                 │
  │     └─ generate summaries + notes    │
  │                                      │
  │  4. process_articles.py --validate   │
  │     └─ check output format           │
  │                                      │
  │  5. process_articles.py --index      │
  │     └─ build index.md                │
  │                                      │
  │  6. create_pptx.py                   │
  │     └─ assemble final slides         │
  └──────────────┬───────────────────────┘
                 ▼
          📊 presentation.pptx

⏱️ Time saved per week

Task Before After
Read & filter articles ~60 min 0
Write summaries ~5 min × N 0
Translate content ~2 hrs/lang 0
Format slides ~30 min 0
Total 3–4 hrs < 5 min

Note

The Copilot agent drives the entire pipeline — you just provide dates, labels, and language. It handles the six steps end-to-end.


📸 Example Output

Every generated presentation uses a dark GitHub-themed design (16:9 widescreen) with four slide types:

Title Slide

Title slide

Date range, active label filters, and source

Section Divider

Section divider

Category header with article count

Article Hero

Article hero slide

Article title with hero image and date

Summary

Summary slide

Structured content with source link & speaker notes

Tip

Summaries and speaker notes can be generated in any language. Article titles and technical terms always stay in English.

⬆ back to top


🚀 Getting Started

Prerequisites

Requirement Notes
Python 3.11+ Core runtime
VS Code + GitHub Copilot For agent mode (optional for CLI usage)

Installation

uv sync
💡 Alternative: plain venv / pip
python -m venv .venv
.venv\Scripts\Activate.ps1   # Windows
source .venv/bin/activate    # macOS / Linux
pip install .

⬆ back to top


📖 Usage

Option A — Copilot Agent ✨ (recommended)

VS Code

Open Copilot Chat in Agent mode, then select copilot-updates from the agent dropdown.

Copilot CLI

Just ask in natural language:

Run the copilot-updates pipeline
for copilot articles
from 2026-02-01 to 2026-02-25
in italian

You'll be prompted for:

Input Example Description
startDate 2026-02-01 Start of the date range
endDate 2026-02-25 End of the date range
labels copilot,actions or all Which changelog labels to include
language italian, english, spanish Output language for summaries

The agent orchestrates the full pipeline end-to-end:

Fetch → Prepare → Summarize → Validate → Index → PowerPoint

Tip

Re-running for the same date range is safe — both the scraper and the agent skip articles that already have output files.


Option B — Manual CLI

1️⃣ Fetch raw articles
python fetch_articles.py --labels copilot --from-date 2026-02-01 --to-date 2026-02-25
More examples & flags
# Multiple labels
python fetch_articles.py --labels copilot,actions,client-apps --from-date 2026-02-01 --to-date 2026-02-25

# All labels
python fetch_articles.py --labels all --from-date 2026-02-01 --to-date 2026-02-25
Flag Default Description
--labels, -L copilot Comma-separated label slugs, or all
--from-date required Start date (YYYY-MM-DD)
--to-date required End date (YYYY-MM-DD)
--output-dir, -d output/ Output directory
2️⃣ Process articles
python process_articles.py --prepare --validate --index --locale en \
  --from-date 2026-02-01 --to-date 2026-02-25

Between --prepare and --validate, run the Copilot agent (or write summaries manually) to generate the structured article files.

Flags
Flag Default Description
--prepare Scan raw files and produce output/batch.json
--validate Validate processed article files
--index Generate/update index.md
--locale, -l en Locale code
--from-date (none) Start date filter (YYYY-MM-DD)
--to-date (none) End date filter (YYYY-MM-DD)
--labels, -L (all) Comma-separated label slugs to filter
--output-dir, -d output/ Output directory
3️⃣ Generate the PowerPoint
python create_pptx.py --locale it --from-date 2026-02-01 --to-date 2026-02-25
More examples & flags
python create_pptx.py --label copilot
python create_pptx.py --label copilot,actions --categories new-release,improvement
Flag Default Description
--output-dir, -d output/ Root directory containing locale subfolders
--locale, -l en Locale subfolder to read from
--output, -o auto-generated Output .pptx filename
--from-date auto-detected Start date filter
--to-date auto-detected End date filter
--label, -L (all) Comma-separated label slugs to filter by
--categories, -c (all) Comma-separated categories: new-releases, improvements, deprecations

⬆ back to top


⚙️ Configuration

All labels, categories, colors, and defaults live in config.yaml.

📋 Supported labels (13 labels)
Slug Display Name
account-management Account Management
actions Actions
application-security Application Security
client-apps Client Apps
collaboration-tools Collaboration Tools
community-engagement Community Engagement
copilot Copilot
ecosystem-and-accessibility Ecosystem & Accessibility
enterprise-management-tools Enterprise Management Tools
platform-governance Platform Governance
projects-and-issues Projects & Issues
supply-chain-security Supply Chain Security
universe25 Universe '25
📄 Article format

Each processed article follows this markdown structure:

---
title: "Article Title"
date: "2026-02-15"
type: "new-releases"
labels: ["copilot", "client-apps"]
image_url: "https://github.blog/wp-content/uploads/..."
article_url: "https://github.blog/changelog/2026-02-15-slug"
---

# Article Title

![hero](https://github.blog/wp-content/uploads/...)

---

## What's new

One-liner with **key product/feature** and **status**.

### Why it matters
- **Key benefit 1** — short explanation
- **Key benefit 2** — short explanation

### Where you can use it
- **Platform 1** — details

### Who gets it
- Plans, rollout info

<!-- speaker_notes: Speaker notes in the target language (5–8 sentences). -->

The ## heading varies by type: What's new (new-releases), What changed (improvements), What's deprecated (deprecations).

⬆ back to top


📂 Project Structure

copilot-updates/
├── .github/
│   ├── agents/
│   │   └── copilot-updates.agent.md       # Copilot agent — 6-step orchestration
│   └── prompts/                           # AI summarization prompt templates
├── imgs/                                  # Fallback hero images + slide examples
├── output/                                # Generated artifacts (git-ignored)
│   ├── raw/                               # Scraped raw articles (language-independent)
│   └── {locale}/                          # Processed articles per language
│       ├── index.md
│       ├── new-releases/
│       ├── improvements/
│       └── deprecations/
├── config.yaml                            # Centralized configuration
├── fetch_articles.py                      # Stage 1 — Web scraper
├── process_articles.py                    # Stage 2 — Batch planning, validation, indexing
├── create_pptx.py                         # Stage 3 — PowerPoint generator
└── pyproject.toml                         # Project metadata & dependencies

🤝 Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes
  4. Open a Pull Request

Important

When adding new categories or labels, update config.yaml — all scripts read it at startup.

⬆ back to top


🙏 Credits

Special thanks to @congiuluc for conceiving and inspiring this solution.

Built entirely with GitHub Copilot.


MIT License · Made with ❤️ and 🤖

About

Fetch GitHub changelog articles for any label and generate dark-themed PowerPoint presentations, powered by a Copilot agent and Python pipeline.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages