diff --git a/README.asciidoc b/README.asciidoc index 365192753..28f1fa7bf 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -1,6 +1,231 @@ # devonfw Hangar -### Use case: Quarkus/Node.js/Angular-based project hosted and with CI/CD on Azure DevOps, and deployed on either AWS EKS or Azure AKS. +## What is Hangar? + +image::documentation/assets/Takeoff.png[] + +Capgemini offers a simple, Open Source, solution with which the teams and clients can create a complete Cloud based Dev & Run environment with a single command or executable. + +We define a “Cloud based Dev & Run environment” as a subscription at a public cloud provider (Google Cloud, AWS, Microsoft Azure) to develop, deploy, run and manage software applications on a sophisticated infrastructure that is owned and provided by the cloud provider and managed as a single entity by the client or Capgemini. + +image::documentation/assets/Takeoff2.png[] + +The environment contains everything which is needed for the development, continuous integration and deployment, provisioning, orchestration and monitoring of the application and dependent resources. It also includes all services needed for (financial) management and administration of the subscription/environment itself. + +The resulting environment has a fully working full-stack example application in source code form which is automatically compiled and build in the same environment. + +This asset can be used to accelerate and industrialize to a large extent Cloud based development + +## How to use Hangar? + +Hangar consists on a series of Scripts & Templates that can be used in different ways: + +- Directly calling the scripts. You can find more information of each of the functionalities and example uses cases in their corresponding documentation. + +- Calling the scripts inside the All-in-one Docker image, which includes the installation of all the necessary toolkits. You can find more information on https://github.com/devonfw/hangar/blob/master/setup/README.asciidoc[how to setup and use the image]. + +- Using the Takeoff CLI or GUI which provides a simpler and user-friendly interface for creating and managing projects. TODO + +## Features + +### Accounts & Projects Management + +image::documentation/diagrams/Hangar-Accounts-Projects.png[] + +[cols="1,2,1"] +|=== +|Provider|Feature|Documentation + +|GCloud +|Create a GCloud Project +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-project.asciidoc[Docs] + +|GCloud +|Create a Principal Account +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-account-iam.asciidoc[Docs] + +|GCloud +|Verify Account Roles +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-account-iam.asciidoc#check-roles-and-permissions-of-a-principal[Docs] + +|GCloud +|Setup Firebase & Maps +|https://github.com/devonfw/hangar/blob/master/documentation/firebase/setup-firebase.asciidoc[Docs] + +|Azure DevOps +|Create a DevOps Project +|https://github.com/devonfw/hangar/blob/feature/improve-main-documentation/documentation/azure-devops/setup-project.asciidoc[Docs] + +|AWS +|Create an AWS Project User +|https://github.com/devonfw/hangar/blob/feature/improve-main-documentation/documentation/aws/setup-aws-account-iam-for-eks.asciidoc[Docs] + +|AWS +|Verify User Roles +|https://github.com/devonfw/hangar/blob/feature/improve-main-documentation/documentation/aws/setup-aws-account-iam-for-eks.asciidoc#check-iam-user-permissions[Docs] + +|=== + +### Kubernetes Clusters Provisioning + +image::documentation/diagrams/Hangar-Kubernetes.png[] + +[cols="1,2,1"] +|=== +|Provider|Feature|Documentation + +|GCloud +|Provision Kubernetes Cluster on GCloud (GKE) +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-gke-provisioning-pipeline.asciidoc[Docs] + +|AWS +|Provision Kubernetes Cluster on Azure (EKS) +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-aks-provisioning-pipeline.asciidoc[Docs] + +|Azure +|Provision Kubernetes Cluster on AWS (AKS) +|TODO + +|=== + +### Repository Management + +image::documentation/diagrams/Hangar-Repository.png[] + +[cols="1,2,1"] +|=== +|Provider|Feature|Documentation + +|GCloud +|Repository Management on GCloud +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-repository-script.asciidoc[Docs] + +|Azure DevOps +|Repository Management on Azure DevOps +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-repository-script.asciidoc[Docs] + +|GitHub +|Repository Management on GitHub +|https://github.com/devonfw/hangar/blob/master/documentation/github/setup-repository-script.asciidoc[Docs] + +|=== + + +### SonarQube Provisioning + +image::documentation/diagrams/Hangar-SonarQube.png[] + +[cols="1,2,1"] +|=== +|Provider|Feature|Documentation + +|GCloud +|SonarQube Deployment on GCloud +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-sonarqube-instance.asciidoc[Docs] + +|AWS +|SonarQube Deployment on AWS +|https://github.com/devonfw/hangar/blob/master/documentation/aws/setup-sonarqube-instance.asciidoc[Docs] + +|=== + + +### CI/CD Pipelines Provisioning + +image::documentation/diagrams/Hangar-PipelinesCI_CD.png[] + +[cols="1,2,1"] +|=== +|Provider|Feature|Documentation + +|GCloud +|Build Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-build-pipeline.asciidoc[Docs] + +|GCloud +|Test Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-test-pipeline.asciidoc[Docs] + +|GCloud +|Quality Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-quality-pipeline.asciidoc[Docs] + +|GCloud +|Package Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-package-pipeline.asciidoc[Docs] + +|GCloud +|Cloud Run Deploy Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/setup-deploy-cloud-run-pipeline.asciidoc[Docs] + +|GCloud +|Kubernetes (GKE) Deploy Pipeline +|TODO + +|Azure DevOps +|Build Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-build-pipeline.asciidoc[Docs] + +|Azure DevOps +|Test Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-test-pipeline.asciidoc[Docs] + +|Azure DevOps +|Quality Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-quality-pipeline.asciidoc[Docs] + +|Azure DevOps +|Package Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-package-pipeline.asciidoc[Docs] + +|Azure DevOps +|Kubernetes Deploy Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-deploy-pipeline.asciidoc[Docs] + +|GitHub +|Build Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/github/setup-build-pipeline.asciidoc[Docs] + +|GitHub +|Test Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/github/setup-test-pipeline.asciidoc[Docs] + +|GitHub +|Quality Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/github/setup-quality-pipeline.asciidoc[Docs] + +|GitHub +|Package Pipeline +|https://github.com/devonfw/hangar/blob/master/documentation/github/setup-package-pipeline.asciidoc[Docs] + +|GitHub +|Kubernetes Deploy Pipeline +|TODO + +|=== + +### Quickstarts + +image::documentation/diagrams/Hangar-Quickstart.png[] + + +[cols="1,2,1"] +|=== +|Provider|Feature|Documentation + +|GCloud +|Wayat Backend Quickstart +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/quickstart-wayat-backend.asciidoc[Docs] + +|GCloud +|Wayat Frontend Quickstart +|https://github.com/devonfw/hangar/blob/master/documentation/gcloud/quickstart-wayat-frontend.asciidoc[Docs] + +|=== + +## Practical Use Cases + +### Quarkus/Node.js/Angular-based project hosted and with CI/CD on Azure DevOps, and deployed on either AWS EKS or Azure AKS. * https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-project.asciidoc[Setup Azure DevOps project] * https://github.com/devonfw/hangar/blob/master/documentation/aws/setup-aws-account-iam-for-eks.asciidoc[Setup AWS account IAM for deployment in EKS] @@ -22,7 +247,7 @@ ** https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-deploy-pipeline.asciidoc[Setting up a Deploy Pipeline] ** Setup Basic Monitoring and Logging [TBD, https://github.com/devonfw/hangar/issues/14[#14]] -### Use case: Quarkus/Node.js/Angular-based project hosted and with CI/CD on GitHub, and deployed on either AWS EKS or Azure AKS. +### Quarkus/Node.js/Angular-based project hosted and with CI/CD on GitHub, and deployed on either AWS EKS or Azure AKS. * https://github.com/devonfw/hangar/blob/master/documentation/aws/setup-aws-account-iam-for-eks.asciidoc[Setup AWS account IAM for deployment in EKS] * https://github.com/devonfw/hangar/blob/master/documentation/github/setup-repository-script.asciidoc[Setting up a repository on GitHub] @@ -42,3 +267,31 @@ *** https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-eks-provisioning-pipeline.asciidoc[Setting up a EKS provisioning workflow] *** https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-aks-provisioning-pipeline.asciidoc[Setting up a AKS provisioning workflow] ** https://github.com/devonfw/hangar/blob/master/documentation/azure-devops/setup-deploy-pipeline.asciidoc[Setting up a Deploy workflow] + +### QuickStart Wayat with Firebase on GCloud + +CAUTION: If this is your first time using Firebase you need to MANUALLY accept the terms and conditions of usage. + +image::documentation/assets/Firebase1.png[] + +In order to do so, you need to visit https://console.firebase.google.com[this page] and create your first project. + +image::documentation/assets/Firebase2.png[] + +Please make sure that you mark both checkboxes accepting Firebase Conditions. + +image::documentation/assets/Firebase3.png[] + +It is not necessary to use Google Analytics on this project, as you will be able to delete it later. + +The important thing here is that once you accept the terms and conditions for the first time you will be able to create new Firebase Projects using Hangar scripts without issues. + +## License(s) + +Copyright 2022 Capgemini + +The source code on this site is licensed under the Apache Public License 2.0. See LICENSE for details. + +++++ +Creative Commons License
The documentation (not the source code) available on this site is licensed under a Creative Commons Attribution 4.0 International License. +++++ diff --git a/documentation/assets/Firebase1.png b/documentation/assets/Firebase1.png new file mode 100644 index 000000000..8ed243bfe Binary files /dev/null and b/documentation/assets/Firebase1.png differ diff --git a/documentation/assets/Firebase2.png b/documentation/assets/Firebase2.png new file mode 100644 index 000000000..b603747e3 Binary files /dev/null and b/documentation/assets/Firebase2.png differ diff --git a/documentation/assets/Firebase3.png b/documentation/assets/Firebase3.png new file mode 100644 index 000000000..f02c9c5b9 Binary files /dev/null and b/documentation/assets/Firebase3.png differ diff --git a/documentation/assets/Takeoff.png b/documentation/assets/Takeoff.png new file mode 100644 index 000000000..90653b288 Binary files /dev/null and b/documentation/assets/Takeoff.png differ diff --git a/documentation/assets/Takeoff2.png b/documentation/assets/Takeoff2.png new file mode 100644 index 000000000..fedf2908f Binary files /dev/null and b/documentation/assets/Takeoff2.png differ diff --git a/documentation/diagrams/Hangar-Accounts-Projects.png b/documentation/diagrams/Hangar-Accounts-Projects.png new file mode 100644 index 000000000..1a0c5abd1 Binary files /dev/null and b/documentation/diagrams/Hangar-Accounts-Projects.png differ diff --git a/documentation/diagrams/Hangar-Kubernetes.png b/documentation/diagrams/Hangar-Kubernetes.png new file mode 100644 index 000000000..3f121fdcf Binary files /dev/null and b/documentation/diagrams/Hangar-Kubernetes.png differ diff --git a/documentation/diagrams/Hangar-PipelinesCI_CD.png b/documentation/diagrams/Hangar-PipelinesCI_CD.png new file mode 100644 index 000000000..ed706f0c1 Binary files /dev/null and b/documentation/diagrams/Hangar-PipelinesCI_CD.png differ diff --git a/documentation/diagrams/Hangar-Quickstart.png b/documentation/diagrams/Hangar-Quickstart.png new file mode 100644 index 000000000..1d11463e6 Binary files /dev/null and b/documentation/diagrams/Hangar-Quickstart.png differ diff --git a/documentation/diagrams/Hangar-Repository.png b/documentation/diagrams/Hangar-Repository.png new file mode 100644 index 000000000..dac5e9b38 Binary files /dev/null and b/documentation/diagrams/Hangar-Repository.png differ diff --git a/documentation/diagrams/Hangar-SonarQube.png b/documentation/diagrams/Hangar-SonarQube.png new file mode 100644 index 000000000..cb024e2c7 Binary files /dev/null and b/documentation/diagrams/Hangar-SonarQube.png differ diff --git a/documentation/diagrams/Hangar.drawio b/documentation/diagrams/Hangar.drawio new file mode 100644 index 000000000..7c3d79170 --- /dev/null +++ b/documentation/diagrams/Hangar.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/documentation/diagrams/component.puml b/documentation/diagrams/component.puml new file mode 100644 index 000000000..516379d5c --- /dev/null +++ b/documentation/diagrams/component.puml @@ -0,0 +1,177 @@ +@startuml Diagram +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml +!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons +!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5 +!include DEVICONS/angular.puml +!include DEVICONS/java.puml +!include DEVICONS/msql_server.puml +!include FONTAWESOME/users.puml +!define osaPuml https://raw.githubusercontent.com/Crashedmind/PlantUML-opensecurityarchitecture2-icons/master +!include osaPuml/Common.puml +!include osaPuml/User/all.puml +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml +!include +!include +!include +!include +!include +AddContainerTag("db", $sprite="database_server", $legendText="database container") +left to right direction +skinparam linetype polyline + + +'LAYOUT_WITH_LEGEND() + +Person(user, "User", "Interacts with the GUI and CLI to create/deploy on Cloud environments", $sprite="users") +System_Boundary(s_takeoff, "TakeOff") { + Container_Boundary(takeoff_gui, "TakeOff GUI") { + Component(gui, "GUI", $techn="Flutter", $descr="Receives the inputs from the user and calls the appropriate logic") + } + Container_Boundary(takeoff_cli, "TakeOff CLI") { + Component(cli, "Input Controller", $techn="Dart", $descr="Reads the console commands to determine which scripts should be executed") + } + + Container_Boundary(c_takeoff, "Shared Business logic library"){ + Container(façade, "Logic Façade", "Abstraction Layer", "Automation of Hangar scripts") + Component(project_manager, "Project Manager") + Component(repository_manager, "Repository Manager") + Component(account_manager, "Account Manager") + Component(pipeline_manager, "Pipeline Manager") + Component(cache_manager, "Cache Manager") + Component(quickstart_manager, "Quickstart Manager") + } + + ContainerDb(db, "Cache Store", "User Configuration", $tags="db") + + Rel(user, gui, "uses") + Rel(user, cli, "uses") + + Rel(gui, façade, "calls") + Rel(cli, façade, "calls") + + Rel(façade, project_manager, "Uses") + Rel(façade, repository_manager, "Uses") + Rel(façade, account_manager, "Uses") + Rel(façade, pipeline_manager, "Uses") + Rel(façade, cache_manager, "Uses") + Rel(façade, quickstart_manager, "Uses") +} + +System_Boundary(s_hangar, "Hangar") { + Container_Boundary(sonarqube, "SonarQube") { + Container(sonarqube_cont, "SonarQube Automation", "Abstraction Layer", "Automation of SonarQube Deployment") + Component(terraform_sonar, "Terraform CLI") + Component(setup_sonar_aws, "AWS Setup") + Component(setup_sonar_gcloud, "GCloud Setup") + Rel(sonarqube_cont, setup_sonar_aws, "Calls") + Rel(sonarqube_cont, setup_sonar_gcloud, "Calls") + Rel(sonarqube_cont, terraform_sonar, "Uses") + Container_Boundary(sonarqube_common, "SonarQube Common"){ + Component(setup_sonar_common, "SonarQube Common Setup") + } + Rel(setup_sonar_aws, sonarqube_common, "Uses") + Rel(setup_sonar_gcloud, sonarqube_common, "Uses") + } + + Container_Boundary(repos, "Repositories") { + Container(repos_cont, "Repository Automation", "Abstraction Layer", "Automation of Repository Management") + Component(create_repo_gcloud, "GCloud Setup") + Component(create_repo_azure, "Azure Setup") + Component(create_repo_github, "GitHub Setup") + Rel(repos_cont, create_repo_gcloud, "Calls") + Rel(repos_cont, create_repo_azure, "Calls") + Rel(repos_cont, create_repo_github, "Calls") + + Container_Boundary(create_repo_common, "Repository Management Common"){ + Component(create_repo_common_logic, "Repository Common Setup") + Component(create_repo_common_strategy, "Repository Common Strategy") + } + + Rel(create_repo_gcloud, create_repo_common, "Uses") + Rel(create_repo_azure, create_repo_common, "Uses") + Rel(create_repo_github, create_repo_common, "Uses") + } + + Container_Boundary(pipelines, "Pipelines") { + Container(pipelines_cont, "Pipeline Automation", "Abstraction Layer", "Automation of Pipeline Creation") + Component(create_pipelines_gcloud, "GCloud Setup") + Component(create_pipelines_azure, "Azure Devops Setup") + Component(create_pipelines_github, "GitHub Setup") + Rel(pipelines_cont, create_pipelines_gcloud, "Calls") + Rel(pipelines_cont, create_pipelines_azure, "Calls") + Rel(pipelines_cont, create_pipelines_github, "Calls") + + Container_Boundary(pipelines_common, "Pipeline Creation Common"){ + Component(pipelines_common_language_def, "Language Specific Actions Templates") + Component(pipelines_common_lib, "Common Pipeline Manager Logic") + Component(pipelines_common_pipeline_def, "Cloud Specific Stages Templates") + } + + Rel(create_pipelines_gcloud, pipelines_common, "Uses") + Rel(create_pipelines_azure, pipelines_common, "Uses") + Rel(create_pipelines_github, pipelines_common, "Uses") + } + + Container_Boundary(kubernetes, "Kubernetes Provisioning") { + Container(kubernetes_cont, "Kubernetes Automation", "Abstraction Layer", "Automation of Kubernetes Provisioning") + Component(aws_eks, "AWS EKS Provisioning") + Component(azure_aks, "Azure AKS Provisioning") + Component(gcloud_gke, "GCloud GKE Provisioning") + Rel(kubernetes_cont, aws_eks, "Calls") + Rel(kubernetes_cont, azure_aks, "Calls") + Rel(kubernetes_cont, gcloud_gke, "Calls") + Component(terraform_kubernetes, "Terraform CLI") + Rel(kubernetes_cont, terraform_kubernetes, "Uses") + } + + Container_Boundary(accounts, "Accounts Management") { + Container(accounts_cont, "Accounts Management Automation", "Abstraction Layer", "Automation of Accounts Management") + Component(aws_accounts, "AWS Accounts Management") + Component(azure_accounts, "Azure Devops Accounts Management") + Component(gcloud_accounts, "GCloud Accounts Management") + Rel(accounts_cont, aws_accounts, "Calls") + Rel(accounts_cont, azure_accounts, "Calls") + Rel(accounts_cont, gcloud_accounts, "Calls") + + Component(aws_accounts_create_user, "Create AWS User") + Component(aws_accounts_verify_roles, "Verify AWS User Roles") + Component(aws_accounts_custom_roles, "AWS Roles Definition") + Rel(aws_accounts, aws_accounts_create_user, "Interacts") + Rel(aws_accounts, aws_accounts_verify_roles, "Interacts") + Rel(aws_accounts_create_user, aws_accounts_custom_roles, "Reads") + Rel(aws_accounts_verify_roles, aws_accounts_custom_roles, "Reads") + + Component(azure_accounts_create_project, "Create Azure Devops Project") + Rel(azure_accounts, azure_accounts_create_project, "Interacts") + + Component(gcloud_accounts_create_project, "Create GCloud Project") + Component(gcloud_accounts_create_principal_account, "Create GCloud Principal Account") + Component(gcloud_accounts_verify_roles, "Verify GCloud Account Roles") + Component(gcloud_accounts_custom_roles, "GCloud Roles Definition") + Component(gcloud_accounts_setup_firebase, "Setup Firebase & Maps Services") + Rel(gcloud_accounts, gcloud_accounts_create_project, "Interacts") + Rel(gcloud_accounts, gcloud_accounts_create_principal_account, "Interacts") + Rel(gcloud_accounts, gcloud_accounts_verify_roles, "Interacts") + Rel(gcloud_accounts, gcloud_accounts_setup_firebase, "Interacts") + Rel(gcloud_accounts_create_principal_account, gcloud_accounts_custom_roles, "Reads") + Rel(gcloud_accounts_verify_roles, gcloud_accounts_custom_roles, "Reads") + } + + Container_Boundary(quickstart, "Quickstart") { + Container(quickstart_cont, "Quickstart Automation", "Abstraction Layer", "Automation of Quickstart") + Component(quickstart_wayat_frontend, "Wayat Frontend Quickstart") + Component(quickstart_wayat_backend, "Wayat Backend Quickstart") + Rel(quickstart_cont, quickstart_wayat_frontend, "Calls") + Rel(quickstart_cont, quickstart_wayat_backend, "Calls") + } + + Rel(project_manager, sonarqube_cont, "Interacts") + Rel(project_manager, kubernetes_cont, "Interacts") + Rel(pipeline_manager, pipelines_cont, "Interacts") + Rel(repository_manager, repos_cont, "Interacts") + Rel(project_manager, accounts_cont, "Interacts") + Rel(quickstart_manager, quickstart_cont, "Interacts") +} + + +@enduml \ No newline at end of file diff --git a/documentation/diagrams/container.puml b/documentation/diagrams/container.puml new file mode 100644 index 000000000..6cfb408d6 --- /dev/null +++ b/documentation/diagrams/container.puml @@ -0,0 +1,40 @@ +@startuml Container_Diagram +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml +!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons +!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5 +!include DEVICONS/angular.puml +!include DEVICONS/java.puml +!include DEVICONS/msql_server.puml +!include FONTAWESOME/users.puml +!define osaPuml https://raw.githubusercontent.com/Crashedmind/PlantUML-opensecurityarchitecture2-icons/master +!include osaPuml/Common.puml +!include osaPuml/User/all.puml + +!include +!include +!include +!include +!include +AddContainerTag("db", $sprite="database_server", $legendText="database container") + + +' LAYOUT_WITH_LEGEND() + +Person(user, "Customer", "Create / Deploy on a Cloud Environment", $sprite="users") +System_Boundary(c1, "TakeOff") { + Container(flutter, "Flutter App", "Graphic User Interface", "Visual interaction with TakeOff") + Container(takeoff, "TakeOff Executable", "Abstraction Layer", "Automation of Hangar scripts") + Container(hangar, "Hangar", "Shell scripts & CLI toolkit", "Create / Manage Cloud Projects") + ContainerDb(db, "Cache Store", "User Configuration", $tags="db") + Rel(user, flutter, "Uses") + Rel(flutter, takeoff, "Interacts") + Rel(takeoff, hangar, "Interacts") + Rel(takeoff, db, "Stores / Reads") + Rel(user, takeoff, "Uses") +} +System_Boundary(c2, "Host OS") { + ContainerDb(dbcli, "CLI Configs", "Self CLI Configuration", $tags="db") +} +Rel(hangar, dbcli, "Stores /Reads") + +@enduml \ No newline at end of file diff --git a/documentation/diagrams/context.puml b/documentation/diagrams/context.puml new file mode 100644 index 000000000..96b409907 --- /dev/null +++ b/documentation/diagrams/context.puml @@ -0,0 +1,23 @@ +@startuml Context_Diagram +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml +!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons +!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5 +!include DEVICONS/angular.puml +!include DEVICONS/java.puml +!include DEVICONS/msql_server.puml +!include FONTAWESOME/users.puml + +' LAYOUT_WITH_LEGEND() + +Person(user, "Customer", "Create / Deploy on a Cloud Environment", $sprite="users") +System(take_off, "TakeOff", "Scripts & CLI toolkit to Create / Manage Cloud Projects") + +System(google, "Google Cloud") +System(azure, "Azure") +System(aws, "AWS") + +Rel(user, take_off, "Uses", "CLI / GUI") +Rel(take_off, google, "Communicates with", "HTTPS") +Rel(take_off, aws, "Communicates with", "HTTPS") +Rel(take_off, azure, "Communicates with", "HTTPS") +@enduml \ No newline at end of file diff --git a/documentation/diagrams/hangar_overview.puml b/documentation/diagrams/hangar_overview.puml new file mode 100644 index 000000000..142bc773d --- /dev/null +++ b/documentation/diagrams/hangar_overview.puml @@ -0,0 +1,33 @@ +@startuml Container_Diagram +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml +!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons +!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5 +!include DEVICONS/angular.puml +!include DEVICONS/java.puml +!include DEVICONS/msql_server.puml +!include FONTAWESOME/users.puml +!define osaPuml https://raw.githubusercontent.com/Crashedmind/PlantUML-opensecurityarchitecture2-icons/master +!include osaPuml/Common.puml +!include osaPuml/User/all.puml + +!include +!include +!include +!include +!include + +' LAYOUT_WITH_LEGEND() + +Person(user, "Customer", "Create / Deploy on a Cloud Environment", $sprite="users") +System_Boundary(c1, "Hangar") { + Container(accounts, "Accounts", "Shell scripts", "Project and account management") + Container(env_provisioning, "Environment provisioning", "Shell scripts", "Service and resource provisioning") + Container(pipelines, "Pipelines", "Shell scripts", "CI/CD management") + Container(quickstart, "Quickstart", "Shell scripts", "Single click project deployment") + Container(repositories, "Repositories", "Shell scripts", "Repository management") + Container(sonarqube, "Sonarqube", "Shell scripts", "Sonarqube deployment") +} + +Rel(user, c1, "Uses") + +@enduml \ No newline at end of file diff --git a/documentation/diagrams/sequence_create_cloud_run.puml b/documentation/diagrams/sequence_create_cloud_run.puml new file mode 100644 index 000000000..4ca1eb068 --- /dev/null +++ b/documentation/diagrams/sequence_create_cloud_run.puml @@ -0,0 +1,13 @@ +@startuml sequence + +participant "Take Off" as TakeOff +participant "Hangar" as Hangar +participant "GCloud CLI" as Gcloud + +TakeOff -> Hangar : init-cloud-run.sh -n $serviceName -r $region +Hangar -> Gcloud : gcloud run deploy $serviceName -image=us-docker.pkg.dev/cloudrun/container/hello" -region=$region +Gcloud --> Hangar : Deployment Success +Hangar -> Gcloud : gcloud run services describe $serviceName --format 'value(status.url)' +Gcloud --> Hangar : Cloud Run URL +Hangar --> TakeOff : Service Init Success + Service URL +@enduml diff --git a/documentation/diagrams/sequence_quickstart_wayat.puml b/documentation/diagrams/sequence_quickstart_wayat.puml new file mode 100644 index 000000000..f4417368d --- /dev/null +++ b/documentation/diagrams/sequence_quickstart_wayat.puml @@ -0,0 +1,207 @@ +@startuml sequence + +actor User as User +participant "Take Off" as TakeOff +database "Take Off Volume" as Cache +participant "Hangar" as Hangar +participant "GCloud CLI" as Gcloud +database "Google CLI Volume" as Clicache +participant "Web Browser" as Web + + +User -> TakeOff : Init (login) +TakeOff -> Gcloud: gcloud auth login +Gcloud -> Web: Account Login +Web -> Web : Copy Token +Web --> Gcloud: Login token +Gcloud -> Clicache: Store credentials +Gcloud --> TakeOff: User Loggin Success +TakeOff -> Cache: User Email +TakeOff --> User : Init Success + + +User -> TakeOff : Create Project + +TakeOff -> Hangar : create-project.sh +Hangar -> Gcloud : gcloud projects create +Gcloud -> Clicache : Set Current Project +Gcloud --> Hangar : Create Project Success +Hangar -> Gcloud : gcloud billing projects link +Gcloud --> Hangar : Link Billing Success +Hangar -> Gcloud : gcloud services enable (API) +Gcloud --> Hangar : Enable Services Success +Hangar --> TakeOff : Project Creation Success +TakeOff -> Cache : Store Project ID + +TakeOff -> Hangar : setup-principal-account.sh +Hangar -> Gcloud : gcloud iam service-account create / check +Gcloud --> Hangar : Service Account Creation Success +Hangar -> Gcloud : gcloud iam service-accounts keys create +Gcloud --> Hangar : Service Account Key Success +Hangar -> Gcloud : gcloud add-iam-policy-binding +Gcloud --> Hangar : Roles Attached Success +Hangar --> Cache : Service Account Key +Hangar --> TakeOff : Service Account Key Success + + +TakeOff -> Hangar : validate-roles.sh +' Opcional +Hangar -> Gcloud : gcloud get-iam-policy +Gcloud --> Hangar : Roles Attached to Account (list) +Hangar --> TakeOff : Roles Validation Success +' Revisar Como gestionar esta key +TakeOff -> Gcloud : gcloud auth activate-service-account Key +Gcloud --> TakeOff : Auth Service Account Success + + +TakeOff -> Hangar : create-repo.sh Frontend +Hangar -> Gcloud : gcloud repo create +Gcloud --> Hangar : Repository Creation Success +Hangar -> Gcloud : Import Code +Gcloud --> Hangar : Import Code Success +Hangar --> Cache : Project Code +Hangar --> TakeOff : Repo URL Success + +TakeOff -> Hangar : create-repo.sh Backend +Hangar -> Gcloud : gcloud repo create +Gcloud --> Hangar : Repository Creation Success +Hangar -> Gcloud : Import Code +Gcloud --> Hangar : Import Code Success +Hangar --> Cache : Project Code +Hangar --> TakeOff : Repo URL Success + +TakeOff -> Hangar : setup-sonar.sh +Hangar -> Hangar : terraform init +Hangar -> Hangar : set-terraform-variables.sh +Hangar -> Gcloud : terraform apply +Gcloud --> Hangar : Terraform Success +Hangar --> Cache : Sonar Token + Tfstate +Hangar --> TakeOff : Sonar Creation Success + +TakeOff -> Hangar : init-cloud-run.sh BE +Hangar -> Gcloud : gcloud run deploy hello +Gcloud --> Hangar : Deployment Success +Hangar -> Gcloud : gcloud run services describe status.url +Gcloud --> Hangar : Cloud Run URL +Hangar --> TakeOff : Service BE Init Success + URL + +TakeOff -> Hangar : init-cloud-run.sh FE +Hangar -> Gcloud : gcloud run deploy hello +Gcloud --> Hangar : Deployment Success +Hangar -> Gcloud : gcloud run services describe status.url +Gcloud --> Hangar : Cloud Run URL +Hangar --> TakeOff : Service FE Init Success + URL + +TakeOff -> Hangar : setup-firebase.sh +Hangar -> Gcloud : gcloud services enable +Gcloud --> Hangar : Services Enabled Success +Hangar -> Gcloud : firebase projects:addfirebase +Gcloud --> Hangar : Firebase Added Success +Hangar -> Gcloud : gcloud firestore databases create +Gcloud --> Hangar : Firestore Created Success +Hangar -> Gcloud : gcloud iam service-account keys create +Hangar --> Cache : Firebase Service Account +Gcloud --> Hangar : Service Account Creation Success +Hangar -> Gcloud : firebase apps:create ANDROID +Gcloud --> Hangar : App creation Success +Hangar -> Gcloud : firebase apps:sdkconfig ANDROID +Gcloud --> Hangar : SDK Config Creation Success +Hangar --> Cache : Android SDK Config +Hangar -> Gcloud : firebase apps:create WEB +Gcloud --> Hangar : App creation Success +Hangar -> Gcloud : firebase apps:sdkconfig WEB +Gcloud --> Hangar : SDK Config Creation Success +Hangar --> Cache : WEB SDK Config + +Hangar --> TakeOff : Firebase Success + +TakeOff -> Hangar : quickstart-wayat-backend.sh +Cache -> Hangar : Firebase Secrets +Hangar -> Hangar : Update Project Config +Hangar --> Cache : Updated BE config +Hangar -> Gcloud : Update BE Code Repo +Gcloud --> Hangar : Code Update Success +Hangar -> Gcloud : Apply Firebase Rules +Gcloud --> Hangar : Firebase Rules Applied Success +Hangar --> TakeOff : Quickstart Success + +TakeOff -> Hangar : quickstart-wayat-frontend.sh +Cache -> Hangar : Firebase Secrets +Hangar -> Hangar : Update Project Config +Hangar --> Cache : Updated FE config +Hangar -> Gcloud : Update FE Code Repo +Gcloud --> Hangar : Code Update Success +Hangar -> Gcloud : Apply Firebase Rules +Gcloud --> Hangar : Firebase Rules Applied Success +Hangar --> TakeOff : Quickstart Success + +TakeOff -> Hangar : pipeline-generator.sh Build BE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh Test BE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Build +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh QA BE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Test +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh Package BE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Test +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh Deploy Cloud Run BE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Package +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success + +TakeOff -> Hangar : pipeline-generator.sh Build FE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh Test FE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Build +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh QA FE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Test +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh Package FE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Test +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success +TakeOff -> Hangar : pipeline-generator.sh Deploy Cloud Run FE +Hangar -> Gcloud : cloud build create pipeline +Gcloud --> Hangar : Pipeline Creation Success +Hangar -> Gcloud : cloud build modify pipeline Package +Gcloud --> Hangar : Pipeline Modification Success +Hangar --> Cache : Pipeline code +Hangar --> TakeOff : Pipeline Creation Success + +TakeOff --> User : Project Creation Success +@enduml \ No newline at end of file