@soft-artel/ci 1.3.15 → 1.3.18

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 (88) hide show
  1. package/incrementBuild.d.ts +3 -0
  2. package/incrementBuild.d.ts.map +1 -0
  3. package/incrementBuild.js +44 -0
  4. package/incrementBuild.js.map +1 -0
  5. package/k8s/App.d.ts +22 -0
  6. package/k8s/App.d.ts.map +1 -0
  7. package/k8s/App.js +150 -0
  8. package/k8s/App.js.map +1 -0
  9. package/k8s/DockerImage.d.ts +15 -0
  10. package/k8s/DockerImage.d.ts.map +1 -0
  11. package/k8s/DockerImage.js +112 -0
  12. package/k8s/DockerImage.js.map +1 -0
  13. package/k8s/Node.d.ts +17 -0
  14. package/k8s/Node.d.ts.map +1 -0
  15. package/k8s/Node.js +103 -0
  16. package/k8s/Node.js.map +1 -0
  17. package/k8s-build.d.ts +3 -0
  18. package/k8s-build.d.ts.map +1 -0
  19. package/k8s-build.js +125 -0
  20. package/k8s-build.js.map +1 -0
  21. package/k8s-deploy.d.ts +3 -0
  22. package/k8s-deploy.d.ts.map +1 -0
  23. package/k8s-deploy.js +124 -0
  24. package/k8s-deploy.js.map +1 -0
  25. package/libs/Exception.d.ts +5 -0
  26. package/libs/Exception.d.ts.map +1 -0
  27. package/libs/Exception.js +13 -0
  28. package/libs/Exception.js.map +1 -0
  29. package/libs/Git.d.ts +44 -0
  30. package/libs/Git.d.ts.map +1 -0
  31. package/libs/Git.js +161 -0
  32. package/libs/Git.js.map +1 -0
  33. package/libs/Gitlab.d.ts +12 -0
  34. package/libs/Gitlab.d.ts.map +1 -0
  35. package/libs/Gitlab.js +78 -0
  36. package/libs/Gitlab.js.map +1 -0
  37. package/libs/Jira.d.ts +31 -0
  38. package/libs/Jira.d.ts.map +1 -0
  39. package/libs/Jira.js +157 -0
  40. package/libs/Jira.js.map +1 -0
  41. package/libs/Project.d.ts +39 -0
  42. package/libs/Project.d.ts.map +1 -0
  43. package/libs/Project.js +177 -0
  44. package/libs/Project.js.map +1 -0
  45. package/libs/Reporter.d.ts +34 -0
  46. package/libs/Reporter.d.ts.map +1 -0
  47. package/libs/Reporter.js +131 -0
  48. package/libs/Reporter.js.map +1 -0
  49. package/libs/Shell.d.ts +39 -0
  50. package/libs/Shell.d.ts.map +1 -0
  51. package/libs/Shell.js +107 -0
  52. package/libs/Shell.js.map +1 -0
  53. package/libs/helpers.d.ts +29 -0
  54. package/libs/helpers.d.ts.map +1 -0
  55. package/libs/helpers.js +101 -0
  56. package/libs/helpers.js.map +1 -0
  57. package/libs/prototype.d.ts +9 -0
  58. package/libs/prototype.d.ts.map +1 -0
  59. package/libs/prototype.js +186 -0
  60. package/libs/prototype.js.map +1 -0
  61. package/package.json +4 -3
  62. package/xcode.d.ts +3 -0
  63. package/xcode.d.ts.map +1 -0
  64. package/xcode.js +163 -0
  65. package/xcode.js.map +1 -0
  66. package/.env +0 -21
  67. package/.eslintcache +0 -1
  68. package/.eslintignore +0 -4
  69. package/.eslintrc +0 -246
  70. package/.gitlab-ci.yml +0 -12
  71. package/_publish.sh +0 -24
  72. package/k8s/App.ts +0 -200
  73. package/k8s/DockerImage.ts +0 -147
  74. package/k8s/Node.ts +0 -119
  75. package/k8s-build.ts +0 -175
  76. package/k8s-deploy.ts +0 -174
  77. package/libs/Exception.ts +0 -19
  78. package/libs/Git.ts +0 -199
  79. package/libs/Gitlab.ts +0 -86
  80. package/libs/Jira.ts +0 -239
  81. package/libs/Project.ts +0 -215
  82. package/libs/Reporter.ts +0 -181
  83. package/libs/Shell.ts +0 -119
  84. package/libs/helpers.ts +0 -114
  85. package/libs/prototype.ts +0 -313
  86. package/tsconfig.json +0 -24
  87. package/upd_pkg.ts +0 -21
  88. package/xcode.ts +0 -226
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ts-node
2
+ export {};
3
+ //# sourceMappingURL=incrementBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incrementBuild.d.ts","sourceRoot":"","sources":["../incrementBuild.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ts-node
2
+ "use strict";
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const fs_1 = require("fs");
14
+ const commander_1 = require("commander");
15
+ const helpers_1 = require("./libs/helpers");
16
+ function main() {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ commander_1.program
19
+ .option('--path <path>', 'Path to package.json')
20
+ .option('--build <build>', 'Set <build> number')
21
+ .option('--no-save', 'Print next version only')
22
+ .action(() => __awaiter(this, void 0, void 0, function* () {
23
+ try {
24
+ const opts = commander_1.program.opts() || {};
25
+ const pkgPath = (0, helpers_1.resolvePath)(`${opts.path ? opts.path : '.'}/package.json`);
26
+ const pkg = JSON.parse(yield fs_1.promises.readFile(pkgPath, 'utf-8'));
27
+ const versionArr = pkg.version.split('.');
28
+ const major = Number(versionArr[0] || 0);
29
+ const patch = Number(versionArr[1] || 0);
30
+ const build = opts.build || Number(versionArr[2] || 0) + 1;
31
+ pkg.version = `${major}.${patch}.${build}`;
32
+ yield fs_1.promises.writeFile(pkgPath, JSON.stringify(pkg, null, 3));
33
+ process.env.PUBLISH_VERSION = pkg.version;
34
+ }
35
+ catch (e) {
36
+ helpers_1.log.error(e);
37
+ process.exit(1);
38
+ }
39
+ }));
40
+ yield commander_1.program.parseAsync(process.argv);
41
+ });
42
+ }
43
+ main();
44
+ //# sourceMappingURL=incrementBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incrementBuild.js","sourceRoot":"","sources":["../incrementBuild.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2BAAyC;AACzC,yCAAkC;AAElC,4CAAkD;AAIlD,SAAe,IAAI;;QAElB,mBAAO;aACL,MAAM,CAAC,eAAe,EAAG,sBAAsB,CAAC;aAChD,MAAM,CAAC,iBAAiB,EAAG,oBAAoB,CAAC;aAChD,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;aAC9C,MAAM,CACN,GAAS,EAAE;YACV,IAAI;gBACH,MAAM,IAAI,GAAG,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBAElC,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC,GAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAI,eAAe,CAAC,CAAC;gBAE7E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAEjE,MAAM,UAAU,GAAa,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEpD,MAAM,KAAK,GAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE5D,GAAG,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;gBAE3C,MAAM,aAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAE/D,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC;aAE1C;YAAC,OAAM,CAAC,EAAC;gBACT,aAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChB;QACF,CAAC,CAAA,CACD,CAAC;QAEH,MAAM,mBAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CAAA;AACD,IAAI,EAAE,CAAC"}
package/k8s/App.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import '../libs/prototype';
2
+ import { Project } from '../libs/Project';
3
+ import { DockerImage } from './DockerImage';
4
+ export interface Config {
5
+ appFile: string;
6
+ sharedPaths?: string[];
7
+ ignorePaths?: string[];
8
+ }
9
+ export declare class App {
10
+ group: string;
11
+ app: string;
12
+ name: string;
13
+ path: string;
14
+ $pathComp: string[];
15
+ constructor(path?: string);
16
+ writeManifest(prj: Project, image: DockerImage): Promise<void>;
17
+ }
18
+ export declare function getApps(prj: Project, config: Config, updatedPaths: string[], maxdepth?: number, ignore?: string[]): Promise<{
19
+ apps: Record<string, App>;
20
+ updated: string[] | undefined;
21
+ }>;
22
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../k8s/App.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,MAAM,WAAW,MAAM;IAEtB,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CAEvB;AAID,qBAAa,GAAG;IAEf,KAAK,SAAM;IACX,GAAG,SAAM;IAET,IAAI,SAAM;IACV,IAAI,SAAM;IAEV,SAAS,EAAE,MAAM,EAAE,CAAY;gBAInB,IAAI,GAAE,MAAW;IAsBvB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW;CA6DpD;AAID,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAU,EAAE,MAAM,GAAE,MAAM,EAAyC,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC,CA2ExO"}
package/k8s/App.js ADDED
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getApps = exports.App = void 0;
16
+ require("../libs/prototype");
17
+ const mustache_1 = __importDefault(require("mustache"));
18
+ const js_yaml_1 = __importDefault(require("js-yaml"));
19
+ const fs_1 = require("fs");
20
+ const Shell_1 = __importDefault(require("../libs/Shell"));
21
+ const helpers_1 = require("../libs/helpers");
22
+ const Exception_1 = require("../libs/Exception");
23
+ class App {
24
+ constructor(path = '') {
25
+ this.group = '';
26
+ this.app = '';
27
+ this.name = '';
28
+ this.path = '';
29
+ this.$pathComp = ['./'];
30
+ const pathComp = path.split('/');
31
+ if (pathComp.length > 1) {
32
+ this.group = pathComp[0];
33
+ this.app = pathComp[1];
34
+ this.name = `${this.group}-${this.app}`;
35
+ this.path = path;
36
+ this.$pathComp.push(`./${this.group}/`);
37
+ this.$pathComp.push(`./${this.path}/`);
38
+ }
39
+ else {
40
+ this.app = path;
41
+ this.name = path;
42
+ this.path = '';
43
+ }
44
+ }
45
+ writeManifest(prj, image) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ const k8s_tpl_fileName = 'k8s_tpl.yaml';
48
+ const k8s_spec_fileName = 'k8s_spec.json';
49
+ let k8s_tpl = '';
50
+ const k8s_spec = {};
51
+ for (const path of this.$pathComp) {
52
+ const k8s_tplFile = yield Shell_1.default.cat(path + k8s_tpl_fileName, { silent: helpers_1.log.debug, ignoreError: true });
53
+ k8s_tpl = k8s_tplFile && k8s_tplFile !== '' ? k8s_tplFile : k8s_tpl;
54
+ const k8s_specFile = yield Shell_1.default.cat(path + k8s_spec_fileName, { silent: helpers_1.log.debug, ignoreError: true });
55
+ if (k8s_specFile && k8s_specFile !== '') {
56
+ try {
57
+ const sObj = JSON.parse(k8s_specFile);
58
+ k8s_spec.mergeFrom(sObj, true);
59
+ }
60
+ catch (e) {
61
+ helpers_1.log.error(e);
62
+ }
63
+ }
64
+ }
65
+ if (k8s_tpl.length < 10) {
66
+ throw new Exception_1.Exception(`No K8s template [${k8s_tpl_fileName}] found for app:${this.name}`, this.$pathComp);
67
+ }
68
+ helpers_1.log.dbg(`${this.name} k8s specs`, k8s_spec);
69
+ for (const stage of prj.$stages) {
70
+ const k8s_data = {};
71
+ k8s_data.stage = stage;
72
+ k8s_data.app = this;
73
+ k8s_data.image = image;
74
+ k8s_data.prj = prj;
75
+ k8s_data.spec = k8s_spec[stage] || {};
76
+ if (!k8s_data.spec.replicas) {
77
+ k8s_data.spec.replicas = 1;
78
+ }
79
+ const manifest = mustache_1.default.render(k8s_tpl, k8s_data);
80
+ js_yaml_1.default.loadAll(manifest);
81
+ yield Shell_1.default.mkdir(`${prj.rootPath}/_k8s/${stage}`, { ignoreError: false });
82
+ yield fs_1.promises.writeFile(`${prj.rootPath}/_k8s/${stage}/${this.name}.yml`, manifest);
83
+ helpers_1.log.dbg(`[${stage}] ${this.name} writed -> ${prj.rootPath}/_k8s/${stage}/${this.name}.yml `);
84
+ }
85
+ });
86
+ }
87
+ }
88
+ exports.App = App;
89
+ function getApps(prj, config, updatedPaths, maxdepth = 3, ignore = ['*/_*', '*/\.*', '*/node_modules*']) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ Shell_1.default.cd(prj.rootPath);
92
+ const appsPaths = yield Shell_1.default.find(prj.rootPath, config.appFile, maxdepth, ignore);
93
+ const ignorePaths = [...config.ignorePaths || [], ...config.sharedPaths || []];
94
+ const apps = {};
95
+ const watchPaths = {};
96
+ for (const file of appsPaths.sort()) {
97
+ const path = file.replace(prj.rootPath + '/', '').replace('/' + config.appFile, '');
98
+ let skip = false;
99
+ for (const i_path of ignorePaths) {
100
+ if (path.includes(i_path)) {
101
+ skip = true;
102
+ break;
103
+ }
104
+ }
105
+ if (path === '' || skip) {
106
+ continue;
107
+ }
108
+ const app = new App(path);
109
+ if (app.name === config.appFile) {
110
+ app.name = prj.name;
111
+ app.app = prj.name;
112
+ app.group = '';
113
+ app.path = '';
114
+ }
115
+ apps[app.name] = app;
116
+ watchPaths[app.path] = app.name;
117
+ }
118
+ helpers_1.log.dbg(`Find apps by ${config.appFile}`, Object.keys(apps).sort());
119
+ const sharedPaths = config.sharedPaths || [];
120
+ sharedPaths.push('package.json');
121
+ sharedPaths.push('k8s_spec.json');
122
+ sharedPaths.push('k8s_tpl.yaml');
123
+ sharedPaths.push('dockerfile');
124
+ const watchPathsArr = Object.keys(watchPaths);
125
+ let appsChanged = {};
126
+ for (const file of updatedPaths) {
127
+ let allApps = false;
128
+ for (const i_path of sharedPaths) {
129
+ if (file.includes(i_path)) {
130
+ allApps = true;
131
+ break;
132
+ }
133
+ }
134
+ if (allApps) {
135
+ appsChanged = apps;
136
+ break;
137
+ }
138
+ for (const testPath of watchPathsArr) {
139
+ const appName = watchPaths[testPath];
140
+ if ((RegExp(testPath).exec(file)) && apps[appName] && appsChanged[appName] === undefined) {
141
+ appsChanged[appName] = apps[appName];
142
+ }
143
+ }
144
+ }
145
+ const changed = Object.keys(appsChanged);
146
+ return { apps, updated: changed.length > 0 ? changed : undefined };
147
+ });
148
+ }
149
+ exports.getApps = getApps;
150
+ //# sourceMappingURL=App.js.map
package/k8s/App.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../k8s/App.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ declare type DockerImagePrebuildAction = (img: DockerImage) => void;
2
+ export declare class DockerImage {
3
+ path: string;
4
+ key: string;
5
+ srcImage: string;
6
+ tag: string;
7
+ fullTag: string;
8
+ $prebuild_typed?: DockerImagePrebuildAction;
9
+ constructor(path: string, ver: string, build: number);
10
+ prebuild(): Promise<void>;
11
+ build(): Promise<void>;
12
+ push(): Promise<void>;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=DockerImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerImage.d.ts","sourceRoot":"","sources":["../../k8s/DockerImage.ts"],"names":[],"mappings":"AASA,aAAK,yBAAyB,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;AAG5D,qBAAa,WAAW;IAEvB,IAAI,SAAM;IACV,GAAG,SAAM;IAET,QAAQ,SAAM;IAEd,GAAG,SAAM;IACT,OAAO,SAAM;IAEb,eAAe,CAAC,EAAE,yBAAyB,CAAa;gBAI5C,IAAI,EAAE,MAAM,EAAG,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IA4B/C,QAAQ;IAOR,KAAK;IAOL,IAAI;CASV"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DockerImage = void 0;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const helpers_1 = require("../libs/helpers");
18
+ const Shell_1 = __importDefault(require("../libs/Shell"));
19
+ const ENV = process.env;
20
+ const PREBUILD = {};
21
+ class DockerImage {
22
+ constructor(path, ver, build) {
23
+ this.path = '';
24
+ this.key = '';
25
+ this.srcImage = '';
26
+ this.tag = '';
27
+ this.fullTag = '';
28
+ this.$prebuild_typed = undefined;
29
+ this.path = (0, helpers_1.resolvePath)(path);
30
+ const dockerfile = fs_1.default.readFileSync(this.path + '/dockerfile', 'utf8');
31
+ this.key = (0, helpers_1.md5)(dockerfile);
32
+ const dockerImage = /FROM (.+)/.exec(dockerfile);
33
+ if (!dockerImage || dockerImage.length < 2) {
34
+ throw new Error(`Wrong dockerfile format:\n${dockerfile}`);
35
+ }
36
+ this.srcImage = dockerImage[1];
37
+ const dockerName = /#[ ]?IMAGE NAME (.+)/.exec(dockerfile);
38
+ const name = dockerName && dockerName.length > 1 ? dockerName[1] : ENV.CI_PROJECT_NAME || this.key;
39
+ this.tag = `${name}-v${ver}:${build}`;
40
+ this.fullTag = `${ENV.CI_REGISTRY_IMAGE}/${this.tag}`;
41
+ const dockerType = /#[ ]?IMAGE TYPE (.+)/.exec(dockerfile);
42
+ const type = dockerType && dockerType.length > 1 ? dockerType[1].toLowerCase() : this.srcImage.split(':')[0].toLowerCase();
43
+ this.$prebuild_typed = PREBUILD[type];
44
+ }
45
+ prebuild() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ if (!this.$prebuild_typed) {
48
+ throw new Error(`No prebuild action for ${this.tag}`);
49
+ }
50
+ yield this.$prebuild_typed(this);
51
+ });
52
+ }
53
+ build() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ Shell_1.default.cd(this.path);
56
+ helpers_1.log.info(`Build docker image: ${this.tag}`);
57
+ yield Shell_1.default.exec(`docker build --platform amd64 -t ${this.fullTag} -f ${this.path}/dockerfile ${this.path}/.`);
58
+ });
59
+ }
60
+ push() {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ yield Shell_1.default.execRepeat(`docker login -u ${ENV.CI_REGISTRY_USER} -p ${ENV.CI_REGISTRY_PASSWORD} ${ENV.CI_REGISTRY}`);
63
+ helpers_1.log.info(`Push docker image: ${this.tag} to registry`);
64
+ yield Shell_1.default.execRepeat(`docker push ${this.fullTag}`);
65
+ helpers_1.log.dbg(`Clear local docker image: ${this.tag}`);
66
+ yield Shell_1.default.exec(`docker rmi -f ${this.fullTag}`);
67
+ });
68
+ }
69
+ }
70
+ exports.DockerImage = DockerImage;
71
+ PREBUILD.nginx = (img) => __awaiter(void 0, void 0, void 0, function* () {
72
+ Shell_1.default.cd(img.path);
73
+ const mounts = { '/etc/nginx': `${img.path}/nginx` };
74
+ helpers_1.log.info(`Test nginx configs`);
75
+ yield run(img.srcImage, 'nginx -t', mounts);
76
+ yield run('yandex/gixy', 'yandex/gixy /etc/nginx/nginx.conf', mounts);
77
+ helpers_1.log.info(`Nginx config file:`);
78
+ helpers_1.log.info(yield Shell_1.default.cat(`${img.path}/nginx/nginx.conf`));
79
+ });
80
+ PREBUILD.gateway = (img) => __awaiter(void 0, void 0, void 0, function* () {
81
+ Shell_1.default.cd(img.path);
82
+ const mounts = { '/etc/nginx': `${img.path}/nginx`, '/etc/certs': `${img.path}/certs` };
83
+ helpers_1.log.info(`Test gateway nginx configs`);
84
+ yield run(img.srcImage, 'nginx -t', mounts);
85
+ yield run('yandex/gixy', 'yandex/gixy /etc/nginx/nginx.conf', mounts);
86
+ helpers_1.log.info(`Nginx config file:`);
87
+ helpers_1.log.info(yield Shell_1.default.cat(`${img.path}/nginx/nginx.conf`));
88
+ });
89
+ PREBUILD.spa = (img) => __awaiter(void 0, void 0, void 0, function* () {
90
+ Shell_1.default.cd(img.path);
91
+ yield PREBUILD.nginx(img);
92
+ helpers_1.log.info(`Test and Distrib WEB SPA sources`);
93
+ yield Shell_1.default.exec(`npm run distrib`);
94
+ });
95
+ PREBUILD.node = (img) => __awaiter(void 0, void 0, void 0, function* () {
96
+ Shell_1.default.cd(img.path);
97
+ helpers_1.log.info(`Test and Distrib Node sources`);
98
+ yield Shell_1.default.exec(`npm run distrib`);
99
+ });
100
+ function run(srcImage, cmd, mnt) {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ let extCmd = `docker run --rm`;
103
+ for (const path in mnt) {
104
+ if (mnt.hasOwnProperty(path)) {
105
+ extCmd += ` -v ${mnt[path]}:${path}`;
106
+ }
107
+ }
108
+ extCmd += ` ${srcImage} ${cmd}`;
109
+ yield Shell_1.default.exec(`${extCmd}`);
110
+ });
111
+ }
112
+ //# sourceMappingURL=DockerImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerImage.js","sourceRoot":"","sources":["../../k8s/DockerImage.ts"],"names":[],"mappings":"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"}
package/k8s/Node.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import '../libs/prototype';
2
+ import { ExecOptions } from '../libs/Shell';
3
+ import { Stage } from '../libs/Project';
4
+ import { Reporter } from '../libs/Reporter';
5
+ export declare class Node {
6
+ configFile: string;
7
+ namespace: string;
8
+ constructor(stage: Stage);
9
+ applyObject(manifestObj: Record<string, any>): Promise<void>;
10
+ apply(manifestFile: string, appName: string): Promise<{
11
+ valid: boolean;
12
+ msg: string;
13
+ }>;
14
+ status(reporter?: Reporter | undefined, appsOnly?: boolean): Promise<string[]>;
15
+ exec(cmd: string, opt?: ExecOptions | undefined, cmdPrefix?: string): Promise<string>;
16
+ }
17
+ //# sourceMappingURL=Node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../k8s/Node.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAI3B,OAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C,qBAAa,IAAI;IAEhB,UAAU,SAAM;IAChB,SAAS,SAAM;gBAIH,KAAK,EAAE,KAAK;IAmBlB,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAO5C,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;IAyCpF,MAAM,CAAC,QAAQ,GAAE,QAAQ,GAAG,SAAqB,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyB/F,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,WAAW,GAAG,SAAqB,EAAE,SAAS,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC;CAIlG"}
package/k8s/Node.js ADDED
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Node = void 0;
16
+ require("../libs/prototype");
17
+ const js_yaml_1 = __importDefault(require("js-yaml"));
18
+ const Shell_1 = __importDefault(require("../libs/Shell"));
19
+ const helpers_1 = require("../libs/helpers");
20
+ const Exception_1 = require("../libs/Exception");
21
+ const ENV = process.env;
22
+ class Node {
23
+ constructor(stage) {
24
+ this.configFile = '';
25
+ this.namespace = '';
26
+ this.namespace = stage;
27
+ const configKey = `K8S_${stage.toUpperCase()}_CONFIG`;
28
+ let configFile = ENV[configKey];
29
+ if (stage !== 'prod' && !configFile) {
30
+ configFile = ENV.K8S_STAGES_CONFIG;
31
+ }
32
+ if (!configFile) {
33
+ throw new Exception_1.Exception(`K8s config file not found: ${configKey}`);
34
+ }
35
+ this.configFile = (0, helpers_1.resolvePath)(configFile);
36
+ }
37
+ applyObject(manifestObj) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const manifestYaml = js_yaml_1.default.dump(manifestObj);
40
+ yield this.exec(`apply -f -\n${manifestYaml}`, { silent: false }, 'cat <<EOF | ');
41
+ });
42
+ }
43
+ apply(manifestFile, appName) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ let status;
46
+ try {
47
+ yield this.exec(`apply -f ${manifestFile} --dry-run=server --validate`);
48
+ status = (yield Shell_1.default.exec(`cat ${manifestFile} | grep 'image:'`)).replace('image: ', '').replace(ENV.CI_REGISTRY_IMAGE + '/', '').trim();
49
+ }
50
+ catch (e) {
51
+ helpers_1.log.error(e);
52
+ helpers_1.log.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
53
+ helpers_1.log.error(`VALIDATE FAIL: ${appName} at ${manifestFile}`);
54
+ helpers_1.log.error(e.message);
55
+ helpers_1.log.error(`${yield Shell_1.default.cat(manifestFile)}`);
56
+ helpers_1.log.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
57
+ return { valid: false, msg: e.message };
58
+ }
59
+ try {
60
+ status = yield this.exec(`apply -f ${manifestFile}`);
61
+ yield this.exec(`rollout status deploy/${appName} --watch=true --timeout=300s`);
62
+ helpers_1.log.info('+++++++++++++++++++++++++++++');
63
+ helpers_1.log.info(`DEPLOYED: ${appName}`);
64
+ helpers_1.log.info(yield this.exec(`get pods --no-headers -l app=${appName} -o wide`, { ignoreError: true, silent: true }));
65
+ helpers_1.log.info('+++++++++++++++++++++++++++++');
66
+ return { valid: true, msg: status };
67
+ }
68
+ catch (error) {
69
+ helpers_1.log.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
70
+ helpers_1.log.error(`DEPLOY FAIL: ${appName}`);
71
+ helpers_1.log.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
72
+ helpers_1.log.error(yield this.exec(`get pods --no-headers -l app=${appName} -o wide`, { ignoreError: true, silent: true }));
73
+ throw error;
74
+ }
75
+ });
76
+ }
77
+ status(reporter = undefined, appsOnly = true) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const cmd = `get pods -o=jsonpath='{range .items[*]}{"\\n"}{"<b>"}{.metadata.labels.app}{"</b> "}{range .spec.containers[*]}{.image}{end}{" "}{.metadata.labels.pod-template-hash}{" "}{.status.phase}{end}'`;
80
+ const statusArr = (yield this.exec(cmd)).split('\n');
81
+ const result = [];
82
+ for (const row of statusArr) {
83
+ if (row.length < 4 || (appsOnly && (RegExp((ENV.CI_REGISTRY_IMAGE || '')).exec(row)) === null)) {
84
+ continue;
85
+ }
86
+ result.push(row.replace(ENV.CI_REGISTRY_IMAGE + '/', ''));
87
+ }
88
+ helpers_1.log.info(`K8S Node: ${this.namespace.toUpperCase()}`, result);
89
+ if (reporter) {
90
+ const msg = `\n<b>${this.namespace.toUpperCase()}</b> Pods:\n-----------------\n ` + result.join('\n-----------------\n ');
91
+ yield reporter.send(msg, '');
92
+ }
93
+ return result;
94
+ });
95
+ }
96
+ exec(cmd, opt = undefined, cmdPrefix = '') {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ return Shell_1.default.exec(`${cmdPrefix}kubectl --kubeconfig ${this.configFile} -n ${this.namespace} ${cmd}`, opt);
99
+ });
100
+ }
101
+ }
102
+ exports.Node = Node;
103
+ //# sourceMappingURL=Node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Node.js","sourceRoot":"","sources":["../../k8s/Node.ts"],"names":[],"mappings":"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"}
package/k8s-build.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import './libs/prototype';
3
+ //# sourceMappingURL=k8s-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-build.d.ts","sourceRoot":"","sources":["../k8s-build.ts"],"names":[],"mappings":";AACA,OAAO,kBAAkB,CAAC"}