@intentius/chant-lexicon-k8s 0.0.12
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/dist/integrity.json +32 -0
- package/dist/manifest.json +8 -0
- package/dist/meta.json +1413 -0
- package/dist/rules/hardcoded-namespace.ts +56 -0
- package/dist/rules/k8s-helpers.ts +149 -0
- package/dist/rules/wk8005.ts +59 -0
- package/dist/rules/wk8006.ts +68 -0
- package/dist/rules/wk8041.ts +73 -0
- package/dist/rules/wk8042.ts +48 -0
- package/dist/rules/wk8101.ts +65 -0
- package/dist/rules/wk8102.ts +42 -0
- package/dist/rules/wk8103.ts +45 -0
- package/dist/rules/wk8104.ts +69 -0
- package/dist/rules/wk8105.ts +45 -0
- package/dist/rules/wk8201.ts +55 -0
- package/dist/rules/wk8202.ts +46 -0
- package/dist/rules/wk8203.ts +46 -0
- package/dist/rules/wk8204.ts +54 -0
- package/dist/rules/wk8205.ts +56 -0
- package/dist/rules/wk8207.ts +45 -0
- package/dist/rules/wk8208.ts +45 -0
- package/dist/rules/wk8209.ts +45 -0
- package/dist/rules/wk8301.ts +51 -0
- package/dist/rules/wk8302.ts +46 -0
- package/dist/rules/wk8303.ts +96 -0
- package/dist/skills/chant-k8s.md +433 -0
- package/dist/types/index.d.ts +2934 -0
- package/package.json +30 -0
- package/src/actions/actions.test.ts +83 -0
- package/src/actions/apps.ts +23 -0
- package/src/actions/batch.ts +9 -0
- package/src/actions/core.ts +62 -0
- package/src/actions/index.ts +50 -0
- package/src/actions/networking.ts +15 -0
- package/src/actions/rbac.ts +13 -0
- package/src/codegen/docs-cli.ts +3 -0
- package/src/codegen/docs.ts +1147 -0
- package/src/codegen/generate-cli.ts +41 -0
- package/src/codegen/generate-lexicon.ts +69 -0
- package/src/codegen/generate-typescript.ts +97 -0
- package/src/codegen/generate.ts +144 -0
- package/src/codegen/naming.test.ts +63 -0
- package/src/codegen/naming.ts +187 -0
- package/src/codegen/package.ts +56 -0
- package/src/codegen/patches.ts +108 -0
- package/src/codegen/snapshot.test.ts +95 -0
- package/src/codegen/typecheck.test.ts +24 -0
- package/src/codegen/typecheck.ts +4 -0
- package/src/codegen/versions.ts +43 -0
- package/src/composites/autoscaled-service.ts +236 -0
- package/src/composites/composites.test.ts +1109 -0
- package/src/composites/cron-workload.ts +167 -0
- package/src/composites/index.ts +14 -0
- package/src/composites/namespace-env.ts +163 -0
- package/src/composites/node-agent.ts +224 -0
- package/src/composites/stateful-app.ts +134 -0
- package/src/composites/web-app.ts +180 -0
- package/src/composites/worker-pool.ts +230 -0
- package/src/coverage.test.ts +27 -0
- package/src/coverage.ts +35 -0
- package/src/crd/loader.ts +112 -0
- package/src/crd/parser.test.ts +217 -0
- package/src/crd/parser.ts +279 -0
- package/src/crd/types.ts +54 -0
- package/src/default-labels.test.ts +111 -0
- package/src/default-labels.ts +122 -0
- package/src/generated/index.d.ts +2934 -0
- package/src/generated/index.ts +203 -0
- package/src/generated/lexicon-k8s.json +1413 -0
- package/src/generated/runtime.ts +4 -0
- package/src/import/generator.test.ts +121 -0
- package/src/import/generator.ts +285 -0
- package/src/import/parser.test.ts +156 -0
- package/src/import/parser.ts +204 -0
- package/src/import/roundtrip.test.ts +86 -0
- package/src/index.ts +38 -0
- package/src/lint/post-synth/k8s-helpers.test.ts +219 -0
- package/src/lint/post-synth/k8s-helpers.ts +149 -0
- package/src/lint/post-synth/post-synth.test.ts +969 -0
- package/src/lint/post-synth/wk8005.ts +59 -0
- package/src/lint/post-synth/wk8006.ts +68 -0
- package/src/lint/post-synth/wk8041.ts +73 -0
- package/src/lint/post-synth/wk8042.ts +48 -0
- package/src/lint/post-synth/wk8101.ts +65 -0
- package/src/lint/post-synth/wk8102.ts +42 -0
- package/src/lint/post-synth/wk8103.ts +45 -0
- package/src/lint/post-synth/wk8104.ts +69 -0
- package/src/lint/post-synth/wk8105.ts +45 -0
- package/src/lint/post-synth/wk8201.ts +55 -0
- package/src/lint/post-synth/wk8202.ts +46 -0
- package/src/lint/post-synth/wk8203.ts +46 -0
- package/src/lint/post-synth/wk8204.ts +54 -0
- package/src/lint/post-synth/wk8205.ts +56 -0
- package/src/lint/post-synth/wk8207.ts +45 -0
- package/src/lint/post-synth/wk8208.ts +45 -0
- package/src/lint/post-synth/wk8209.ts +45 -0
- package/src/lint/post-synth/wk8301.ts +51 -0
- package/src/lint/post-synth/wk8302.ts +46 -0
- package/src/lint/post-synth/wk8303.ts +96 -0
- package/src/lint/rules/hardcoded-namespace.ts +56 -0
- package/src/lint/rules/rules.test.ts +69 -0
- package/src/lsp/completions.test.ts +64 -0
- package/src/lsp/completions.ts +20 -0
- package/src/lsp/hover.test.ts +69 -0
- package/src/lsp/hover.ts +68 -0
- package/src/package-cli.ts +28 -0
- package/src/plugin.test.ts +209 -0
- package/src/plugin.ts +915 -0
- package/src/serializer.test.ts +275 -0
- package/src/serializer.ts +278 -0
- package/src/spec/fetch.test.ts +24 -0
- package/src/spec/fetch.ts +68 -0
- package/src/spec/parse.test.ts +102 -0
- package/src/spec/parse.ts +477 -0
- package/src/testdata/manifests/configmap.yaml +7 -0
- package/src/testdata/manifests/deployment.yaml +22 -0
- package/src/testdata/manifests/full-app.yaml +61 -0
- package/src/testdata/manifests/secret.yaml +7 -0
- package/src/testdata/manifests/service.yaml +15 -0
- package/src/validate-cli.ts +21 -0
- package/src/validate.test.ts +29 -0
- package/src/validate.ts +46 -0
- package/src/variables.ts +36 -0
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@intentius/chant-lexicon-k8s",
|
|
3
|
+
"version": "0.0.12",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": ["src/", "dist/"],
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./src/index.ts",
|
|
12
|
+
"./*": "./src/*",
|
|
13
|
+
"./manifest": "./dist/manifest.json",
|
|
14
|
+
"./meta": "./dist/meta.json",
|
|
15
|
+
"./types": "./dist/types/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"generate": "bun run src/codegen/generate-cli.ts",
|
|
19
|
+
"bundle": "bun run src/package-cli.ts",
|
|
20
|
+
"validate": "bun run src/validate-cli.ts",
|
|
21
|
+
"docs": "bun run src/codegen/docs-cli.ts",
|
|
22
|
+
"prepack": "bun run generate && bun run bundle && bun run validate"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@intentius/chant": "0.0.11"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"typescript": "^5.9.3"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { describe, test, expect } from "bun:test";
|
|
2
|
+
import * as core from "./core";
|
|
3
|
+
import * as apps from "./apps";
|
|
4
|
+
import * as batch from "./batch";
|
|
5
|
+
import * as networking from "./networking";
|
|
6
|
+
import * as rbac from "./rbac";
|
|
7
|
+
|
|
8
|
+
const VALID_K8S_VERBS = new Set([
|
|
9
|
+
"get",
|
|
10
|
+
"list",
|
|
11
|
+
"watch",
|
|
12
|
+
"create",
|
|
13
|
+
"update",
|
|
14
|
+
"patch",
|
|
15
|
+
"delete",
|
|
16
|
+
"deletecollection",
|
|
17
|
+
"impersonate",
|
|
18
|
+
]);
|
|
19
|
+
|
|
20
|
+
const allConstants: Record<string, Record<string, string>> = {
|
|
21
|
+
StandardVerbs: core.StandardVerbs,
|
|
22
|
+
PodActions: core.PodActions,
|
|
23
|
+
ServiceActions: core.ServiceActions,
|
|
24
|
+
ConfigMapActions: core.ConfigMapActions,
|
|
25
|
+
SecretActions: core.SecretActions,
|
|
26
|
+
NamespaceActions: core.NamespaceActions,
|
|
27
|
+
ServiceAccountActions: core.ServiceAccountActions,
|
|
28
|
+
PersistentVolumeActions: core.PersistentVolumeActions,
|
|
29
|
+
PersistentVolumeClaimActions: core.PersistentVolumeClaimActions,
|
|
30
|
+
NodeActions: core.NodeActions,
|
|
31
|
+
EventActions: core.EventActions,
|
|
32
|
+
ResourceQuotaActions: core.ResourceQuotaActions,
|
|
33
|
+
LimitRangeActions: core.LimitRangeActions,
|
|
34
|
+
EndpointsActions: core.EndpointsActions,
|
|
35
|
+
DeploymentActions: apps.DeploymentActions,
|
|
36
|
+
StatefulSetActions: apps.StatefulSetActions,
|
|
37
|
+
DaemonSetActions: apps.DaemonSetActions,
|
|
38
|
+
ReplicaSetActions: apps.ReplicaSetActions,
|
|
39
|
+
JobActions: batch.JobActions,
|
|
40
|
+
CronJobActions: batch.CronJobActions,
|
|
41
|
+
IngressActions: networking.IngressActions,
|
|
42
|
+
IngressClassActions: networking.IngressClassActions,
|
|
43
|
+
NetworkPolicyActions: networking.NetworkPolicyActions,
|
|
44
|
+
RoleActions: rbac.RoleActions,
|
|
45
|
+
ClusterRoleActions: rbac.ClusterRoleActions,
|
|
46
|
+
RoleBindingActions: rbac.RoleBindingActions,
|
|
47
|
+
ClusterRoleBindingActions: rbac.ClusterRoleBindingActions,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
describe("action constants", () => {
|
|
51
|
+
for (const [name, constant] of Object.entries(allConstants)) {
|
|
52
|
+
test(`${name} is a non-empty object`, () => {
|
|
53
|
+
expect(typeof constant).toBe("object");
|
|
54
|
+
expect(Object.keys(constant).length).toBeGreaterThan(0);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test(`${name} has valid K8s RBAC verbs`, () => {
|
|
58
|
+
for (const [key, verb] of Object.entries(constant)) {
|
|
59
|
+
expect(VALID_K8S_VERBS.has(verb)).toBe(true);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test(`${name} has no duplicate verb values`, () => {
|
|
64
|
+
const values = Object.values(constant);
|
|
65
|
+
// Note: duplicate verb values are OK (e.g., exec: "create" reuses "create")
|
|
66
|
+
// We check for duplicate keys instead
|
|
67
|
+
const keys = Object.keys(constant);
|
|
68
|
+
expect(new Set(keys).size).toBe(keys.length);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
test("StandardVerbs is a subset of PodActions", () => {
|
|
73
|
+
for (const key of Object.keys(core.StandardVerbs)) {
|
|
74
|
+
expect(key in core.PodActions).toBe(true);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("StandardVerbs is a subset of DeploymentActions", () => {
|
|
79
|
+
for (const key of Object.keys(core.StandardVerbs)) {
|
|
80
|
+
expect(key in apps.DeploymentActions).toBe(true);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC verb constants for apps API group resources.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { StandardVerbs } from "./core";
|
|
6
|
+
|
|
7
|
+
export const DeploymentActions = {
|
|
8
|
+
...StandardVerbs,
|
|
9
|
+
rollback: "create", // deployments/rollback subresource
|
|
10
|
+
scale: "update", // deployments/scale subresource
|
|
11
|
+
} as const;
|
|
12
|
+
|
|
13
|
+
export const StatefulSetActions = {
|
|
14
|
+
...StandardVerbs,
|
|
15
|
+
scale: "update",
|
|
16
|
+
} as const;
|
|
17
|
+
|
|
18
|
+
export const DaemonSetActions = { ...StandardVerbs } as const;
|
|
19
|
+
|
|
20
|
+
export const ReplicaSetActions = {
|
|
21
|
+
...StandardVerbs,
|
|
22
|
+
scale: "update",
|
|
23
|
+
} as const;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC verb constants for core API group resources.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/** Standard RBAC verbs applicable to most resources. */
|
|
6
|
+
export const StandardVerbs = {
|
|
7
|
+
get: "get",
|
|
8
|
+
list: "list",
|
|
9
|
+
watch: "watch",
|
|
10
|
+
create: "create",
|
|
11
|
+
update: "update",
|
|
12
|
+
patch: "patch",
|
|
13
|
+
delete: "delete",
|
|
14
|
+
} as const;
|
|
15
|
+
|
|
16
|
+
export const PodActions = {
|
|
17
|
+
...StandardVerbs,
|
|
18
|
+
exec: "create", // pods/exec subresource
|
|
19
|
+
portForward: "create", // pods/portforward subresource
|
|
20
|
+
log: "get", // pods/log subresource
|
|
21
|
+
} as const;
|
|
22
|
+
|
|
23
|
+
export const ServiceActions = {
|
|
24
|
+
...StandardVerbs,
|
|
25
|
+
proxy: "create",
|
|
26
|
+
} as const;
|
|
27
|
+
|
|
28
|
+
export const ConfigMapActions = { ...StandardVerbs } as const;
|
|
29
|
+
|
|
30
|
+
export const SecretActions = { ...StandardVerbs } as const;
|
|
31
|
+
|
|
32
|
+
export const NamespaceActions = { ...StandardVerbs } as const;
|
|
33
|
+
|
|
34
|
+
export const ServiceAccountActions = {
|
|
35
|
+
...StandardVerbs,
|
|
36
|
+
impersonate: "impersonate",
|
|
37
|
+
} as const;
|
|
38
|
+
|
|
39
|
+
export const PersistentVolumeActions = { ...StandardVerbs } as const;
|
|
40
|
+
|
|
41
|
+
export const PersistentVolumeClaimActions = { ...StandardVerbs } as const;
|
|
42
|
+
|
|
43
|
+
export const NodeActions = {
|
|
44
|
+
get: "get",
|
|
45
|
+
list: "list",
|
|
46
|
+
watch: "watch",
|
|
47
|
+
update: "update",
|
|
48
|
+
patch: "patch",
|
|
49
|
+
} as const;
|
|
50
|
+
|
|
51
|
+
export const EventActions = {
|
|
52
|
+
get: "get",
|
|
53
|
+
list: "list",
|
|
54
|
+
watch: "watch",
|
|
55
|
+
create: "create",
|
|
56
|
+
} as const;
|
|
57
|
+
|
|
58
|
+
export const ResourceQuotaActions = { ...StandardVerbs } as const;
|
|
59
|
+
|
|
60
|
+
export const LimitRangeActions = { ...StandardVerbs } as const;
|
|
61
|
+
|
|
62
|
+
export const EndpointsActions = { ...StandardVerbs } as const;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kubernetes RBAC verb constants — organized by API group.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Core
|
|
6
|
+
export {
|
|
7
|
+
StandardVerbs,
|
|
8
|
+
PodActions,
|
|
9
|
+
ServiceActions,
|
|
10
|
+
ConfigMapActions,
|
|
11
|
+
SecretActions,
|
|
12
|
+
NamespaceActions,
|
|
13
|
+
ServiceAccountActions,
|
|
14
|
+
PersistentVolumeActions,
|
|
15
|
+
PersistentVolumeClaimActions,
|
|
16
|
+
NodeActions,
|
|
17
|
+
EventActions,
|
|
18
|
+
ResourceQuotaActions,
|
|
19
|
+
LimitRangeActions,
|
|
20
|
+
EndpointsActions,
|
|
21
|
+
} from "./core";
|
|
22
|
+
|
|
23
|
+
// Apps
|
|
24
|
+
export {
|
|
25
|
+
DeploymentActions,
|
|
26
|
+
StatefulSetActions,
|
|
27
|
+
DaemonSetActions,
|
|
28
|
+
ReplicaSetActions,
|
|
29
|
+
} from "./apps";
|
|
30
|
+
|
|
31
|
+
// RBAC
|
|
32
|
+
export {
|
|
33
|
+
RoleActions,
|
|
34
|
+
ClusterRoleActions,
|
|
35
|
+
RoleBindingActions,
|
|
36
|
+
ClusterRoleBindingActions,
|
|
37
|
+
} from "./rbac";
|
|
38
|
+
|
|
39
|
+
// Batch
|
|
40
|
+
export {
|
|
41
|
+
JobActions,
|
|
42
|
+
CronJobActions,
|
|
43
|
+
} from "./batch";
|
|
44
|
+
|
|
45
|
+
// Networking
|
|
46
|
+
export {
|
|
47
|
+
IngressActions,
|
|
48
|
+
IngressClassActions,
|
|
49
|
+
NetworkPolicyActions,
|
|
50
|
+
} from "./networking";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC verb constants for networking.k8s.io API group resources.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { StandardVerbs } from "./core";
|
|
6
|
+
|
|
7
|
+
export const IngressActions = { ...StandardVerbs } as const;
|
|
8
|
+
|
|
9
|
+
export const IngressClassActions = {
|
|
10
|
+
get: "get",
|
|
11
|
+
list: "list",
|
|
12
|
+
watch: "watch",
|
|
13
|
+
} as const;
|
|
14
|
+
|
|
15
|
+
export const NetworkPolicyActions = { ...StandardVerbs } as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC verb constants for rbac.authorization.k8s.io API group.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { StandardVerbs } from "./core";
|
|
6
|
+
|
|
7
|
+
export const RoleActions = { ...StandardVerbs } as const;
|
|
8
|
+
|
|
9
|
+
export const ClusterRoleActions = { ...StandardVerbs } as const;
|
|
10
|
+
|
|
11
|
+
export const RoleBindingActions = { ...StandardVerbs } as const;
|
|
12
|
+
|
|
13
|
+
export const ClusterRoleBindingActions = { ...StandardVerbs } as const;
|