From 96540384737783d51840ee5ea1840f8148b40b84 Mon Sep 17 00:00:00 2001 From: Mincong Huang Date: Wed, 5 Feb 2025 07:29:04 +0100 Subject: [PATCH 1/2] Add diagram --- docs/diagrams/architecture-overview.png | Bin 0 -> 41607 bytes docs/diagrams/architecture-overview.puml | 62 +++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 docs/diagrams/architecture-overview.png create mode 100644 docs/diagrams/architecture-overview.puml diff --git a/docs/diagrams/architecture-overview.png b/docs/diagrams/architecture-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..40844143c5ea30cc72bd644853d3fb3316a3a924 GIT binary patch literal 41607 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/architecture-overview.puml b/docs/diagrams/architecture-overview.puml new file mode 100644 index 0000000..9023470 --- /dev/null +++ b/docs/diagrams/architecture-overview.puml @@ -0,0 +1,62 @@ +' See https://github.com/plantuml-stdlib/C4-PlantUML +@startuml architecture-overview + +' ----- Vertesia Theme (start) ----- +' See Vertesia Brand Guidelines +' https://drive.google.com/file/d/1iEgOfUqDoSSpXGI1E3ZVo9-C4SR8pcZ9/view +' +' Example of a theme: +' https://github.com/plantuml-stdlib/C4-PlantUML/blob/master/themes/puml-theme-C4_violet.puml + +skinparam defaultFontName "Inter Tight" + +!$PERSON_FONT_COLOR = "#000000" +!$PERSON_BG_COLOR = "#F69E0C" +!$PERSON_BORDER_COLOR = "#000000" + +!$CONTAINER_BG_COLOR = "#0047BB" +!$CONTAINER_BORDER_COLOR = "#000000" + +!$SYSTEM_BG_COLOR = "#7815C2" + +!$EXTERNAL_SYSTEM_FONT_COLOR = "#666666" +!$EXTERNAL_SYSTEM_BG_COLOR = "#E8EDF9" +!$EXTERNAL_CONTAINER_FONT_COLOR = "#666666" +!$EXTERNAL_CONTAINER_BG_COLOR = "#E8EDF9" +' ----- Vertesia Theme (end) ----- + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + + +title GitHub Architecture + +HIDE_STEREOTYPE() + +AddElementTag("service_account", $bgColor="#1E9EA6", $fontColor="#FFFFFF", $borderColor="#000000") + +Person(composable_users, "User", "Vertesia users and staff") +System_Ext(service_account, "Service Account", "Integration for GitHub", $sprite="robot2", $tags="service_account") + +System_Boundary(sys_composable, "Vertesia") { + System_Boundary(sys_composable_nginx, "https://github.vertesia.dev") { + Container(composable_github_server, "GitHub Server", "", "Webhook for GitHub.") + } + Container(composable_github_worker, "GitHub Agent", "", "Temporal worker for GitHub.") +} + +System_Boundary(sys_temporal, "https://cloud.temploral.io") { + ContainerDb_Ext(temporal_server, "Temporal", "", "Workflow engine.") +} + +' Clients +composable_users <---> composable_github_server +service_account <---> composable_github_server + +service_account -[hidden]r-> composable_users + +' Backend +composable_github_server -r-> composable_github_worker +composable_github_server <-d-> temporal_server +composable_github_worker <-d-> temporal_server +@enduml \ No newline at end of file From ed69a449a9a0700f7abbfabdf8eaa7fca4abf13f Mon Sep 17 00:00:00 2001 From: Mincong Huang Date: Wed, 5 Feb 2025 07:29:46 +0100 Subject: [PATCH 2/2] Add diagram --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 90827f3..d7a66a3 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This projects demonstrates the integration of GitHub Agent into the Composable as a collection of Agentic Workflows. +![Architecture Overview Diagram](docs/diagrams/architecture-overview.png) + ## Prerequisites * You need to have access to Google Cloud project `dengenlabs` to fetch certificates for connecting to Temporal Cloud.