archsight 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Dockerfile +5 -4
- data/README.md +17 -65
- data/chart/archsight/README.md +1 -158
- data/docs/architecture.md +39 -0
- data/docs/docker.md +49 -0
- data/{lib/archsight/web/doc → docs}/index.md.erb +3 -1
- data/docs/kubernetes.md +149 -0
- data/docs/licenses.md +307 -0
- data/lib/archsight/cli.rb +1 -1
- data/lib/archsight/graph.rb +1 -51
- data/lib/archsight/helpers.rb +0 -20
- data/lib/archsight/import/handlers/github.rb +3 -1
- data/lib/archsight/import/handlers/gitlab.rb +15 -5
- data/lib/archsight/import/handlers/repository.rb +53 -5
- data/lib/archsight/import/handlers/rest_api.rb +13 -1
- data/lib/archsight/import/license_analyzer.rb +650 -0
- data/lib/archsight/linter.rb +1 -1
- data/lib/archsight/mcp/base.rb +11 -0
- data/lib/archsight/renderer.rb +4 -4
- data/lib/archsight/resources/business_actor.rb +17 -2
- data/lib/archsight/resources/technology_artifact.rb +48 -0
- data/lib/archsight/version.rb +1 -1
- data/lib/archsight/web/api/docs.rb +37 -2
- data/lib/archsight/web/api/json_helpers.rb +79 -13
- data/lib/archsight/web/api/openapi/spec.yaml +699 -0
- data/lib/archsight/web/api/routes.rb +23 -0
- data/lib/archsight/web/application.rb +40 -128
- data/lib/archsight/web/editor/helpers.rb +150 -0
- data/lib/archsight/web/editor/routes.rb +85 -212
- data/lib/archsight/web/public/vue/ApiDocsPage-B1RqTNqh.js +1 -0
- data/lib/archsight/web/public/vue/ApiDocsPage-DhNTOH4o.css +1 -0
- data/lib/archsight/web/public/vue/DocPage-DzwBgBd4.js +1 -0
- data/lib/archsight/web/public/vue/EditorPage-D_miHSv4.js +34 -0
- data/lib/archsight/web/public/vue/EditorPage-Dq0MuTnp.css +1 -0
- data/lib/archsight/web/public/vue/ErrorPage-CQQtPey3.js +2 -0
- data/lib/archsight/web/public/vue/ErrorPage-CwPT3JUr.css +1 -0
- data/lib/archsight/web/public/vue/GraphView-DRcIqAiR.css +1 -0
- data/lib/archsight/web/public/vue/GraphView-T9jFH_qg.js +1 -0
- data/lib/archsight/web/public/vue/InstanceRouter-1Sm-CRhf.js +2 -0
- data/lib/archsight/web/public/vue/InstanceRouter-BJkDRXZY.css +1 -0
- data/lib/archsight/web/public/vue/KindList-JA_L_-Cz.js +1 -0
- data/lib/archsight/web/public/vue/ResourceList-8iqavWdg.js +1 -0
- data/lib/archsight/web/public/vue/ResourceList-DP-z-j71.css +1 -0
- data/lib/archsight/web/public/vue/SearchResults-BGHbg48-.css +1 -0
- data/lib/archsight/web/public/vue/SearchResults-BdgFeHcm.js +1 -0
- data/lib/archsight/web/public/vue/_basePickBy-CVgieyx-.js +1 -0
- data/lib/archsight/web/public/vue/_baseUniq-BNfrOSaP.js +1 -0
- data/lib/archsight/web/public/vue/architectureDiagram-VXUJARFQ-CJXNpTr5.js +36 -0
- data/lib/archsight/web/public/vue/blockDiagram-VD42YOAC-B5488Hes.js +122 -0
- data/lib/archsight/web/public/vue/c4Diagram-YG6GDRKO-eYY3hprM.js +10 -0
- data/lib/archsight/web/public/vue/chunk-4BX2VUAB-ZoXeL4D1.js +1 -0
- data/lib/archsight/web/public/vue/chunk-55IACEB6-rNtQYnu_.js +1 -0
- data/lib/archsight/web/public/vue/chunk-B4BG7PRW-DolAeVV9.js +165 -0
- data/lib/archsight/web/public/vue/chunk-DI55MBZ5-DnN0f_hj.js +220 -0
- data/lib/archsight/web/public/vue/chunk-FMBD7UC4-BQWOCMuR.js +15 -0
- data/lib/archsight/web/public/vue/chunk-QN33PNHL-DId301Kb.js +1 -0
- data/lib/archsight/web/public/vue/chunk-QZHKN3VN-xbY0NLgv.js +1 -0
- data/lib/archsight/web/public/vue/chunk-TZMSLE5B-CgF9_37b.js +1 -0
- data/lib/archsight/web/public/vue/classDiagram-2ON5EDUG-jGlvI-Za.js +1 -0
- data/lib/archsight/web/public/vue/classDiagram-v2-WZHVMYZB-jGlvI-Za.js +1 -0
- data/lib/archsight/web/public/vue/clone-6iRPe1-W.js +1 -0
- data/lib/archsight/web/public/vue/cose-bilkent-S5V4N54A-CB9Zfu50.js +1 -0
- data/lib/archsight/web/public/vue/cytoscape.esm-5J0xJHOV.js +321 -0
- data/lib/archsight/web/public/vue/dagre-6UL2VRFP-BqkmE-LI.js +4 -0
- data/lib/archsight/web/public/vue/diagram-PSM6KHXK-CKBfqtw3.js +24 -0
- data/lib/archsight/web/public/vue/diagram-QEK2KX5R-B78rOlvK.js +43 -0
- data/lib/archsight/web/public/vue/diagram-S2PKOQOG-BlXC6Cia.js +24 -0
- data/lib/archsight/web/public/vue/erDiagram-Q2GNP2WA-BnliyziJ.js +60 -0
- data/lib/archsight/web/public/vue/flowDiagram-NV44I4VS-wuqPowTd.js +162 -0
- data/lib/archsight/web/public/vue/ganttDiagram-JELNMOA3-GSffAIH3.js +267 -0
- data/lib/archsight/web/public/vue/gitGraphDiagram-V2S2FVAM-OA7VyugW.js +65 -0
- data/lib/archsight/web/public/vue/graph-BXHAtA0S.js +1 -0
- data/lib/archsight/web/public/vue/graphviz-CJms5bxZ.js +13 -0
- data/lib/archsight/web/public/vue/index-DsEsN0_K.js +2 -0
- data/lib/archsight/web/public/vue/index-Tiu4C-Sb.css +1 -0
- data/lib/archsight/web/public/vue/infoDiagram-HS3SLOUP-nlVe2qgv.js +2 -0
- data/lib/archsight/web/public/vue/journeyDiagram-XKPGCS4Q-CtTIcKwf.js +139 -0
- data/lib/archsight/web/public/vue/kanban-definition-3W4ZIXB7-837KX0sW.js +89 -0
- data/lib/archsight/web/public/vue/katex-C-M49wc6.js +261 -0
- data/lib/archsight/web/public/vue/layout-DtE0QdL6.js +1 -0
- data/lib/archsight/web/public/vue/mermaid-DpPHPFQh.js +250 -0
- data/lib/archsight/web/public/vue/mindmap-definition-VGOIOE7T-9gLF2AoY.js +68 -0
- data/lib/archsight/web/public/vue/pieDiagram-ADFJNKIX-CyCNgw3u.js +30 -0
- data/lib/archsight/web/public/vue/quadrantDiagram-AYHSOK5B-CkPh8g02.js +7 -0
- data/lib/archsight/web/public/vue/requirementDiagram-UZGBJVZJ-Dkt6OSlY.js +64 -0
- data/lib/archsight/web/public/vue/sankeyDiagram-TZEHDZUN-BqprTk8x.js +10 -0
- data/lib/archsight/web/public/vue/sequenceDiagram-WL72ISMW-CTmTe1FQ.js +145 -0
- data/lib/archsight/web/public/vue/stateDiagram-FKZM4ZOC-CphqmkEU.js +1 -0
- data/lib/archsight/web/public/vue/stateDiagram-v2-4FDKWEC3-CxaDW5sW.js +1 -0
- data/lib/archsight/web/public/vue/timeline-definition-IT6M3QCI-CSQUZkyE.js +61 -0
- data/lib/archsight/web/public/vue/treemap-GDKQZRPO-DTojm7Yr.js +162 -0
- data/lib/archsight/web/public/{css/graph.css → vue/useGraphviz-A5s4h76R.js} +2 -1
- data/lib/archsight/web/public/vue/useHighlight-C6Kb5G3l.js +10 -0
- data/lib/archsight/web/public/vue/useMermaid-DqxTrLRB.js +1 -0
- data/lib/archsight/web/public/vue/usePanZoom-BybZ_rfh.js +11 -0
- data/lib/archsight/web/public/vue/xychartDiagram-PRI3JC2R-B1ZJZtDC.js +7 -0
- data/lib/archsight/web/public/vue.html +15 -0
- data/media/artifact.jpg +0 -0
- data/media/service.jpg +0 -0
- metadata +86 -84
- data/lib/archsight/web/public/css/artifact.css +0 -995
- data/lib/archsight/web/public/css/base.css +0 -201
- data/lib/archsight/web/public/css/editor.css +0 -863
- data/lib/archsight/web/public/css/highlight.min.css +0 -10
- data/lib/archsight/web/public/css/iconoir.css +0 -22
- data/lib/archsight/web/public/css/instance.css +0 -824
- data/lib/archsight/web/public/css/layout.css +0 -421
- data/lib/archsight/web/public/css/mermaid-layers.css +0 -188
- data/lib/archsight/web/public/css/pico.min.css +0 -4
- data/lib/archsight/web/public/img/archimate.png +0 -0
- data/lib/archsight/web/public/img/togaf-high-level.png +0 -0
- data/lib/archsight/web/public/js/editor.js +0 -421
- data/lib/archsight/web/public/js/graph-zoom.js +0 -18
- data/lib/archsight/web/public/js/highlight.min.js +0 -3899
- data/lib/archsight/web/public/js/htmx.min.js +0 -1
- data/lib/archsight/web/public/js/lexical-editor.js +0 -308
- data/lib/archsight/web/public/js/mermaid-init.js +0 -88
- data/lib/archsight/web/public/js/mermaid.min.js +0 -2811
- data/lib/archsight/web/public/js/sparkline.js +0 -42
- data/lib/archsight/web/public/js/svg-pan-zoom.min.js +0 -3
- data/lib/archsight/web/public/js/svg-zoom-controls.js +0 -93
- data/lib/archsight/web/views/api_docs.erb +0 -19
- data/lib/archsight/web/views/index.haml +0 -12
- data/lib/archsight/web/views/partials/artifact/_activity.haml +0 -55
- data/lib/archsight/web/views/partials/artifact/_agentic.haml +0 -25
- data/lib/archsight/web/views/partials/artifact/_deployment.haml +0 -29
- data/lib/archsight/web/views/partials/artifact/_git_info.haml +0 -16
- data/lib/archsight/web/views/partials/artifact/_language_stats.haml +0 -53
- data/lib/archsight/web/views/partials/artifact/_links.haml +0 -24
- data/lib/archsight/web/views/partials/artifact/_project_estimate.haml +0 -32
- data/lib/archsight/web/views/partials/artifact/_repositories.haml +0 -55
- data/lib/archsight/web/views/partials/artifact/_team.haml +0 -83
- data/lib/archsight/web/views/partials/artifact/_workflow.haml +0 -69
- data/lib/archsight/web/views/partials/components/_activity.haml +0 -37
- data/lib/archsight/web/views/partials/components/_git.haml +0 -17
- data/lib/archsight/web/views/partials/components/_jira.haml +0 -18
- data/lib/archsight/web/views/partials/components/_languages.haml +0 -29
- data/lib/archsight/web/views/partials/components/_owner.haml +0 -15
- data/lib/archsight/web/views/partials/components/_repositories.haml +0 -37
- data/lib/archsight/web/views/partials/components/_status.haml +0 -23
- data/lib/archsight/web/views/partials/editor/_field.haml +0 -80
- data/lib/archsight/web/views/partials/editor/_form.haml +0 -131
- data/lib/archsight/web/views/partials/editor/_relations.haml +0 -39
- data/lib/archsight/web/views/partials/editor/_yaml_output.haml +0 -33
- data/lib/archsight/web/views/partials/instance/_analysis_detail.haml +0 -67
- data/lib/archsight/web/views/partials/instance/_analysis_result.haml +0 -64
- data/lib/archsight/web/views/partials/instance/_detail.haml +0 -107
- data/lib/archsight/web/views/partials/instance/_graph.haml +0 -6
- data/lib/archsight/web/views/partials/instance/_import_detail.haml +0 -87
- data/lib/archsight/web/views/partials/instance/_list.haml +0 -84
- data/lib/archsight/web/views/partials/instance/_relations.haml +0 -43
- data/lib/archsight/web/views/partials/instance/_requirements.haml +0 -41
- data/lib/archsight/web/views/partials/instance/_view_detail.haml +0 -57
- data/lib/archsight/web/views/partials/layout/_content.haml +0 -50
- data/lib/archsight/web/views/partials/layout/_error.haml +0 -22
- data/lib/archsight/web/views/partials/layout/_head.haml +0 -26
- data/lib/archsight/web/views/partials/layout/_navigation.haml +0 -21
- data/lib/archsight/web/views/partials/layout/_sidebar.haml +0 -27
- data/lib/archsight/web/views/search.haml +0 -53
- /data/{lib/archsight/web/doc → docs}/archimate.md +0 -0
- /data/{lib/archsight/web/doc → docs}/computed_annotations.md +0 -0
- /data/{lib/archsight/web/doc → docs}/icons.md +0 -0
- /data/{lib/archsight/web/doc → docs}/import.md +0 -0
- /data/{lib/archsight/web/doc → docs}/modeling.md +0 -0
- /data/{lib/archsight/web/doc → docs}/search.md +0 -0
- /data/{lib/archsight/web/doc → docs}/togaf.md +0 -0
- /data/{lib/archsight/web/doc → docs}/tool.md +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 750620aa30b68f0a3cfa0f53be2d717ae0496b829e5ecc588a904b3bf39dbd10
|
|
4
|
+
data.tar.gz: 8ddf46b557c7830212d0e699149ce2b53b9476c7748fc90c82480f22be226047
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 39b0cc9b3b321c1e2627197a8f2edb13bdb8fe78273e315b70c886d05d64da534769850f5991e70d6c38d549f7229988d3d2e03bbd075f01e9aad0b4b4aad802
|
|
7
|
+
data.tar.gz: 69c4784e97d7c2aa01bf1030109a621f1eacdf4d7fe131d2e7c56eb29b42524ed3a68c69f97003ef804a7e38cedf118dc186157a948e5c81479191927955fa94
|
data/Dockerfile
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# Build stage
|
|
2
2
|
FROM ruby:4.0-alpine3.23 AS builder
|
|
3
3
|
|
|
4
|
-
RUN apk add --no-cache build-base git libffi-dev yaml-dev
|
|
4
|
+
RUN apk add --no-cache build-base git libffi-dev yaml-dev nodejs npm
|
|
5
5
|
|
|
6
6
|
WORKDIR /app
|
|
7
7
|
COPY . .
|
|
8
8
|
|
|
9
|
+
# Build frontend assets
|
|
10
|
+
RUN cd frontend && npm ci && npm run build
|
|
11
|
+
|
|
9
12
|
# Build and install the gem
|
|
10
13
|
RUN gem build archsight.gemspec && \
|
|
11
14
|
gem install --no-document archsight-*.gem
|
|
@@ -13,8 +16,6 @@ RUN gem build archsight.gemspec && \
|
|
|
13
16
|
# Runtime stage
|
|
14
17
|
FROM ruby:4.0-alpine3.23
|
|
15
18
|
|
|
16
|
-
RUN apk add --no-cache graphviz
|
|
17
|
-
|
|
18
19
|
# Copy installed gems from builder (including default gems that were updated)
|
|
19
20
|
COPY --from=builder /usr/local/bundle /usr/local/bundle
|
|
20
21
|
COPY --from=builder /usr/local/lib/ruby/gems /usr/local/lib/ruby/gems
|
|
@@ -35,4 +36,4 @@ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
|
35
36
|
CMD wget --no-verbose --tries=1 --spider http://localhost:4567/ || exit 1
|
|
36
37
|
|
|
37
38
|
ENTRYPOINT ["archsight"]
|
|
38
|
-
CMD ["web", "--port", "4567"]
|
|
39
|
+
CMD ["web", "--port", "4567", "--host", "0.0.0.0"]
|
data/README.md
CHANGED
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
Ruby gem for visualizing and managing enterprise architecture documentation using YAML resources with GraphViz visualization. Inspired by ArchiMate 3.2.
|
|
9
9
|
|
|
10
|
+
| Service view | Artifact view |
|
|
11
|
+
|:---:|:---:|
|
|
12
|
+
|  |  |
|
|
13
|
+
|
|
10
14
|
## Installation
|
|
11
15
|
|
|
12
16
|
Add to your Gemfile:
|
|
@@ -21,16 +25,8 @@ Or install directly:
|
|
|
21
25
|
gem install archsight
|
|
22
26
|
```
|
|
23
27
|
|
|
24
|
-
### Option 2: Helm (Kubernetes)
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
helm install archsight oci://ghcr.io/ionos-cloud/archsight/charts/archsight
|
|
28
|
-
```
|
|
29
|
-
|
|
30
28
|
## Quick Start
|
|
31
29
|
|
|
32
|
-
### Option 1: CLI
|
|
33
|
-
|
|
34
30
|
```bash
|
|
35
31
|
# Start web server (looks for resources in current directory)
|
|
36
32
|
archsight web
|
|
@@ -44,29 +40,7 @@ ARCHSIGHT_RESOURCES_DIR=/path/to/resources archsight web
|
|
|
44
40
|
|
|
45
41
|
Access at: <http://localhost:4567>
|
|
46
42
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# Run web server (default)
|
|
51
|
-
docker run -p 4567:4567 -v "/path/to/resources:/resources" ghcr.io/ionos-cloud/archsight
|
|
52
|
-
|
|
53
|
-
# Run in production mode with logging
|
|
54
|
-
docker run -p 4567:4567 -v "/path/to/resources:/resources" ghcr.io/ionos-cloud/archsight web --production
|
|
55
|
-
|
|
56
|
-
# Run lint
|
|
57
|
-
docker run -v "/path/to/resources:/resources" ghcr.io/ionos-cloud/archsight lint -r /resources
|
|
58
|
-
|
|
59
|
-
# Run any command
|
|
60
|
-
docker run ghcr.io/ionos-cloud/archsight version
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Access web interface at: <http://localhost:4567>
|
|
64
|
-
|
|
65
|
-
**Notes:**
|
|
66
|
-
|
|
67
|
-
- Volume mount `-v "/path/to/resources:/resources"` mounts your resources directory
|
|
68
|
-
- Default command starts the web server on port 4567
|
|
69
|
-
- Pass subcommands directly (lint, version, console, template)
|
|
43
|
+
Also available as [Docker](docs/docker.md) image and [Helm chart](docs/kubernetes.md).
|
|
70
44
|
|
|
71
45
|
## CLI Commands
|
|
72
46
|
|
|
@@ -85,6 +59,7 @@ archsight version # Show version
|
|
|
85
59
|
```bash
|
|
86
60
|
archsight web [--resources PATH] [--port PORT] [--host HOST]
|
|
87
61
|
[--production] [--disable-reload] [--enable-logging]
|
|
62
|
+
[--inline-edit]
|
|
88
63
|
```
|
|
89
64
|
|
|
90
65
|
| Option | Description |
|
|
@@ -95,6 +70,7 @@ archsight web [--resources PATH] [--port PORT] [--host HOST]
|
|
|
95
70
|
| `--production` | Run in production mode (quiet startup) |
|
|
96
71
|
| `--disable-reload` | Disable the reload button in the UI |
|
|
97
72
|
| `--enable-logging` | Enable request logging (default: false in dev, true in prod) |
|
|
73
|
+
| `--inline-edit` | Enable inline editing to save directly to source files |
|
|
98
74
|
|
|
99
75
|
## Features
|
|
100
76
|
|
|
@@ -125,7 +101,7 @@ claude mcp add --transport sse ionos-architecture http://localhost:4567/mcp/sse
|
|
|
125
101
|
**Browse & Search:**
|
|
126
102
|
|
|
127
103
|
- Browse resources by type (Products, Services, Components, Requirements, etc.)
|
|
128
|
-
- Search by name or tag using the [query language](
|
|
104
|
+
- Search by name or tag using the [query language](docs/search.md)
|
|
129
105
|
- Filter by annotations (quality attributes, status, frameworks)
|
|
130
106
|
|
|
131
107
|
**Visualization:**
|
|
@@ -183,42 +159,18 @@ Detailed documentation is available in the web interface under the Help menu:
|
|
|
183
159
|
|
|
184
160
|
| Guide | Description |
|
|
185
161
|
|-------|-------------|
|
|
186
|
-
| [Modeling Guide](
|
|
187
|
-
| [Query Language](
|
|
188
|
-
| [Computed Annotations](
|
|
189
|
-
| [ArchiMate Reference](
|
|
190
|
-
| [TOGAF Reference](
|
|
162
|
+
| [Modeling Guide](docs/modeling.md) | How to model architecture using resource types and relations |
|
|
163
|
+
| [Query Language](docs/search.md) | Full query syntax reference for searching resources |
|
|
164
|
+
| [Computed Annotations](docs/computed_annotations.md) | Aggregating values across relations |
|
|
165
|
+
| [ArchiMate Reference](docs/archimate.md) | ArchiMate concepts and mapping |
|
|
166
|
+
| [TOGAF Reference](docs/togaf.md) | TOGAF alignment and concepts |
|
|
167
|
+
| [Architecture](docs/architecture.md) | Technology stack and directory structure |
|
|
168
|
+
| [Docker](docs/docker.md) | Running Archsight in Docker |
|
|
169
|
+
| [Kubernetes](docs/kubernetes.md) | Helm chart deployment guide |
|
|
191
170
|
|
|
192
171
|
## Architecture
|
|
193
172
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
- **Web Framework**: Sinatra
|
|
197
|
-
- **Templating**: Haml
|
|
198
|
-
- **Styling**: Pico CSS v2.x
|
|
199
|
-
- **Interactivity**: HTMX
|
|
200
|
-
- **Icons**: Iconoir (1,671+ icons)
|
|
201
|
-
- **Visualization**: GraphViz (@hpcc-js/wasm for client-side SVG)
|
|
202
|
-
|
|
203
|
-
### Directory Structure
|
|
204
|
-
|
|
205
|
-
```text
|
|
206
|
-
archsight/
|
|
207
|
-
├── exe/archsight # CLI executable
|
|
208
|
-
├── lib/
|
|
209
|
-
│ ├── archsight.rb # Entry point
|
|
210
|
-
│ └── archsight/
|
|
211
|
-
│ ├── cli.rb # Thor CLI
|
|
212
|
-
│ ├── configuration.rb # Resources path config
|
|
213
|
-
│ ├── database.rb # YAML loader and validator
|
|
214
|
-
│ ├── query/ # Query language (lexer, parser, evaluator)
|
|
215
|
-
│ ├── resources/ # Resource types (20+)
|
|
216
|
-
│ ├── annotations/ # Annotation modules
|
|
217
|
-
│ ├── mcp/ # MCP server tools
|
|
218
|
-
│ └── web/ # Sinatra app, views, assets
|
|
219
|
-
│ └── doc/ # Documentation (markdown)
|
|
220
|
-
└── test/ # Test suite
|
|
221
|
-
```
|
|
173
|
+
See [Architecture](docs/architecture.md) for the technology stack and directory structure.
|
|
222
174
|
|
|
223
175
|
## Contributing
|
|
224
176
|
|
data/chart/archsight/README.md
CHANGED
|
@@ -1,160 +1,3 @@
|
|
|
1
1
|
# Archsight Helm Chart
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Introduction
|
|
6
|
-
|
|
7
|
-
This chart bootstraps an Archsight deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. It is designed to be flexible in how you provide the architecture "resources" (YAML files) to the application.
|
|
8
|
-
|
|
9
|
-
## Prerequisites
|
|
10
|
-
|
|
11
|
-
- Kubernetes 1.19+
|
|
12
|
-
- Helm 3.2.0+
|
|
13
|
-
|
|
14
|
-
## Installing the Chart
|
|
15
|
-
|
|
16
|
-
### From OCI Registry (Recommended)
|
|
17
|
-
|
|
18
|
-
To install the chart from the GitHub Container Registry:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
helm install my-archsight oci://ghcr.io/ionos-cloud/archsight/charts/archsight
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### From Local Source
|
|
25
|
-
|
|
26
|
-
To install the chart with the release name `my-archsight` from local source:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
helm install my-archsight ./chart/archsight
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Configuration
|
|
33
|
-
|
|
34
|
-
The following table lists the configurable parameters of the Archsight chart and their default values.
|
|
35
|
-
|
|
36
|
-
| Parameter | Description | Default |
|
|
37
|
-
|-----------|-------------|---------|
|
|
38
|
-
| `image.repository` | Docker image repository | `archsight` |
|
|
39
|
-
| `image.tag` | Docker image tag | `""` (uses appVersion) |
|
|
40
|
-
| `service.type` | Kubernetes Service type | `ClusterIP` |
|
|
41
|
-
| `service.port` | Service port | `80` |
|
|
42
|
-
| `ingress.enabled` | Enable Ingress resource | `false` |
|
|
43
|
-
| `app.resourcesDir` | Directory where app looks for resources | `/resources` |
|
|
44
|
-
|
|
45
|
-
### Resource Management Strategies
|
|
46
|
-
|
|
47
|
-
The most important configuration is how you provide your architecture YAML files to the application. This is controlled by the `content.type` parameter.
|
|
48
|
-
|
|
49
|
-
#### 1. ConfigMap (Simple / Static)
|
|
50
|
-
Best for small deployments where the architecture definitions rarely change or are small enough to fit in a ConfigMap (1MB limit).
|
|
51
|
-
|
|
52
|
-
```yaml
|
|
53
|
-
content:
|
|
54
|
-
type: configMap
|
|
55
|
-
configMap:
|
|
56
|
-
create: true
|
|
57
|
-
data:
|
|
58
|
-
analysis.yaml: |
|
|
59
|
-
apiVersion: architecture/v1alpha1
|
|
60
|
-
kind: Analysis
|
|
61
|
-
metadata:
|
|
62
|
-
name: MyAnalysis
|
|
63
|
-
# ... content ...
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
#### 2. Persistence (Manual Management)
|
|
67
|
-
Mounts a Persistent Volume. You are responsible for putting files into this volume (e.g., manually copying them or having another process write to it).
|
|
68
|
-
|
|
69
|
-
```yaml
|
|
70
|
-
content:
|
|
71
|
-
type: persistence
|
|
72
|
-
persistence:
|
|
73
|
-
enabled: true
|
|
74
|
-
size: 1Gi
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
#### 3. EmptyDir + Git Sync (GitOps / Recommended)
|
|
78
|
-
Uses an `emptyDir` volume that is shared between the main container and init containers. This allows you to fetch your architecture definitions from a Git repository at startup.
|
|
79
|
-
|
|
80
|
-
**Example values.yaml configuration (Public Repo):**
|
|
81
|
-
|
|
82
|
-
```yaml
|
|
83
|
-
content:
|
|
84
|
-
type: emptyDir
|
|
85
|
-
|
|
86
|
-
initContainers:
|
|
87
|
-
- name: git-sync
|
|
88
|
-
image: alpine/git
|
|
89
|
-
# Clone your architecture repo into /resources
|
|
90
|
-
args: ["clone", "--depth", "1", "https://github.com/my-org/my-architecture.git", "/resources"]
|
|
91
|
-
volumeMounts:
|
|
92
|
-
- name: resources
|
|
93
|
-
mountPath: /resources
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**Example values.yaml configuration (Private Repo):**
|
|
97
|
-
|
|
98
|
-
To use a private repository, create a Kubernetes Secret containing your git token (e.g., `git-credentials` with key `token`) and reference it:
|
|
99
|
-
|
|
100
|
-
```yaml
|
|
101
|
-
content:
|
|
102
|
-
type: emptyDir
|
|
103
|
-
|
|
104
|
-
initContainers:
|
|
105
|
-
- name: git-sync
|
|
106
|
-
image: alpine/git
|
|
107
|
-
env:
|
|
108
|
-
- name: GIT_TOKEN
|
|
109
|
-
valueFrom:
|
|
110
|
-
secretKeyRef:
|
|
111
|
-
name: git-credentials
|
|
112
|
-
key: token
|
|
113
|
-
command: ["/bin/sh", "-c"]
|
|
114
|
-
# Use the env var in the URL so the token is not exposed in the pod spec
|
|
115
|
-
args:
|
|
116
|
-
- "git clone https://oauth2:$GIT_TOKEN@github.com/my-org/my-private-repo.git /resources"
|
|
117
|
-
volumeMounts:
|
|
118
|
-
- name: resources
|
|
119
|
-
mountPath: /resources
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
### Sidecars (Auto-Refresh)
|
|
124
|
-
|
|
125
|
-
If you want your application to update dynamically when the git repository changes (without restarting the pod), you can add a sidecar container that periodically pulls changes.
|
|
126
|
-
|
|
127
|
-
**Example (Private Repo with 60s Refresh Loop):**
|
|
128
|
-
|
|
129
|
-
```yaml
|
|
130
|
-
sidecars:
|
|
131
|
-
- name: git-refresher
|
|
132
|
-
image: alpine/git
|
|
133
|
-
env:
|
|
134
|
-
- name: GIT_TOKEN
|
|
135
|
-
valueFrom:
|
|
136
|
-
secretKeyRef:
|
|
137
|
-
name: git-credentials
|
|
138
|
-
key: token
|
|
139
|
-
command: ["/bin/sh", "-c"]
|
|
140
|
-
args:
|
|
141
|
-
- |
|
|
142
|
-
cd /resources
|
|
143
|
-
# Set the remote URL with the token to ensure authentication
|
|
144
|
-
git remote set-url origin "https://oauth2:${GIT_TOKEN}@github.com/my-org/my-private-repo.git"
|
|
145
|
-
while true; do
|
|
146
|
-
git pull
|
|
147
|
-
sleep 60
|
|
148
|
-
done
|
|
149
|
-
volumeMounts:
|
|
150
|
-
- name: resources
|
|
151
|
-
mountPath: /resources
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Uninstalling the Chart
|
|
155
|
-
|
|
156
|
-
To uninstall/delete the `my-archsight` deployment:
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
helm delete my-archsight
|
|
160
|
-
```
|
|
3
|
+
See the full documentation at [docs/kubernetes.md](../../docs/kubernetes.md).
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
## Technology Stack
|
|
4
|
+
|
|
5
|
+
- **Backend**: Sinatra (REST API)
|
|
6
|
+
- **Frontend**: Vue 3 + Vue Router 4
|
|
7
|
+
- **Build Tool**: Vite
|
|
8
|
+
- **Styling**: Pico CSS v2.x
|
|
9
|
+
- **Icons**: Iconoir
|
|
10
|
+
- **Visualization**: GraphViz (@hpcc-js/wasm, client-side)
|
|
11
|
+
- **Editor**: Lexical
|
|
12
|
+
|
|
13
|
+
## Directory Structure
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
archsight/
|
|
17
|
+
├── exe/archsight # CLI executable
|
|
18
|
+
├── frontend/ # Vue 3 SPA
|
|
19
|
+
│ ├── src/
|
|
20
|
+
│ │ ├── components/ # Vue components (40+)
|
|
21
|
+
│ │ ├── composables/ # Reusable composables
|
|
22
|
+
│ │ ├── router/ # Vue Router config
|
|
23
|
+
│ │ └── css/ # Styles
|
|
24
|
+
│ └── vite.config.js # Vite build config
|
|
25
|
+
├── lib/
|
|
26
|
+
│ ├── archsight.rb # Entry point
|
|
27
|
+
│ └── archsight/
|
|
28
|
+
│ ├── cli.rb # Thor CLI
|
|
29
|
+
│ ├── configuration.rb # Resources path config
|
|
30
|
+
│ ├── database.rb # YAML loader and validator
|
|
31
|
+
│ ├── query/ # Query language (lexer, parser, evaluator)
|
|
32
|
+
│ ├── resources/ # Resource types (20+)
|
|
33
|
+
│ ├── annotations/ # Annotation modules
|
|
34
|
+
│ ├── mcp/ # MCP server tools
|
|
35
|
+
│ └── web/ # Sinatra API + static file serving
|
|
36
|
+
│ └── doc/ # Documentation (markdown)
|
|
37
|
+
├── docs/ # Project documentation
|
|
38
|
+
└── test/ # Test suite
|
|
39
|
+
```
|
data/docs/docker.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Docker
|
|
2
|
+
|
|
3
|
+
Archsight is available as a Docker image from the GitHub Container Registry.
|
|
4
|
+
|
|
5
|
+
## Image
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
ghcr.io/ionos-cloud/archsight
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
The image is based on `ruby:4.0-alpine3.23`, exposes port **4567**, and includes a healthcheck.
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Run web server (default)
|
|
17
|
+
docker run -p 4567:4567 -v "/path/to/resources:/resources" ghcr.io/ionos-cloud/archsight
|
|
18
|
+
|
|
19
|
+
# Run in production mode with logging
|
|
20
|
+
docker run -p 4567:4567 -v "/path/to/resources:/resources" ghcr.io/ionos-cloud/archsight web --production
|
|
21
|
+
|
|
22
|
+
# Run lint
|
|
23
|
+
docker run -v "/path/to/resources:/resources" ghcr.io/ionos-cloud/archsight lint -r /resources
|
|
24
|
+
|
|
25
|
+
# Run any command
|
|
26
|
+
docker run ghcr.io/ionos-cloud/archsight version
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Access web interface at: <http://localhost:4567>
|
|
30
|
+
|
|
31
|
+
## Notes
|
|
32
|
+
|
|
33
|
+
- Volume mount `-v "/path/to/resources:/resources"` mounts your resources directory
|
|
34
|
+
- Default command starts the web server on port 4567
|
|
35
|
+
- Pass subcommands directly (lint, version, console, template)
|
|
36
|
+
|
|
37
|
+
## Environment Variables
|
|
38
|
+
|
|
39
|
+
| Variable | Description | Default |
|
|
40
|
+
|----------|-------------|---------|
|
|
41
|
+
| `ARCHSIGHT_RESOURCES_DIR` | Path to resources directory inside the container | `/resources` |
|
|
42
|
+
| `APP_ENV` | Application environment | `production` |
|
|
43
|
+
|
|
44
|
+
## Building Locally
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
docker build -t archsight .
|
|
48
|
+
docker run -p 4567:4567 -v "/path/to/resources:/resources" archsight
|
|
49
|
+
```
|
|
@@ -7,7 +7,7 @@ Welcome to the Architecture Documentation System. This documentation covers how
|
|
|
7
7
|
- [Tool Guide](/doc/tool) - How to use the architecture tool
|
|
8
8
|
- [Query Syntax](/doc/search) - Search and filter resources
|
|
9
9
|
- [Architecture Modeling](/doc/modeling) - How to model your architecture
|
|
10
|
-
- [REST API Documentation](/api
|
|
10
|
+
- [REST API Documentation](/docs/api) - JSON API for programmatic access
|
|
11
11
|
|
|
12
12
|
## Resource Model
|
|
13
13
|
|
|
@@ -73,3 +73,5 @@ Resources representing technology infrastructure and artifacts.
|
|
|
73
73
|
- [TOGAF](/doc/togaf) - TOGAF framework reference
|
|
74
74
|
- [Icons Reference](/doc/icons) - Available icons for resource types
|
|
75
75
|
- [Computed Annotations](/doc/computed_annotations) - Available computed annotations
|
|
76
|
+
- [Import System](/doc/import) - Declarative data imports from external sources
|
|
77
|
+
- [License Scanning](/doc/licenses) - Repository license detection and dependency analysis
|
data/docs/kubernetes.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Kubernetes (Helm)
|
|
2
|
+
|
|
3
|
+
A Helm chart for deploying [Archsight](https://github.com/ionos-cloud/archsight) on Kubernetes.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Kubernetes 1.19+
|
|
8
|
+
- Helm 3.2.0+
|
|
9
|
+
|
|
10
|
+
## Installing the Chart
|
|
11
|
+
|
|
12
|
+
### From OCI Registry (Recommended)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
helm install my-archsight oci://ghcr.io/ionos-cloud/archsight/charts/archsight
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### From Local Source
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
helm install my-archsight ./chart/archsight
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Configuration
|
|
25
|
+
|
|
26
|
+
The following table lists the configurable parameters of the Archsight chart and their default values.
|
|
27
|
+
|
|
28
|
+
| Parameter | Description | Default |
|
|
29
|
+
|-----------|-------------|---------|
|
|
30
|
+
| `image.repository` | Docker image repository | `archsight` |
|
|
31
|
+
| `image.tag` | Docker image tag | `""` (uses appVersion) |
|
|
32
|
+
| `service.type` | Kubernetes Service type | `ClusterIP` |
|
|
33
|
+
| `service.port` | Service port | `80` |
|
|
34
|
+
| `ingress.enabled` | Enable Ingress resource | `false` |
|
|
35
|
+
| `app.resourcesDir` | Directory where app looks for resources | `/resources` |
|
|
36
|
+
|
|
37
|
+
### Resource Management Strategies
|
|
38
|
+
|
|
39
|
+
The most important configuration is how you provide your architecture YAML files to the application. This is controlled by the `content.type` parameter.
|
|
40
|
+
|
|
41
|
+
#### 1. ConfigMap (Simple / Static)
|
|
42
|
+
Best for small deployments where the architecture definitions rarely change or are small enough to fit in a ConfigMap (1MB limit).
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
content:
|
|
46
|
+
type: configMap
|
|
47
|
+
configMap:
|
|
48
|
+
create: true
|
|
49
|
+
data:
|
|
50
|
+
analysis.yaml: |
|
|
51
|
+
apiVersion: architecture/v1alpha1
|
|
52
|
+
kind: Analysis
|
|
53
|
+
metadata:
|
|
54
|
+
name: MyAnalysis
|
|
55
|
+
# ... content ...
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### 2. Persistence (Manual Management)
|
|
59
|
+
Mounts a Persistent Volume. You are responsible for putting files into this volume (e.g., manually copying them or having another process write to it).
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
content:
|
|
63
|
+
type: persistence
|
|
64
|
+
persistence:
|
|
65
|
+
enabled: true
|
|
66
|
+
size: 1Gi
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### 3. EmptyDir + Git Sync (GitOps / Recommended)
|
|
70
|
+
Uses an `emptyDir` volume that is shared between the main container and init containers. This allows you to fetch your architecture definitions from a Git repository at startup.
|
|
71
|
+
|
|
72
|
+
**Example values.yaml configuration (Public Repo):**
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
content:
|
|
76
|
+
type: emptyDir
|
|
77
|
+
|
|
78
|
+
initContainers:
|
|
79
|
+
- name: git-sync
|
|
80
|
+
image: alpine/git
|
|
81
|
+
# Clone your architecture repo into /resources
|
|
82
|
+
args: ["clone", "--depth", "1", "https://github.com/my-org/my-architecture.git", "/resources"]
|
|
83
|
+
volumeMounts:
|
|
84
|
+
- name: resources
|
|
85
|
+
mountPath: /resources
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Example values.yaml configuration (Private Repo):**
|
|
89
|
+
|
|
90
|
+
To use a private repository, create a Kubernetes Secret containing your git token (e.g., `git-credentials` with key `token`) and reference it:
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
content:
|
|
94
|
+
type: emptyDir
|
|
95
|
+
|
|
96
|
+
initContainers:
|
|
97
|
+
- name: git-sync
|
|
98
|
+
image: alpine/git
|
|
99
|
+
env:
|
|
100
|
+
- name: GIT_TOKEN
|
|
101
|
+
valueFrom:
|
|
102
|
+
secretKeyRef:
|
|
103
|
+
name: git-credentials
|
|
104
|
+
key: token
|
|
105
|
+
command: ["/bin/sh", "-c"]
|
|
106
|
+
# Use the env var in the URL so the token is not exposed in the pod spec
|
|
107
|
+
args:
|
|
108
|
+
- "git clone https://oauth2:$GIT_TOKEN@github.com/my-org/my-private-repo.git /resources"
|
|
109
|
+
volumeMounts:
|
|
110
|
+
- name: resources
|
|
111
|
+
mountPath: /resources
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Sidecars (Auto-Refresh)
|
|
115
|
+
|
|
116
|
+
If you want your application to update dynamically when the git repository changes (without restarting the pod), you can add a sidecar container that periodically pulls changes.
|
|
117
|
+
|
|
118
|
+
**Example (Private Repo with 60s Refresh Loop):**
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
sidecars:
|
|
122
|
+
- name: git-refresher
|
|
123
|
+
image: alpine/git
|
|
124
|
+
env:
|
|
125
|
+
- name: GIT_TOKEN
|
|
126
|
+
valueFrom:
|
|
127
|
+
secretKeyRef:
|
|
128
|
+
name: git-credentials
|
|
129
|
+
key: token
|
|
130
|
+
command: ["/bin/sh", "-c"]
|
|
131
|
+
args:
|
|
132
|
+
- |
|
|
133
|
+
cd /resources
|
|
134
|
+
# Set the remote URL with the token to ensure authentication
|
|
135
|
+
git remote set-url origin "https://oauth2:${GIT_TOKEN}@github.com/my-org/my-private-repo.git"
|
|
136
|
+
while true; do
|
|
137
|
+
git pull
|
|
138
|
+
sleep 60
|
|
139
|
+
done
|
|
140
|
+
volumeMounts:
|
|
141
|
+
- name: resources
|
|
142
|
+
mountPath: /resources
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Uninstalling the Chart
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
helm delete my-archsight
|
|
149
|
+
```
|