Skip to content

devartifex/copilot-updates

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 repo-local Copilot skill 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 Skill 🤖              │
  │        (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

This repository is the skill. Clone or symlink it to ~/.copilot/skills/copilot-updates/ to use it from any project. The skill supplies workflow knowledge; the Python scripts in scripts/ do the heavy lifting.

Important: generated artifacts are written to the current working directory where you invoke the skill, not to the skill folder itself. That means the skill will create output/ and .pptx files in the project or folder you are currently working in.


📸 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 Optional for chat-based usage

Choose how you want to use the skill

You can use copilot-updates in two different ways:

Option 1 — Use it inside the cloned repository

Use this mode when you want to work directly in this repo.

  • Clone the repository anywhere you like
  • Open Copilot in this repository
  • Run the pipeline from this repository root

In this mode, generated files are written inside this repo's working folder:

  • .\output\raw\
  • .\output\{locale}\...
  • generated .pptx files in the repo root

Option 2 — Use it from outside the repository

Use this mode when you want the skill available from any project folder.

  • Keep one clone of this repo somewhere on disk
  • Register that clone under your user skills folder
  • Invoke the skill while working in another folder or project

In this mode, generated files are written to the folder where you invoke the skill, not to the repo that contains the skill:

  • C:\work\demo\output\raw\
  • C:\work\demo\output\{locale}\...
  • generated .pptx files in C:\work\demo\

Configure Option 2 — install as a global Copilot skill

# Clone to your user skills directory
git clone https://github.com/g-mercuri/copilot-updates ~/.copilot/skills/copilot-updates

# Or symlink an existing clone
ln -s /path/to/copilot-updates ~/.copilot/skills/copilot-updates

On Windows (PowerShell):

New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.copilot\skills\copilot-updates" -Target "C:\path\to\copilot-updates"

Install Python dependencies

Run this once for the clone that contains the skill scripts:

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

⬆ back to top


📖 Usage

Option A — Copilot Skill ✨ (recommended)

VS Code

If you are using Option 1, open Copilot Chat in this repository and ask Copilot to use the /copilot-updates skill.

If you are using Option 2, open Copilot in the project folder where you want the output to be created, and then invoke the skill there.

Copilot CLI

This repository is a self-contained Copilot skill (SKILL.md at the root).

  • Option 1: run Copilot from this repo root if you want output written here
  • Option 2: run Copilot from another folder if you want output written there

You can ask in natural language, or invoke it explicitly:

Run the copilot-updates pipeline
for copilot articles
from 2026-02-01 to 2026-02-25
in italian
Use the /copilot-updates skill to create a weekly GitHub changelog presentation
for copilot,actions
from 2026-02-01 to 2026-02-25
in italian

In Copilot CLI, use /skills list to confirm the skill is available and /skills reload after editing skill files.

Warning

Check which folder you are currently in before invoking the skill. The pipeline writes output/raw/, output/{locale}/..., and the generated .pptx to your current working directory.

Example: if you run Copilot from C:\work\demo, the skill writes files under C:\work\demo\output\... and creates the presentation there.

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 skill orchestrates the full pipeline end-to-end:

Fetch → Prepare → Summarize → Validate → Index → PowerPoint

In practice, the important boundary is:

  • scripts/fetch_articles.py, scripts/process_articles.py, and scripts/create_pptx.py do the deterministic work
  • the skill reads output/batch.json, writes each processed article file under output/{locale}/..., and then resumes the scripted pipeline
  • before validation, every target_file in output/batch.json should exist on disk

Tip

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


Option B — Manual CLI

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

# All labels
python scripts/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 scripts/process_articles.py --prepare --locale en \
  --from-date 2026-02-01 --to-date 2026-02-25

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

Then verify that every target_file listed in output/batch.json exists, and continue:

python scripts/process_articles.py --validate --locale en
python scripts/process_articles.py --index --locale en

[!TIP] --prepare only builds output/batch.json. It does not generate translated summaries by itself.

[!TIP] If you write summaries manually, assemble the full file: front matter, # title, optional ![hero](...), ---, then the structured body. Validation may pass even if a file is missing from the expected date range, so it is worth checking the batch manifest before generating the deck.

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 scripts/create_pptx.py --locale it --from-date 2026-02-01 --to-date 2026-02-25
More examples & flags
python scripts/create_pptx.py --label copilot
python scripts/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 scripts/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/                          # Root IS the skill folder
├── SKILL.md                              # Skill definition (entry point)
├── scripts/
│   ├── fetch_articles.py                 # Stage 1 — Web scraper
│   ├── process_articles.py               # Stage 2 — Batch planning, validation, indexing
│   ├── create_pptx.py                    # Stage 3 — PowerPoint generator
│   ├── config.yaml                       # Centralized configuration
│   ├── pyproject.toml                    # Python dependencies
│   └── imgs/                             # Fallback hero images
├── references/                           # Summary format guides (loaded by SKILL.md)
│   ├── summarize-new-releases.md
│   ├── summarize-improvements.md
│   ├── summarize-deprecations.md
│   └── translate-content.md
├── docs/imgs/                            # README screenshots
├── output/                               # Generated artifacts (git-ignored)
│   ├── raw/                              # Scraped raw articles
│   └── {locale}/                         # Processed articles per language
├── README.md
├── LICENSE
└── .github/
    ├── copilot-instructions.md           # Repo-wide Copilot rules
    └── skills/
        └── make-skill-template/          # Skill scaffolding utility

🤝 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 scripts/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 skill and Python pipeline.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages