From 32d99213b851beddc51f39913762c36ea80c6da4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A1ssio=20Botaro?= Date: Fri, 29 Mar 2024 13:03:17 -0300 Subject: [PATCH] Prototype action to autogenerate md files (#1) --- .github/workflows/main.yaml | 25 +++++++ .gitignore | 1 + cms/diagramas.md | 65 ++++++++++++++++++ icones/diagramas.md | 23 +++++++ .../ContainerDiagram-key.png | Bin .../ContainerDiagram.png | Bin .../ContextDiagram-key.png | Bin .../ContextDiagram.png | Bin .../LiveDeployment-key.png | Bin .../LiveDeployment.png | Bin .../imersaofc.dsl" => imersaofc/imersaofc.dsl | 0 .../imersaofc.json | 0 .../imersaofc.puml | 0 .../structurizr.properties | 0 .../IntencoesAntes-key.png | Bin .../IntencoesAntes.png | Bin .../IntencoesDepois-key.png | Bin .../IntencoesDepois.png | Bin .../hidden.puml" => intencoes/hidden.puml | 0 .../intencoes.dsl" => intencoes/intencoes.dsl | 0 .../intencoes.json | 0 .../show.puml" => intencoes/show.puml | 0 .../structurizr.properties | 0 maonamassa/diagramas.md | 58 ++++++++++++++++ relacionamentos/diagramas.md | 46 +++++++++++++ scripts/gerar-diagramas.sh | 25 +++++++ 26 files changed, 243 insertions(+) create mode 100644 .github/workflows/main.yaml create mode 100644 cms/diagramas.md create mode 100644 icones/diagramas.md rename "imers\303\243o-full-cycle/ContainerDiagram-key.png" => imersaofc/ContainerDiagram-key.png (100%) rename "imers\303\243o-full-cycle/ContainerDiagram.png" => imersaofc/ContainerDiagram.png (100%) rename "imers\303\243o-full-cycle/ContextDiagram-key.png" => imersaofc/ContextDiagram-key.png (100%) rename "imers\303\243o-full-cycle/ContextDiagram.png" => imersaofc/ContextDiagram.png (100%) rename "imers\303\243o-full-cycle/LiveDeployment-key.png" => imersaofc/LiveDeployment-key.png (100%) rename "imers\303\243o-full-cycle/LiveDeployment.png" => imersaofc/LiveDeployment.png (100%) rename "imers\303\243o-full-cycle/imersaofc.dsl" => imersaofc/imersaofc.dsl (100%) rename "imers\303\243o-full-cycle/imersaofc.json" => imersaofc/imersaofc.json (100%) rename "imers\303\243o-full-cycle/imersaofc.puml" => imersaofc/imersaofc.puml (100%) rename "imers\303\243o-full-cycle/structurizr.properties" => imersaofc/structurizr.properties (100%) rename "inten\303\247\303\265es/IntencoesAntes-key.png" => intencoes/IntencoesAntes-key.png (100%) rename "inten\303\247\303\265es/IntencoesAntes.png" => intencoes/IntencoesAntes.png (100%) rename "inten\303\247\303\265es/IntencoesDepois-key.png" => intencoes/IntencoesDepois-key.png (100%) rename "inten\303\247\303\265es/IntencoesDepois.png" => intencoes/IntencoesDepois.png (100%) rename "inten\303\247\303\265es/hidden.puml" => intencoes/hidden.puml (100%) rename "inten\303\247\303\265es/intencoes.dsl" => intencoes/intencoes.dsl (100%) rename "inten\303\247\303\265es/intencoes.json" => intencoes/intencoes.json (100%) rename "inten\303\247\303\265es/show.puml" => intencoes/show.puml (100%) rename "inten\303\247\303\265es/structurizr.properties" => intencoes/structurizr.properties (100%) create mode 100644 maonamassa/diagramas.md create mode 100644 relacionamentos/diagramas.md create mode 100644 scripts/gerar-diagramas.sh diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..69d4152 --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,25 @@ +name: main +on: push +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + repo: [relacionamentos, icones, cms, imersaofc, intencoes, maonamassa, niveis, ] + permissions: + contents: write + container: + image: structurizr/cli:latest + steps: + - name: Install git + run: apt-get update && apt-get install -y git + - name: Mark directory as safe for git + run: git config --global --add safe.directory /__w/modeloC4/modeloC4 + - uses: actions/checkout@v4 + - name: Generate diagrams + run: | + bash scripts/gerar-diagramas.sh ${{ matrix.repo }} + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Diagramas gerados automaticamente para o repositório ${{ matrix.repo }}" diff --git a/.gitignore b/.gitignore index 6fbf0b2..6c2e740 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ out .structurizr */export-diagrams.js +*.mmd diff --git a/cms/diagramas.md b/cms/diagramas.md new file mode 100644 index 0000000..5e4030f --- /dev/null +++ b/cms/diagramas.md @@ -0,0 +1,65 @@ +## Containers + +```mermaid +graph LR + linkStyle default fill:#ffffff + + subgraph diagram ["CMS - Containers"] + style diagram fill:#ffffff,stroke:#ffffff + + 1["
Leitor
[Person]
Pessoa que consome as
notícias do site.
"] + style 1 fill:#08427b,stroke:#052e56,color:#ffffff + 2["
Editor
[Person]
Pessoa que escreve conteúdo
para o site.
"] + style 2 fill:#08427b,stroke:#052e56,color:#ffffff + + subgraph 3 [CMS] + style 3 fill:#ffffff,stroke:#0b4884,color:#0b4884 + + 4("
Portal de Notícias
[Container: Python and Django]
Site que fornece as notícias
e conteúdos. Possui área
acessível somente para
editores.
") + style 4 fill:#438dd5,stroke:#2e6295,color:#ffffff + 5[("
Banco de Dados
[Container: Postgresql]
Armazena notícias e
informações sobre usuários.
")] + style 5 fill:#438dd5,stroke:#2e6295,color:#ffffff + 6["
Armazenamento de imagens
[Container: Bucket S3]
Armazena imagens que serão
utilizadas nas notícias e no
conteúdo do portal.
"] + style 6 fill:#438dd5,stroke:#2e6295,color:#ffffff + 7["
Aplicativo móvel
[Container: Android/iOS]
Aplicativo que permite o
acesso ao conteúdo e às
notícias do portal.
"] + style 7 fill:#438dd5,stroke:#2e6295,color:#ffffff + 8["
Fila de processamento em segundo plano
[Container: RabbitMQ]
Recebe eventos de criação de
imagem para serem consumidos
pelo processador.
"] + style 8 fill:#438dd5,stroke:#2e6295,color:#ffffff + 9("
Processador de Imagens
[Container: Python]
Processa imagens
otimizando-as e gerando
thumbnails.
") + style 9 fill:#438dd5,stroke:#2e6295,color:#ffffff + end + + 1-. "
Consome notícias e conteúdo
em
" .->4 + 1-. "
Consome notícias e conteúdo
em
" .->7 + 2-. "
Escreve conteúdo em
" .->4 + 7-. "
Consome notícias e conteúdo
em
[HTTPS/JSON]
" .->4 + 4-. "
Lê de e escreve em
[Postgresql Protocol]
" .->5 + 4-. "
Lê de e escreve em
[HTTPS/JSON]
" .->6 + 4-. "
Envia evento de adição de
nova imagem para
[AMQP]
" .->8 + 9-. "
Consome eventos de
[AMQP]
" .->8 + 9-. "
Escreve imagens em
[HTTPS/JSON]
" .->6 + 4-. "
Consome conteúdo estático de
[HTTPS/JSON]
" .->6 + end +``` + +## SystemContext + +```mermaid +graph TB + linkStyle default fill:#ffffff + + subgraph diagram ["CMS - System Context"] + style diagram fill:#ffffff,stroke:#ffffff + + 1["
Leitor
[Person]
Pessoa que consome as
notícias do site.
"] + style 1 fill:#08427b,stroke:#052e56,color:#ffffff + 2["
Editor
[Person]
Pessoa que escreve conteúdo
para o site.
"] + style 2 fill:#08427b,stroke:#052e56,color:#ffffff + 3("
CMS
[Software System]
Sistema de gerenciamento de
conteúdo.
") + style 3 fill:#1168bd,stroke:#0b4884,color:#ffffff + + 1-. "
Consome notícias e conteúdo
em
" .->3 + 2-. "
Escreve conteúdo em
" .->3 + end +``` + diff --git a/icones/diagramas.md b/icones/diagramas.md new file mode 100644 index 0000000..6a4e0d7 --- /dev/null +++ b/icones/diagramas.md @@ -0,0 +1,23 @@ +## Icones + +```mermaid +graph TB + linkStyle default fill:#ffffff + + subgraph diagram ["Exemplos de Ícones"] + style diagram fill:#ffffff,stroke:#ffffff + + 1["
Título 2
[tecnologia]
Descrição de um elemento.
"] + style 1 fill:#dddddd,stroke:#9a9a9a,color:#000000 + 2["
Título 3
[tecnologia]
Descrição de um elemento.
"] + style 2 fill:#dddddd,stroke:#9a9a9a,color:#000000 + 3["
Título 4
[tecnologia]
Descrição de um elemento.
"] + style 3 fill:#dddddd,stroke:#9a9a9a,color:#000000 + 4["
Título 5
[tecnologia]
Descrição de um elemento.
"] + style 4 fill:#dddddd,stroke:#9a9a9a,color:#000000 + 5["
Título 6
[tecnologia]
Descrição de um elemento.
"] + style 5 fill:#dddddd,stroke:#9a9a9a,color:#000000 + + end +``` + diff --git "a/imers\303\243o-full-cycle/ContainerDiagram-key.png" b/imersaofc/ContainerDiagram-key.png similarity index 100% rename from "imers\303\243o-full-cycle/ContainerDiagram-key.png" rename to imersaofc/ContainerDiagram-key.png diff --git "a/imers\303\243o-full-cycle/ContainerDiagram.png" b/imersaofc/ContainerDiagram.png similarity index 100% rename from "imers\303\243o-full-cycle/ContainerDiagram.png" rename to imersaofc/ContainerDiagram.png diff --git "a/imers\303\243o-full-cycle/ContextDiagram-key.png" b/imersaofc/ContextDiagram-key.png similarity index 100% rename from "imers\303\243o-full-cycle/ContextDiagram-key.png" rename to imersaofc/ContextDiagram-key.png diff --git "a/imers\303\243o-full-cycle/ContextDiagram.png" b/imersaofc/ContextDiagram.png similarity index 100% rename from "imers\303\243o-full-cycle/ContextDiagram.png" rename to imersaofc/ContextDiagram.png diff --git "a/imers\303\243o-full-cycle/LiveDeployment-key.png" b/imersaofc/LiveDeployment-key.png similarity index 100% rename from "imers\303\243o-full-cycle/LiveDeployment-key.png" rename to imersaofc/LiveDeployment-key.png diff --git "a/imers\303\243o-full-cycle/LiveDeployment.png" b/imersaofc/LiveDeployment.png similarity index 100% rename from "imers\303\243o-full-cycle/LiveDeployment.png" rename to imersaofc/LiveDeployment.png diff --git "a/imers\303\243o-full-cycle/imersaofc.dsl" b/imersaofc/imersaofc.dsl similarity index 100% rename from "imers\303\243o-full-cycle/imersaofc.dsl" rename to imersaofc/imersaofc.dsl diff --git "a/imers\303\243o-full-cycle/imersaofc.json" b/imersaofc/imersaofc.json similarity index 100% rename from "imers\303\243o-full-cycle/imersaofc.json" rename to imersaofc/imersaofc.json diff --git "a/imers\303\243o-full-cycle/imersaofc.puml" b/imersaofc/imersaofc.puml similarity index 100% rename from "imers\303\243o-full-cycle/imersaofc.puml" rename to imersaofc/imersaofc.puml diff --git "a/imers\303\243o-full-cycle/structurizr.properties" b/imersaofc/structurizr.properties similarity index 100% rename from "imers\303\243o-full-cycle/structurizr.properties" rename to imersaofc/structurizr.properties diff --git "a/inten\303\247\303\265es/IntencoesAntes-key.png" b/intencoes/IntencoesAntes-key.png similarity index 100% rename from "inten\303\247\303\265es/IntencoesAntes-key.png" rename to intencoes/IntencoesAntes-key.png diff --git "a/inten\303\247\303\265es/IntencoesAntes.png" b/intencoes/IntencoesAntes.png similarity index 100% rename from "inten\303\247\303\265es/IntencoesAntes.png" rename to intencoes/IntencoesAntes.png diff --git "a/inten\303\247\303\265es/IntencoesDepois-key.png" b/intencoes/IntencoesDepois-key.png similarity index 100% rename from "inten\303\247\303\265es/IntencoesDepois-key.png" rename to intencoes/IntencoesDepois-key.png diff --git "a/inten\303\247\303\265es/IntencoesDepois.png" b/intencoes/IntencoesDepois.png similarity index 100% rename from "inten\303\247\303\265es/IntencoesDepois.png" rename to intencoes/IntencoesDepois.png diff --git "a/inten\303\247\303\265es/hidden.puml" b/intencoes/hidden.puml similarity index 100% rename from "inten\303\247\303\265es/hidden.puml" rename to intencoes/hidden.puml diff --git "a/inten\303\247\303\265es/intencoes.dsl" b/intencoes/intencoes.dsl similarity index 100% rename from "inten\303\247\303\265es/intencoes.dsl" rename to intencoes/intencoes.dsl diff --git "a/inten\303\247\303\265es/intencoes.json" b/intencoes/intencoes.json similarity index 100% rename from "inten\303\247\303\265es/intencoes.json" rename to intencoes/intencoes.json diff --git "a/inten\303\247\303\265es/show.puml" b/intencoes/show.puml similarity index 100% rename from "inten\303\247\303\265es/show.puml" rename to intencoes/show.puml diff --git "a/inten\303\247\303\265es/structurizr.properties" b/intencoes/structurizr.properties similarity index 100% rename from "inten\303\247\303\265es/structurizr.properties" rename to intencoes/structurizr.properties diff --git a/maonamassa/diagramas.md b/maonamassa/diagramas.md new file mode 100644 index 0000000..439b7af --- /dev/null +++ b/maonamassa/diagramas.md @@ -0,0 +1,58 @@ +## ContainerDiagram + +```mermaid +graph LR + linkStyle default fill:#ffffff + + subgraph diagram ["Mão na Massa CMS - Containers"] + style diagram fill:#ffffff,stroke:#ffffff + + 1["
Usuário
[Person]
Consumidor de conteúdo.
"] + style 1 fill:#08427b,stroke:#052e56,color:#ffffff + 2["
Admin
[Person]
Administrador de conteúdo.
"] + style 2 fill:#08427b,stroke:#052e56,color:#ffffff + + subgraph 3 [Mão na Massa CMS] + style 3 fill:#ffffff,stroke:#0b4884,color:#0b4884 + + 4("
Plataforma WEB - SPA
[Container: Vue.js]
Prover conteúdo para usuarios
e acesso administrativo ao
CMS.
") + style 4 fill:#438dd5,stroke:#2e6295,color:#ffffff + 5("
Mobile
[Container: Flutter]
Prover conteúdo para usuarios
e acesso administrativo ao
CMS.
") + style 5 fill:#438dd5,stroke:#2e6295,color:#ffffff + 6("
Backend
[Container: NestJS, Typescript]
Gerenciar e prover conteúdos
da plataforma e controle de
acesso.
") + style 6 fill:#438dd5,stroke:#2e6295,color:#ffffff + 7("
Banco de dados SQL
[Container: PostgreSQL]
Armazenar informações dos
usuários e de conteúdo.
") + style 7 fill:#438dd5,stroke:#2e6295,color:#ffffff + end + + 1-. "
Acessa o conteúdo do
[HTTPS]
" .->5 + 2-. "
Acessa painel administrativo
da
[HTTPS]
" .->4 + 2-. "
Acessa painel administrativo
do
[HTTPS]
" .->5 + 4-. "
Realiza chamadas de api no
[HTTPS, JSON]
" .->6 + 5-. "
Realiza chamadas de api no
[HTTPS, JSON]
" .->6 + 6-. "
Lê e escreve no
" .->7 + 1-. "
Acessa o conteúdo da
[HTTPS]
" .->4 + end +``` + +## ContextDiagram + +```mermaid +graph TB + linkStyle default fill:#ffffff + + subgraph diagram ["Mão na Massa CMS - System Context"] + style diagram fill:#ffffff,stroke:#ffffff + + 1["
Usuário
[Person]
Consumidor de conteúdo.
"] + style 1 fill:#08427b,stroke:#052e56,color:#ffffff + 2["
Admin
[Person]
Administrador de conteúdo.
"] + style 2 fill:#08427b,stroke:#052e56,color:#ffffff + 3("
Mão na Massa CMS
[Software System]
") + style 3 fill:#1168bd,stroke:#0b4884,color:#ffffff + + 2-. "
Acessa painel administrativo
da
[HTTPS]
" .->3 + 1-. "
Acessa o conteúdo da
[HTTPS]
" .->3 + end +``` + diff --git a/relacionamentos/diagramas.md b/relacionamentos/diagramas.md new file mode 100644 index 0000000..b32053f --- /dev/null +++ b/relacionamentos/diagramas.md @@ -0,0 +1,46 @@ +## RelacionamentosAntes + +```mermaid +graph LR + linkStyle default fill:#ffffff + + subgraph diagram ["Relacionamentos Antes"] + style diagram fill:#ffffff,stroke:#ffffff + + 1("
Sistema de Dados Comerciais
[Software System]
Um sistema de dados
comerciais.
") + style 1 fill:#438dd5,stroke:#2e6295,color:#ffffff + 2("
Sistema de Risco Financeiro
[Software System]
Um sistema de risco
financeiro.
") + style 2 fill:#438dd5,stroke:#2e6295,color:#ffffff + 5("
Aplicativo de Página Única
[Container: NestJS]
Fornece acesso a páginas web.
") + style 5 fill:#438dd5,stroke:#2e6295,color:#ffffff + 6("
Aplicativo API
[Container: Python e FastAPI]
Fornece API de dados.
") + style 6 fill:#438dd5,stroke:#2e6295,color:#ffffff + + 1-. "
Dados Comerciais
" .->2 + 5-. "
Usa
" .->6 + end +``` + +## RelacionamentosDepois + +```mermaid +graph LR + linkStyle default fill:#ffffff + + subgraph diagram ["Relacionamentos Depois"] + style diagram fill:#ffffff,stroke:#ffffff + + 1("
Sistema de Dados Comerciais
[Software System]
Um sistema de dados
comerciais.
") + style 1 fill:#438dd5,stroke:#2e6295,color:#ffffff + 2("
Sistema de Risco Financeiro
[Software System]
Um sistema de risco
financeiro.
") + style 2 fill:#438dd5,stroke:#2e6295,color:#ffffff + 5("
Aplicativo de Página Única
[Container: NestJS]
Fornece acesso a páginas web.
") + style 5 fill:#438dd5,stroke:#2e6295,color:#ffffff + 6("
Aplicativo API
[Container: Python e FastAPI]
Fornece API de dados.
") + style 6 fill:#438dd5,stroke:#2e6295,color:#ffffff + + 1-. "
Envia dados comerciais para
" .->2 + 5-. "
Faz chamadas de API
utilizando
" .->6 + end +``` + diff --git a/scripts/gerar-diagramas.sh b/scripts/gerar-diagramas.sh new file mode 100644 index 0000000..73e6c5e --- /dev/null +++ b/scripts/gerar-diagramas.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +function _gerar_markdown() { + arquivo_mmd="$1" + conteudo_mmd=$(cat "$arquivo_mmd") + + arquivo_sem_extensao="${arquivo_mmd%.*}" + echo "## ${arquivo_sem_extensao##*-}" + echo "" + echo "\`\`\`mermaid" + echo "$conteudo_mmd" + echo "\`\`\`" + echo "" +} + +nome=$1 + +/usr/local/structurizr-cli/structurizr.sh export \ + -format mermaid \ + -workspace "$nome"/"$nome".dsl + +[ -f "$nome"/diagramas.md ] && rm "$nome"/diagramas.md +for arquivo_mmd in "$nome"/*.mmd; do + _gerar_markdown "$arquivo_mmd" >>"$nome"/diagramas.md +done