@soft-artel/ci 2.0.59 → 2.0.62

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 (80) hide show
  1. package/Project.d.ts +57 -0
  2. package/Project.d.ts.map +1 -0
  3. package/Project.js +176 -0
  4. package/Project.js.map +1 -0
  5. package/commands/incrementBuild.d.ts +3 -0
  6. package/commands/incrementBuild.d.ts.map +1 -0
  7. package/commands/incrementBuild.js +34 -0
  8. package/commands/incrementBuild.js.map +1 -0
  9. package/commands/k8s-build.d.ts +28 -0
  10. package/commands/k8s-build.d.ts.map +1 -0
  11. package/commands/k8s-build.js +295 -0
  12. package/commands/k8s-build.js.map +1 -0
  13. package/commands/k8s-deploy.d.ts +11 -0
  14. package/commands/k8s-deploy.d.ts.map +1 -0
  15. package/commands/k8s-deploy.js +145 -0
  16. package/commands/k8s-deploy.js.map +1 -0
  17. package/commands/xcode.d.ts +3 -0
  18. package/commands/xcode.d.ts.map +1 -0
  19. package/commands/xcode.js +128 -0
  20. package/commands/xcode.js.map +1 -0
  21. package/package.json +1 -1
  22. package/services/Git.d.ts +46 -0
  23. package/services/Git.d.ts.map +1 -0
  24. package/services/Git.js +138 -0
  25. package/services/Git.js.map +1 -0
  26. package/services/Gitlab.d.ts +14 -0
  27. package/services/Gitlab.d.ts.map +1 -0
  28. package/services/Gitlab.js +101 -0
  29. package/services/Gitlab.js.map +1 -0
  30. package/services/Jira.d.ts +32 -0
  31. package/services/Jira.d.ts.map +1 -0
  32. package/services/Jira.js +136 -0
  33. package/services/Jira.js.map +1 -0
  34. package/services/Reporter.d.ts +43 -0
  35. package/services/Reporter.d.ts.map +1 -0
  36. package/services/Reporter.js +139 -0
  37. package/services/Reporter.js.map +1 -0
  38. package/utils/Exception.d.ts +5 -0
  39. package/utils/Exception.d.ts.map +1 -0
  40. package/utils/Exception.js +14 -0
  41. package/utils/Exception.js.map +1 -0
  42. package/utils/Logger.d.ts +11 -0
  43. package/utils/Logger.d.ts.map +1 -0
  44. package/utils/Logger.js +62 -0
  45. package/utils/Logger.js.map +1 -0
  46. package/utils/Shell.d.ts +39 -0
  47. package/utils/Shell.d.ts.map +1 -0
  48. package/utils/Shell.js +89 -0
  49. package/utils/Shell.js.map +1 -0
  50. package/utils/helpers.d.ts +15 -0
  51. package/utils/helpers.d.ts.map +1 -0
  52. package/utils/helpers.js +99 -0
  53. package/utils/helpers.js.map +1 -0
  54. package/utils/prototype.d.ts +9 -0
  55. package/utils/prototype.d.ts.map +1 -0
  56. package/utils/prototype.js +186 -0
  57. package/utils/prototype.js.map +1 -0
  58. package/.env +0 -21
  59. package/.eslintcache +0 -1
  60. package/.eslintignore +0 -4
  61. package/.eslintrc +0 -246
  62. package/.gitlab-ci.yml +0 -12
  63. package/README.md +0 -33
  64. package/_publish.sh +0 -25
  65. package/src/Project.ts +0 -291
  66. package/src/commands/incrementBuild.ts +0 -46
  67. package/src/commands/k8s-build.ts +0 -447
  68. package/src/commands/k8s-deploy.ts +0 -215
  69. package/src/commands/xcode.ts +0 -192
  70. package/src/services/Git.ts +0 -203
  71. package/src/services/Gitlab.ts +0 -129
  72. package/src/services/Jira.ts +0 -228
  73. package/src/services/Reporter.ts +0 -238
  74. package/src/utils/Exception.ts +0 -19
  75. package/src/utils/Logger.ts +0 -85
  76. package/src/utils/Shell.ts +0 -120
  77. package/src/utils/helpers.ts +0 -118
  78. package/src/utils/prototype.ts +0 -313
  79. package/test.ts +0 -0
  80. package/tsconfig.json +0 -25
package/Project.d.ts ADDED
@@ -0,0 +1,57 @@
1
+ import { OptionValues } from 'commander';
2
+ import { Reporter } from './services/Reporter';
3
+ export type RunCommandHandler = (prj: Project, reporter: Reporter, opts: OptionValues, config: Config) => Promise<any>;
4
+ export interface Config {
5
+ group?: string;
6
+ name?: string;
7
+ rootPath?: string;
8
+ appsPath?: string;
9
+ sharedPaths?: string[];
10
+ ignorePaths?: string[];
11
+ appFile?: string;
12
+ }
13
+ export declare class Project {
14
+ isRunner: boolean;
15
+ id: number;
16
+ path: string;
17
+ url: string;
18
+ name: string;
19
+ group: string;
20
+ rootPath: string;
21
+ build: number;
22
+ version: string;
23
+ stage: string;
24
+ $stagesState: Record<string, string>;
25
+ job: {
26
+ id: string | undefined;
27
+ name: string;
28
+ step: string;
29
+ branch: string;
30
+ url: string;
31
+ pipline: string;
32
+ user: {
33
+ ID: string;
34
+ login: string;
35
+ name: string;
36
+ email: string;
37
+ };
38
+ commit: {
39
+ title: string;
40
+ author: {
41
+ name: string;
42
+ email: string;
43
+ };
44
+ hash: string;
45
+ url: string;
46
+ };
47
+ };
48
+ static run(opts: OptionValues, runHandler: RunCommandHandler, chekEnv?: string[]): Promise<any>;
49
+ constructor(workdir: string | undefined, stage?: string);
50
+ get shortVersion(): string;
51
+ get prevVersion(): string | undefined;
52
+ incrementBuild(newBuild?: number): void;
53
+ saveGitLabBuild(): Promise<void>;
54
+ saveGitLabStagesVersions(): Promise<void>;
55
+ updateChangeLog(whatsNewHtml: string, filename?: string): Promise<void>;
56
+ }
57
+ //# sourceMappingURL=Project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../src/Project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAC,MAAM,WAAW,CAAC;AAQxC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAK/C,MAAM,MAAM,iBAAiB,GAAG,CAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,KAAM,OAAO,CAAC,GAAG,CAAC,CAAA;AAGxH,MAAM,WAAW,MAAM;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAG,MAAM,CAAA;IAEd,QAAQ,CAAC,EAAG,MAAM,CAAA;IAElB,QAAQ,CAAC,EAAG,MAAM,CAAA;IAElB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAA;CAEhB;AAGD,qBAAa,OAAO;IAGnB,QAAQ,UAA+B;IAEvC,EAAE,SAAyD;IAC3D,IAAI,SAA6B;IACjC,GAAG,SAA6B;IAEhC,IAAI,SAA6B;IACjC,KAAK,SAAkC;IAGvC,QAAQ,EAAE,MAAM,CAAM;IAEtB,KAAK,SAAK;IACV,OAAO,SAAW;IAClB,KAAK,EAAE,MAAM,CAAmC;IAGhD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAE1C,GAAG;;;;;;;;;;;;;;;;;;;;;;MA2BD;WAIW,GAAG,CAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE;gBAqG3E,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM;IAuBvD,IAAI,YAAY,WAEf;IAED,IAAI,WAAW,uBAGd;IAID,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM;IAW1B,eAAe;IAMf,wBAAwB;IAOxB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,SAAiB;CA4CrE"}
package/Project.js ADDED
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Project = void 0;
7
+ const fs_1 = require("fs");
8
+ const Logger_1 = require("./utils/Logger");
9
+ const Shell_1 = __importDefault(require("./utils/Shell"));
10
+ const helpers_1 = require("./utils/helpers");
11
+ const Gitlab_1 = __importDefault(require("./services/Gitlab"));
12
+ const Reporter_1 = require("./services/Reporter");
13
+ const Exception_1 = require("./utils/Exception");
14
+ const ENV = process.env;
15
+ class Project {
16
+ isRunner = ENV.CI_JOB_ID !== undefined;
17
+ id = (Number(ENV.CI_PROJECT_ID || 0));
18
+ path = ENV.CI_PROJECT_PATH || '';
19
+ url = ENV.CI_PROJECT_URL || '';
20
+ name = ENV.CI_PROJECT_NAME || '';
21
+ group = ENV.CI_PROJECT_NAMESPACE || '';
22
+ rootPath = '';
23
+ build = 0;
24
+ version = '0.0.0';
25
+ stage = ENV.CI_COMMIT_REF_NAME || 'dev';
26
+ $stagesState = {};
27
+ job = {
28
+ id: ENV.CI_JOB_ID,
29
+ name: ENV.CI_JOB_NAME || 'No Job',
30
+ step: ENV.CI_JOB_STAGE || 'build',
31
+ branch: ENV.CI_COMMIT_REF_NAME || 'dev',
32
+ url: ENV.CI_JOB_URL || '',
33
+ pipline: ENV.CI_PIPELINE_URL || '',
34
+ user: {
35
+ ID: ENV.GITLAB_USER_ID || '',
36
+ login: ENV.GITLAB_USER_LOGIN || '',
37
+ name: ENV.GITLAB_USER_NAME || '',
38
+ email: ENV.GITLAB_USER_EMAIL || '',
39
+ },
40
+ commit: {
41
+ title: ENV.CI_COMMIT_TITLE || '',
42
+ author: {
43
+ name: (ENV.CI_COMMIT_AUTHOR || ' < ').split('<')[0],
44
+ email: ((ENV.CI_COMMIT_AUTHOR || ' < ').split('<')[1] || ' ').replace('>', ''),
45
+ },
46
+ hash: '',
47
+ url: `${ENV.CI_PROJECT_URL}/-/commit/${ENV.CI_COMMIT_SHA}`,
48
+ },
49
+ };
50
+ static async run(opts, runHandler, chekEnv) {
51
+ const ciPkg = JSON.parse(await Shell_1.default.cat(__dirname + '/package.json') || "{}");
52
+ Logger_1.log.info('Soft-Artel CI v' + ciPkg?.version || 'undefined');
53
+ let reporter;
54
+ try {
55
+ (0, helpers_1.checkEnvVars)(['STAGES_STATE', 'REPORTER', 'LAST_BUILD']);
56
+ if (chekEnv) {
57
+ (0, helpers_1.checkEnvVars)(chekEnv);
58
+ }
59
+ const prj = new Project(opts.path);
60
+ const reporterOpts = JSON.parse(ENV.REPORTER);
61
+ reporterOpts.postTitle = opts.scheme;
62
+ if (await Shell_1.default.test('-e', prj.rootPath + '/package.json')) {
63
+ const pkg = JSON.parse(await Shell_1.default.cat(prj.rootPath + '/package.json') || 'no package.json file!');
64
+ const pkgBuild = Number(pkg.version.split('.')[2]);
65
+ prj.build = prj.build < pkgBuild ? pkgBuild : prj.build;
66
+ prj.version = `${pkg.version.split('.').splice(0, 2).join('.')}.${prj.build}`;
67
+ }
68
+ else if (await Shell_1.default.test('-e', 'XCODE PROJECT PAH')) {
69
+ const scheme = opts.scheme || 'iOS';
70
+ const xcodeVersion = await Shell_1.default.exec(`xcodebuild -showBuildSettings -scheme ${scheme} | grep MARKETING_VERSION | tr -d 'MARKETING_VERSION = '`, { silent: true });
71
+ const xcodeBuild = Number(await Shell_1.default.exec(`xcodebuild -showBuildSettings -scheme ${scheme} | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION = '`, { silent: true }));
72
+ prj.build = prj.build < xcodeBuild ? xcodeBuild : prj.build;
73
+ prj.version = `${xcodeVersion}.${prj.build}`;
74
+ }
75
+ else {
76
+ throw new Exception_1.Exception('package.json or xcode project not found on path:' + prj.rootPath);
77
+ }
78
+ reporter = new Reporter_1.Reporter(prj, reporterOpts);
79
+ if (await Shell_1.default.test('-e', prj.rootPath + '/ci-config.json')) {
80
+ const config = JSON.parse(await Shell_1.default.cat(prj.rootPath + '/ci-config.json') || 'no ci-config.json file!');
81
+ prj.rootPath = config.rootPath || prj.rootPath;
82
+ prj.group = config.group || prj.group;
83
+ prj.name = config.name || prj.name;
84
+ return await runHandler(prj, reporter, opts, config);
85
+ }
86
+ else {
87
+ throw new Exception_1.Exception('ci-config.json not found on path:' + prj.rootPath);
88
+ }
89
+ }
90
+ catch (e) {
91
+ Logger_1.log.error(e);
92
+ if (reporter) {
93
+ try {
94
+ await reporter.fail(e);
95
+ }
96
+ catch (e2) {
97
+ Logger_1.log.error(e2);
98
+ }
99
+ }
100
+ process.exit(1);
101
+ }
102
+ }
103
+ constructor(workdir, stage) {
104
+ this.rootPath = (0, helpers_1.resolvePath)(workdir || ENV.CI_PROJECT_DIR || Shell_1.default.pwd().toString());
105
+ this.stage = stage || this.stage;
106
+ this.$stagesState = JSON.parse(ENV.STAGES_STATE);
107
+ if (!this.$stagesState[this.stage]) {
108
+ Logger_1.log.fail(`Currnet stage - ${this.stage} missing in STAGES_STATE CI varable, applay to default version`, this.$stagesState);
109
+ this.$stagesState[this.stage] = '0.0.0';
110
+ }
111
+ Logger_1.log.dbg('STAGES STATE', this.$stagesState);
112
+ this.build = Number(ENV.LAST_BUILD) || 0;
113
+ this.version = '0.0.' + this.build;
114
+ Shell_1.default.cd(this.rootPath);
115
+ Logger_1.log.dbg(`[${this.stage}, ${this.version}] ` + this.rootPath);
116
+ }
117
+ get shortVersion() {
118
+ return this.version.split('.').splice(0, 2).join('.');
119
+ }
120
+ get prevVersion() {
121
+ const pV = this.$stagesState[this.stage];
122
+ return pV !== '0.0.0' ? pV : undefined;
123
+ }
124
+ incrementBuild(newBuild) {
125
+ if (newBuild) {
126
+ this.build = newBuild;
127
+ }
128
+ else {
129
+ this.build += 1;
130
+ }
131
+ this.version = `${this.shortVersion}.${this.build}`;
132
+ }
133
+ async saveGitLabBuild() {
134
+ await Gitlab_1.default.saveVariable(this, 'LAST_BUILD', this.build);
135
+ }
136
+ async saveGitLabStagesVersions() {
137
+ this.$stagesState[this.stage] = this.version;
138
+ await Gitlab_1.default.saveVariable(this, 'STAGES_STATE', JSON.stringify(this.$stagesState, null, 3));
139
+ }
140
+ async updateChangeLog(whatsNewHtml, filename = 'CHANGELOG.md') {
141
+ const filePath = `${this.rootPath}/${filename}`;
142
+ let title = `# ${(0, helpers_1.capitalizeFirstLetter)(this.group)}: **${this.name.toUpperCase()}**`;
143
+ Logger_1.log.info(`Update ${filename}:\n${title}`);
144
+ let changeLog = await Shell_1.default.cat(filePath, { silent: true, ignoreError: true }) || '';
145
+ const lines = changeLog.split('\n');
146
+ if (Array.isArray(lines) && lines.length > 1) {
147
+ title = lines.shift() || title;
148
+ changeLog = lines.join('\n');
149
+ }
150
+ const dateTime = new Date().toLocaleString('ru-RU', {
151
+ weekday: 'long',
152
+ year: 'numeric',
153
+ month: 'short',
154
+ day: 'numeric',
155
+ timeZone: 'Europe/Moscow',
156
+ hour12: false,
157
+ hour: 'numeric',
158
+ minute: 'numeric',
159
+ });
160
+ const whatsNewMd = (0, helpers_1.htmlToMd)(whatsNewHtml);
161
+ changeLog = `${title}
162
+ ## **${this.version}**
163
+ ${(0, helpers_1.capitalizeFirstLetter)(dateTime)}
164
+
165
+ ${whatsNewMd}
166
+
167
+
168
+
169
+
170
+ ${changeLog}
171
+ `;
172
+ await fs_1.promises.writeFile(filePath, changeLog, { encoding: 'utf8', flag: 'w+' });
173
+ }
174
+ }
175
+ exports.Project = Project;
176
+ //# sourceMappingURL=Project.js.map
package/Project.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Project.js","sourceRoot":"","sources":["../src/Project.ts"],"names":[],"mappings":"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"}
@@ -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":["../../src/commands/incrementBuild.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ts-node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const fs_1 = require("fs");
5
+ const commander_1 = require("commander");
6
+ const helpers_1 = require("../utils/helpers");
7
+ const Logger_1 = require("../utils/Logger");
8
+ async function main() {
9
+ commander_1.program
10
+ .option('--path <path>', 'Path to package.json')
11
+ .option('--build <build>', 'Set <build> number')
12
+ .option('--no-save', 'Print next version only')
13
+ .action(async () => {
14
+ try {
15
+ const opts = commander_1.program.opts() || {};
16
+ const pkgPath = (0, helpers_1.resolvePath)(`${opts.path ? opts.path : '.'}/package.json`);
17
+ const pkg = JSON.parse(await fs_1.promises.readFile(pkgPath, 'utf-8'));
18
+ const versionArr = pkg.version.split('.');
19
+ const major = Number(versionArr[0] || 0);
20
+ const patch = Number(versionArr[1] || 0);
21
+ const build = opts.build || Number(versionArr[2] || 0) + 1;
22
+ pkg.version = `${major}.${patch}.${build}`;
23
+ await fs_1.promises.writeFile(pkgPath, JSON.stringify(pkg, null, 3));
24
+ process.env.PUBLISH_VERSION = pkg.version;
25
+ }
26
+ catch (e) {
27
+ Logger_1.log.error(e);
28
+ process.exit(1);
29
+ }
30
+ });
31
+ await commander_1.program.parseAsync(process.argv);
32
+ }
33
+ main();
34
+ //# sourceMappingURL=incrementBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incrementBuild.js","sourceRoot":"","sources":["../../src/commands/incrementBuild.ts"],"names":[],"mappings":";;;AACA,2BAAyC;AACzC,yCAAkC;AAElC,8CAA+C;AAC/C,4CAAsC;AAItC,KAAK,UAAU,IAAI;IAElB,mBAAO;SACL,MAAM,CAAC,eAAe,EAAG,sBAAsB,CAAC;SAChD,MAAM,CAAC,iBAAiB,EAAG,oBAAoB,CAAC;SAChD,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;SAC9C,MAAM,CACN,KAAK,IAAI,EAAE;QACV,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAElC,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC,GAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAI,eAAe,CAAC,CAAC;YAE7E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAEjE,MAAM,UAAU,GAAa,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEpD,MAAM,KAAK,GAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE5D,GAAG,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YAE3C,MAAM,aAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE/D,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC;QAE3C,CAAC;QAAC,OAAM,CAAC,EAAC,CAAC;YACV,YAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CACD,CAAC;IAEH,MAAM,mBAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AACD,IAAI,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import '../utils/prototype';
3
+ import { Config, Project } from '../Project';
4
+ declare class App {
5
+ group: string;
6
+ name: string;
7
+ app: string;
8
+ path: string;
9
+ $pathComp: string[];
10
+ dockerImageKey: string;
11
+ constructor(path?: string);
12
+ }
13
+ export declare class DockerImage {
14
+ path: string;
15
+ key: string;
16
+ srcImage: string;
17
+ tag: string;
18
+ fullTag: string;
19
+ distribRun?: string;
20
+ constructor(path: string, appName: string, ver: string, build: number, dockerfile?: string);
21
+ }
22
+ export declare function getAppsAndImages(prj: Project, config: Config, updatedPaths: string[], maxdepth?: number, ignore?: string[]): Promise<{
23
+ apps: Record<string, App>;
24
+ updated: string[] | undefined;
25
+ images: Record<string, DockerImage>;
26
+ }>;
27
+ export {};
28
+ //# sourceMappingURL=k8s-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-build.d.ts","sourceRoot":"","sources":["../../src/commands/k8s-build.ts"],"names":[],"mappings":";AACA,OAAO,oBAAoB,CAAC;AAU5B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAC;AA6JhE,cAAM,GAAG;IAER,KAAK,SAAM;IACX,IAAI,SAAM;IACV,GAAG,SAAO;IACV,IAAI,SAAM;IAEV,SAAS,EAAE,MAAM,EAAE,CAAY;IAE/B,cAAc,SAAK;gBAIP,IAAI,GAAE,MAAW;CAoC7B;AAKD,qBAAa,WAAW;IAEvB,IAAI,SAAM;IACV,GAAG,SAAM;IAET,QAAQ,SAAM;IAEd,GAAG,SAAM;IACT,OAAO,SAAM;IAEb,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGP,IAAI,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAyB1F;AAMD,wBAAsB,gBAAgB,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,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CAAE,CAAC,CAsHtR"}
@@ -0,0 +1,295 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getAppsAndImages = exports.DockerImage = void 0;
8
+ require("../utils/prototype");
9
+ const commander_1 = require("commander");
10
+ const fs_1 = require("fs");
11
+ const mustache_1 = __importDefault(require("mustache"));
12
+ const js_yaml_1 = __importDefault(require("js-yaml"));
13
+ const Shell_1 = __importDefault(require("../utils/Shell"));
14
+ const Jira_1 = require("../services/Jira");
15
+ const Git_1 = __importDefault(require("../services/Git"));
16
+ const Project_1 = require("../Project");
17
+ const Logger_1 = require("../utils/Logger");
18
+ const helpers_1 = require("../utils/helpers");
19
+ const Exception_1 = require("../utils/Exception");
20
+ const ENV = process.env;
21
+ const runHandler = async (prj, reporter, opts, config) => {
22
+ reporter.$message_footer_changes_from = prj.version;
23
+ reporter.$message_footer_changes_to = ENV.CI_COMMIT_REF_NAME || 'dev';
24
+ const release = opts.changelog ? await Jira_1.Jira.resolve(prj) : { tasks: [], bugs: [], changelog: '' };
25
+ Shell_1.default.cd(prj.rootPath);
26
+ prj.incrementBuild();
27
+ const pkg = JSON.parse(await Shell_1.default.cat(prj.rootPath + '/package.json') || 'no package.json file!');
28
+ pkg.version = prj.version;
29
+ await fs_1.promises.writeFile(prj.rootPath + '/package.json', JSON.stringify(pkg, null, 3), { encoding: 'utf8', flag: 'w+' });
30
+ await reporter.startBuild();
31
+ Logger_1.log.info(`1. build ${prj.stage}`);
32
+ await reporter.append(` + Load apps and check updated`);
33
+ Logger_1.log.info(`2. Load apps and check updated`);
34
+ const updateFiles = await Git_1.default.getDiffFiles();
35
+ Logger_1.log.info(`\n\nUPDATED FILES:\n$`, updateFiles);
36
+ const { apps, updated, images } = await getAppsAndImages(prj, config, updateFiles);
37
+ if (!updated) {
38
+ Logger_1.log.info('SKIP BUILD: NO Apps to update!');
39
+ await reporter.skip(`SKIP - no apps to update\n ${updateFiles.join('\n ')}`);
40
+ process.exit(0);
41
+ }
42
+ await reporter.append(` + Write K8s manifests`);
43
+ Logger_1.log.info(`3. Write K8s manifests`);
44
+ let imagesToBuild = {};
45
+ for (const appName of updated) {
46
+ const app = apps[appName];
47
+ const image = images[app.dockerImageKey];
48
+ if (!image) {
49
+ throw new Exception_1.Exception('No dockerfile found for app: ' + app.name, { app, images });
50
+ }
51
+ await writeManifest(prj, app, image);
52
+ imagesToBuild[image.key] = image;
53
+ }
54
+ await Shell_1.default.execRepeat(`docker login -u ${ENV.CI_REGISTRY_USER} -p ${ENV.CI_REGISTRY_PASSWORD} ${ENV.CI_REGISTRY}`);
55
+ for (const image of Object.values(imagesToBuild)) {
56
+ Logger_1.log.info(`${image.tag} distrib`);
57
+ await reporter.append(` + ${image.tag} distrib`);
58
+ const distribCommand = image.distribRun || 'npm run distrib';
59
+ Logger_1.log.info(distribCommand);
60
+ await Shell_1.default.exec(distribCommand);
61
+ Logger_1.log.info(`${image.tag} build docker image`);
62
+ await reporter.append(` + ${image.tag} build docker image`);
63
+ Shell_1.default.cd(image.path);
64
+ await Shell_1.default.exec(`docker build --platform amd64 -t ${image.fullTag} -f ${image.path}/dockerfile ${image.path}/.`);
65
+ Logger_1.log.dbg(`${image.tag} Docker push`);
66
+ await reporter.append(` + ${image.tag} push image to registry`);
67
+ await Shell_1.default.execRepeat(`docker login -u ${ENV.CI_REGISTRY_USER} -p ${ENV.CI_REGISTRY_PASSWORD} ${ENV.CI_REGISTRY}`);
68
+ await Shell_1.default.execRepeat(`docker push ${image.fullTag}`);
69
+ Logger_1.log.dbg(`Clear local docker image: ${image.tag}`);
70
+ await Shell_1.default.exec(`docker rmi -f ${image.fullTag}`);
71
+ }
72
+ await reporter.append(` + Save current build: ${prj.build}`);
73
+ Logger_1.log.dbg(`7. Put current build:${prj.build} to GitLab`);
74
+ await prj.saveGitLabBuild();
75
+ if (opts.changelog) {
76
+ await prj.updateChangeLog(release.changelog);
77
+ await reporter.append(` + Update <a href=\"${prj.url}/-/blob/${ENV.CI_COMMIT_REF_NAME || 'dev'}/CHANGELOG.md\">changelog</a>.`);
78
+ }
79
+ await Git_1.default.setOrigin();
80
+ await Shell_1.default.exec(`git add -A`, { ignoreError: true, silent: false });
81
+ await Shell_1.default.exec(`git commit -a -m "v${prj.version}"`, { ignoreError: true, silent: false });
82
+ try {
83
+ await Git_1.default.push(ENV.CI_COMMIT_REF_NAME || 'dev');
84
+ }
85
+ catch (e) {
86
+ Logger_1.log.error(e);
87
+ await Shell_1.default.exec(`git checkout --ours .`, { ignoreError: true, silent: false });
88
+ await Shell_1.default.exec(`git add -u`, { ignoreError: true, silent: false });
89
+ await Shell_1.default.exec(`git commit -a -m "v${prj.version} resolved"`, { ignoreError: true, silent: false });
90
+ await Git_1.default.push(ENV.CI_COMMIT_REF_NAME || 'dev');
91
+ }
92
+ if (opts.gittag) {
93
+ await reporter.append(` + Git tag new version`);
94
+ await Git_1.default.makeTag(prj.version);
95
+ }
96
+ await reporter.succses();
97
+ };
98
+ async function main() {
99
+ commander_1.program
100
+ .option('--path <project dir>', 'Path to project directory [default - current]')
101
+ .option('--no-prebuild', 'Skip prebuild phase')
102
+ .option('--no-changelog', 'Skip create gitlog')
103
+ .option('--no-gittag', 'Skip create and push new git tag')
104
+ .action(await Project_1.Project.run(commander_1.program.opts() || {}, runHandler));
105
+ await commander_1.program.parseAsync(process.argv);
106
+ }
107
+ main();
108
+ class App {
109
+ group = '';
110
+ name = '';
111
+ app = '';
112
+ path = '';
113
+ $pathComp = ['./'];
114
+ dockerImageKey = '';
115
+ constructor(path = '') {
116
+ let pathComp = path.split('/');
117
+ Logger_1.log.dbg('App try load by path:' + path, pathComp);
118
+ if (pathComp.length > 1 && pathComp[0] === 'src') {
119
+ pathComp = pathComp.splice(1);
120
+ }
121
+ if (pathComp.length > 1 && pathComp[1] === 'src') {
122
+ pathComp = pathComp.splice(0, -1);
123
+ }
124
+ if (pathComp.length > 1 && pathComp[1].length > 1) {
125
+ this.group = pathComp[0];
126
+ this.app = pathComp[1];
127
+ this.name = `${this.group}-${this.app}`;
128
+ this.path = path;
129
+ this.$pathComp.push(`./${this.group}/`);
130
+ this.$pathComp.push(`./${this.path}/`);
131
+ }
132
+ else {
133
+ this.app = pathComp.length == 1 ? pathComp[0] : path;
134
+ this.name = this.app;
135
+ this.group = '';
136
+ this.path = '/' + path;
137
+ this.$pathComp = [this.path];
138
+ }
139
+ Logger_1.log.dbg(this.name, this);
140
+ }
141
+ }
142
+ class DockerImage {
143
+ path = '';
144
+ key = '';
145
+ srcImage = '';
146
+ tag = '';
147
+ fullTag = '';
148
+ distribRun;
149
+ constructor(path, appName, ver, build, dockerfile) {
150
+ if (!dockerfile) {
151
+ throw new Error('Wrong dockerfile: Empty! by path:' + path);
152
+ }
153
+ this.path = path;
154
+ this.key = (0, helpers_1.md5)(dockerfile);
155
+ const dockerImage = /FROM (.+)/.exec(dockerfile);
156
+ if (!dockerImage || dockerImage.length < 2) {
157
+ throw new Error(`Wrong dockerfile format:\n${dockerfile}`);
158
+ }
159
+ this.srcImage = dockerImage[1];
160
+ const dockerName = /#[ ]?NAME (.+)/.exec(dockerfile);
161
+ const name = dockerName && dockerName.length > 1 ? dockerName[1] : appName || this.key;
162
+ this.tag = `${name}-v${ver}:${build}`;
163
+ this.fullTag = `${ENV.CI_REGISTRY_IMAGE}/${this.tag}`;
164
+ const action = /#[ ]?DISTRIB RUN (.+)/.exec(dockerfile);
165
+ this.distribRun = action && action.length > 1 ? action[1] : undefined;
166
+ }
167
+ }
168
+ exports.DockerImage = DockerImage;
169
+ async function getAppsAndImages(prj, config, updatedPaths, maxdepth = 4, ignore = ['*/_*', '*/\.*', '*/node_modules*']) {
170
+ Shell_1.default.cd(config.appsPath || prj.rootPath);
171
+ const appFile = config.appFile || 'app_manifest_tpl.yaml';
172
+ const appsPaths = await Shell_1.default.find(config.appsPath || prj.rootPath, appFile, maxdepth, ignore);
173
+ Logger_1.log.dbg('Apps paths by appFile:' + appFile, appsPaths);
174
+ const ignorePaths = [...config.ignorePaths || [], ...config.sharedPaths || []];
175
+ const apps = {};
176
+ const watchPaths = {};
177
+ const dockerImages = {};
178
+ let rootDockerFileKey = '';
179
+ const dockerfileRootPath = (0, helpers_1.resolvePath)(prj.rootPath) + '/dockerfile';
180
+ if (await Shell_1.default.test('-e', dockerfileRootPath)) {
181
+ const image = new DockerImage(prj.rootPath, prj.name, prj.shortVersion, prj.build, await Shell_1.default.cat(dockerfileRootPath));
182
+ dockerImages[image.key] = image;
183
+ rootDockerFileKey = image.key;
184
+ Logger_1.log.dbg('Dokerfile at root path - found! ' + image.key);
185
+ }
186
+ else {
187
+ Logger_1.log.info('Dokerfile at root path not found! path:' + dockerfileRootPath);
188
+ }
189
+ for (const file of appsPaths.sort()) {
190
+ const path = file.replace(prj.rootPath + '/', '').replace('/src', '').replace('/' + appFile, '');
191
+ let skip = false;
192
+ for (const i_path of ignorePaths) {
193
+ if (path.includes(i_path)) {
194
+ skip = true;
195
+ break;
196
+ }
197
+ }
198
+ if (skip) {
199
+ continue;
200
+ }
201
+ const app = new App(path);
202
+ if (app.group === '') {
203
+ app.group = prj.name;
204
+ }
205
+ if (app.name === '') {
206
+ app.name = prj.name;
207
+ app.app = prj.name;
208
+ app.group = '';
209
+ app.path = '';
210
+ }
211
+ const dockerfileAppPath = (0, helpers_1.resolvePath)(prj.rootPath + '/' + app.path) + '/dockerfile';
212
+ if (app.path !== '' && await Shell_1.default.test('-e', dockerfileAppPath)) {
213
+ Logger_1.log.info('Dokerfile at app "' + app.name + '" found! path:' + dockerfileAppPath);
214
+ const image = new DockerImage(app.path, app.name, prj.shortVersion, prj.build, await Shell_1.default.cat(dockerfileAppPath));
215
+ dockerImages[image.key] = image;
216
+ app.dockerImageKey = image.key;
217
+ }
218
+ else {
219
+ Logger_1.log.dbg('App dokerfile not found at:"' + dockerfileAppPath + '", and set as default:' + rootDockerFileKey);
220
+ app.dockerImageKey = rootDockerFileKey;
221
+ }
222
+ apps[app.name] = app;
223
+ watchPaths[app.path] = app.name;
224
+ }
225
+ Logger_1.log.dbg(`Find apps by ${appFile}`, Object.keys(apps).sort());
226
+ if (Object.keys(dockerImages).length === 0) {
227
+ throw new Exception_1.Exception('No any dockerfile found in project! Pleace collect it on root or app path');
228
+ }
229
+ const sharedPaths = config.sharedPaths || [];
230
+ sharedPaths.push('package.json');
231
+ sharedPaths.push('app_manifest_spec.json');
232
+ sharedPaths.push('app_manifest_tpl.yaml');
233
+ sharedPaths.push('dockerfile');
234
+ const watchPathsArr = Object.keys(watchPaths);
235
+ let appsChanged = {};
236
+ for (const file of updatedPaths) {
237
+ let allApps = false;
238
+ for (const i_path of sharedPaths) {
239
+ if (file.includes(i_path)) {
240
+ allApps = true;
241
+ break;
242
+ }
243
+ }
244
+ if (allApps) {
245
+ appsChanged = apps;
246
+ break;
247
+ }
248
+ for (const testPath of watchPathsArr) {
249
+ const appName = watchPaths[testPath];
250
+ if ((RegExp(testPath).exec(file)) && apps[appName] && appsChanged[appName] === undefined) {
251
+ appsChanged[appName] = apps[appName];
252
+ }
253
+ }
254
+ }
255
+ const changed = Object.keys(appsChanged);
256
+ return { apps, updated: changed.length > 0 ? changed : undefined, images: dockerImages };
257
+ }
258
+ exports.getAppsAndImages = getAppsAndImages;
259
+ async function writeManifest(prj, app, image) {
260
+ const k8s_tpl_fileName = 'app_manifest_tpl.yaml';
261
+ const k8s_spec_fileName = 'app_manifest_spec.json';
262
+ const appFullPath = (0, helpers_1.resolvePath)(prj.rootPath + '/' + app.path + '/');
263
+ let k8s_spec = {};
264
+ const k8s_tpl = await Shell_1.default.cat(appFullPath + k8s_tpl_fileName, { silent: !Logger_1.log.isDebug, ignoreError: true });
265
+ const k8s_specFile = await Shell_1.default.cat(appFullPath + k8s_spec_fileName, { silent: !Logger_1.log.isDebug, ignoreError: true });
266
+ if (k8s_specFile && k8s_specFile !== '') {
267
+ try {
268
+ k8s_spec = JSON.parse(k8s_specFile);
269
+ }
270
+ catch (e) {
271
+ Logger_1.log.error(e);
272
+ }
273
+ }
274
+ if (!k8s_tpl || k8s_tpl.length < 10) {
275
+ throw new Exception_1.Exception(`No K8s template [${k8s_tpl_fileName}] found for app:${app.name}`, { appFullPath });
276
+ }
277
+ for (const stage of Object.keys(prj.$stagesState)) {
278
+ const k8s_data = {};
279
+ k8s_data.stage = stage;
280
+ k8s_data.app = app;
281
+ k8s_data.image = image;
282
+ k8s_data.prj = prj;
283
+ k8s_data.spec = k8s_spec[stage] || {};
284
+ if (!k8s_data.spec.replicas) {
285
+ k8s_data.spec.replicas = 1;
286
+ }
287
+ Logger_1.log.dbg(`${app.name} k8s specs`, k8s_spec);
288
+ const manifest = mustache_1.default.render(k8s_tpl, k8s_data);
289
+ js_yaml_1.default.loadAll(manifest);
290
+ await Shell_1.default.mkdir(`${prj.rootPath}/_k8s/${stage}`, { ignoreError: false });
291
+ await fs_1.promises.writeFile(`${prj.rootPath}/_k8s/${stage}/${app.name}.yml`, manifest);
292
+ Logger_1.log.dbg(`[${stage}] ${app.name} writed -> ${prj.rootPath}/_k8s/${stage}/${app.name}.yml `);
293
+ }
294
+ }
295
+ //# sourceMappingURL=k8s-build.js.map