@vfarcic/dot-ai 0.116.0 → 0.117.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.
- package/README.md +21 -18
- package/dist/core/ai-provider-factory.d.ts +4 -2
- package/dist/core/ai-provider-factory.d.ts.map +1 -1
- package/dist/core/ai-provider-factory.js +17 -6
- package/dist/core/capability-operations.js +1 -1
- package/dist/core/generic-session-manager.d.ts +67 -0
- package/dist/core/generic-session-manager.d.ts.map +1 -0
- package/dist/core/generic-session-manager.js +192 -0
- package/dist/core/pattern-operations.js +1 -1
- package/dist/core/providers/noop-provider.d.ts +47 -0
- package/dist/core/providers/noop-provider.d.ts.map +1 -0
- package/dist/core/providers/noop-provider.js +63 -0
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +13 -13
- package/dist/core/session-utils.d.ts +3 -6
- package/dist/core/session-utils.d.ts.map +1 -1
- package/dist/core/session-utils.js +5 -13
- package/dist/core/shared-prompt-loader.d.ts +15 -3
- package/dist/core/shared-prompt-loader.d.ts.map +1 -1
- package/dist/core/shared-prompt-loader.js +67 -14
- package/dist/core/unified-creation-session.d.ts +3 -10
- package/dist/core/unified-creation-session.d.ts.map +1 -1
- package/dist/core/unified-creation-session.js +34 -75
- package/dist/core/unified-creation-types.d.ts +31 -22
- package/dist/core/unified-creation-types.d.ts.map +1 -1
- package/dist/interfaces/mcp.d.ts.map +1 -1
- package/dist/interfaces/mcp.js +9 -34
- package/dist/tools/answer-question.d.ts.map +1 -1
- package/dist/tools/answer-question.js +12 -12
- package/dist/tools/choose-solution.js +1 -1
- package/dist/tools/generate-manifests.d.ts.map +1 -1
- package/dist/tools/generate-manifests.js +9 -10
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -6
- package/dist/tools/organizational-data.js +12 -12
- package/dist/tools/project-setup/discovery.d.ts +15 -0
- package/dist/tools/project-setup/discovery.d.ts.map +1 -0
- package/dist/tools/project-setup/discovery.js +104 -0
- package/dist/tools/project-setup/generate-scope.d.ts +15 -0
- package/dist/tools/project-setup/generate-scope.d.ts.map +1 -0
- package/dist/tools/project-setup/generate-scope.js +237 -0
- package/dist/tools/project-setup/report-scan.d.ts +15 -0
- package/dist/tools/project-setup/report-scan.d.ts.map +1 -0
- package/dist/tools/project-setup/report-scan.js +156 -0
- package/dist/tools/project-setup/types.d.ts +111 -0
- package/dist/tools/project-setup/types.d.ts.map +1 -0
- package/dist/tools/project-setup/types.js +8 -0
- package/dist/tools/project-setup.d.ts +28 -0
- package/dist/tools/project-setup.d.ts.map +1 -0
- package/dist/tools/project-setup.js +134 -0
- package/dist/tools/recommend.js +1 -1
- package/dist/tools/remediate.js +1 -1
- package/dist/tools/version.d.ts +0 -7
- package/dist/tools/version.d.ts.map +1 -1
- package/dist/tools/version.js +5 -34
- package/package.json +4 -2
- package/prompts/capability-inference.md +2 -2
- package/prompts/infrastructure-trigger-expansion.md +2 -2
- package/prompts/intent-analysis.md +2 -2
- package/prompts/kyverno-generation.md +14 -14
- package/prompts/manifest-generation.md +5 -5
- package/prompts/map-intent-to-operation.md +2 -2
- package/prompts/pattern-complete-error.md +1 -1
- package/prompts/pattern-complete-success.md +4 -4
- package/prompts/pattern-rationale.md +1 -1
- package/prompts/pattern-resources.md +1 -1
- package/prompts/pattern-review.md +5 -5
- package/prompts/policy-complete-apply.md +4 -4
- package/prompts/policy-complete-discard.md +1 -1
- package/prompts/policy-complete-error.md +1 -1
- package/prompts/policy-complete-save.md +4 -4
- package/prompts/policy-complete-success.md +4 -4
- package/prompts/policy-namespace-scope.md +1 -1
- package/prompts/question-generation.md +5 -5
- package/prompts/resource-analysis.md +3 -3
- package/prompts/resource-selection.md +3 -3
- package/prompts/solution-enhancement.md +4 -4
- package/scripts/anthropic.nu +9 -13
- package/scripts/common.nu +31 -33
- package/scripts/ingress.nu +5 -4
- package/scripts/kubernetes.nu +38 -53
- package/dist/core/doc-discovery.d.ts +0 -38
- package/dist/core/doc-discovery.d.ts.map +0 -1
- package/dist/core/doc-discovery.js +0 -231
- package/dist/core/doc-testing-session.d.ts +0 -109
- package/dist/core/doc-testing-session.d.ts.map +0 -1
- package/dist/core/doc-testing-session.js +0 -696
- package/dist/core/doc-testing-types.d.ts +0 -127
- package/dist/core/doc-testing-types.d.ts.map +0 -1
- package/dist/core/doc-testing-types.js +0 -53
- package/dist/core/nushell-runtime.d.ts +0 -39
- package/dist/core/nushell-runtime.d.ts.map +0 -1
- package/dist/core/nushell-runtime.js +0 -103
- package/dist/core/platform-operations.d.ts +0 -70
- package/dist/core/platform-operations.d.ts.map +0 -1
- package/dist/core/platform-operations.js +0 -294
- package/dist/tools/build-platform.d.ts +0 -25
- package/dist/tools/build-platform.d.ts.map +0 -1
- package/dist/tools/build-platform.js +0 -277
- package/dist/tools/test-docs.d.ts +0 -22
- package/dist/tools/test-docs.d.ts.map +0 -1
- package/dist/tools/test-docs.js +0 -351
- package/prompts/doc-testing-done.md +0 -51
- package/prompts/doc-testing-fix.md +0 -120
- package/prompts/doc-testing-scan.md +0 -140
- package/prompts/doc-testing-test-section.md +0 -169
- package/prompts/platform-operations-parse-script-help.md +0 -68
- package/scripts/ack.nu +0 -195
- package/scripts/argo-workflows.nu +0 -47
- package/scripts/argocd.nu +0 -85
- package/scripts/aso.nu +0 -74
- package/scripts/backstage.nu +0 -349
- package/scripts/cert-manager.nu +0 -13
- package/scripts/cnpg.nu +0 -14
- package/scripts/dot.nu +0 -32
- package/scripts/external-secrets.nu +0 -110
- package/scripts/gatekeeper.nu +0 -19
- package/scripts/github.nu +0 -42
- package/scripts/image.nu +0 -67
- package/scripts/kro.nu +0 -11
- package/scripts/kubevela.nu +0 -22
- package/scripts/port.nu +0 -71
- package/scripts/prometheus.nu +0 -21
- package/scripts/registry.nu +0 -55
- package/scripts/storage.nu +0 -210
- package/scripts/tests.nu +0 -12
- package/scripts/velero.nu +0 -45
- package/shared-prompts/validate-docs.md +0 -22
package/scripts/backstage.nu
DELETED
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Configures a Backstage instance with Crossplane integration
|
|
4
|
-
def --env "main configure backstage" [] {
|
|
5
|
-
|
|
6
|
-
rm --force --recursive backstage
|
|
7
|
-
|
|
8
|
-
print $"
|
|
9
|
-
When asked for a name for the Backstage app make sure to keep the default value (ansi yellow_bold)backstage(ansi reset)
|
|
10
|
-
Press the (ansi yellow_bold)enter key(ansi reset) to continue.
|
|
11
|
-
"
|
|
12
|
-
input
|
|
13
|
-
|
|
14
|
-
npx @backstage/create-app@latest
|
|
15
|
-
|
|
16
|
-
cd backstage
|
|
17
|
-
|
|
18
|
-
for package in [
|
|
19
|
-
"@terasky/backstage-plugin-crossplane-common@1.1.0",
|
|
20
|
-
"@terasky/backstage-plugin-crossplane-permissions-backend@1.1.1",
|
|
21
|
-
"@terasky/backstage-plugin-kubernetes-ingestor@1.5.0",
|
|
22
|
-
"@terasky/backstage-plugin-scaffolder-backend-module-terasky-utils@1.1.0"
|
|
23
|
-
] {
|
|
24
|
-
yarn --cwd packages/backend add $package
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
for package in [
|
|
28
|
-
"@terasky/backstage-plugin-crossplane-resources-frontend@1.4.0"
|
|
29
|
-
] {
|
|
30
|
-
yarn --cwd packages/app add $package
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
open app-config.yaml
|
|
34
|
-
| upsert backend.csp.upgrade-insecure-requests false
|
|
35
|
-
| upsert crossplane.enablePermissions false
|
|
36
|
-
| upsert kubernetesIngestor.components.enabled true
|
|
37
|
-
| upsert kubernetesIngestor.components.taskRunner.frequency 10
|
|
38
|
-
| upsert kubernetesIngestor.components.taskRunner.timeout 600
|
|
39
|
-
| upsert kubernetesIngestor.components.excludedNamespaces []
|
|
40
|
-
| upsert kubernetesIngestor.components.excludedNamespaces.0 "kube-public"
|
|
41
|
-
| upsert kubernetesIngestor.components.excludedNamespaces.1 "kube-system"
|
|
42
|
-
| upsert kubernetesIngestor.components.customWorkloadTypes []
|
|
43
|
-
| upsert kubernetesIngestor.components.customWorkloadTypes.0 { group: "core.oam.dev", apiVersion: "v1beta1", plural: "applications" }
|
|
44
|
-
| upsert kubernetesIngestor.components.disableDefaultWorkloadTypes "${DISABLE_DEFAULT_WORKLOAD_TYPES-false}"
|
|
45
|
-
| upsert kubernetesIngestor.components.onlyIngestAnnotatedResources false
|
|
46
|
-
| upsert kubernetesIngestor.crossplane.claims.ingestAllClaims true
|
|
47
|
-
| upsert kubernetesIngestor.crossplane.xrds.publishPhase.allowedTargets ["github.com"]
|
|
48
|
-
| upsert kubernetesIngestor.crossplane.xrds.publishPhase.target "github.com"
|
|
49
|
-
| upsert kubernetesIngestor.crossplane.xrds.publishPhase.target "github.com"
|
|
50
|
-
| upsert kubernetesIngestor.crossplane.xrds.publishPhase.allowRepoSelection true
|
|
51
|
-
| upsert kubernetesIngestor.crossplane.xrds.enabled true
|
|
52
|
-
| upsert kubernetesIngestor.crossplane.xrds.taskRunner.frequency 10
|
|
53
|
-
| upsert kubernetesIngestor.crossplane.xrds.taskRunner.timeout 600
|
|
54
|
-
| upsert kubernetesIngestor.crossplane.xrds.ingestAllXRDs true
|
|
55
|
-
| upsert kubernetesIngestor.crossplane.xrds.convertDefaultValuesToPlaceholders true
|
|
56
|
-
| upsert kubernetes {}
|
|
57
|
-
| upsert kubernetes.frontend.podDelete.enabled true
|
|
58
|
-
| upsert kubernetes.serviceLocatorMethod.type "multiTenant"
|
|
59
|
-
| upsert kubernetes.clusterLocatorMethods [{}]
|
|
60
|
-
| upsert kubernetes.clusterLocatorMethods.0.type "config"
|
|
61
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters [{}]
|
|
62
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.url "${KUBE_URL}"
|
|
63
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.name "kind"
|
|
64
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.authProvider "serviceAccount"
|
|
65
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.skipTLSVerify true
|
|
66
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.skipMetricsLookup true
|
|
67
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.serviceAccountToken "${KUBE_SA_TOKEN}"
|
|
68
|
-
| upsert kubernetes.clusterLocatorMethods.0.clusters.0.caData "${KUBE_CA_DATA}"
|
|
69
|
-
| save app-config.yaml --force
|
|
70
|
-
|
|
71
|
-
{
|
|
72
|
-
app: {
|
|
73
|
-
baseUrl: "${BACKSTAGE_HOST}"
|
|
74
|
-
}
|
|
75
|
-
backend: {
|
|
76
|
-
baseUrl: "${BACKSTAGE_HOST}"
|
|
77
|
-
database: {
|
|
78
|
-
client: "pg"
|
|
79
|
-
connection: {
|
|
80
|
-
host: "${DB_HOST}"
|
|
81
|
-
port: 5432
|
|
82
|
-
user: "${user}"
|
|
83
|
-
password: "${password}"
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
} | to yaml | save app-config.production.yaml --force
|
|
88
|
-
|
|
89
|
-
open packages/app/src/components/catalog/EntityPage.tsx
|
|
90
|
-
| (
|
|
91
|
-
str replace
|
|
92
|
-
`} from '@backstage/plugin-kubernetes';`
|
|
93
|
-
`} from '@backstage/plugin-kubernetes';
|
|
94
|
-
|
|
95
|
-
import { CrossplaneAllResourcesTable, CrossplaneResourceGraph, isCrossplaneAvailable } from '@terasky/backstage-plugin-crossplane-resources-frontend';`
|
|
96
|
-
) | (
|
|
97
|
-
str replace
|
|
98
|
-
`const serviceEntityPage = (
|
|
99
|
-
<EntityLayout>
|
|
100
|
-
<EntityLayout.Route path="/" title="Overview">
|
|
101
|
-
{overviewContent}
|
|
102
|
-
</EntityLayout.Route>`
|
|
103
|
-
`const serviceEntityPage = (
|
|
104
|
-
<EntityLayout>
|
|
105
|
-
<EntityLayout.Route path="/" title="Overview">
|
|
106
|
-
{overviewContent}
|
|
107
|
-
</EntityLayout.Route>
|
|
108
|
-
|
|
109
|
-
<EntityLayout.Route if={isCrossplaneAvailable} path="/crossplane-resources" title="Crossplane Resources">
|
|
110
|
-
<CrossplaneAllResourcesTable />
|
|
111
|
-
</EntityLayout.Route>
|
|
112
|
-
<EntityLayout.Route if={isCrossplaneAvailable} path="/crossplane-graph" title="Crossplane Graph">
|
|
113
|
-
<CrossplaneResourceGraph />
|
|
114
|
-
</EntityLayout.Route>`
|
|
115
|
-
) | (
|
|
116
|
-
str replace
|
|
117
|
-
`const componentPage = (
|
|
118
|
-
<EntitySwitch>`
|
|
119
|
-
`const componentPage = (
|
|
120
|
-
<EntitySwitch>
|
|
121
|
-
<EntitySwitch.Case if={isComponentType('crossplane-claim')}>
|
|
122
|
-
{serviceEntityPage}
|
|
123
|
-
</EntitySwitch.Case>`
|
|
124
|
-
) | save packages/app/src/components/catalog/EntityPage.tsx --force
|
|
125
|
-
|
|
126
|
-
open packages/backend/src/index.ts
|
|
127
|
-
| (
|
|
128
|
-
str replace
|
|
129
|
-
`backend.start();`
|
|
130
|
-
`backend.add(import('@terasky/backstage-plugin-crossplane-permissions-backend'));
|
|
131
|
-
backend.add(import('@terasky/backstage-plugin-kubernetes-ingestor'));
|
|
132
|
-
backend.add(import('@terasky/backstage-plugin-scaffolder-backend-module-terasky-utils'));
|
|
133
|
-
|
|
134
|
-
backend.start();`
|
|
135
|
-
) | save packages/backend/src/index.ts --force
|
|
136
|
-
|
|
137
|
-
cd ..
|
|
138
|
-
|
|
139
|
-
get cluster data --create_service_account true
|
|
140
|
-
|
|
141
|
-
$"export NODE_OPTIONS=--no-node-snapshot\n" | save --append .env
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
# Builds and publishes a Backstage Docker image and Helm chart
|
|
146
|
-
def --env "main build backstage" [
|
|
147
|
-
tag: string
|
|
148
|
-
--image = "ghcr.io/vfarcic/idp-full-backstage"
|
|
149
|
-
--github_org = "vfarcic"
|
|
150
|
-
] {
|
|
151
|
-
|
|
152
|
-
docker login $image
|
|
153
|
-
|
|
154
|
-
cd backstage
|
|
155
|
-
|
|
156
|
-
yarn install --immutable
|
|
157
|
-
|
|
158
|
-
yarn tsc
|
|
159
|
-
|
|
160
|
-
yarn build:backend
|
|
161
|
-
|
|
162
|
-
(
|
|
163
|
-
docker buildx build
|
|
164
|
-
--file packages/backend/Dockerfile
|
|
165
|
-
--tag $"($image):($tag)"
|
|
166
|
-
--platform linux/amd64
|
|
167
|
-
.
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
docker image push $"($image):($tag)"
|
|
171
|
-
|
|
172
|
-
cd ..
|
|
173
|
-
|
|
174
|
-
open charts/backstage/Chart.yaml
|
|
175
|
-
| upsert version $tag
|
|
176
|
-
| upsert appVersion $tag
|
|
177
|
-
| save charts/backstage/Chart.yaml --force
|
|
178
|
-
|
|
179
|
-
open charts/backstage/values.yaml
|
|
180
|
-
| upsert image.repository $image
|
|
181
|
-
| upsert image.tag $tag
|
|
182
|
-
| save charts/backstage/values.yaml --force
|
|
183
|
-
|
|
184
|
-
helm package charts/backstage
|
|
185
|
-
|
|
186
|
-
helm push $"backstage-($tag).tgz" $"oci://ghcr.io/($image)"
|
|
187
|
-
|
|
188
|
-
start $"https://github.com/users/($github_org)/packages/container/package/idp-full-backstage"
|
|
189
|
-
|
|
190
|
-
print $"
|
|
191
|
-
Click (ansi yellow_bold)Package settings(ansi reset).
|
|
192
|
-
Click the (ansi yellow_bold)Change visibility(ansi reset) button, select (ansi yellow_bold)Public(ansi reset), type (ansi yellow_bold)idp-full-backstage(ansi reset) to confirm, and click the (ansi yellow_bold)I understand the consequences, change package visibility(ansi reset) button.
|
|
193
|
-
Press the (ansi yellow_bold)enter key(ansi reset) to continue.
|
|
194
|
-
"
|
|
195
|
-
input
|
|
196
|
-
|
|
197
|
-
start $"https://github.com/users/($github_org)/packages/container/package/idp-full-backstage%2Fbackstage"
|
|
198
|
-
|
|
199
|
-
print $"
|
|
200
|
-
Click (ansi yellow_bold)Package settings(ansi reset).
|
|
201
|
-
Click the (ansi yellow_bold)Change visibility(ansi reset) button, select (ansi yellow_bold)Public(ansi reset), type (ansi yellow_bold)idp-full-backstage/backstage(ansi reset) to confirm, and click the (ansi yellow_bold)I understand the consequences, change package visibility(ansi reset) button.
|
|
202
|
-
Press the (ansi yellow_bold)enter key(ansi reset) to continue.
|
|
203
|
-
"
|
|
204
|
-
input
|
|
205
|
-
|
|
206
|
-
rm $"backstage-($tag).tgz"
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
# Deploys Backstage to Kubernetes with necessary configuration
|
|
211
|
-
def --env "main apply backstage" [
|
|
212
|
-
tag: string # Available versions can be seen at https://github.com/users/vfarcic/packages/container/idp-full-backstage%2Fbackstage/versions
|
|
213
|
-
--kubeconfig = "kubeconfig-dot.yaml"
|
|
214
|
-
--ingress_host = "backstage.127.0.0.1.nip.io"
|
|
215
|
-
--github_token = "FIXME"
|
|
216
|
-
--create_service_account = false
|
|
217
|
-
--disable_default_workload_types = false
|
|
218
|
-
] {
|
|
219
|
-
|
|
220
|
-
let cluster_data = (
|
|
221
|
-
get cluster data
|
|
222
|
-
--kubeconfig $kubeconfig
|
|
223
|
-
--create_service_account $create_service_account
|
|
224
|
-
)
|
|
225
|
-
|
|
226
|
-
{
|
|
227
|
-
apiVersion: "v1"
|
|
228
|
-
kind: "Secret"
|
|
229
|
-
metadata: {
|
|
230
|
-
name: "backstage-config"
|
|
231
|
-
namespace: "backstage"
|
|
232
|
-
}
|
|
233
|
-
type: "Opaque"
|
|
234
|
-
data: {
|
|
235
|
-
KUBE_URL: ($cluster_data.kube_url | encode base64)
|
|
236
|
-
KUBE_SA_TOKEN: $cluster_data.token_encoded
|
|
237
|
-
KUBE_CA_DATA: ($cluster_data.kube_ca_data | encode base64)
|
|
238
|
-
GITHUB_TOKEN: ($github_token | encode base64)
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
| to yaml
|
|
242
|
-
| kubectl --namespace backstage apply --filename -
|
|
243
|
-
|
|
244
|
-
(
|
|
245
|
-
helm upgrade --install cnpg cloudnative-pg
|
|
246
|
-
--repo https://cloudnative-pg.github.io/charts
|
|
247
|
-
--namespace cnpg-system --create-namespace --wait
|
|
248
|
-
)
|
|
249
|
-
|
|
250
|
-
(
|
|
251
|
-
helm upgrade --install backstage
|
|
252
|
-
oci://ghcr.io/vfarcic/idp-full-backstage/backstage
|
|
253
|
-
--namespace backstage --create-namespace
|
|
254
|
-
--set $"ingress.host=($ingress_host)"
|
|
255
|
-
--set $"ingrestor.disableDefaultWorkloadTypes=($disable_default_workload_types)"
|
|
256
|
-
--version $tag --wait
|
|
257
|
-
)
|
|
258
|
-
|
|
259
|
-
sleep 60sec
|
|
260
|
-
|
|
261
|
-
print $"Backstage is available at (ansi yellow_bold)http://($ingress_host)(ansi reset)"
|
|
262
|
-
|
|
263
|
-
start $"http://($ingress_host)"
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
def "get cluster data" [
|
|
268
|
-
--kubeconfig = "kubeconfig-dot.yaml"
|
|
269
|
-
--create_service_account = false
|
|
270
|
-
] {
|
|
271
|
-
|
|
272
|
-
if $create_service_account {
|
|
273
|
-
|
|
274
|
-
{
|
|
275
|
-
apiVersion: "v1"
|
|
276
|
-
kind: "Namespace"
|
|
277
|
-
metadata: {
|
|
278
|
-
name: "backstage"
|
|
279
|
-
}
|
|
280
|
-
} | to yaml | kubectl apply --filename -
|
|
281
|
-
|
|
282
|
-
{
|
|
283
|
-
apiVersion: "v1"
|
|
284
|
-
kind: "ServiceAccount"
|
|
285
|
-
metadata: {
|
|
286
|
-
name: "backstage"
|
|
287
|
-
namespace: "backstage"
|
|
288
|
-
}
|
|
289
|
-
} | to yaml | kubectl apply --filename -
|
|
290
|
-
|
|
291
|
-
{
|
|
292
|
-
apiVersion: "v1"
|
|
293
|
-
kind: "Secret"
|
|
294
|
-
metadata: {
|
|
295
|
-
name: "backstage"
|
|
296
|
-
namespace: "backstage"
|
|
297
|
-
annotations: {
|
|
298
|
-
"kubernetes.io/service-account.name": "backstage"
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
type: "kubernetes.io/service-account-token"
|
|
302
|
-
} | to yaml | kubectl apply --filename -
|
|
303
|
-
|
|
304
|
-
{
|
|
305
|
-
apiVersion: "rbac.authorization.k8s.io/v1"
|
|
306
|
-
kind: "ClusterRoleBinding"
|
|
307
|
-
metadata: {
|
|
308
|
-
name: "backstage"
|
|
309
|
-
}
|
|
310
|
-
subjects: [{
|
|
311
|
-
kind: "ServiceAccount"
|
|
312
|
-
name: "backstage"
|
|
313
|
-
namespace: "backstage"
|
|
314
|
-
}]
|
|
315
|
-
roleRef: {
|
|
316
|
-
kind: "ClusterRole"
|
|
317
|
-
name: "cluster-admin"
|
|
318
|
-
apiGroup: "rbac.authorization.k8s.io"
|
|
319
|
-
}
|
|
320
|
-
} | to yaml | kubectl apply --filename -
|
|
321
|
-
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
let kube_url = open $kubeconfig
|
|
325
|
-
| get clusters.0.cluster.server
|
|
326
|
-
$"export KUBE_URL=($kube_url)\n" | save --append .env
|
|
327
|
-
|
|
328
|
-
let kube_ca_data = open $kubeconfig
|
|
329
|
-
| get clusters.0.cluster.certificate-authority-data
|
|
330
|
-
$"export KUBE_CA_DATA=($kube_ca_data)\n" | save --append .env
|
|
331
|
-
|
|
332
|
-
let token_encoded = (
|
|
333
|
-
kubectl --namespace backstage get secret backstage
|
|
334
|
-
--output yaml
|
|
335
|
-
)
|
|
336
|
-
| from yaml
|
|
337
|
-
| get data.token
|
|
338
|
-
|
|
339
|
-
let token = ($token_encoded | decode base64 | decode)
|
|
340
|
-
$"export KUBE_SA_TOKEN=($token)\n" | save --append .env
|
|
341
|
-
|
|
342
|
-
{
|
|
343
|
-
kube_url: $kube_url,
|
|
344
|
-
kube_ca_data: $kube_ca_data,
|
|
345
|
-
token_encoded: $token_encoded,
|
|
346
|
-
token: $token
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
}
|
package/scripts/cert-manager.nu
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Installs cert-manager for managing TLS certificates in Kubernetes
|
|
4
|
-
def "main apply certmanager" [] {
|
|
5
|
-
|
|
6
|
-
(
|
|
7
|
-
helm upgrade --install cert-manager cert-manager
|
|
8
|
-
--repo https://charts.jetstack.io
|
|
9
|
-
--namespace cert-manager --create-namespace
|
|
10
|
-
--set crds.enabled=true --wait
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
}
|
package/scripts/cnpg.nu
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Installs Cloud-Native PostgreSQL (CNPG) operator
|
|
4
|
-
def "main apply cnpg" [] {
|
|
5
|
-
|
|
6
|
-
print $"\nInstalling (ansi yellow_bold)Cloud-Native PostgreSQL \(CNPG\)(ansi reset)...\n"
|
|
7
|
-
|
|
8
|
-
(
|
|
9
|
-
helm upgrade --install cnpg cloudnative-pg
|
|
10
|
-
--repo https://cloudnative-pg.github.io/charts
|
|
11
|
-
--namespace cnpg-system --create-namespace --wait
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
}
|
package/scripts/dot.nu
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
source ack.nu
|
|
4
|
-
source anthropic.nu
|
|
5
|
-
source argo-workflows.nu
|
|
6
|
-
source argocd.nu
|
|
7
|
-
source aso.nu
|
|
8
|
-
source atlas.nu
|
|
9
|
-
source backstage.nu
|
|
10
|
-
source cert-manager.nu
|
|
11
|
-
source cnpg.nu
|
|
12
|
-
source common.nu
|
|
13
|
-
source crossplane.nu
|
|
14
|
-
source external-secrets.nu
|
|
15
|
-
source gatekeeper.nu
|
|
16
|
-
source github.nu
|
|
17
|
-
source image.nu
|
|
18
|
-
source ingress.nu
|
|
19
|
-
source kro.nu
|
|
20
|
-
source kubernetes.nu
|
|
21
|
-
source kubevela.nu
|
|
22
|
-
source kyverno.nu
|
|
23
|
-
source mcp.nu
|
|
24
|
-
source port.nu
|
|
25
|
-
source prometheus.nu
|
|
26
|
-
source registry.nu
|
|
27
|
-
source storage.nu
|
|
28
|
-
source tests.nu
|
|
29
|
-
source toolhive.nu
|
|
30
|
-
source velero.nu
|
|
31
|
-
|
|
32
|
-
def main [] {}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Installs External Secrets Operator (ESO) with optional cloud provider configuration
|
|
4
|
-
#
|
|
5
|
-
# Examples:
|
|
6
|
-
# > main apply external_secrets --provider google --google_project_id my-project
|
|
7
|
-
# > main apply external_secrets --provider azure --azure_key_vault_name my-vault
|
|
8
|
-
def "main apply external_secrets" [
|
|
9
|
-
--provider: string # Supported values: `google`, `azure`
|
|
10
|
-
--google_project_id: string # Used only if `provider` is `google`
|
|
11
|
-
--azure_key_vault_name: string # Used only if `provider` is `azure`
|
|
12
|
-
] {
|
|
13
|
-
|
|
14
|
-
print $"\nInstalling (ansi yellow_bold)External Secrets Operator \(ESO\)(ansi reset)...\n"
|
|
15
|
-
|
|
16
|
-
(
|
|
17
|
-
helm repo add external-secrets
|
|
18
|
-
https://charts.external-secrets.io
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
helm repo update
|
|
22
|
-
|
|
23
|
-
(
|
|
24
|
-
helm upgrade --install
|
|
25
|
-
external-secrets external-secrets/external-secrets
|
|
26
|
-
--namespace external-secrets --create-namespace
|
|
27
|
-
--wait
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
if $provider == "google" {
|
|
31
|
-
|
|
32
|
-
{
|
|
33
|
-
apiVersion: "external-secrets.io/v1beta1"
|
|
34
|
-
kind: "ClusterSecretStore"
|
|
35
|
-
metadata: { name: "google" }
|
|
36
|
-
spec: { provider: { gcpsm: {
|
|
37
|
-
auth: { secretRef: { secretAccessKeySecretRef: {
|
|
38
|
-
name: "gcp-creds"
|
|
39
|
-
key: "creds"
|
|
40
|
-
namespace: "crossplane-system"
|
|
41
|
-
} } }
|
|
42
|
-
projectID: $google_project_id
|
|
43
|
-
} } }
|
|
44
|
-
} | to yaml | kubectl apply --filename -
|
|
45
|
-
|
|
46
|
-
start $"https://console.developers.google.com/apis/api/secretmanager.googleapis.com/overview?project=($google_project_id)"
|
|
47
|
-
|
|
48
|
-
print $"
|
|
49
|
-
(ansi yellow_bold)ENABLE(ansi reset) the API.
|
|
50
|
-
Press the (ansi yellow_bold)enter key(ansi reset) to continue.
|
|
51
|
-
"
|
|
52
|
-
input
|
|
53
|
-
|
|
54
|
-
} else if $provider == "azure" {
|
|
55
|
-
|
|
56
|
-
# FIXME: Uncomment and rewrite
|
|
57
|
-
|
|
58
|
-
# az keyvault create --name $RESOURCE_GROUP \
|
|
59
|
-
# --resource-group $RESOURCE_GROUP
|
|
60
|
-
|
|
61
|
-
# az keyvault key create --vault-name $RESOURCE_GROUP --name "ContosoFirstKey" --protection software
|
|
62
|
-
|
|
63
|
-
# export AZURE_UPN=$(az ad user list | jq ".[0].userPrincipalName" -r)
|
|
64
|
-
|
|
65
|
-
# export AZURE_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
|
|
66
|
-
|
|
67
|
-
# az role assignment create \
|
|
68
|
-
# --role "Key Vault Secrets Officer" \
|
|
69
|
-
# --assignee $AZURE_UPN \
|
|
70
|
-
# --scope "/subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$RESOURCE_GROUP"
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
apiVersion: "external-secrets.io/v1beta1"
|
|
74
|
-
kind: "ClusterSecretStore"
|
|
75
|
-
metadata: { name: "azure" }
|
|
76
|
-
spec: { provider: { azurekv: {
|
|
77
|
-
authType: "ManagedIdentity"
|
|
78
|
-
vaultUrl: $"https://($azure_key_vault_name).vault.azure.net"
|
|
79
|
-
} } }
|
|
80
|
-
} | to yaml | kubectl apply --filename -
|
|
81
|
-
|
|
82
|
-
} else if $provider == "aws" {
|
|
83
|
-
|
|
84
|
-
{
|
|
85
|
-
apiVersion: "external-secrets.io/v1beta1"
|
|
86
|
-
kind: "ClusterSecretStore"
|
|
87
|
-
metadata: { name: "aws" }
|
|
88
|
-
spec: {
|
|
89
|
-
provider: { aws: {
|
|
90
|
-
service: "SecretsManager"
|
|
91
|
-
region: "us-east-1"
|
|
92
|
-
auth: { secretRef: {
|
|
93
|
-
accessKeyIDSecretRef: {
|
|
94
|
-
name: "aws-creds"
|
|
95
|
-
key: "accessKeyID"
|
|
96
|
-
namespace: "crossplane-system"
|
|
97
|
-
}
|
|
98
|
-
secretAccessKeySecretRef: {
|
|
99
|
-
name: "aws-creds"
|
|
100
|
-
key: "secretAccessKey"
|
|
101
|
-
namespace: "crossplane-system"
|
|
102
|
-
}
|
|
103
|
-
} }
|
|
104
|
-
} }
|
|
105
|
-
}
|
|
106
|
-
} | to yaml | kubectl apply --filename -
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
}
|
package/scripts/gatekeeper.nu
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Installs Gatekeeper (Open Policy Agent) for Kubernetes policy enforcement
|
|
4
|
-
def "main apply opa" [] {
|
|
5
|
-
|
|
6
|
-
(
|
|
7
|
-
helm repo add gatekeeper
|
|
8
|
-
https://open-policy-agent.github.io/gatekeeper/charts
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
helm repo update
|
|
12
|
-
|
|
13
|
-
(
|
|
14
|
-
helm upgrade --install gatekeeper gatekeeper/gatekeeper
|
|
15
|
-
--namespace gatekeeper-system --create-namespace
|
|
16
|
-
--wait
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
}
|
package/scripts/github.nu
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Retrieves GitHub credentials (token and organization/username)
|
|
4
|
-
#
|
|
5
|
-
# Parameters:
|
|
6
|
-
# --enable-org: Whether to retrieve GitHub organization/user (default: true)
|
|
7
|
-
# --github-token: GitHub token (optional, falls back to GITHUB_TOKEN or REGISTRY_PASSWORD env var)
|
|
8
|
-
# --github-org: GitHub organization/username (optional, falls back to GITHUB_ORG or REGISTRY_USER env var)
|
|
9
|
-
#
|
|
10
|
-
# Returns:
|
|
11
|
-
# A record with org and token fields, and saves values to .env file
|
|
12
|
-
def --env "main get github" [
|
|
13
|
-
--enable-org = true,
|
|
14
|
-
--github-token: string,
|
|
15
|
-
--github-org: string
|
|
16
|
-
] {
|
|
17
|
-
|
|
18
|
-
mut token = $github_token
|
|
19
|
-
if ($token | is-empty) and ("GITHUB_TOKEN" in $env) {
|
|
20
|
-
$token = $env.GITHUB_TOKEN
|
|
21
|
-
} else if ($token | is-empty) and ("REGISTRY_PASSWORD" in $env) {
|
|
22
|
-
$token = $env.REGISTRY_PASSWORD
|
|
23
|
-
} else if ($token | is-empty) {
|
|
24
|
-
error make { msg: "GitHub token required via --github-token parameter or GITHUB_TOKEN/REGISTRY_PASSWORD environment variable" }
|
|
25
|
-
}
|
|
26
|
-
$"export GITHUB_TOKEN=($token)\n" | save --append .env
|
|
27
|
-
|
|
28
|
-
mut org = $github_org
|
|
29
|
-
if $enable_org {
|
|
30
|
-
if ($org | is-empty) and ("GITHUB_ORG" in $env) {
|
|
31
|
-
$org = $env.GITHUB_ORG
|
|
32
|
-
} else if ($org | is-empty) and ("REGISTRY_USER" in $env) {
|
|
33
|
-
$org = $env.REGISTRY_USER
|
|
34
|
-
} else if ($org | is-empty) {
|
|
35
|
-
error make { msg: "GitHub organization/username required via --github-org parameter or GITHUB_ORG/REGISTRY_USER environment variable" }
|
|
36
|
-
}
|
|
37
|
-
$"export GITHUB_ORG=($org)\n" | save --append .env
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
{org: $org, token: $token}
|
|
41
|
-
|
|
42
|
-
}
|
package/scripts/image.nu
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Builds a container image
|
|
4
|
-
def "main build image" [
|
|
5
|
-
tag: string # The tag of the image (e.g., 0.0.1)
|
|
6
|
-
--registry = "ghcr.io" # Image registry (e.g., ghcr.io)
|
|
7
|
-
--registry_user = "vfarcic" # Image registry user (e.g., vfarcic)
|
|
8
|
-
--image = "silly-demo" # Image name (e.g., silly-demo)
|
|
9
|
-
--builder = "docker" # Image builder; currently supported are: `docker` and `kaniko`
|
|
10
|
-
--push = true # Whether to push the image to the registry
|
|
11
|
-
--dockerfile = "Dockerfile" # Path to Dockerfile
|
|
12
|
-
--context = "." # Path to the context
|
|
13
|
-
] {
|
|
14
|
-
|
|
15
|
-
if $builder == "docker" {
|
|
16
|
-
|
|
17
|
-
(
|
|
18
|
-
docker image build
|
|
19
|
-
--tag $"($registry)/($registry_user)/($image):latest"
|
|
20
|
-
--tag $"($registry)/($registry_user)/($image):($tag)"
|
|
21
|
-
--file $dockerfile
|
|
22
|
-
$context
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
if $push {
|
|
26
|
-
|
|
27
|
-
docker image push $"($registry)/($registry_user)/($image):latest"
|
|
28
|
-
|
|
29
|
-
docker image push $"($registry)/($registry_user)/($image):($tag)"
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
} else if $builder == "kaniko" {
|
|
34
|
-
|
|
35
|
-
(
|
|
36
|
-
executor --dockerfile=Dockerfile --context=.
|
|
37
|
-
$"--destination=($registry)/($registry_user)/($image):($tag)"
|
|
38
|
-
$"--destination=($registry)/($registry_user)/($image):latest"
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
} else {
|
|
42
|
-
|
|
43
|
-
echo $"Unsupported builder: ($builder)"
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
# Retrieves a container registry address
|
|
50
|
-
#
|
|
51
|
-
# Parameters:
|
|
52
|
-
# --container-registry: Container registry address (optional, falls back to CONTAINER_REGISTRY env var)
|
|
53
|
-
def "main get container_registry" [
|
|
54
|
-
--container-registry: string
|
|
55
|
-
] {
|
|
56
|
-
|
|
57
|
-
mut registry = $container_registry
|
|
58
|
-
if ($registry | is-empty) and ("CONTAINER_REGISTRY" in $env) {
|
|
59
|
-
$registry = $env.CONTAINER_REGISTRY
|
|
60
|
-
} else if ($registry | is-empty) {
|
|
61
|
-
error make { msg: "Container registry address required via --container-registry parameter or CONTAINER_REGISTRY environment variable" }
|
|
62
|
-
}
|
|
63
|
-
$"export CONTAINER_REGISTRY=($registry)\n" | save --append .env
|
|
64
|
-
|
|
65
|
-
$registry
|
|
66
|
-
|
|
67
|
-
}
|
package/scripts/kro.nu
DELETED
package/scripts/kubevela.nu
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env nu
|
|
2
|
-
|
|
3
|
-
# Installs KubeVela platform
|
|
4
|
-
#
|
|
5
|
-
# Examples:
|
|
6
|
-
# > main apply kubevela example.com --ingress_class nginx
|
|
7
|
-
def "main apply kubevela" [
|
|
8
|
-
host: string
|
|
9
|
-
--ingress_class = "nginx"
|
|
10
|
-
] {
|
|
11
|
-
|
|
12
|
-
vela install
|
|
13
|
-
|
|
14
|
-
# (
|
|
15
|
-
# vela addon enable velaux
|
|
16
|
-
# $"domain=vela.($host)"
|
|
17
|
-
# $"gatewayDriver=($ingress_class)"
|
|
18
|
-
# )
|
|
19
|
-
|
|
20
|
-
# start $"http://($host)"
|
|
21
|
-
|
|
22
|
-
}
|