Skip to content

demo repo for generating documentation using Gen AI.

License

Notifications You must be signed in to change notification settings

kevinevans1/genai_wiki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— 
  β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•    β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—
  β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—         β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘
  β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•         β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘
  β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—       β–ˆβ–ˆβ•‘   β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•
   β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β•β•       β•šβ•β•    β•šβ•β•β•β•β•β• 

   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— 
  β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—
  β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘
  β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘
  β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•
   β•šβ•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β•  β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• 

Building an AI-Powered Infrastructure Wiki with GitHub Copilot

Azure GitHub Copilot MCP Discord Podcast

TL;DR: This blog demonstrates how to use GitHub Copilot (Opus 4.5) with Azure MCP servers to automatically generate comprehensive infrastructure documentation from live Azure resourcesβ€”turning natural language prompts into a full wiki in minutes.


πŸ“– What Is This?

This repository showcases a practical approach to automating infrastructure documentation using generative AI. Instead of manually documenting Azure resources, we use GitHub Copilot to query live infrastructure and generate:

  • Architecture diagrams
  • Resource inventories
  • Integration guides
  • Operational runbooks
  • Dependency maps

The result? A complete infrastructure wiki generated through 6 conversational prompts.


🎯 Who Is This For?

Developers

  • Learn how AI assistants can accelerate documentation tasks
  • Understand patterns for integrating GitHub Copilot into your workflow
  • See practical examples of prompt engineering for infrastructure tasks

Platform Engineers

  • Discover how to auto-generate documentation for Azure landing zones
  • Explore patterns for maintaining living documentation
  • Learn RBAC requirements for AI-assisted infrastructure queries

DevOps / SRE Teams

  • Automate runbook generation from existing infrastructure
  • Keep documentation synchronized with actual deployments
  • Reduce documentation debt with AI assistance

πŸ› οΈ Prerequisites

Before you can replicate this workflow, ensure you have the following set up:

Option 1: GitHub Codespaces (Recommended)

The fastest way to get startedβ€”no local setup required:

Open in GitHub Codespaces

What's included:

  • Ubuntu minimal base image
  • Azure CLI pre-installed
  • GitHub Copilot + Azure MCP extensions
  • 2 vCPU / 4GB RAM / 16GB storage (Codespaces Lite)

After launch, just authenticate:

az login --use-device-code

Option 2: Local Development

Tools Required

Tool Purpose macOS Windows
VS Code Development environment brew install --cask visual-studio-code winget install Microsoft.VisualStudioCode
GitHub Copilot AI assistant (with Chat enabled) Subscribe Subscribe
Azure CLI Azure authentication brew install azure-cli winget install Microsoft.AzureCLI
Azure MCP Extension Copilot-to-Azure integration Install via VS Code Extensions Install via VS Code Extensions

Quick Install (Copy & Paste)

macOS (Homebrew):

brew install --cask visual-studio-code
brew install azure-cli

Windows (winget):

winget install Microsoft.VisualStudioCode
winget install Microsoft.AzureCLI

MCP Servers Used

This workflow leverages the Model Context Protocol (MCP) to connect GitHub Copilot with Azure services:

MCP Server Capabilities Used For
Azure Resource Graph Query resources across subscriptions Discovering and inventorying resources
Azure Resource Manager List subscriptions, resource groups Navigation and scoping
Azure CLI Integration Execute az commands Authentication and advanced queries

Azure RBAC Requirements

To run the prompts in this guide, your Azure identity needs the following permissions:

Role Scope Purpose
Reader Subscription or Resource Group Query resource metadata and configurations
Resource Graph Reader Subscription Execute Azure Resource Graph queries

Minimum Required: Reader role at the resource group level is sufficient for documentation generation.

Assigning RBAC (if needed)

# Assign Reader role at resource group scope
az role assignment create \
  --assignee <your-user-or-service-principal-id> \
  --role "Reader" \
  --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>

Authentication Setup

# Login to Azure CLI
az login

# Verify your subscription access
az account list --output table

# Set your target subscription
az account set --subscription "<subscription-name-or-id>"

πŸš€ The Prompt Journey

We generated this entire wiki using just 6 natural language prompts. See the complete prompt sequence, what GitHub Copilot did at each step, and lessons learned:

Highlights:

  • Progressive discovery from subscription β†’ resource group β†’ detailed docs
  • Iterative refinement of architecture diagrams
  • Single prompt that generated 12 documentation files

πŸ“š Generated Documentation

The following wiki was auto-generated by GitHub Copilot from the rg-artagent-voice-agent-dev resource group:

Section Description
Architecture Overview System design and component relationships
Data Flow How data moves through the system
Resource Inventory Complete Azure resource listing
Integration Guides Service integration patterns
Azure AI Integration AI Services configuration
Communication Services ACS setup and usage
Dependencies Runtime and service dependencies
Deployment Runbook Deployment procedures
Troubleshooting Guide Common issues and solutions

πŸ—οΈ The Documented Architecture

This wiki documents a Real-Time Audio Voice Agent infrastructureβ€”a fictional scenario showcasing typical Azure AI workloads:

What the Architecture Does

The Real-Time Audio Voice Agent enables:

  • 🎀 Real-time voice conversations with AI-powered agents
  • πŸ”Š Speech-to-text and text-to-speech processing
  • πŸ“ž Voice calling capabilities via Azure Communication Services
  • πŸ“§ Email integration for notifications and follow-ups
  • πŸ’¬ Web chat interface as an alternative interaction channel

High-Level Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              πŸ‘€ CLIENT LAYER                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚       🌐 Web Browser            β”‚    β”‚       πŸ“ž Phone / PSTN           β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚                                      β”‚
                    β–Ό                                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     πŸ“¦ AZURE CONTAINER APPS ENVIRONMENT                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚      Frontend       β”‚  β”‚      Backend        β”‚  β”‚      WebChat        β”‚      β”‚
β”‚  β”‚   (rtaudio-client)  │─▢│   (rtaudio-server)  │◀─│      (Demo UI)      β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                       β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β–Ό                            β–Ό                            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ€– AZURE AI SERVICES β”‚  β”‚ πŸ“‘ COMMUNICATION SVC  β”‚  β”‚   βš™οΈ PLATFORM SERVICES    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ AI Foundry Hub      β”‚  β”‚ β€’ Communication Svc   β”‚  β”‚ β€’ Key Vault               β”‚
β”‚ β€’ AI Project          β”‚  β”‚ β€’ Email Services      β”‚  β”‚ β€’ App Configuration       β”‚
β”‚ β€’ Speech Services     β”‚  β”‚ β€’ PSTN Integration    β”‚  β”‚ β€’ Container Registry      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“– Detailed diagrams available in docs/architecture/overview.md


🌐 Network Architecture

This section details the networking configuration discovered by querying the live Azure resources.

Network Topology Summary

Aspect Configuration Notes
VNet Integration ❌ Not configured Container Apps Environment uses public networking
Private Endpoints ❌ None deployed All services use public endpoints
NSGs ❌ Not applicable No custom VNet = no NSG requirements
Subnets ❌ Not applicable Managed by Azure Container Apps

⚠️ Development Environment: This architecture uses public networking suitable for dev/test. Production deployments should implement VNet integration and private endpoints.

Service Endpoints & Access

Container Apps (Compute Layer)

Service FQDN Port External
Frontend <frontend-app>.<environment-id>.eastus2.azurecontainerapps.io 8080 βœ… Yes
Backend <backend-app>.<environment-id>.eastus2.azurecontainerapps.io 8000 βœ… Yes
WebChat <webchat-app>.<environment-id>.eastus2.azurecontainerapps.io 3001 βœ… Yes

Container Apps Environment

Property Value
Static IP <static-ip-address>
Default Domain <environment-id>.eastus2.azurecontainerapps.io
Public Network Access Enabled
VNet Configuration None (Azure-managed networking)
Zone Redundancy Disabled
mTLS Disabled

Data Services Network Configuration

Service Type Public Access Private Endpoints Network Rules
Key Vault kv-<suffix> Enabled None RBAC Authorization enabled
Storage Account st<suffix> Enabled None Bypass: AzureServices, Default: Allow
AI Services <project><suffix>aif Enabled None None
Redis Enterprise redis<suffix> Enabled None TLS 1.2 minimum
Cosmos DB (Mongo) cosmos-cluster-<suffix> Enabled None None

Redis Enterprise Details

Property Value
Host <redis-name>.eastus2.redis.azure.net
Port 10000
SKU MemoryOptimized_M10
Redis Version 7.4
High Availability Enabled
Redundancy Zone Redundant (ZR)
TLS Version 1.2+
Access Keys Auth Disabled (Entra ID)

Cosmos DB Mongo Cluster Details

Property Value
Connection String mongodb+srv://<user>:<password>@<cluster-name>.mongocluster.cosmos.azure.com/
Server Version 8.0
SKU M30
Storage 128 GB
High Availability Disabled
Replication Role Primary

πŸ’‘ Key Takeaways

What We Learned

  1. Natural Language Works β€” Conversational prompts like "what's in this resource group?" are effective for infrastructure discovery

  2. Progressive Discovery β€” Start broad (subscription) and narrow down (resource group β†’ specific resources)

  3. Iterative Refinement β€” Diagrams and documentation improve through follow-up prompts

  4. Context Matters β€” Providing LLM instruction files (.github/copilot-instructions.md) improves future AI interactions

Limitations to Consider

  • AI-generated docs should be reviewed for accuracy
  • Sensitive information (keys, connection strings) must be filtered
  • Complex architectures may need multiple prompt iterations
  • Real-time data means docs can become stale

πŸ”„ Try It Yourself

Quick Start

  1. Clone this repo to see the generated output
  2. Review the Prompt Journey to understand the process
  3. Set up prerequisites (see above)
  4. Run these prompts against your own Azure infrastructure:
1. "Do we have access to Azure? List my subscriptions and resource groups."

2. "What resources are in [your-resource-group]?"

3. "Create a wiki documenting [resource-group] with architecture diagrams, 
    resource inventory, integration guides, dependencies, runbooks, 
    and LLM instruction files following best practices."

4. [Iterate on specific sections as needed]

πŸ“Š Results Summary

Metric Value
Total Prompts 6
Files Generated 13
Azure Queries 6
Documentation Pages 10
Time to Generate ~15 minutes

πŸ” Security Considerations

When using AI to document infrastructure:

  • βœ… Reader-only access is sufficientβ€”no write permissions needed
  • βœ… No secrets exposed β€” AI queries metadata, not secret values
  • βœ… Audit trail β€” All queries go through Azure Resource Graph
  • ⚠️ Review outputs β€” Ensure no sensitive resource names are shared publicly

πŸ“ Repository Structure

β”œβ”€β”€ README.md                           # This file (blog/guide)
β”œβ”€β”€ PROMPT_JOURNEY.md                   # Detailed prompt documentation
β”œβ”€β”€ .github/
β”‚   └── copilot-instructions.md         # GitHub Copilot context file
└── docs/                               # Generated wiki documentation
    β”œβ”€β”€ architecture/
    β”œβ”€β”€ resources/
    β”œβ”€β”€ integrations/
    β”œβ”€β”€ dependencies/
    └── runbooks/

🀝 Contributing

Found this useful? Have improvements?

  • ⭐ Star this repo if you found it helpful
  • πŸ› Open an issue for questions or suggestions
  • πŸ”€ Submit a PR with improvements to the prompts or documentation

See CONTRIBUTING.md for guidelines.


πŸ“œ License

This project is licensed under the MIT License. Feel free to use, modify, and share.


✍️ Author

Kevin Evans β€” Code to Cloud

Built with GitHub Copilot (Claude Opus 4.5) + Azure MCP Servers β€” February 2026

About

demo repo for generating documentation using Gen AI.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors