@catladder/pipeline 0.0.4 → 0.0.8

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 (61) hide show
  1. package/dist/scripts/createSamplePipeline.d.ts +2 -0
  2. package/dist/scripts/createSamplePipeline.js +14 -0
  3. package/dist/scripts/magic/build/docker.d.ts +2 -0
  4. package/dist/scripts/magic/build/docker.js +68 -0
  5. package/dist/scripts/magic/build/index.d.ts +9 -0
  6. package/dist/scripts/magic/build/index.js +12 -0
  7. package/dist/scripts/magic/build/node.d.ts +6 -0
  8. package/dist/scripts/magic/build/node.js +150 -0
  9. package/dist/scripts/magic/build/types.d.ts +18 -0
  10. package/dist/scripts/magic/build/types.js +7 -0
  11. package/dist/scripts/magic/context/index.d.ts +3 -0
  12. package/dist/scripts/magic/context/index.js +122 -0
  13. package/dist/scripts/magic/createChildPipeline/index.d.ts +3 -0
  14. package/dist/scripts/magic/createChildPipeline/index.js +68 -0
  15. package/dist/scripts/magic/createPipeline.d.ts +14 -0
  16. package/dist/scripts/magic/createPipeline.js +80 -0
  17. package/dist/scripts/magic/deploy/index.d.ts +9 -0
  18. package/dist/scripts/magic/deploy/index.js +12 -0
  19. package/dist/scripts/magic/deploy/kubernetes.d.ts +5 -0
  20. package/dist/scripts/magic/deploy/kubernetes.js +62 -0
  21. package/dist/scripts/magic/deploy/types.d.ts +41 -0
  22. package/dist/scripts/magic/deploy/types.js +7 -0
  23. package/dist/scripts/magic/index.d.ts +2 -0
  24. package/dist/scripts/magic/sample-config.d.ts +3 -0
  25. package/dist/scripts/magic/sample-config.js +77 -0
  26. package/dist/scripts/magic/tests/createPipeline.test.d.ts +1 -0
  27. package/dist/scripts/magic/tests/createPipeline.test.js +89 -0
  28. package/dist/scripts/magic/types/config.d.ts +49 -0
  29. package/dist/scripts/magic/types/config.js +17 -0
  30. package/dist/scripts/magic/types/context.d.ts +19 -0
  31. package/dist/scripts/magic/types/context.js +2 -0
  32. package/dist/scripts/magic/types/gitlab-types.d.ts +57 -0
  33. package/dist/scripts/magic/types/gitlab-types.js +2 -0
  34. package/dist/scripts/magic/types/index.d.ts +3 -0
  35. package/dist/scripts/magic/types/index.js +15 -0
  36. package/dist/scripts/magic.d.ts +2 -0
  37. package/dist/scripts/magic.js +43 -0
  38. package/dist/scripts/monorepoGenerate.d.ts +2 -0
  39. package/dist/scripts/monorepoGenerate.js +164 -0
  40. package/dist/scripts/printAllValues.d.ts +2 -0
  41. package/dist/scripts/printAllValues.js +58 -0
  42. package/dist/scripts/printBuildEnv.d.ts +2 -0
  43. package/dist/scripts/printBuildEnv.js +77 -0
  44. package/dist/scripts/utils/extractAllValues.d.ts +1 -0
  45. package/dist/scripts/utils/extractAllValues.js +78 -0
  46. package/dist/scripts/utils/extractBuildEnv.d.ts +5 -0
  47. package/dist/scripts/utils/extractBuildEnv.js +152 -0
  48. package/dist/scripts/utils/extractValuesFromEnvVars.d.ts +2 -0
  49. package/dist/scripts/utils/extractValuesFromEnvVars.js +63 -0
  50. package/dist/scripts/utils/extractValuesFromMr.d.ts +2 -0
  51. package/dist/scripts/utils/extractValuesFromMr.js +86 -0
  52. package/dist/tests/extractValuesFromMr.test.d.ts +1 -0
  53. package/dist/tests/extractValuesFromMr.test.js +68 -0
  54. package/package.json +3 -2
  55. package/scripts/magic/build/docker.ts +2 -2
  56. package/scripts/magic/build/index.ts +3 -1
  57. package/scripts/magic/build/node.ts +26 -13
  58. package/scripts/magic/build/types.ts +6 -2
  59. package/scripts/magic/context/index.ts +127 -0
  60. package/scripts/magic/createChildPipeline/index.ts +5 -121
  61. package/scripts/magic/tests/createPipeline.test.ts +7 -7
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ts-node
2
+ export {};
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ts-node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ exports.__esModule = true;
7
+ var fs_1 = require("fs");
8
+ var createPipeline_1 = require("./magic/createPipeline");
9
+ var sample_config_1 = __importDefault(require("./magic/sample-config"));
10
+ createPipeline_1.createPipeline("taggedRelease", sample_config_1["default"]).then(function (mainPipeline) {
11
+ fs_1.writeFileSync("__pipeline.yml", JSON.stringify(mainPipeline, null, 2), {
12
+ encoding: "utf-8"
13
+ });
14
+ });
@@ -0,0 +1,2 @@
1
+ import { GitlabJobDef, Context } from "../types";
2
+ export declare const createDockerBuildJob: (context: Context, { script }: Pick<GitlabJobDef, "script">) => GitlabJobDef;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
30
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
31
+ to[j] = from[i];
32
+ return to;
33
+ };
34
+ exports.__esModule = true;
35
+ exports.createDockerBuildJob = void 0;
36
+ var createDockerBuildJob = function (context, _a) {
37
+ var script = _a.script;
38
+ var base = {
39
+ stage: "build",
40
+ image: "git.panter.ch:5001/catladder/gitlab-ci/docker-build:$PIPELINE_IMAGE_TAG",
41
+ interruptible: true,
42
+ services: [
43
+ {
44
+ name: "docker:20-dind",
45
+ command: ["--tls=false"]
46
+ },
47
+ ],
48
+ variables: {
49
+ APP_DIR: context.componentConfig.dir,
50
+ DOCKER_HOST: "tcp://0.0.0.0:2375",
51
+ DOCKER_TLS_CERTDIR: "",
52
+ DOCKER_DIR: ".",
53
+ IMAGE_TAG: "$CI_COMMIT_SHA",
54
+ DOCKER_DRIVER: "overlay2",
55
+ IMAGE_NAME: "$CI_REGISTRY_IMAGE/" + context.componentName,
56
+ CACHE_IMAGE: "$CI_REGISTRY_IMAGE/" + context.componentName + "/cache:cache"
57
+ }
58
+ };
59
+ return __assign(__assign({}, base), { script: __spreadArray(__spreadArray([], __read(script)), [
60
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
61
+ "docker pull $CACHE_IMAGE || true",
62
+ "docker build --network host --cache-from $CACHE_IMAGE --tag $IMAGE_NAME:$IMAGE_TAG -f $APP_DIR/Dockerfile .",
63
+ "docker push $IMAGE_NAME:$IMAGE_TAG",
64
+ "docker tag $IMAGE_NAME:$IMAGE_TAG $CACHE_IMAGE",
65
+ "docker push $CACHE_IMAGE",
66
+ ]) });
67
+ };
68
+ exports.createDockerBuildJob = createDockerBuildJob;
@@ -0,0 +1,9 @@
1
+ import { GitlabJobs } from "../types/gitlab-types";
2
+ import { Context } from "../types/context";
3
+ import { BuildConfig } from "./types";
4
+ export declare const buildJobCreators: {
5
+ [type in BuildConfig["type"]]: (context: Context) => GitlabJobs;
6
+ };
7
+ export declare const getBuildDefaults: {
8
+ [type in BuildConfig["type"]]: () => Partial<BuildConfig>;
9
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.getBuildDefaults = exports.buildJobCreators = void 0;
4
+ var node_1 = require("./node");
5
+ exports.buildJobCreators = {
6
+ node: node_1.createNodeJobs,
7
+ "node-static": node_1.createNodeJobs
8
+ };
9
+ exports.getBuildDefaults = {
10
+ node: node_1.getNodeDefaults,
11
+ "node-static": node_1.getNodeStaticDefaults
12
+ };
@@ -0,0 +1,6 @@
1
+ import { GitlabJobs } from "../types/gitlab-types";
2
+ import { Context } from "../types/context";
3
+ import { BuildConfigNode, BuildConfigNodeStatic } from "./types";
4
+ export declare const createNodeJobs: (context: Context) => GitlabJobs;
5
+ export declare const getNodeDefaults: () => Partial<BuildConfigNode>;
6
+ export declare const getNodeStaticDefaults: () => Partial<BuildConfigNodeStatic>;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
30
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
31
+ to[j] = from[i];
32
+ return to;
33
+ };
34
+ exports.__esModule = true;
35
+ exports.getNodeStaticDefaults = exports.getNodeDefaults = exports.createNodeJobs = void 0;
36
+ var docker_1 = require("./docker");
37
+ var types_1 = require("./types");
38
+ var baseRetry = {
39
+ max: 2,
40
+ when: ["runner_system_failure", "stuck_or_timeout_failure"]
41
+ };
42
+ var getYarnInstall = function (context) { return [
43
+ "cd " + context.componentConfig.dir,
44
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
45
+ "yarn install --frozen-lockfile",
46
+ ]; };
47
+ var getNodeCache = function (context) { return [
48
+ {
49
+ key: "node-modules",
50
+ policy: "pull-push",
51
+ paths: ["node_modules", "**/node_modules/"]
52
+ },
53
+ ]; };
54
+ var getNextCache = function (context) { return [
55
+ {
56
+ key: "next-cache",
57
+ policy: "pull-push",
58
+ paths: [context.componentConfig.dir + "/.next/cache/"]
59
+ },
60
+ ]; };
61
+ var createNodeTestJobs = function (context) {
62
+ var base = {
63
+ variables: {
64
+ APP_PATH: context.componentConfig.dir
65
+ },
66
+ cache: getNodeCache(context),
67
+ stage: "test",
68
+ interruptible: true,
69
+ needs: [],
70
+ retry: baseRetry
71
+ };
72
+ var yarnInstall = getYarnInstall(context);
73
+ return [
74
+ {
75
+ name: "audit",
76
+ perEnv: false,
77
+ job: __assign(__assign({}, base), { script: __spreadArray(__spreadArray([], __read(yarnInstall)), ["yarn audit"]), allow_failure: true })
78
+ },
79
+ {
80
+ name: "lint",
81
+ perEnv: false,
82
+ job: __assign(__assign({}, base), { script: __spreadArray(__spreadArray([], __read(yarnInstall)), ["yarn lint"]) })
83
+ },
84
+ {
85
+ name: "test",
86
+ perEnv: false,
87
+ job: __assign(__assign({}, base), { script: __spreadArray(__spreadArray([], __read(yarnInstall)), ["yarn test"]) })
88
+ },
89
+ ];
90
+ };
91
+ var createNodeBuildJobs = function (context) {
92
+ var buildConfig = context.componentConfig.build;
93
+ if (!types_1.isOfType(buildConfig, "node") && !types_1.isOfType(buildConfig, "node-static")) {
94
+ // should not happen
95
+ throw new Error("deploy config is not kubernetes");
96
+ }
97
+ var buildInfo = [
98
+ ". getCommitInfo",
99
+ "echo '{\"id\":\"'$BUILD_ID'\",\"commit\":\"'$BUILD_COMMIT'\",\"tag\":\"'$BUILD_TAG'\",\"time\":\"'$BUILD_TIME'\"}' > " + context.componentConfig.dir + "/__build_info.json",
100
+ ];
101
+ var yarnInstall = getYarnInstall(context);
102
+ return [
103
+ {
104
+ name: "app-build",
105
+ job: {
106
+ needs: [],
107
+ cache: __spreadArray(__spreadArray([], __read(getNodeCache(context))), __read(getNextCache(context))),
108
+ variables: context.environment.variables,
109
+ retry: baseRetry,
110
+ interruptible: true,
111
+ stage: "build",
112
+ script: __spreadArray(__spreadArray(__spreadArray([], __read(buildInfo)), __read(yarnInstall)), [buildConfig.buildCommand]),
113
+ artifacts: {
114
+ paths: [
115
+ context.componentConfig.dir + "/__build_info.json",
116
+ context.componentConfig.dir + "/dist",
117
+ context.componentConfig.dir + "/.next",
118
+ ]
119
+ }
120
+ }
121
+ },
122
+ {
123
+ name: "docker-build",
124
+ job: __assign(__assign({}, docker_1.createDockerBuildJob(context, {
125
+ script: [
126
+ buildConfig.type === "node-static"
127
+ ? "ensureNginxDockerfile"
128
+ : "ensureNodeDockerfile",
129
+ ]
130
+ })), { needs: ["app-build"] })
131
+ },
132
+ ];
133
+ };
134
+ var createNodeJobs = function (context) {
135
+ return __spreadArray(__spreadArray([], __read(createNodeTestJobs(context))), __read(createNodeBuildJobs(context)));
136
+ };
137
+ exports.createNodeJobs = createNodeJobs;
138
+ var getNodeDefaults = function () {
139
+ return {
140
+ startCommand: "yarn start",
141
+ buildCommand: "yarn build"
142
+ };
143
+ };
144
+ exports.getNodeDefaults = getNodeDefaults;
145
+ var getNodeStaticDefaults = function () {
146
+ return {
147
+ buildCommand: "yarn build"
148
+ };
149
+ };
150
+ exports.getNodeStaticDefaults = getNodeStaticDefaults;
@@ -0,0 +1,18 @@
1
+ export declare type BuildConfigBase = {
2
+ startCommand?: string;
3
+ };
4
+ export declare type BuildConfigNode = {
5
+ type: "node";
6
+ buildCommand?: string;
7
+ } & BuildConfigBase;
8
+ export declare type BuildConfigNodeStatic = {
9
+ type: "node-static";
10
+ buildCommand?: string;
11
+ startCommand?: never;
12
+ };
13
+ export declare type BuildConfig = BuildConfigNode | BuildConfigNodeStatic;
14
+ export declare const isOfType: <T extends "node" | "node-static">(t: BuildConfig, type: T) => t is Extract<BuildConfigNode, {
15
+ type: T;
16
+ }> | Extract<BuildConfigNodeStatic, {
17
+ type: T;
18
+ }>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.isOfType = void 0;
4
+ var isOfType = function (t, type) {
5
+ return t.type === type;
6
+ };
7
+ exports.isOfType = isOfType;
@@ -0,0 +1,3 @@
1
+ import { Config } from "../types/config";
2
+ import { Context } from "../types/context";
3
+ export declare const createContext: (componentName: string, config: Config, env: string) => Context;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __importDefault = (this && this.__importDefault) || function (mod) {
30
+ return (mod && mod.__esModule) ? mod : { "default": mod };
31
+ };
32
+ exports.__esModule = true;
33
+ exports.createContext = void 0;
34
+ var lodash_1 = require("lodash");
35
+ var slugify_1 = __importDefault(require("slugify"));
36
+ var build_1 = require("../build");
37
+ var deploy_1 = require("../deploy");
38
+ var getEnvironment = function (config, componentName, env, commitInfo) {
39
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
40
+ var componentConfig = config.components[componentName];
41
+ if (!componentConfig) {
42
+ throw new Error("unknown component " + componentName);
43
+ }
44
+ var defaultConfig = componentConfig;
45
+ var envConfig = (_b = (_a = componentConfig.env) === null || _a === void 0 ? void 0 : _a[env]) !== null && _b !== void 0 ? _b : {};
46
+ var mergedConfig = lodash_1.merge({}, defaultConfig, envConfig);
47
+ var publicEnvVars = (_d = (_c = mergedConfig.vars) === null || _c === void 0 ? void 0 : _c.public) !== null && _d !== void 0 ? _d : {};
48
+ var secretEnvVarsRaw = (_f = (_e = mergedConfig.vars) === null || _e === void 0 ? void 0 : _e.secret) !== null && _f !== void 0 ? _f : {}; // TODO, map to gl secrets?
49
+ var secretEnvVars = {}; // TODO
50
+ var referencedRaw = (_h = (_g = mergedConfig.vars) === null || _g === void 0 ? void 0 : _g.fromComponents) !== null && _h !== void 0 ? _h : {};
51
+ var referenced = Object.entries(referencedRaw).reduce(function (acc, _a) {
52
+ var _b = __read(_a, 2), otherApp = _b[0], mapping = _b[1];
53
+ // TODO: prevent infinit looop
54
+ var variables = getEnvironment(config, otherApp, env, commitInfo).variables;
55
+ return Object.fromEntries(Object.entries(mapping).map(function (_a) {
56
+ var _b = __read(_a, 2), ourKey = _b[0], otherKey = _b[1];
57
+ return [
58
+ ourKey,
59
+ variables[otherKey],
60
+ ];
61
+ }));
62
+ }, {});
63
+ var envType = (_l = (_k = (_j = componentConfig.env) === null || _j === void 0 ? void 0 : _j[env]) === null || _k === void 0 ? void 0 : _k.type) !== null && _l !== void 0 ? _l : env;
64
+ var environmentName = envType === "review"
65
+ ? env + "/" + componentName + "/" + commitInfo.refName
66
+ : env + "/" + componentName;
67
+ var KUBE_APP_NAME = envType === "review"
68
+ ? componentName + "-" + commitInfo.refSlug
69
+ : componentName;
70
+ var KUBE_NAMESPACE = config.customerName + "-" + config.appName + "-" + env;
71
+ var APP_SLUG = slugify_1["default"](KUBE_APP_NAME);
72
+ var HOST_CANONICAL = config.appName + "-" + APP_SLUG + "." + config.customerName + ".panter.cloud";
73
+ var hostname = (_m = mergedConfig.hostname) !== null && _m !== void 0 ? _m : HOST_CANONICAL;
74
+ var url = "https://" + hostname;
75
+ var predefinedVariables = {
76
+ HOST_CANONICAL: HOST_CANONICAL,
77
+ ROOT_URL: url,
78
+ KUBE_NAMESPACE: KUBE_NAMESPACE,
79
+ KUBE_APP_NAME: KUBE_APP_NAME,
80
+ ENV_SHORT: env,
81
+ APP_DIR: componentConfig.dir
82
+ };
83
+ var variables = __assign(__assign(__assign(__assign({}, predefinedVariables), publicEnvVars), secretEnvVars), referenced);
84
+ return {
85
+ hostname: hostname,
86
+ fullName: environmentName,
87
+ shortName: env,
88
+ url: url,
89
+ variables: variables
90
+ };
91
+ };
92
+ var createContext = function (componentName, config, env) {
93
+ var _a, _b, _c, _d;
94
+ if (!/^[a-z0-9-]+$/.test(componentName)) {
95
+ throw new Error("componentName may only contain lower case letters, numbers and -");
96
+ }
97
+ var rawConfig = config.components[componentName];
98
+ if (!rawConfig) {
99
+ throw new Error("unknown component " + componentName);
100
+ }
101
+ // envs can override the config
102
+ var envConfig = (_b = (_a = rawConfig.env) === null || _a === void 0 ? void 0 : _a[env]) !== null && _b !== void 0 ? _b : {};
103
+ var componentConfigWithoutDefaults = lodash_1.merge({}, rawConfig, envConfig);
104
+ // fill in defaults of build and deploy
105
+ var defaults = {
106
+ build: build_1.getBuildDefaults[componentConfigWithoutDefaults.build.type](),
107
+ deploy: deploy_1.getDeployDefaults[componentConfigWithoutDefaults.deploy.type]()
108
+ };
109
+ var componentConfig = lodash_1.merge({}, defaults, componentConfigWithoutDefaults);
110
+ var commit = {
111
+ refName: (_c = process.env.CI_COMMIT_REF_NAME) !== null && _c !== void 0 ? _c : "unknown",
112
+ refSlug: (_d = process.env.CI_COMMIT_REF_SLUG) !== null && _d !== void 0 ? _d : "unknown"
113
+ };
114
+ return {
115
+ fullConfig: config,
116
+ componentConfig: componentConfig,
117
+ componentName: componentName,
118
+ environment: getEnvironment(config, componentName, env, commit),
119
+ commit: commit
120
+ };
121
+ };
122
+ exports.createContext = createContext;
@@ -0,0 +1,3 @@
1
+ import { Config } from "../types/config";
2
+ import { GitlabJobDef } from "../types/gitlab-types";
3
+ export declare const createJobs: (envs: string[], config: Config, componentName: string) => Record<string, GitlabJobDef>;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
30
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
31
+ to[j] = from[i];
32
+ return to;
33
+ };
34
+ exports.__esModule = true;
35
+ exports.createJobs = void 0;
36
+ var build_1 = require("../build");
37
+ var context_1 = require("../context");
38
+ var deploy_1 = require("../deploy");
39
+ var createRawJobs = function (context) {
40
+ var buildJobs = build_1.buildJobCreators[context.componentConfig.build.type](context);
41
+ var deployJobs = deploy_1.deployJobCreators[context.componentConfig.deploy.type](context);
42
+ return __spreadArray(__spreadArray([], __read(buildJobs)), __read(deployJobs));
43
+ };
44
+ var getFullJobName = function (name, componentName, env) {
45
+ if (env) {
46
+ return env + " " + componentName + " " + name;
47
+ }
48
+ return componentName + " " + name;
49
+ };
50
+ var replaceReferences = function (def, componentName, env) {
51
+ var _a, _b;
52
+ return __assign(__assign({}, def), { needs: (_a = def.needs) === null || _a === void 0 ? void 0 : _a.map(function (n) { return getFullJobName(n, componentName, env); }), dependencies: (_b = def.dependencies) === null || _b === void 0 ? void 0 : _b.map(function (n) {
53
+ return getFullJobName(n, componentName, env);
54
+ }) });
55
+ };
56
+ var createJobs = function (envs, config, componentName) {
57
+ return envs.reduce(function (acc, env) {
58
+ var context = context_1.createContext(componentName, config, env);
59
+ var jobs = createRawJobs(context);
60
+ return __assign(__assign({}, acc), jobs.reduce(function (acc, _a) {
61
+ var _b;
62
+ var name = _a.name, job = _a.job, _c = _a.perEnv, perEnv = _c === void 0 ? true : _c;
63
+ var def = job;
64
+ return __assign(__assign({}, acc), (_b = {}, _b[getFullJobName(name, componentName, perEnv ? env : undefined)] = replaceReferences(def, componentName, perEnv ? env : undefined), _b));
65
+ }, {}));
66
+ }, {});
67
+ };
68
+ exports.createJobs = createJobs;
@@ -0,0 +1,14 @@
1
+ import { Config, PipelineTrigger } from "./types/config";
2
+ export declare const createPipeline: (trigger: PipelineTrigger, config: Config) => Promise<{
3
+ image: string;
4
+ workflow: {
5
+ rules: ({
6
+ if: string;
7
+ when?: undefined;
8
+ } | {
9
+ if: string;
10
+ when: string;
11
+ })[];
12
+ };
13
+ stages: string[];
14
+ }>;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ exports.__esModule = true;
50
+ exports.createPipeline = void 0;
51
+ var createChildPipeline_1 = require("./createChildPipeline");
52
+ var config_1 = require("./types/config");
53
+ var createPipeline = function (trigger, config) { return __awaiter(void 0, void 0, void 0, function () {
54
+ var envs, components, jobs, rules, mainPipeline;
55
+ return __generator(this, function (_a) {
56
+ envs = Object.keys(config_1.ENV_TYPES).filter(function (e) { return config_1.ENV_TYPES[e].trigger === trigger; });
57
+ components = Object.keys(config.components);
58
+ jobs = components.reduce(function (acc, componentName) {
59
+ return __assign(__assign({}, acc), createChildPipeline_1.createJobs(envs, config, componentName));
60
+ }, {});
61
+ rules = [
62
+ // same as rules "always", but with `changes` to only trigger changed branches
63
+ { "if": "$CI_COMMIT_TAG" },
64
+ {
65
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore(release).*/",
66
+ when: "never"
67
+ },
68
+ { "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/" },
69
+ {
70
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH"
71
+ },
72
+ { "if": "$CI_MERGE_REQUEST_ID" },
73
+ ];
74
+ mainPipeline = __assign({ image: "git.panter.ch:5001/catladder/gitlab-ci/pipeline:$PIPELINE_IMAGE_TAG", workflow: {
75
+ rules: rules
76
+ }, stages: ["setup", "test", "build", "deploy", "verify", "actions"] }, jobs);
77
+ return [2 /*return*/, mainPipeline];
78
+ });
79
+ }); };
80
+ exports.createPipeline = createPipeline;
@@ -0,0 +1,9 @@
1
+ import { GitlabJobs } from "../types/gitlab-types";
2
+ import { Context } from "../types/context";
3
+ import { DeployConfig } from "./types";
4
+ export declare const deployJobCreators: {
5
+ [type in DeployConfig["type"]]: (context: Context) => GitlabJobs;
6
+ };
7
+ export declare const getDeployDefaults: {
8
+ [type in DeployConfig["type"]]: () => Partial<DeployConfig>;
9
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.getDeployDefaults = exports.deployJobCreators = void 0;
4
+ var kubernetes_1 = require("./kubernetes");
5
+ exports.deployJobCreators = {
6
+ kubernetes: kubernetes_1.createKubernetesDeployJobs,
7
+ serverless: function () { return []; }
8
+ };
9
+ exports.getDeployDefaults = {
10
+ kubernetes: kubernetes_1.getKubernetesDefault,
11
+ serverless: function () { return ({}); }
12
+ };
@@ -0,0 +1,5 @@
1
+ import { GitlabJobs } from "../types/gitlab-types";
2
+ import { Context } from "../types/context";
3
+ import { DeployConfigKubernetes } from "./types";
4
+ export declare const createKubernetesDeployJobs: (context: Context) => GitlabJobs;
5
+ export declare const getKubernetesDefault: () => Partial<DeployConfigKubernetes>;