@catladder/pipeline 0.0.5 → 1.0.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.
Files changed (158) hide show
  1. package/babel-inline.json +11 -0
  2. package/bin/catladder-gitlab.js +3 -0
  3. package/dist/build/base/constants.d.ts +7 -0
  4. package/dist/build/base/constants.js +11 -0
  5. package/dist/build/base/createBuildJob.d.ts +5 -0
  6. package/dist/build/base/createBuildJob.js +99 -0
  7. package/dist/build/docker.d.ts +5 -0
  8. package/dist/build/docker.js +95 -0
  9. package/dist/build/index.d.ts +12 -0
  10. package/dist/build/index.js +63 -0
  11. package/dist/build/node/buildJob.d.ts +3 -0
  12. package/dist/build/node/buildJob.js +97 -0
  13. package/dist/build/node/cache.d.ts +4 -0
  14. package/dist/build/node/cache.js +67 -0
  15. package/dist/build/node/constants.d.ts +6 -0
  16. package/dist/build/node/constants.js +10 -0
  17. package/dist/build/node/index.d.ts +5 -0
  18. package/dist/build/node/index.js +63 -0
  19. package/dist/build/node/meteor.d.ts +3 -0
  20. package/dist/build/node/meteor.js +103 -0
  21. package/dist/build/node/testJob.d.ts +3 -0
  22. package/dist/build/node/testJob.js +112 -0
  23. package/dist/build/node/yarn.d.ts +2 -0
  24. package/dist/build/node/yarn.js +12 -0
  25. package/dist/build/tests/storybook.test.d.ts +1 -0
  26. package/dist/build/tests/storybook.test.js +221 -0
  27. package/dist/build/types.d.ts +63 -0
  28. package/dist/build/types.js +16 -0
  29. package/dist/catladder-gitlab.d.ts +1 -0
  30. package/dist/catladder-gitlab.js +44 -0
  31. package/dist/config/configruedEnvs.d.ts +4 -0
  32. package/dist/config/configruedEnvs.js +86 -0
  33. package/dist/config/configruedEnvs.test.d.ts +1 -0
  34. package/dist/config/configruedEnvs.test.js +103 -0
  35. package/dist/config/index.d.ts +2 -0
  36. package/dist/config/index.js +24 -0
  37. package/dist/config/readConfig.d.ts +2 -0
  38. package/dist/config/readConfig.js +47 -0
  39. package/dist/constants.d.ts +2 -0
  40. package/dist/constants.js +6 -0
  41. package/dist/context/index.d.ts +5 -0
  42. package/dist/context/index.js +211 -0
  43. package/dist/defaults/index.d.ts +2 -0
  44. package/dist/defaults/index.js +8 -0
  45. package/dist/deploy/base.d.ts +9 -0
  46. package/dist/deploy/base.js +94 -0
  47. package/dist/deploy/index.d.ts +11 -0
  48. package/dist/deploy/index.js +34 -0
  49. package/dist/deploy/kubernetes/cloudsql.d.ts +6 -0
  50. package/dist/deploy/kubernetes/cloudsql.js +16 -0
  51. package/dist/deploy/kubernetes/deployJob.d.ts +3 -0
  52. package/dist/deploy/kubernetes/deployJob.js +148 -0
  53. package/dist/deploy/kubernetes/index.d.ts +1 -0
  54. package/dist/deploy/kubernetes/index.js +22 -0
  55. package/dist/deploy/kubernetes/mongodb.d.ts +15 -0
  56. package/dist/deploy/kubernetes/mongodb.js +23 -0
  57. package/dist/deploy/types.d.ts +92 -0
  58. package/dist/deploy/types.js +16 -0
  59. package/dist/index.d.ts +8 -0
  60. package/dist/index.js +36 -0
  61. package/dist/pipeline/createChildPipeline.d.ts +9 -0
  62. package/dist/pipeline/createChildPipeline.js +266 -0
  63. package/dist/pipeline/createChildPipeline.test.d.ts +1 -0
  64. package/dist/pipeline/createChildPipeline.test.js +199 -0
  65. package/dist/pipeline/createJobs.d.ts +3 -0
  66. package/dist/pipeline/createJobs.js +331 -0
  67. package/dist/pipeline/index.d.ts +2 -0
  68. package/dist/pipeline/index.js +24 -0
  69. package/dist/pipeline/yarnInfo.d.ts +2 -0
  70. package/dist/pipeline/yarnInfo.js +296 -0
  71. package/dist/rules/index.d.ts +3 -0
  72. package/dist/rules/index.js +27 -0
  73. package/dist/runner/index.d.ts +3 -0
  74. package/dist/runner/index.js +12 -0
  75. package/dist/tsconfig.tsbuildinfo +1 -0
  76. package/dist/types/config.d.ts +73 -0
  77. package/dist/types/config.js +80 -0
  78. package/dist/types/context.d.ts +36 -0
  79. package/dist/types/context.js +3 -0
  80. package/dist/types/gitlab-types.d.ts +86 -0
  81. package/dist/types/gitlab-types.js +5 -0
  82. package/dist/types/index.d.ts +3 -0
  83. package/dist/types/index.js +26 -0
  84. package/dist/utils/index.d.ts +2 -0
  85. package/dist/utils/index.js +18 -0
  86. package/package.json +30 -8
  87. package/src/build/base/constants.ts +7 -0
  88. package/src/build/base/createBuildJob.ts +46 -0
  89. package/{scripts/magic → src}/build/docker.ts +17 -4
  90. package/src/build/index.ts +42 -0
  91. package/src/build/node/buildJob.ts +54 -0
  92. package/src/build/node/cache.ts +36 -0
  93. package/src/build/node/constants.ts +6 -0
  94. package/src/build/node/index.ts +17 -0
  95. package/src/build/node/meteor.ts +75 -0
  96. package/src/build/node/testJob.ts +80 -0
  97. package/src/build/node/yarn.ts +8 -0
  98. package/src/build/tests/storybook.test.ts +46 -0
  99. package/src/build/types.ts +75 -0
  100. package/src/catladder-gitlab.ts +52 -0
  101. package/src/config/configruedEnvs.test.ts +97 -0
  102. package/src/config/configruedEnvs.ts +56 -0
  103. package/src/config/index.ts +2 -0
  104. package/src/config/readConfig.ts +36 -0
  105. package/src/constants.ts +2 -0
  106. package/src/context/index.ts +194 -0
  107. package/src/defaults/index.ts +6 -0
  108. package/src/deploy/base.ts +101 -0
  109. package/src/deploy/index.ts +19 -0
  110. package/src/deploy/kubernetes/cloudsql.ts +13 -0
  111. package/src/deploy/kubernetes/deployJob.ts +116 -0
  112. package/src/deploy/kubernetes/index.ts +1 -0
  113. package/src/deploy/kubernetes/mongodb.ts +20 -0
  114. package/src/deploy/types.ts +60 -0
  115. package/src/index.ts +8 -0
  116. package/{scripts/magic/tests/createPipeline.test.ts → src/pipeline/createChildPipeline.test.ts} +12 -11
  117. package/src/pipeline/createChildPipeline.ts +51 -0
  118. package/src/pipeline/createJobs.ts +158 -0
  119. package/src/pipeline/index.ts +2 -0
  120. package/src/pipeline/yarnInfo.ts +54 -0
  121. package/src/rules/index.ts +37 -0
  122. package/src/runner/index.ts +10 -0
  123. package/src/types/config.ts +88 -0
  124. package/src/types/context.ts +36 -0
  125. package/src/types/gitlab-types.ts +94 -0
  126. package/{scripts/magic → src}/types/index.ts +0 -0
  127. package/src/utils/index.ts +10 -0
  128. package/tsconfig.json +4 -2
  129. package/Dockerfile +0 -84
  130. package/dist/scripts/magic/index.js +0 -16
  131. package/scripts/createSamplePipeline.ts +0 -10
  132. package/scripts/getCommitInfo +0 -11
  133. package/scripts/kubernetesCreateSecret +0 -9
  134. package/scripts/kubernetesDelete +0 -4
  135. package/scripts/kubernetesDeploy +0 -55
  136. package/scripts/kubernetesEnsureNamespace +0 -3
  137. package/scripts/magic/build/index.ts +0 -16
  138. package/scripts/magic/build/node.ts +0 -130
  139. package/scripts/magic/build/types.ts +0 -17
  140. package/scripts/magic/createChildPipeline/index.ts +0 -176
  141. package/scripts/magic/createPipeline.ts +0 -52
  142. package/scripts/magic/deploy/index.ts +0 -19
  143. package/scripts/magic/deploy/kubernetes.ts +0 -65
  144. package/scripts/magic/deploy/types.ts +0 -29
  145. package/scripts/magic/index.ts +0 -2
  146. package/scripts/magic/sample-config.ts +0 -78
  147. package/scripts/magic/types/config.ts +0 -54
  148. package/scripts/magic/types/context.ts +0 -21
  149. package/scripts/magic/types/gitlab-types.ts +0 -69
  150. package/scripts/magic.ts +0 -51
  151. package/scripts/monorepoGenerate.ts +0 -104
  152. package/scripts/printAllValues.ts +0 -17
  153. package/scripts/printBuildEnv.ts +0 -22
  154. package/scripts/utils/extractAllValues.ts +0 -32
  155. package/scripts/utils/extractBuildEnv.ts +0 -94
  156. package/scripts/utils/extractValuesFromEnvVars.ts +0 -21
  157. package/scripts/utils/extractValuesFromMr.ts +0 -39
  158. package/tests/extractValuesFromMr.test.ts +0 -156
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env ts-node
2
-
3
- import { readdirSync, readFileSync, lstatSync, existsSync } from "fs";
4
- import { join } from "path";
5
- import { parse } from "yaml";
6
- import yargs from "yargs";
7
-
8
- import { hideBin } from "yargs/helpers";
9
- import { extractBuildEnv } from "./utils/extractBuildEnv";
10
- type Type = "test" | "deploy";
11
- const args = yargs(hideBin(process.argv)).array("env").argv as Record<
12
- string,
13
- unknown
14
- >;
15
-
16
- const thisGitlabCi = parse(
17
- readFileSync(".gitlab-ci.yml", { encoding: "utf-8" })
18
- );
19
-
20
- const subcis = readdirSync(".")
21
- .filter((file) => lstatSync(file).isDirectory())
22
- .map((dir) => ({
23
- dirname: dir,
24
- ci: join(dir, ".gitlab-ci.yml"),
25
- }))
26
- .filter(({ ci }) => existsSync(ci));
27
-
28
- const makeConfig = async ({
29
- subapp,
30
- type,
31
- ci,
32
- env,
33
- }: {
34
- subapp: string;
35
- type: Type;
36
- env: string;
37
- ci: string;
38
- }) => {
39
- const changes = [subapp + "/**/*"];
40
- const rules = [
41
- // same as rules "always", but with `changes` to only trigger changed branches
42
- { if: "$CI_COMMIT_TAG" },
43
- {
44
- if: "$CI_COMMIT_MESSAGE =~ /^chore(release).*/",
45
- when: "never",
46
- },
47
- { if: "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/" },
48
- {
49
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
50
- changes,
51
- },
52
- // add it manually when no changes
53
- {
54
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
55
- when: "manual",
56
- },
57
- { if: "$CI_MERGE_REQUEST_ID", changes },
58
- // add it manually when no changes
59
- { if: "$CI_MERGE_REQUEST_ID", when: "manual" },
60
- ];
61
-
62
- return {
63
- variables: {
64
- // merge
65
- ...thisGitlabCi.variables,
66
- APP_DIR: subapp,
67
- VALUES_DIR: subapp,
68
- COMPONENT_NAME: subapp,
69
- PARENT_PIPELINE_ID: "$CI_PIPELINE_ID",
70
- [type.toUpperCase() + "_ONLY"]: "1",
71
- ...(await extractBuildEnv(subapp, env)),
72
- },
73
- stage: type,
74
- rules: rules,
75
- trigger: {
76
- include: ci,
77
- strategy: "depend",
78
- },
79
- };
80
- };
81
- const generateSubPipeline = async (type: Type, envs: string[]) => {
82
- return await envs.reduce(async (acc, env) => {
83
- return {
84
- ...(await acc),
85
- ...(await subcis.reduce(
86
- async (inneracc, { dirname, ci }) => ({
87
- ...(await inneracc),
88
-
89
- [`${env}-${dirname} ${type}`]: await makeConfig({
90
- subapp: dirname,
91
- ci,
92
- type,
93
- env,
94
- }),
95
- }),
96
- {} as Promise<Record<string, unknown>>
97
- )),
98
- };
99
- }, {} as Promise<Record<string, unknown>>);
100
- };
101
-
102
- generateSubPipeline(args.t as Type, args.env as string[]).then((p) =>
103
- console.log(JSON.stringify(p, null, 2))
104
- );
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ts-node
2
-
3
- import yargs from "yargs";
4
- import { hideBin } from "yargs/helpers";
5
- import { extractAllValues } from "./utils/extractAllValues";
6
-
7
- const args = yargs(hideBin(process.argv)).argv as Record<string, unknown>;
8
-
9
- extractAllValues(args.d as string, args.e as string)
10
- .then(async (values) => {
11
- console.log(JSON.stringify(values, null, 2) ?? "");
12
- })
13
- .catch((e) => {
14
- console.error("could not extract values", {
15
- error: e,
16
- });
17
- });
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env ts-node
2
-
3
- import { isObject } from "lodash";
4
- import yargs from "yargs";
5
- import { hideBin } from "yargs/helpers";
6
- import { extractBuildEnv } from "./utils/extractBuildEnv";
7
-
8
- const args = yargs(hideBin(process.argv)).argv as Record<string, unknown>;
9
-
10
- extractBuildEnv(args.d as string, args.e as string)
11
- .then(async (values) => {
12
- Object.entries(values).forEach(([key, value]) =>
13
- console.log(
14
- `${key}: "${isObject(value) ? JSON.stringify(value) : value}"`
15
- )
16
- );
17
- })
18
- .catch((e) => {
19
- console.error("could not extract values", {
20
- error: e,
21
- });
22
- });
@@ -1,32 +0,0 @@
1
- import { readFileSync } from "fs";
2
- import { merge } from "lodash";
3
- import { parse } from "yaml";
4
- import { extractValuesFromEnvVars } from "./extractValuesFromEnvVars";
5
- import { extractValuesFromMr } from "./extractValuesFromMr";
6
-
7
- const { CI_PROJECT_ID, CI_MERGE_REQUEST_IID } = process.env;
8
-
9
- const readYaml = (path: string) => {
10
- try {
11
- return parse(readFileSync(path, { encoding: "utf-8" }));
12
- } catch (e) {
13
- return {};
14
- }
15
- };
16
-
17
- export const extractAllValues = async (
18
- appDirectory: string,
19
- env: string | null
20
- ) => {
21
- const valuesFromEnvVars = extractValuesFromEnvVars();
22
- const valuesDefault = readYaml(appDirectory + "/values.yml");
23
- const valuesEnv = env
24
- ? readYaml(appDirectory + "/values-" + env + ".yml")
25
- : {};
26
- const valuesFromMR =
27
- CI_PROJECT_ID && CI_MERGE_REQUEST_IID
28
- ? await extractValuesFromMr(CI_PROJECT_ID, Number(CI_MERGE_REQUEST_IID))
29
- : {};
30
-
31
- return merge({}, valuesFromEnvVars, valuesDefault, valuesEnv, valuesFromMR);
32
- };
@@ -1,94 +0,0 @@
1
- import { extractAllValues } from "./extractAllValues";
2
- import slugify from "slugify";
3
-
4
- // deprecated
5
-
6
- type EnvVars = Record<string, string>;
7
- export const extractBuildEnv = async (
8
- componentName: string,
9
- env: string | null,
10
- visitedReferencedApps: { [app: string]: EnvVars } = {} // this is just to avoid infinit recursion
11
- ): Promise<EnvVars> => {
12
- const values = await extractAllValues(componentName, env);
13
- const {
14
- APP_NAME,
15
- CUSTOMER_NAME,
16
- CI_COMMIT_REF_SLUG,
17
- CI_MERGE_REQUEST_IID,
18
- CI_ENVIRONMENT_SLUG,
19
- } = process.env;
20
-
21
- const isNotMonorepo = componentName === ".";
22
-
23
- const KUBE_APP_NAME = CI_MERGE_REQUEST_IID
24
- ? `${componentName}-${CI_COMMIT_REF_SLUG}`
25
- : componentName;
26
- const KUBE_APP_SLUG = isNotMonorepo
27
- ? CI_ENVIRONMENT_SLUG
28
- : slugify(KUBE_APP_NAME);
29
- const CANONICAL_URL = `https://${APP_NAME}-${KUBE_APP_SLUG}.${CUSTOMER_NAME}.panter.cloud`;
30
- const defaultBuildEnv = {
31
- KUBE_APP_NAME,
32
- CANONICAL_URL,
33
- IMAGE_PULL_SECRET: `gitlab-registry-${componentName}`,
34
- ROOT_URL: values?.application?.host || CANONICAL_URL,
35
- };
36
- const publicBuildEnv = values?.buildEnv?.public ?? {};
37
- const merged = {
38
- ...defaultBuildEnv,
39
- ...publicBuildEnv,
40
- };
41
- if (process.env.DEBUG) {
42
- console.log({ values, defaultBuildEnv, publicBuildEnv });
43
- }
44
- // extract referenced build env (only works in monorepo
45
- // like this
46
- /*
47
- fromComponents:
48
- vendure:
49
- API_URL: ROOT_URL
50
- */
51
- const fromComponents: {
52
- [otherApp: string]: {
53
- [ourKey: string]: string;
54
- };
55
- } = values?.buildEnv?.fromComponents ?? {};
56
- const referencedBuildEnv = await Object.entries(fromComponents).reduce(
57
- async (acc, [otherApp, mapping]) => {
58
- if (process.env.DEBUG) {
59
- console.log("extract reference build env", otherApp, mapping);
60
- }
61
- if (!mapping) {
62
- return await acc;
63
- }
64
-
65
- // prevent infinit loop
66
- const otherBuildEnv =
67
- visitedReferencedApps[otherApp] ??
68
- (await extractBuildEnv(otherApp, env, {
69
- ...visitedReferencedApps,
70
- [componentName]: merged,
71
- }));
72
- if (process.env.DEBUG) {
73
- console.log({ otherBuildEnv });
74
- }
75
- // resolve mapping
76
- return {
77
- ...(await acc),
78
- ...Object.entries(mapping).reduce(
79
- (inneracc, [ourKey, otherKey]) => ({
80
- ...inneracc,
81
- [ourKey]: otherBuildEnv[otherKey],
82
- }),
83
- {} as EnvVars
84
- ),
85
- };
86
- },
87
- {} as Promise<EnvVars>
88
- );
89
-
90
- return {
91
- ...merged,
92
- ...referencedBuildEnv,
93
- };
94
- };
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env ts-node
2
- import { set } from "lodash";
3
-
4
- export const extractValuesFromEnvVars = () => {
5
- const values = {};
6
-
7
- const PREFIX = "DEFAULT_VALUE_";
8
- for (const [key, value] of Object.entries(process.env).filter(([key]) =>
9
- key.startsWith(PREFIX)
10
- )) {
11
- const path = key.replace(PREFIX, "").split("_");
12
- let theValue;
13
- try {
14
- theValue = JSON.parse(value ?? "");
15
- } catch (e) {
16
- theValue = value;
17
- }
18
- set(values, path, theValue);
19
- }
20
- return values;
21
- };
@@ -1,39 +0,0 @@
1
- import { Gitlab } from "@gitbeaker/node"; // Just the Project Resource
2
- import { parse } from "yaml";
3
- import { merge } from "lodash";
4
-
5
- const { GL_TOKEN, CI_SERVER_URL } = process.env;
6
-
7
- const gitlabApi = new Gitlab({
8
- token: GL_TOKEN,
9
- host: CI_SERVER_URL,
10
- });
11
- const getMRInfo = async (projectId: string, mrId: number) => {
12
- return await gitlabApi.MergeRequests.show(projectId, mrId);
13
- };
14
-
15
- export const extractValuesFromMRMessage = (mrMessage: string) => {
16
- const codeBlocks = Array.from(mrMessage.matchAll(/```.*([^`]+)```/gm)).map(
17
- (match) => match[1]
18
- );
19
-
20
- return codeBlocks.reduce((values = {}, block) => {
21
- if (block.includes("$env") || block.includes("$values"))
22
- try {
23
- const { $values, $env } = parse(block);
24
- if ($values) merge(values, $values);
25
- if ($env) merge(values, { env: { public: $env } });
26
- return values;
27
- } catch (e) {
28
- console.warn(e);
29
- }
30
- }, {});
31
- };
32
-
33
- export const extractValuesFromMr = async (
34
- projectId: string,
35
- mergeRequestId: number
36
- ) => {
37
- const mrInfo = await getMRInfo(projectId, mergeRequestId);
38
- return extractValuesFromMRMessage(mrInfo.description);
39
- };
@@ -1,156 +0,0 @@
1
- import { extractValuesFromMRMessage } from "../scripts/utils/extractValuesFromMr";
2
-
3
- describe("extractValuesFromMr", () => {
4
- describe("extractValuesFromMRMessage", () => {
5
- it("can extract $values yaml", () => {
6
- const result = extractValuesFromMRMessage(`
7
-
8
- blabla
9
-
10
- test
11
-
12
- \`\`\`
13
- $values:
14
- application:
15
- host: www.foo.com
16
- env:
17
- public:
18
- API_KEY: fooooxxx
19
- BLA: "blubb"
20
- \`\`\`
21
- `);
22
- expect(result).toEqual({
23
- application: {
24
- host: "www.foo.com",
25
- },
26
- env: {
27
- public: {
28
- API_KEY: "fooooxxx",
29
- BLA: "blubb",
30
- },
31
- },
32
- });
33
- });
34
- it("can handle $env as shortcut", () => {
35
- const result = extractValuesFromMRMessage(`
36
-
37
- blabla
38
-
39
- test
40
-
41
- \`\`\`
42
- $env:
43
- API_KEY: fooooxxx
44
- BLA: "blubb"
45
-
46
- \`\`\`
47
- `);
48
- expect(result).toEqual({
49
- env: {
50
- public: {
51
- API_KEY: "fooooxxx",
52
- BLA: "blubb",
53
- },
54
- },
55
- });
56
- });
57
-
58
- it("ignores language in backticks", () => {
59
- const result = extractValuesFromMRMessage(`
60
-
61
- blabla
62
-
63
- test
64
-
65
- \`\`\`yaml
66
- $env:
67
- API_KEY: fooooxxx
68
- BLA: "blubb"
69
-
70
- \`\`\`
71
- `);
72
- expect(result).toEqual({
73
- env: {
74
- public: {
75
- API_KEY: "fooooxxx",
76
- BLA: "blubb",
77
- },
78
- },
79
- });
80
- });
81
- it("can handle mixed blocks", () => {
82
- const result = extractValuesFromMRMessage(`
83
-
84
- blabla
85
-
86
- test
87
-
88
- \`\`\`
89
- $values:
90
- env:
91
- public:
92
- FOO: "bar"
93
-
94
- $env:
95
- API_KEY: fooooxxx
96
- BLA: "blubb"
97
-
98
- \`\`\`
99
- `);
100
- expect(result).toEqual({
101
- env: {
102
- public: {
103
- FOO: "bar",
104
- API_KEY: "fooooxxx",
105
- BLA: "blubb",
106
- },
107
- },
108
- });
109
- });
110
-
111
- it("can handle multiple blocks", () => {
112
- const result = extractValuesFromMRMessage(`
113
-
114
- blabla
115
-
116
- test
117
-
118
- \`\`\`
119
- $values:
120
- env:
121
- public:
122
- FOO: "bar"
123
-
124
- $env:
125
- API_KEY: fooooxxx
126
- BLA: "blubb"
127
-
128
- \`\`\`
129
-
130
-
131
- fooo
132
-
133
- \`\`\`
134
- $values:
135
- env:
136
- public:
137
- FOO: "blubb"
138
-
139
- $env:
140
- TEST: test
141
-
142
- \`\`\`
143
- `);
144
- expect(result).toEqual({
145
- env: {
146
- public: {
147
- FOO: "blubb",
148
- API_KEY: "fooooxxx",
149
- BLA: "blubb",
150
- TEST: "test",
151
- },
152
- },
153
- });
154
- });
155
- });
156
- });