blob: 238b1424eddd2416cdbd0e41bf3e942f576e3036 [file] [log] [blame]
gio0eaf2712024-04-14 13:08:46 +04001import (
2 "encoding/base64"
3 "encoding/json"
4 "strings"
5)
6
7input: {
8 network: #Network @name(Network)
9 subdomain: string @name(Subdomain)
gioefa0ed42024-06-13 12:31:43 +040010 sshPort: int @name(SSH Port) @role(port)
gio0eaf2712024-04-14 13:08:46 +040011 adminKey: string @name(Admin SSH Public Key)
12
13 // TODO(gio): auto generate
14 ssKeys: #SSHKey
15 fluxKeys: #SSHKey
16 dAppKeys: #SSHKey
17}
18
19name: "Dodo App"
20namespace: "dodo-app"
21readme: "Deploy app by pushing to Git repository"
22description: "Deploy app by pushing to Git repository"
23icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M2.837 27.257c3.363 2.45 11.566 3.523 12.546 1.4s.424-10.94.424-10.94s-1.763 1.192-2.302.147s.44-2.433 2.319-2.858c-1.96.05-2.221-.571-2.205-.93s.67-1.878 3.527-1.241c-1.6-.751-1.943-2.956 2.352-1.568c-1.421-.735-.36-2.825 1.649-.62c-.261-1.323 1.584-1.46 2.694.907M10.648 34.633a19 19 0 0 0-4.246.719'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M15.144 43.402c3.625-2.482 7.685-6.32 7.293-13.406s-1.6-6.368-.523-7.577s6.924-.99 10.712 3.353c.032-2.874-2.504-5.508-2.504-5.508a33 33 0 0 1 5.53.163c2.852.49 2.394 2.514 3.58 2.035s.971-3.472-.39-5.377c-1.666-2.33-3.223-2.83-6.358-2.188s-4.474.458-5.54-.587s-2.026-3.538-4.605-2.515c-2.935 1.164-4.398 2.438-3.767 5.04s2.34 4.558 2.972 6.844'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M22.001 16.552c-.925-.043-1.894.055-1.709 1.328'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M20.662 16.763c1.72 2.695 3.405 3.643 9.46 3.501'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M32.14 14.966c-1.223.879-2.18 3.781-2.496 5.307M23.1 14.908c.48 1.209 1.23.728 1.315.283a1.552 1.552 0 0 0-1.543-1.883m-.408 17.472c5.328 2.71 11.631.229 16.269-2.123c-1.176 4.572-5.911 5.585-8.916 6.107'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M29.099 37.115c4.376-.294 8.024-1.578 7.833-5.296'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M20.27 38.702c6.771 3.834 12.505.798 13.786-2.615'/><circle cx='24' cy='24' r='21.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/></svg>"
24_domain: "\(input.subdomain).\(input.network.domain)"
25
26images: {
27 softserve: {
28 repository: "charmcli"
29 name: "soft-serve"
30 tag: "v0.7.1"
31 pullPolicy: "IfNotPresent"
32 }
33 dodoApp: {
34 repository: "giolekva"
35 name: "pcloud-installer"
36 tag: "latest"
37 pullPolicy: "Always"
38 }
39}
40
41charts: {
42 softserve: {
giof8843412024-05-22 16:38:05 +040043 kind: "GitRepository"
44 address: "https://github.com/giolekva/pcloud.git"
45 branch: "main"
46 path: "charts/soft-serve"
gio0eaf2712024-04-14 13:08:46 +040047 }
48 dodoApp: {
giof8843412024-05-22 16:38:05 +040049 kind: "GitRepository"
50 address: "https://github.com/giolekva/pcloud.git"
51 branch: "main"
52 path: "charts/dodo-app"
gio0eaf2712024-04-14 13:08:46 +040053 }
54}
55
56portForward: [#PortForward & {
57 allocator: input.network.allocatePortAddr
gioefa0ed42024-06-13 12:31:43 +040058 reservator: input.network.reservePortAddr
gio0eaf2712024-04-14 13:08:46 +040059 sourcePort: input.sshPort
60 // TODO(gio): namespace part must be populated by app manager. Otherwise
61 // third-party app developer might point to a service from different namespace.
62 targetService: "\(release.namespace)/soft-serve"
63 targetPort: 22
64}]
65
66helm: {
67 softserve: {
68 chart: charts.softserve
giof9f0bee2024-06-11 20:10:05 +040069 info: "Installing Git server"
gio0eaf2712024-04-14 13:08:46 +040070 values: {
71 serviceType: "ClusterIP"
72 addressPool: ""
73 reservedIP: ""
74 adminKey: strings.Join([input.adminKey, input.fluxKeys.public, input.dAppKeys.public], "\n")
75 privateKey: input.ssKeys.private
76 publicKey: input.ssKeys.public
77 ingress: {
78 enabled: false
79 }
80 image: {
81 repository: images.softserve.fullName
82 tag: images.softserve.tag
83 pullPolicy: images.softserve.pullPolicy
84 }
85 }
86 }
87 "dodo-app": {
88 chart: charts.dodoApp
giof9f0bee2024-06-11 20:10:05 +040089 info: "Installing supervisor"
gio0eaf2712024-04-14 13:08:46 +040090 values: {
91 image: {
92 repository: images.dodoApp.fullName
93 tag: images.dodoApp.tag
94 pullPolicy: images.dodoApp.pullPolicy
95 }
96 repoAddr: "soft-serve.\(release.namespace).svc.cluster.local:22"
97 sshPrivateKey: base64.Encode(null, input.dAppKeys.private)
98 self: "dodo-app.\(release.namespace).svc.cluster.local"
99 namespace: release.namespace
100 envConfig: base64.Encode(null, json.Marshal(global))
101 }
102 }
103}
104
105resources: {
106 "config-kustomization": {
107 apiVersion: "kustomize.toolkit.fluxcd.io/v1"
108 kind: "Kustomization"
109 metadata: {
110 name: "app"
111 namespace: release.namespace
112 }
113 spec: {
114 interval: "1m"
115 path: "./.dodo"
116 sourceRef: {
117 kind: "GitRepository"
118 name: "app"
119 namespace: release.namespace
120 }
121 prune: true
122 }
123 }
124 "config-secret": {
125 apiVersion: "v1"
126 kind: "Secret"
127 type: "Opaque"
128 metadata: {
129 name: "app"
130 namespace: release.namespace
131 }
132 data: {
133 identity: base64.Encode(null, input.fluxKeys.private)
134 "identity.pub": base64.Encode(null, input.fluxKeys.public)
135 known_hosts: base64.Encode(null, "soft-serve.\(release.namespace).svc.cluster.local \(input.ssKeys.public)")
136 }
137 }
138 "config-source": {
139 apiVersion: "source.toolkit.fluxcd.io/v1"
140 kind: "GitRepository"
141 metadata: {
142 name: "app"
143 namespace: release.namespace
144 }
145 spec: {
146 interval: "1m0s"
147 ref: branch: "dodo"
148 secretRef: name: "app"
149 timeout: "60s"
150 url: "ssh://soft-serve.\(release.namespace).svc.cluster.local:22/app"
151 }
152 }
153}
154
155help: [{
156 title: "How to use"
157 contents: """
158 Clone: git clone ssh://\(_domain):\(input.sshPort)/app
159 """
160}]