ics-builder 4.4.9 → 4.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -0
- package/.prettierrc +7 -0
- package/.vscode/launch.json +15 -0
- package/.vscode/settings.json +6 -0
- package/Dockerfile +32 -0
- package/build/modules.yaml +7 -0
- package/build.template.yml +51 -0
- package/dist/jest.config.js +4 -0
- package/dist/package.json +76 -0
- package/{src → dist/src}/builder/ui/webpackUiBuilder.js +5 -2
- package/{src → dist/src}/index.js +0 -0
- package/dist/src/services/source/assets/hostList.yml +12 -0
- package/dist/src/services/source/assets/sourceList.yml +50 -0
- package/package.json +1 -1
- package/src/app.ts +64 -0
- package/src/builder/api/csprojFile.ts +15 -0
- package/src/builder/api/dotnetApiBuilder.ts +145 -0
- package/src/builder/api/net5Builder.ts +181 -0
- package/src/builder/api/webConfigFile.ts +11 -0
- package/src/builder/api/xmlFile.ts +24 -0
- package/src/builder/baseBuilder.ts +71 -0
- package/src/builder/data/dataBuilder.ts +28 -0
- package/src/builder/db/dbBuilder.ts +167 -0
- package/src/builder/e2e/e2eBuilder.ts +23 -0
- package/src/builder/schema/schemaBuilder.ts +156 -0
- package/src/builder/ui/customUiBuilder.ts +50 -0
- package/src/builder/ui/webpackUiBuilder.ts +497 -0
- package/src/builder/uiDependency/dependencyBuilder.ts +38 -0
- package/src/builder/winservice/winserviceBuilder.ts +11 -0
- package/src/dotnetUtils.ts +41 -0
- package/src/exceptions/BuilderException.ts +7 -0
- package/src/index.ts +34 -0
- package/src/services/buildManager.ts +151 -0
- package/src/services/commandManager.ts +78 -0
- package/src/services/configManager.ts +82 -0
- package/src/services/packageManager.ts +180 -0
- package/src/services/packageStructure/legacyPackageStructureManager.ts +34 -0
- package/src/services/packageStructure/packageStructureManager.ts +75 -0
- package/src/services/packageStructure/structureUtils.ts +66 -0
- package/src/services/source/loadPackages.ts +18 -0
- package/src/services/source/loaders/baseLoader.ts +28 -0
- package/src/services/source/loaders/gitScmProvider.ts +73 -0
- package/src/services/source/loaders/hgScmProvider.ts +63 -0
- package/src/services/source/sourceManager.ts +95 -0
- package/src/services/testManager.ts +27 -0
- package/src/testRunners/apiTestRunner.ts +68 -0
- package/src/testRunners/baseTestRunner.ts +19 -0
- package/src/testRunners/uiTestRunner.ts +8 -0
- package/src/utils.ts +228 -0
- package/test/sourceManager.test.ts +17 -0
- package/tsconfig.json +18 -0
- package/wallaby.js +14 -0
- /package/{src → dist/src}/app.js +0 -0
- /package/{src → dist/src}/builder/api/csprojFile.js +0 -0
- /package/{src → dist/src}/builder/api/dotnetApiBuilder.js +0 -0
- /package/{src → dist/src}/builder/api/net5Builder.js +0 -0
- /package/{src → dist/src}/builder/api/webConfigFile.js +0 -0
- /package/{src → dist/src}/builder/api/xmlFile.js +0 -0
- /package/{src → dist/src}/builder/baseBuilder.js +0 -0
- /package/{src → dist/src}/builder/data/dataBuilder.js +0 -0
- /package/{src → dist/src}/builder/db/dbBuilder.js +0 -0
- /package/{src → dist/src}/builder/e2e/e2eBuilder.js +0 -0
- /package/{src → dist/src}/builder/schema/schemaBuilder.js +0 -0
- /package/{src → dist/src}/builder/ui/customUiBuilder.js +0 -0
- /package/{src → dist/src}/builder/uiDependency/dependencyBuilder.js +0 -0
- /package/{src → dist/src}/builder/winservice/winserviceBuilder.js +0 -0
- /package/{src → dist/src}/dotnetUtils.js +0 -0
- /package/{src → dist/src}/exceptions/BuilderException.js +0 -0
- /package/{src → dist/src}/services/buildManager.js +0 -0
- /package/{src → dist/src}/services/commandManager.js +0 -0
- /package/{src → dist/src}/services/configManager.js +0 -0
- /package/{src → dist/src}/services/packageManager.js +0 -0
- /package/{src → dist/src}/services/packageStructure/legacyPackageStructureManager.js +0 -0
- /package/{src → dist/src}/services/packageStructure/packageStructureManager.js +0 -0
- /package/{src → dist/src}/services/packageStructure/structureUtils.js +0 -0
- /package/{src → dist/src}/services/source/loadPackages.js +0 -0
- /package/{src → dist/src}/services/source/loaders/baseLoader.js +0 -0
- /package/{src → dist/src}/services/source/loaders/gitScmProvider.js +0 -0
- /package/{src → dist/src}/services/source/loaders/hgScmProvider.js +0 -0
- /package/{src → dist/src}/services/source/sourceManager.js +0 -0
- /package/{src → dist/src}/services/testManager.js +0 -0
- /package/{src → dist/src}/testRunners/apiTestRunner.js +0 -0
- /package/{src → dist/src}/testRunners/baseTestRunner.js +0 -0
- /package/{src → dist/src}/testRunners/uiTestRunner.js +0 -0
- /package/{src → dist/src}/utils.js +0 -0
package/.prettierignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.yml
|
package/.prettierrc
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
|
3
|
+
// Hover to view descriptions of existing attributes.
|
|
4
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
+
"version": "0.2.0",
|
|
6
|
+
"configurations": [
|
|
7
|
+
{
|
|
8
|
+
"type": "node",
|
|
9
|
+
"request": "launch",
|
|
10
|
+
"name": "Launch Program",
|
|
11
|
+
"runtimeArgs": ["-r", "ts-node/register"],
|
|
12
|
+
"args": ["${workspaceFolder}/src/app.ts", "source"]
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
ARG CPU_ARCH
|
|
2
|
+
|
|
3
|
+
FROM gitlab.ics-it.ru:4567/devops/oci-images:7.0-sdk-alpine-${CPU_ARCH} AS NET7
|
|
4
|
+
ARG NPM_REGISTRY
|
|
5
|
+
WORKDIR /app/builder
|
|
6
|
+
COPY . .
|
|
7
|
+
RUN npm set registry ${NPM_REGISTRY} && \
|
|
8
|
+
npm install && \
|
|
9
|
+
npx tsc && \
|
|
10
|
+
cp -R ./src/services/source/assets ./dist/src/services/source && \
|
|
11
|
+
cp ./package.json ./dist && \
|
|
12
|
+
cp ./jest.config.js ./dist && \
|
|
13
|
+
cd dist && \
|
|
14
|
+
npm pack && \
|
|
15
|
+
cd ../ && \
|
|
16
|
+
npm install -g ./dist
|
|
17
|
+
|
|
18
|
+
FROM gitlab.ics-it.ru:4567/devops/oci-images:6.0-sdk-alpine-${CPU_ARCH} AS NET6
|
|
19
|
+
ARG NPM_REGISTRY
|
|
20
|
+
COPY --from=NET7 /app/builder /app/builder
|
|
21
|
+
COPY --from=NET7 /root/.npm /root/.npm
|
|
22
|
+
WORKDIR /app/builder
|
|
23
|
+
RUN npm set registry ${NPM_REGISTRY} && \
|
|
24
|
+
npm install -g ./dist
|
|
25
|
+
|
|
26
|
+
FROM gitlab.ics-it.ru:4567/devops/oci-images:5.0-sdk-alpine-${CPU_ARCH} AS NET5
|
|
27
|
+
ARG NPM_REGISTRY
|
|
28
|
+
COPY --from=NET7 /app/builder /app/builder
|
|
29
|
+
COPY --from=NET7 /root/.npm /root/.npm
|
|
30
|
+
WORKDIR /app/builder
|
|
31
|
+
RUN npm set registry ${NPM_REGISTRY} && \
|
|
32
|
+
npm install -g ./dist
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
version: "4.1"
|
|
2
|
+
mode: dev
|
|
3
|
+
using:
|
|
4
|
+
mdt: '#ui-webpack'
|
|
5
|
+
rb: '#RB-978'
|
|
6
|
+
data: default
|
|
7
|
+
ent: default
|
|
8
|
+
paths:
|
|
9
|
+
source: source
|
|
10
|
+
build: build
|
|
11
|
+
modules:
|
|
12
|
+
- mdt.admin
|
|
13
|
+
- mdt.audit
|
|
14
|
+
- mdt.oauth
|
|
15
|
+
- mdt.binding
|
|
16
|
+
- mdt.dataext
|
|
17
|
+
- mdt.dbm
|
|
18
|
+
- mdt.directory
|
|
19
|
+
- mdt.dm
|
|
20
|
+
- mdt.feedback
|
|
21
|
+
- mdt.import
|
|
22
|
+
- mdt.inline
|
|
23
|
+
- mdt.job
|
|
24
|
+
- mdt.log
|
|
25
|
+
- mdt.mapping
|
|
26
|
+
- mdt.password
|
|
27
|
+
- mdt.status
|
|
28
|
+
- mdt.tag
|
|
29
|
+
- mdt.odata
|
|
30
|
+
- mdt.apps
|
|
31
|
+
- ent.em
|
|
32
|
+
- ent.routes
|
|
33
|
+
- data.server.etl
|
|
34
|
+
- data.geo
|
|
35
|
+
- data.dadata
|
|
36
|
+
- data.calendar
|
|
37
|
+
- rb
|
|
38
|
+
- rb.geo
|
|
39
|
+
- rb.dadata
|
|
40
|
+
- rb.mtx
|
|
41
|
+
- rb.pnl
|
|
42
|
+
- rb.qst
|
|
43
|
+
- rb.binding
|
|
44
|
+
ui:
|
|
45
|
+
theme: 'mdt.coffee'
|
|
46
|
+
themes:
|
|
47
|
+
- mdt.coffee
|
|
48
|
+
- mdt.pink
|
|
49
|
+
- mdt.dark-blue
|
|
50
|
+
- mdt.light-blue
|
|
51
|
+
- mdt.modern-blue
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ics-builder",
|
|
3
|
+
"version": "4.4.10",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"preferGlobal": true,
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test": "jest",
|
|
9
|
+
"dev": "ts-node ./src/index.ts",
|
|
10
|
+
"copy-assets": "xcopy \"src/services/source/assets\" \"dist/src/services/source/assets\" /e /i",
|
|
11
|
+
"patch": "npx tsc && npm run copy-assets && npm version patch && copy package.json dist && copy jest.config.js dist && cd dist && npm publish",
|
|
12
|
+
"minor": "npx tsc && npm run copy-assets && npm version minor && copy package.json dist && copy jest.config.js dist && cd dist && npm publish",
|
|
13
|
+
"major": "npx tsc && npm run copy-assets && npm version major && copy package.json dist && copy jest.config.js dist && cd dist && npm publish",
|
|
14
|
+
"pack": "npx tsc && npm run copy-assets && copy package.json dist && copy jest.config.js dist && cd dist && npm pack"
|
|
15
|
+
},
|
|
16
|
+
"bin": {
|
|
17
|
+
"builder": "./src/index.js"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"build tool"
|
|
21
|
+
],
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "hg",
|
|
24
|
+
"url": "https://bitbucket.org/icsit/builder"
|
|
25
|
+
},
|
|
26
|
+
"author": "Sergey Voinkov <sergey.voinkov@ics-it.ru>",
|
|
27
|
+
"license": "ISC",
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/jest": "^25.1.2",
|
|
30
|
+
"@types/jest-cli": "^24.3.0",
|
|
31
|
+
"@types/node": "^11.13.5",
|
|
32
|
+
"@types/shelljs": "^0.8.5",
|
|
33
|
+
"@types/webpack": "^4.4.31",
|
|
34
|
+
"@types/webpack-dev-server": "^3.1.5",
|
|
35
|
+
"@types/xml2js": "^0.4.5",
|
|
36
|
+
"@types/yamljs": "^0.2.30",
|
|
37
|
+
"ts-node": "^8.1.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@babel/core": "^7.12.0",
|
|
41
|
+
"@babel/preset-env": "^7.12.0",
|
|
42
|
+
"autoprefixer": "^9.5.1",
|
|
43
|
+
"babel-loader": "^8.3.0",
|
|
44
|
+
"bundle-loader": "^0.5.6",
|
|
45
|
+
"chokidar": "^4.0.1",
|
|
46
|
+
"copy-webpack-plugin": "^5.0.3",
|
|
47
|
+
"css-loader": "^2.1.1",
|
|
48
|
+
"file-loader": "^3.0.1",
|
|
49
|
+
"html-webpack-plugin": "^3.2.0",
|
|
50
|
+
"jest-cli": "^26.6.3",
|
|
51
|
+
"jest-junit": "^12.0.0",
|
|
52
|
+
"just-task": "^0.9.9",
|
|
53
|
+
"less": "^3.13.1",
|
|
54
|
+
"less-loader": "^5.0.0",
|
|
55
|
+
"mini-css-extract-plugin": "^0.6.0",
|
|
56
|
+
"postcss-loader": "^3.0.0",
|
|
57
|
+
"shelljs": "^0.8.3",
|
|
58
|
+
"strip-bom-buf": "^2.0.0",
|
|
59
|
+
"style-loader": "^0.23.1",
|
|
60
|
+
"svg-inline-loader": "^0.8.0",
|
|
61
|
+
"ts-jest": "^25.5.1",
|
|
62
|
+
"ts-loader": "^6.2.1",
|
|
63
|
+
"tsconfig-paths-webpack-plugin": "^3.2.0",
|
|
64
|
+
"typescript": "^3.8.3",
|
|
65
|
+
"typescript-json-schema": "^0.51.0",
|
|
66
|
+
"virtual-module-webpack-plugin": "^0.4.1",
|
|
67
|
+
"webpack": "^4.42.1",
|
|
68
|
+
"webpack-cli": "^3.3.2",
|
|
69
|
+
"webpack-concat-plugin": "^3.0.0",
|
|
70
|
+
"webpack-dev-server": "^3.10.3",
|
|
71
|
+
"webpack-fix-style-only-entries": "^0.2.1",
|
|
72
|
+
"xml2js": "=0.4.17",
|
|
73
|
+
"yamljs": "^0.3.0",
|
|
74
|
+
"yargs": "^16.2.0"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -247,6 +247,9 @@ var WebpackUiBuilder = /** @class */ (function (_super) {
|
|
|
247
247
|
resolveAlias["react"] = path.resolve(basePath, "ui", "./node_modules/react");
|
|
248
248
|
resolveAlias["react-dom"] = path.resolve(basePath, "ui", "./node_modules/react-dom");
|
|
249
249
|
}
|
|
250
|
+
// Библиотеки с современным синтаксисом, которые нужно транспилировать для webpack 4
|
|
251
|
+
var packagesToTranspile = ["ics-ui-kit", "zustand-computed"];
|
|
252
|
+
var transpileRegex = new RegExp(packagesToTranspile.join("|"));
|
|
250
253
|
return {
|
|
251
254
|
context: path.join(this.config.paths.source, "mdt/ui"),
|
|
252
255
|
mode: this.isProd() ? "production" : "development",
|
|
@@ -282,8 +285,8 @@ var WebpackUiBuilder = /** @class */ (function (_super) {
|
|
|
282
285
|
// Обработка современного JS из библиотеки ics-ui-kit для совместимости со старыми браузерами (IE 10+)
|
|
283
286
|
// Babel транспилирует ES2020+ синтаксис (nullish coalescing ??, optional chaining ?.) в ES5
|
|
284
287
|
{
|
|
285
|
-
test: /\.js$/,
|
|
286
|
-
include:
|
|
288
|
+
test: /\.m?js$/,
|
|
289
|
+
include: transpileRegex,
|
|
287
290
|
use: {
|
|
288
291
|
loader: require.resolve("babel-loader"),
|
|
289
292
|
options: {
|
|
File without changes
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
CART:
|
|
2
|
+
cartis:
|
|
3
|
+
host: cartis
|
|
4
|
+
cartis-mdt:
|
|
5
|
+
host: cartis
|
|
6
|
+
ics:
|
|
7
|
+
ics-components:
|
|
8
|
+
host: gitlab
|
|
9
|
+
data:
|
|
10
|
+
host: gitlab
|
|
11
|
+
ics:
|
|
12
|
+
host: gitlab
|
|
13
|
+
dwh-etl:
|
|
14
|
+
host: gitlab
|
|
15
|
+
sellout:
|
|
16
|
+
host: gitlab
|
|
17
|
+
sellout-connector:
|
|
18
|
+
host: gitlab
|
|
19
|
+
mdt:
|
|
20
|
+
host: gitlab
|
|
21
|
+
ent:
|
|
22
|
+
host: gitlab
|
|
23
|
+
mdlz:
|
|
24
|
+
host: gitlab
|
|
25
|
+
alcon:
|
|
26
|
+
host: gitlab
|
|
27
|
+
libs:
|
|
28
|
+
host: gitlab
|
|
29
|
+
rb:
|
|
30
|
+
host: gitlab
|
|
31
|
+
jacobs:
|
|
32
|
+
host: gitlab
|
|
33
|
+
tasks:
|
|
34
|
+
host: gitlab
|
|
35
|
+
nordfox:
|
|
36
|
+
host: gitlab
|
|
37
|
+
fmd:
|
|
38
|
+
host: gitlab
|
|
39
|
+
etl:
|
|
40
|
+
host: gitlab
|
|
41
|
+
mars:
|
|
42
|
+
host: gitlab
|
|
43
|
+
cloud:
|
|
44
|
+
host: gitlab
|
|
45
|
+
kc:
|
|
46
|
+
host: gitlab
|
|
47
|
+
templates:
|
|
48
|
+
host: gitlab
|
|
49
|
+
valeant:
|
|
50
|
+
host: gitlab
|
package/package.json
CHANGED
package/src/app.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { ConfigManager } from "./services/configManager";
|
|
3
|
+
import { CommandManager } from "./services/commandManager";
|
|
4
|
+
import * as yargs from "yargs";
|
|
5
|
+
import { Utils } from "./utils";
|
|
6
|
+
|
|
7
|
+
const configs: { name: string; defaultValue: string | Function; alias: string; description: string }[] = [
|
|
8
|
+
{
|
|
9
|
+
name: "c",
|
|
10
|
+
defaultValue: () => path.join(process.cwd(), "build.yml"),
|
|
11
|
+
alias: "configName",
|
|
12
|
+
description: "Build configuration file name"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: "w",
|
|
16
|
+
defaultValue: "false",
|
|
17
|
+
alias: "watch",
|
|
18
|
+
description: "Run tests in watch mode"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "m",
|
|
22
|
+
defaultValue: "false",
|
|
23
|
+
alias: "multiple",
|
|
24
|
+
description: "Generate multiple files"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "tbp",
|
|
28
|
+
defaultValue: process.cwd(),
|
|
29
|
+
alias: "testBasePath",
|
|
30
|
+
description: "Path to test files"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "trp",
|
|
34
|
+
defaultValue: () => path.join(process.cwd() + "/result.xml"),
|
|
35
|
+
alias: "testResultPath",
|
|
36
|
+
description: "Path to test output"
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
let yargsArgs = yargs.usage("Usage: $0 <cmd> [args]");
|
|
41
|
+
configs.forEach(config => {
|
|
42
|
+
yargsArgs = yargsArgs
|
|
43
|
+
.default(config.name, typeof config.defaultValue == "string" ? config.defaultValue : config.defaultValue())
|
|
44
|
+
.alias(config.name, config.alias)
|
|
45
|
+
.describe(config.name, config.description);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
let args = yargsArgs.argv;
|
|
49
|
+
|
|
50
|
+
let config =
|
|
51
|
+
!Utils.ensurePath(args["c"] as string) && args["_"].findIndex(c => c == "test-api" || c == "test-ui") != -1
|
|
52
|
+
? null
|
|
53
|
+
: ConfigManager.getConfig(args["c"] as string, args["m"] == "true");
|
|
54
|
+
|
|
55
|
+
let testConfig = {
|
|
56
|
+
basePath: args["tbp"] as string,
|
|
57
|
+
resultPath: args["trp"] as string,
|
|
58
|
+
watch: args["w"] === "true" || args["w"] === true
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
let commandManager = new CommandManager(config, testConfig);
|
|
62
|
+
|
|
63
|
+
commandManager.addTasks(args["_"] as string[]);
|
|
64
|
+
commandManager.runTasks();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {XmlFile} from "./xmlFile"
|
|
2
|
+
|
|
3
|
+
export class CsprojFile extends XmlFile {
|
|
4
|
+
setPublishPath(publishPath: string): void {
|
|
5
|
+
if (!this._xmlObj) this._readFile();
|
|
6
|
+
if (!this._xmlObj.Project)
|
|
7
|
+
this._xmlObj.Project = {};
|
|
8
|
+
if (!this._xmlObj.Project.PropertyGroup)
|
|
9
|
+
this._xmlObj.Project.PropertyGroup = {};
|
|
10
|
+
let propertyGroup = Array.isArray(this._xmlObj.Project.PropertyGroup)
|
|
11
|
+
? this._xmlObj.Project.PropertyGroup[0]
|
|
12
|
+
: this._xmlObj.Project.PropertyGroup;
|
|
13
|
+
propertyGroup.PublishDir = publishPath;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import * as shell from "shelljs";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
|
|
5
|
+
import { Package, PackageInfoLegacy } from "../../services/configManager";
|
|
6
|
+
import { Utils, Logger } from "../../utils";
|
|
7
|
+
import { BaseBuilder, BuilderConfig } from "../baseBuilder";
|
|
8
|
+
import { Net5ApiBuilder } from "../api/net5Builder";
|
|
9
|
+
import { packageStructureManager } from "../../services/packageStructure/packageStructureManager";
|
|
10
|
+
|
|
11
|
+
export class DotnetApiBuilder extends BaseBuilder {
|
|
12
|
+
constructor(config: BuilderConfig) {
|
|
13
|
+
super(config);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
run(): void | Promise<void> {
|
|
17
|
+
if (this.config.api && this.config.api.framework && this.config.api.framework === ".net5") {
|
|
18
|
+
new Net5ApiBuilder(this.config).run();
|
|
19
|
+
} else {
|
|
20
|
+
this.config.packages.forEach(pkg => {
|
|
21
|
+
let pkgInfo = pkg.packageInfo as PackageInfoLegacy;
|
|
22
|
+
if (pkgInfo.api && pkgInfo.api.project) {
|
|
23
|
+
let apiSourceDir = path.join(this.config.paths.source, pkg.name, "api");
|
|
24
|
+
this.buildApiModule(path.dirname(path.join(apiSourceDir, pkgInfo.api.project)), pkg.name);
|
|
25
|
+
} else {
|
|
26
|
+
this.buildApiModules(pkg);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let buildInfo = this.packageManager.getAllPackages().map(pkg => {
|
|
32
|
+
return {
|
|
33
|
+
name: pkg.name,
|
|
34
|
+
version: pkg.version,
|
|
35
|
+
modules: pkg.modules.map(module => {
|
|
36
|
+
return `${pkg.name}.${module.name}`;
|
|
37
|
+
})
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
let infoDir = path.join(this.config.paths.build, "api");
|
|
42
|
+
|
|
43
|
+
if (Utils.ensurePath(infoDir)) {
|
|
44
|
+
this.writeBuildInfo(
|
|
45
|
+
path.join(this.config.paths.build, "api/settings"),
|
|
46
|
+
{
|
|
47
|
+
version: buildInfo
|
|
48
|
+
.map(pkg => {
|
|
49
|
+
return `${pkg.name} ${pkg.version}`;
|
|
50
|
+
})
|
|
51
|
+
.join(" / ")
|
|
52
|
+
},
|
|
53
|
+
"yml"
|
|
54
|
+
);
|
|
55
|
+
this.writeBuildInfo(path.join(this.config.paths.build, "build"), buildInfo, "json");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private buildApiModules(pkg: Package) {
|
|
60
|
+
packageStructureManager.getModuleSourcePaths(pkg, "api", this.config).forEach(({ moduleName, sourcePath }) => {
|
|
61
|
+
this.buildApiModule(sourcePath, `${pkg.name}.${moduleName}`);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private buildApiModule(moduleDir: string, moduleName: string) {
|
|
66
|
+
let projectFile = null;
|
|
67
|
+
|
|
68
|
+
let moduleConfig = this.parsePackageInfoLegacy(path.join(moduleDir, "module.yml"));
|
|
69
|
+
|
|
70
|
+
if (moduleConfig && moduleConfig.api && moduleConfig.api.project)
|
|
71
|
+
projectFile = path.join(moduleDir, moduleConfig.api.project);
|
|
72
|
+
else {
|
|
73
|
+
let files = shell.ls(path.join(moduleDir, "*.csproj"));
|
|
74
|
+
if (files.length) projectFile = files[0];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
let targetDir = path.join(this.config.paths.build, "api");
|
|
78
|
+
let info = Array<string>();
|
|
79
|
+
|
|
80
|
+
if (Utils.ensurePath(projectFile)) {
|
|
81
|
+
let configuration = (this.config.api && this.config.api.configuration) || "debug";
|
|
82
|
+
|
|
83
|
+
moduleDir = path.dirname(projectFile);
|
|
84
|
+
let projectBinDir = path.join(moduleDir, "bin");
|
|
85
|
+
let webAppPath = path.join(moduleDir, "global.asax");
|
|
86
|
+
|
|
87
|
+
this.clearCache(moduleDir);
|
|
88
|
+
if (Utils.ensurePath(webAppPath)) {
|
|
89
|
+
Utils.copyFile(path.join(moduleDir, "web.config.template"), path.join(moduleDir, "web.config"));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
this.msbuild(
|
|
93
|
+
projectFile,
|
|
94
|
+
["Clean", "Build"],
|
|
95
|
+
[
|
|
96
|
+
`Configuration=${configuration}`,
|
|
97
|
+
"PostBuildEvent=",
|
|
98
|
+
"PreBuildEvent="
|
|
99
|
+
// "RestoreAdditionalProjectSources=https://stage.ics-it.ru/nuget/nuget"
|
|
100
|
+
]
|
|
101
|
+
);
|
|
102
|
+
info.push(path.basename(projectFile) + " is built");
|
|
103
|
+
|
|
104
|
+
// web project?
|
|
105
|
+
if (Utils.ensurePath(webAppPath)) {
|
|
106
|
+
Utils.copyFile(path.join(moduleDir, "web.config.template"), path.join(targetDir, "web.config"));
|
|
107
|
+
Utils.copyFile(webAppPath, path.join(targetDir, "global.asax"));
|
|
108
|
+
} else {
|
|
109
|
+
projectBinDir = path.join(projectBinDir, configuration);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// remove *.dll.config and *.xml files from BIN
|
|
113
|
+
let files = fs.readdirSync(projectBinDir);
|
|
114
|
+
files.forEach(fileName => {
|
|
115
|
+
if (/(dll\.config|\.xml)$/.test(fileName)) fs.unlinkSync(path.join(projectBinDir, fileName));
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// copy BIN and content directories
|
|
119
|
+
Utils.copyFolder(projectBinDir, path.join(targetDir, "bin"));
|
|
120
|
+
Utils.copyFolder(path.join(moduleDir, "content"), path.join(targetDir, "content"));
|
|
121
|
+
files = fs.readdirSync(moduleDir);
|
|
122
|
+
files.forEach(fileName => {
|
|
123
|
+
if (/(\.svc)$/.test(fileName))
|
|
124
|
+
Utils.copyFile(path.join(moduleDir, fileName), path.join(targetDir, fileName));
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const moduleConfigFileName = "app.config";
|
|
128
|
+
this.copyModuleConfig(moduleDir, targetDir, moduleConfigFileName, moduleName + "." +moduleConfigFileName);
|
|
129
|
+
Utils.deleteFiles(targetDir, ["packages.config", "web.config.template"]);
|
|
130
|
+
Logger.info(moduleName.replace("._core", "") + ": " + info.join(", "));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private msbuild(project: string, targets: Array<string>, props: Array<string>): void {
|
|
135
|
+
let args = targets.map(t => "/t:" + t).join(" ") + " " + props.map(p => "/p:" + p).join(" ");
|
|
136
|
+
Utils.exec(`msbuild /restore /nologo /clp:ErrorsOnly;WarningsOnly /verbosity:quiet ${project} ${args}`, {
|
|
137
|
+
silent: false
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private clearCache(folderPath: string): void {
|
|
142
|
+
Utils.deleteAllFoldersRecursively(folderPath, "bin");
|
|
143
|
+
Utils.deleteAllFoldersRecursively(folderPath, "obj");
|
|
144
|
+
}
|
|
145
|
+
}
|