-
Notifications
You must be signed in to change notification settings - Fork 1
AI-powered Terraform Module Diagram Automation #927
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…rver/graph.dot .dot ✨
…s for Terraform modules
🦋 Changeset detectedLatest commit: 145e93d The changes in this PR will be included in the next version bump. This PR includes changesets to release 28 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
.github/workflows/_release-terraform-graph-generation-ci.yaml
Dismissed
Show dismissed
Hide dismissed
Diagram preview for module in infra/modules/azure_federated_identity_with_github graph LR
subgraph Continuous Deployment
cdFedCred["Federated Identity Credential CD GitHub"]
cdIdentity["User Assigned Identity CD"]
cdRoleRg["Role Assignment CD Resource Group"]
cdRoleSub["Role Assignment CD Subscription"]
cdRg["Resource Group CD Details"]
end
subgraph Continuous Integration
ciFedCred["Federated Identity Credential CI GitHub"]
ciIdentity["User Assigned Identity CI"]
ciRoleRg["Role Assignment CI Resource Group"]
ciRoleSub["Role Assignment CI Subscription"]
ciRg["Resource Group CI Details"]
end
cdFedCred --> cdIdentity
cdRoleRg --> cdRg
cdRoleRg --> cdIdentity
cdRoleSub --> cdIdentity
ciFedCred --> ciIdentity
ciRoleRg --> ciRg
ciRoleRg --> ciIdentity
ciRoleSub --> ciIdentity
|
📋 Pre-commit Output Log
Generated on Fri Sep 26 15:22:12 UTC 2025 |
Diagram preview for module in infra/modules/azure_function_app graph LR
subgraph Function Apps
FunctionApp["Linux Function App"]
FunctionAppSlot["Linux Function App Slot"]
ServicePlan["Service Plan"]
end
subgraph Storage Accounts
DurableFunctionStorage["Durable Function Storage"]
StandardStorage["Storage Account"]
NetworkRulesStandardStorage["Storage Account Network Rules"]
NetworkRulesDurableStorage["Durable Function Storage Network Rules"]
end
subgraph Networking
VirtualNetwork["Virtual Network"]
Subnet["Subnet"]
PrivateEndpointFunctionSites["Private Endpoint Function Sites"]
PrivateEndpointStorageBlob["Private Endpoint Storage Blob"]
PrivateEndpointStorageFile["Private Endpoint Storage File"]
PrivateEndpointStorageQueue["Private Endpoint Storage Queue"]
PrivateEndpointStagingFunctionSites["Private Endpoint Staging Function Sites"]
PrivateEndpointDurableBlob["Private Endpoint Durable Function Blob"]
PrivateEndpointDurableFile["Private Endpoint Durable Function File"]
PrivateEndpointDurableQueue["Private Endpoint Durable Function Queue"]
PrivateEndpointDurableTable["Private Endpoint Durable Function Table"]
end
subgraph DNS Zones
DNSFunctionApp["Private DNS Zone Function App"]
DNSStorageBlob["Private DNS Zone Storage Blob"]
DNSStorageFile["Private DNS Zone Storage File"]
DNSStorageQueue["Private DNS Zone Storage Queue"]
DNSStorageTable["Private DNS Zone Storage Table"]
end
subgraph Monitoring
AlertFunctionAppHealth["Metric Alert Function App Health Check"]
AlertStorageHealth["Metric Alert Storage Account Health Check"]
end
subgraph Role Assignments
RAFSDurableBlobContributor["Durable Function Storage Blob Data Contributor"]
RAFSDurableQueueContributor["Durable Function Storage Queue Data Contributor"]
RAFSDurableTableContributor["Durable Function Storage Table Data Contributor"]
RAFunctionStorageAccountContributor["Function Storage Account Contributor"]
RAFSBlobDataOwner["Function Storage Blob Data Owner"]
RAFSQueueContributor["Function Storage Queue Data Contributor"]
RAFSStagingDurableBlobContributor["Staging Durable Function Storage Blob Data Contributor"]
RAFSStagingDurableQueueContributor["Staging Durable Function Storage Queue Data Contributor"]
RAFSStagingDurableTableContributor["Staging Durable Function Storage Table Data Contributor"]
RAFSStagingStorageAccountContributor["Staging Function Storage Account Contributor"]
RAFSStagingBlobDataOwner["Staging Function Storage Blob Data Owner"]
RAFSStagingQueueDataContributor["Staging Function Storage Queue Data Contributor"]
end
FunctionApp --> PrivateEndpointStorageBlob
FunctionApp --> PrivateEndpointStorageFile
FunctionApp --> PrivateEndpointStorageQueue
FunctionApp --> ServicePlan
FunctionApp --> DurableFunctionStorage
FunctionApp --> Subnet
FunctionAppSlot --> FunctionApp
AlertFunctionAppHealth --> FunctionApp
AlertStorageHealth --> StandardStorage
PrivateEndpointFunctionSites --> DNSFunctionApp
PrivateEndpointFunctionSites --> FunctionApp
PrivateEndpointStorageBlob --> DNSStorageBlob
PrivateEndpointStorageBlob --> StandardStorage
PrivateEndpointStorageFile --> DNSStorageFile
PrivateEndpointStorageFile --> StandardStorage
PrivateEndpointStorageQueue --> DNSStorageQueue
PrivateEndpointStorageQueue --> StandardStorage
PrivateEndpointStagingFunctionSites --> DNSFunctionApp
PrivateEndpointStagingFunctionSites --> FunctionAppSlot
PrivateEndpointDurableBlob --> DNSStorageBlob
PrivateEndpointDurableBlob --> DurableFunctionStorage
PrivateEndpointDurableFile --> DNSStorageFile
PrivateEndpointDurableFile --> DurableFunctionStorage
PrivateEndpointDurableQueue --> DNSStorageQueue
PrivateEndpointDurableQueue --> DurableFunctionStorage
PrivateEndpointDurableTable --> DNSStorageTable
PrivateEndpointDurableTable --> DurableFunctionStorage
RAFSDurableBlobContributor --> FunctionApp
RAFSDurableQueueContributor --> FunctionApp
RAFSDurableTableContributor --> FunctionApp
RAFunctionStorageAccountContributor --> FunctionApp
RAFSBlobDataOwner --> FunctionApp
RAFSQueueContributor --> FunctionApp
RAFSStagingDurableBlobContributor --> FunctionAppSlot
RAFSStagingDurableQueueContributor --> FunctionAppSlot
RAFSStagingDurableTableContributor --> FunctionAppSlot
RAFSStagingStorageAccountContributor --> FunctionAppSlot
RAFSStagingBlobDataOwner --> FunctionAppSlot
RAFSStagingQueueDataContributor --> FunctionAppSlot
NetworkRulesStandardStorage --> FunctionApp
NetworkRulesDurableStorage --> FunctionApp
Subnet --> VirtualNetwork
|
This PR introduces a fully automated mechanism for generating and maintaining architecture diagrams for Terraform modules using AI. Key changes include:
convert-mermaid-into-svg
for converting Mermaid diagrams to SVG.download-artifact
action to makefile_path
optional..dot
files, uses Azure Foundry (GPT-4o mini) to convert Terraform-generated DOT graphs into Mermaid diagrams, and posts results as Artifact.CD workflow
: Download the artifact when PR is closed, injects generated Mermaid diagrams into the correspondingREADME.md
files and opens a new PR with the updates.generate-terraform-graphs.sh
) to generate.dot
files for changed modules, integrated into the pre-commit hook.README.md
files to include a dedicated "Diagram" section with trigger for the generated Mermaid diagrams..dot
for each module, so when this PR will be merged all generated mermaid will be added into a new PR.Resolves: CES-1166