archsight 0.1.4 → 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 +44 -59
- data/chart/archsight/Chart.yaml +6 -0
- data/chart/archsight/README.md +3 -0
- data/chart/archsight/templates/NOTES.txt +22 -0
- data/chart/archsight/templates/_helpers.tpl +62 -0
- data/chart/archsight/templates/deployment.yaml +114 -0
- data/chart/archsight/templates/ingress.yaml +56 -0
- data/chart/archsight/templates/resources-configmap.yaml +10 -0
- data/chart/archsight/templates/resources-pvc.yaml +23 -0
- data/chart/archsight/templates/service.yaml +15 -0
- data/chart/archsight/templates/serviceaccount.yaml +12 -0
- data/chart/archsight/values.yaml +162 -0
- data/docs/architecture.md +39 -0
- data/docs/docker.md +49 -0
- data/{lib/archsight/web/doc → docs}/import.md +10 -2
- 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/analysis/executor.rb +0 -10
- data/lib/archsight/annotations/annotation.rb +85 -36
- data/lib/archsight/annotations/architecture_annotations.rb +1 -34
- data/lib/archsight/annotations/computed.rb +1 -1
- data/lib/archsight/annotations/generated_annotations.rb +6 -3
- data/lib/archsight/annotations/git_annotations.rb +8 -4
- data/lib/archsight/annotations/interface_annotations.rb +35 -0
- data/lib/archsight/cli.rb +4 -2
- data/lib/archsight/editor/content_hasher.rb +37 -0
- data/lib/archsight/editor/file_writer.rb +79 -0
- data/lib/archsight/editor.rb +237 -0
- data/lib/archsight/graph.rb +1 -51
- data/lib/archsight/helpers.rb +0 -20
- data/lib/archsight/import/handlers/github.rb +16 -6
- data/lib/archsight/import/handlers/gitlab.rb +28 -10
- data/lib/archsight/import/handlers/repository.rb +56 -6
- data/lib/archsight/import/handlers/rest_api.rb +13 -1
- data/lib/archsight/import/license_analyzer.rb +650 -0
- data/lib/archsight/import/team_matcher.rb +111 -61
- data/lib/archsight/linter.rb +1 -1
- data/lib/archsight/mcp/base.rb +11 -0
- data/lib/archsight/mcp/execute_analysis_tool.rb +100 -0
- data/lib/archsight/mcp.rb +1 -0
- data/lib/archsight/renderer.rb +4 -4
- data/lib/archsight/resources/analysis.rb +1 -17
- data/lib/archsight/resources/application_interface.rb +1 -5
- data/lib/archsight/resources/base.rb +14 -14
- data/lib/archsight/resources/business_actor.rb +18 -3
- data/lib/archsight/resources/technology_artifact.rb +48 -0
- data/lib/archsight/resources/technology_interface.rb +1 -1
- data/lib/archsight/resources/technology_service.rb +5 -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 +48 -128
- data/lib/archsight/web/editor/form_builder.rb +100 -0
- data/lib/archsight/web/editor/helpers.rb +150 -0
- data/lib/archsight/web/editor/routes.rb +166 -0
- 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 +104 -77
- 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/highlight.min.css +0 -10
- data/lib/archsight/web/public/css/iconoir.css +0 -22
- data/lib/archsight/web/public/css/instance.css +0 -818
- 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/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/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/instance/_analysis_detail.haml +0 -74
- data/lib/archsight/web/views/partials/instance/_analysis_result.haml +0 -64
- data/lib/archsight/web/views/partials/instance/_detail.haml +0 -103
- 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 -44
- data/lib/archsight/web/views/partials/layout/_error.haml +0 -22
- data/lib/archsight/web/views/partials/layout/_head.haml +0 -24
- 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}/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
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
replicaCount: 1
|
|
2
|
+
|
|
3
|
+
image:
|
|
4
|
+
repository: ghcr.io/ionos-cloud/archsight
|
|
5
|
+
pullPolicy: IfNotPresent
|
|
6
|
+
# Overrides the image tag whose default is the chart appVersion.
|
|
7
|
+
tag: ""
|
|
8
|
+
|
|
9
|
+
imagePullSecrets: []
|
|
10
|
+
nameOverride: ""
|
|
11
|
+
fullnameOverride: ""
|
|
12
|
+
|
|
13
|
+
serviceAccount:
|
|
14
|
+
# Specifies whether a service account should be created
|
|
15
|
+
create: true
|
|
16
|
+
# Annotations to add to the service account
|
|
17
|
+
annotations: {}
|
|
18
|
+
# The name of the service account to use.
|
|
19
|
+
# If not set and create is true, a name is generated using the fullname template
|
|
20
|
+
name: ""
|
|
21
|
+
|
|
22
|
+
podAnnotations: {}
|
|
23
|
+
|
|
24
|
+
podSecurityContext: {}
|
|
25
|
+
# fsGroup: 2000
|
|
26
|
+
|
|
27
|
+
securityContext: {}
|
|
28
|
+
# capabilities:
|
|
29
|
+
# drop:
|
|
30
|
+
# - ALL
|
|
31
|
+
# readOnlyRootFilesystem: true
|
|
32
|
+
# runAsNonRoot: true
|
|
33
|
+
# runAsUser: 1000
|
|
34
|
+
|
|
35
|
+
service:
|
|
36
|
+
type: ClusterIP
|
|
37
|
+
port: 80
|
|
38
|
+
targetPort: 4567
|
|
39
|
+
|
|
40
|
+
ingress:
|
|
41
|
+
enabled: false
|
|
42
|
+
className: ""
|
|
43
|
+
annotations: {}
|
|
44
|
+
# kubernetes.io/ingress.class: nginx
|
|
45
|
+
# kubernetes.io/tls-acme: "true"
|
|
46
|
+
hosts:
|
|
47
|
+
- host: chart-example.local
|
|
48
|
+
paths:
|
|
49
|
+
- path: /
|
|
50
|
+
pathType: ImplementationSpecific
|
|
51
|
+
tls: []
|
|
52
|
+
# - secretName: chart-example-tls
|
|
53
|
+
# hosts:
|
|
54
|
+
# - chart-example.local
|
|
55
|
+
|
|
56
|
+
resources: {}
|
|
57
|
+
# limits:
|
|
58
|
+
# cpu: 100m
|
|
59
|
+
# memory: 128Mi
|
|
60
|
+
# requests:
|
|
61
|
+
# cpu: 100m
|
|
62
|
+
# memory: 128Mi
|
|
63
|
+
|
|
64
|
+
autoscaling:
|
|
65
|
+
enabled: false
|
|
66
|
+
minReplicas: 1
|
|
67
|
+
maxReplicas: 100
|
|
68
|
+
targetCPUUtilizationPercentage: 80
|
|
69
|
+
# targetMemoryUtilizationPercentage: 80
|
|
70
|
+
|
|
71
|
+
nodeSelector: {}
|
|
72
|
+
|
|
73
|
+
tolerations: []
|
|
74
|
+
|
|
75
|
+
affinity: {}
|
|
76
|
+
|
|
77
|
+
# Application specific configuration
|
|
78
|
+
app:
|
|
79
|
+
resourcesDir: /resources
|
|
80
|
+
env: production
|
|
81
|
+
|
|
82
|
+
# Strategy for populating the /resources directory
|
|
83
|
+
# Options are "emptyDir", "configMap", "persistence" (PVC), or usage of "extraVolumes"
|
|
84
|
+
content:
|
|
85
|
+
# type: "emptyDir" | "configMap" | "persistence" | "custom"
|
|
86
|
+
# - emptyDir: Simple, ephemeral. Good if using initContainers to fetch data.
|
|
87
|
+
# - configMap: Mounts a ConfigMap. Good for small, static datasets.
|
|
88
|
+
# - persistence: Mounts a PersistentVolumeClaim. Good for large datasets.
|
|
89
|
+
# - custom: Do not create the main volume automatically; rely on extraVolumes/extraVolumeMounts.
|
|
90
|
+
type: emptyDir
|
|
91
|
+
|
|
92
|
+
configMap:
|
|
93
|
+
# If true, creating a ConfigMap from the `data` below.
|
|
94
|
+
create: false
|
|
95
|
+
# Name of the ConfigMap to mount (if create: false) or create (if create: true)
|
|
96
|
+
# If create: true and name is empty, fullname + "-resources" is used.
|
|
97
|
+
name: ""
|
|
98
|
+
# Data to inject into the ConfigMap (filename: content)
|
|
99
|
+
data:
|
|
100
|
+
# sample.yaml: |
|
|
101
|
+
# apiVersion: architecture/v1alpha1
|
|
102
|
+
# kind: Analysis
|
|
103
|
+
# ...
|
|
104
|
+
{}
|
|
105
|
+
|
|
106
|
+
persistence:
|
|
107
|
+
enabled: false
|
|
108
|
+
# existingClaim: my-claim
|
|
109
|
+
storageClass: ""
|
|
110
|
+
accessModes:
|
|
111
|
+
- ReadWriteOnce
|
|
112
|
+
size: 1Gi
|
|
113
|
+
annotations: {}
|
|
114
|
+
|
|
115
|
+
# Add sidecars or initContainers (e.g., for git-sync)
|
|
116
|
+
initContainers: []
|
|
117
|
+
# Example: Fetching from a private repository using a specific Secret
|
|
118
|
+
# - name: git-sync
|
|
119
|
+
# image: alpine/git
|
|
120
|
+
# env:
|
|
121
|
+
# - name: GIT_TOKEN
|
|
122
|
+
# valueFrom:
|
|
123
|
+
# secretKeyRef:
|
|
124
|
+
# name: my-git-credentials
|
|
125
|
+
# key: token
|
|
126
|
+
# command: ["/bin/sh", "-c"]
|
|
127
|
+
# args:
|
|
128
|
+
# - "git clone https://oauth2:$GIT_TOKEN@github.com/my-org/my-private-repo.git /resources"
|
|
129
|
+
# volumeMounts:
|
|
130
|
+
# - name: resources
|
|
131
|
+
# mountPath: /resources
|
|
132
|
+
|
|
133
|
+
sidecars: []
|
|
134
|
+
# Example: Periodically update resources from a private repository
|
|
135
|
+
# - name: git-sync-private
|
|
136
|
+
# image: alpine/git
|
|
137
|
+
# env:
|
|
138
|
+
# - name: GIT_TOKEN
|
|
139
|
+
# valueFrom:
|
|
140
|
+
# secretKeyRef:
|
|
141
|
+
# name: my-git-credentials
|
|
142
|
+
# key: token
|
|
143
|
+
# command: ["/bin/sh", "-c"]
|
|
144
|
+
# args:
|
|
145
|
+
# - |
|
|
146
|
+
# cd /resources
|
|
147
|
+
# # Ensure the remote uses the current token
|
|
148
|
+
# git remote set-url origin "https://oauth2:${GIT_TOKEN}@github.com/my-org/my-private-repo.git"
|
|
149
|
+
# while true; do
|
|
150
|
+
# git pull
|
|
151
|
+
# sleep 60
|
|
152
|
+
# done
|
|
153
|
+
# volumeMounts:
|
|
154
|
+
# - name: resources
|
|
155
|
+
# mountPath: /resources
|
|
156
|
+
|
|
157
|
+
# Custom volumes and mounts if you need more control
|
|
158
|
+
extraVolumes: []
|
|
159
|
+
extraVolumeMounts: []
|
|
160
|
+
|
|
161
|
+
# Command arguments (passed to ENTRYPOINT ["archsight"])
|
|
162
|
+
args: ["web", "--port", "4567", "-H", "0.0.0.0", "--production"]
|
|
@@ -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
|
+
```
|
|
@@ -104,8 +104,9 @@ Lists repositories from a GitLab instance and generates child Import resources.
|
|
|
104
104
|
- `host` - GitLab host (required)
|
|
105
105
|
- `exploreGroups` - If "true", explore all visible groups (default: false)
|
|
106
106
|
- `repoOutputPath` - Output path for repository handler results
|
|
107
|
-
- `fallbackTeam` - Default team when no contributor match found
|
|
108
|
-
- `botTeam` - Team for bot-only repositories
|
|
107
|
+
- `fallbackTeam` - Default team when no contributor match found (propagated to child imports)
|
|
108
|
+
- `botTeam` - Team for bot-only repositories (propagated to child imports)
|
|
109
|
+
- `corporateAffixes` - Comma-separated corporate username affixes for team matching, e.g., "ionos,1and1" (propagated to child imports)
|
|
109
110
|
|
|
110
111
|
**Environment:**
|
|
111
112
|
- `GITLAB_TOKEN` - Personal access token (required)
|
|
@@ -119,6 +120,9 @@ Lists repositories from a GitHub organization and generates child Import resourc
|
|
|
119
120
|
**Configuration:**
|
|
120
121
|
- `org` - GitHub organization (required)
|
|
121
122
|
- `repoOutputPath` - Output path for repository handler results
|
|
123
|
+
- `fallbackTeam` - Default team when no contributor match found (propagated to child imports)
|
|
124
|
+
- `botTeam` - Team for bot-only repositories (propagated to child imports)
|
|
125
|
+
- `corporateAffixes` - Comma-separated corporate username affixes for team matching, e.g., "ionos,1and1" (propagated to child imports)
|
|
122
126
|
|
|
123
127
|
**Environment:**
|
|
124
128
|
- `GITHUB_TOKEN` - GitHub Personal Access Token (required)
|
|
@@ -140,6 +144,7 @@ Analyzes a single git repository and generates a TechnologyArtifact resource.
|
|
|
140
144
|
- `sccPath` - Path to scc binary (default: scc)
|
|
141
145
|
- `fallbackTeam` - Default team when no contributor match found
|
|
142
146
|
- `botTeam` - Team for bot-only repositories
|
|
147
|
+
- `corporateAffixes` - Comma-separated corporate username affixes for team matching (e.g., "ionos,1and1"). Enables matching git usernames like `jsmith-ionos` or `ionos-jsmith` to team member "John Smith". Without this, corporate username pattern matching is inactive.
|
|
143
148
|
|
|
144
149
|
**Output:** Generates one TechnologyArtifact resource with:
|
|
145
150
|
- Code analysis metrics (languages, LOC, estimated cost)
|
|
@@ -287,6 +292,7 @@ metadata:
|
|
|
287
292
|
import/config/host: gitlab.company.com
|
|
288
293
|
import/config/repoOutputPath: generated/repositories.yaml
|
|
289
294
|
import/config/fallbackTeam: "Team:Platform"
|
|
295
|
+
import/config/corporateAffixes: "ionos,1and1"
|
|
290
296
|
spec: {}
|
|
291
297
|
```
|
|
292
298
|
|
|
@@ -305,6 +311,8 @@ metadata:
|
|
|
305
311
|
import/config/gitUrl: git@gitlab.company.com:company/my-service.git
|
|
306
312
|
import/config/archived: "false"
|
|
307
313
|
import/config/visibility: internal
|
|
314
|
+
import/config/fallbackTeam: "Team:Platform"
|
|
315
|
+
import/config/corporateAffixes: "ionos,1and1"
|
|
308
316
|
import/outputPath: generated/repositories.yaml
|
|
309
317
|
spec: {}
|
|
310
318
|
---
|
|
@@ -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
|
+
```
|