@24i/smartapps-bigscreen-rnv-build-engine 0.17.1-alpha.2055 → 0.17.1-alpha.2133
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/README.md +14 -12
- package/dist/src/__tests__/engine.spec.js +57 -0
- package/dist/src/__tests__/resolvers/resolveBaseUrl.spec.js +99 -0
- package/dist/src/__tests__/resolvers/resolveBuildFileExtension.spec.js +26 -0
- package/dist/src/__tests__/resolvers/resolveBuildFileName.spec.js +89 -0
- package/dist/src/__tests__/resolvers/resolveBuildVersion.spec.js +50 -0
- package/dist/src/__tests__/resolvers/resolveBuildVersionOffset.spec.js +111 -0
- package/dist/src/__tests__/resolvers/resolveDeployLocations.spec.js +98 -0
- package/dist/src/__tests__/resolvers/resolveGenericRnvConfig.spec.js +92 -0
- package/dist/src/__tests__/resolvers/resolveHbbtvDeployConfig.spec.js +35 -0
- package/dist/src/__tests__/resolvers/resolveHbbtvDeployUrl.spec.js +41 -0
- package/dist/src/__tests__/resolvers/resolveHbbtvRemoteBuildDirRelativePath.spec.js +49 -0
- package/dist/src/__tests__/resolvers/resolveSupportedPlatforms.spec.js +22 -0
- package/dist/src/__tests__/resolvers/resolveUsedFlavours.spec.js +38 -0
- package/dist/src/__tests__/resolvers/resolveZippedPlatformBuildsRelativeFilePath.spec.js +18 -0
- package/dist/src/__tests__/sdks/sdk-utils/registerSdkPath.spec.js +60 -0
- package/dist/src/__tests__/sdks/sdk-utils/sdk-installer/sdkInstaller.spec.js +85 -0
- package/dist/src/__tests__/sdks/sdk-utils/sdk-installer/services/clean.spec.js +50 -0
- package/dist/src/__tests__/sdks/sdk-utils/sdk-installer/services/download.spec.js +103 -0
- package/dist/src/__tests__/sdks/sdk-utils/sdk-installer/services/install.spec.js +57 -0
- package/dist/src/__tests__/sdks/sdk-utils/sdk-installer/services/unzip.spec.js +51 -0
- package/dist/src/__tests__/utils/forEachSupportedPlatformFlavour.spec.js +104 -0
- package/dist/src/__tests__/utils/generatePngSpriteMap.spec.js +81 -0
- package/dist/src/__tests__/utils/generateSvgSpriteMap.spec.js +108 -0
- package/dist/src/__tests__/utils/mergeSvgAndPngIcons.spec.js +112 -0
- package/dist/src/__tests__/utils/replaceRelevantStringsInConfig/replaceRelevantStringsInConfig.spec.js +116 -0
- package/dist/src/__tests__/utils/replaceRelevantStringsInConfig/replaceTemplateString.spec.js +65 -0
- package/dist/src/__tests__/utils/zipBuildsByPlatforms.spec.js +69 -0
- package/dist/src/constants/platforms.js +1 -0
- package/dist/src/engine.js +5 -0
- package/dist/src/scripts/release/urlsMarkdown.js +1 -0
- package/dist/src/tasks/task.rnv.build.js +1 -0
- package/dist/src/tasks/task.rnv.configure.js +1 -0
- package/dist/src/tasks/task.rnv.deploy.js +1 -0
- package/dist/src/tasks/task.rnv.project.configure.js +1 -2
- package/dist/src/tasks/task.rnv.start.js +1 -0
- package/dist/templates/platforms/_shared/webpack.base.js +5 -5
- package/package.json +1 -1
- package/renative.engine.json +1 -0
- package/dist/package.json +0 -88
package/README.md
CHANGED
|
@@ -38,17 +38,18 @@ it
|
|
|
38
38
|
---
|
|
39
39
|
## Supported platforms
|
|
40
40
|
|
|
41
|
-
| *Platform*
|
|
42
|
-
|
|
|
43
|
-
| **
|
|
44
|
-
| **
|
|
45
|
-
| **
|
|
46
|
-
| **
|
|
47
|
-
| **
|
|
48
|
-
| **
|
|
49
|
-
| **
|
|
50
|
-
| **
|
|
51
|
-
| **
|
|
41
|
+
| *Platform* | *Vendor* | *id* | *Build file extension* | *Registered file extensions* | *Note* |
|
|
42
|
+
| :------------ | :------: | :---------: | :--------------------: | :---------------------------------: | :------------------------------: |
|
|
43
|
+
| **AndroidTV** | N/A | `androidtv` | `.zip` | `*.android.tv.{js,jsx,ts,tsx,json}` | |
|
|
44
|
+
| **Entone** | Amino | `entone` | `.zip` | `*.entone.{js,jsx,ts,tsx,json}` | set-top boxes |
|
|
45
|
+
| **HbbTV** | N/A | `hbbtv` | `.zip` | `*.hbbtv.tv.{js,jsx,ts,tsx,json}` | |
|
|
46
|
+
| **KreaTV** | Arris | `kreatv` | `.zip` | `*.kreatv.{js,jsx,ts,tsx,json}` | set-top boxes |
|
|
47
|
+
| **Saphi** | Philips | `saphi` | `.zip` | `*.saphi.tv.{js,jsx,ts,tsx,json}` | |
|
|
48
|
+
| **Tizen** | Samsung | `tizen` | `.wgt` | `*.tizen.tv.{js,jsx,ts,tsx,json}` | |
|
|
49
|
+
| **VIDAA** | Hisense | `vidaa` | `.zip` | `*.vidaa.tv.{js,jsx,ts,tsx,json}` | |
|
|
50
|
+
| **webOS** | LG | `webos` | `.ipk` | `*.webos.tv.{js,jsx,ts,tsx,json}` | |
|
|
51
|
+
| **WebTV** | N/A | `webtv` | `.zip` | `*.webtv.{js,jsx,ts,tsx,json}` | for previewing builds in browser |
|
|
52
|
+
| **Xbox** | Microsoft | `xbox` | `.zip` | `*.xbox.{js,jsx,ts,tsx,json}` | |
|
|
52
53
|
|
|
53
54
|
When building the application with ReNative, if file with ***registered platform extension*** is found,
|
|
54
55
|
it takes precedence and is bundled instead of file without registered file extension (such as `index.ts`).
|
|
@@ -57,7 +58,8 @@ For instance, this approach is useful (and is used) for platform drivers - only
|
|
|
57
58
|
```
|
|
58
59
|
drivers/
|
|
59
60
|
index.ts // fallback when file with platform file extension for selected platform is not found
|
|
60
|
-
index.
|
|
61
|
+
index.android.tv.ts // if build for AndroidTV platform is selected, this file will be picked for the build
|
|
62
|
+
index.entone.ts
|
|
61
63
|
index.hbbtv.tv.ts
|
|
62
64
|
index.kreatv.ts
|
|
63
65
|
index.saphi.tv.ts
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
const engine_1 = __importDefault(require("../engine"));
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const engineTasks_1 = require("../tasks/engineTasks");
|
|
9
|
+
jest.mock('../../../renative.engine.json', () => ({ __esModule: true, id: 'engineID', plugins: {} }), { virtual: true });
|
|
10
|
+
describe('engine config', () => {
|
|
11
|
+
afterAll(() => {
|
|
12
|
+
jest.resetModules();
|
|
13
|
+
jest.resetAllMocks();
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
});
|
|
16
|
+
const configuredFileExtensions = ['js', 'jsx', 'ts', 'tsx', 'json'];
|
|
17
|
+
it('generates task', () => {
|
|
18
|
+
expect(Object.keys(engine_1.default.tasks)).toHaveLength(engineTasks_1.engineTaskList.length);
|
|
19
|
+
});
|
|
20
|
+
it('loads parses renative.engine.json file content into "config" property', () => {
|
|
21
|
+
expect(engine_1.default.config).toStrictEqual({
|
|
22
|
+
__esModule: true, id: 'engineID', plugins: {},
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
it('has defined "projectDirName"', () => {
|
|
26
|
+
expect(engine_1.default.projectDirName).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
it('has defined "serverDirName"', () => {
|
|
29
|
+
expect(engine_1.default.serverDirName).toBeDefined();
|
|
30
|
+
});
|
|
31
|
+
describe('platform properties', () => {
|
|
32
|
+
it('has defined platform specific file extensions for each platform', () => {
|
|
33
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
34
|
+
const { extensions } = engine_1.default.platforms[platform];
|
|
35
|
+
expect(extensions).toBeInstanceOf(Array);
|
|
36
|
+
const customExtensions = extensions
|
|
37
|
+
.filter((extension) => !configuredFileExtensions.includes(extension));
|
|
38
|
+
expect(customExtensions.length)
|
|
39
|
+
.toBeGreaterThanOrEqual(configuredFileExtensions.length);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it('has set isWebHosted property to true for each platform', () => {
|
|
43
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
44
|
+
expect(engine_1.default.platforms[platform].isWebHosted).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it('has set defaultPort property for each platform', () => {
|
|
48
|
+
const minAllowedPortNumber = 1024;
|
|
49
|
+
const maxAllowedPortNumber = 49151;
|
|
50
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
51
|
+
const { defaultPort } = engine_1.default.platforms[platform];
|
|
52
|
+
expect(defaultPort).toBeGreaterThanOrEqual(minAllowedPortNumber);
|
|
53
|
+
expect(defaultPort).toBeLessThanOrEqual(maxAllowedPortNumber);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const resolveBaseUrl_1 = require("../../resolvers/resolveBaseUrl");
|
|
4
|
+
const resolveGenericRnvConfig_1 = require("../../resolvers/resolveGenericRnvConfig");
|
|
5
|
+
const constants_1 = require("../../constants");
|
|
6
|
+
jest.mock('../../resolvers/resolveGenericRnvConfig');
|
|
7
|
+
describe('resolveBaseUrl', () => {
|
|
8
|
+
const bucketName = 'test-bucket';
|
|
9
|
+
const flavour = 'test_flavour';
|
|
10
|
+
const packageVersion = '1.0.0';
|
|
11
|
+
const expectEmptyStringOutputForEachPlatformAndSchemeByFlavour = (customFlavour) => {
|
|
12
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
13
|
+
Object.values(constants_1.BuildSchemes).forEach((scheme) => {
|
|
14
|
+
expect((0, resolveBaseUrl_1.resolveBaseUrl)({ platform, scheme, flavour: customFlavour })).toBe('');
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
jest.clearAllMocks();
|
|
20
|
+
jest.resetAllMocks();
|
|
21
|
+
jest.resetModules();
|
|
22
|
+
});
|
|
23
|
+
it('returns empty string when c.common.packageVersion is not set', () => {
|
|
24
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue({
|
|
25
|
+
runtime: {},
|
|
26
|
+
buildConfig: {
|
|
27
|
+
common: {
|
|
28
|
+
packageVersion: '',
|
|
29
|
+
deploy: { aws3: { bucketName } },
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
expectEmptyStringOutputForEachPlatformAndSchemeByFlavour(flavour);
|
|
34
|
+
});
|
|
35
|
+
it('returns empty string when c.buildConfig.common.deploy.aws3.bucketName is not set', () => {
|
|
36
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue({
|
|
37
|
+
runtime: {},
|
|
38
|
+
buildConfig: { common: { packageVersion } },
|
|
39
|
+
});
|
|
40
|
+
expectEmptyStringOutputForEachPlatformAndSchemeByFlavour(flavour);
|
|
41
|
+
});
|
|
42
|
+
describe('resolving baseUrl for configured schemes', () => {
|
|
43
|
+
const bucketUrl = `http://${bucketName}.s3.amazonaws.com`;
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue({
|
|
46
|
+
runtime: {},
|
|
47
|
+
buildConfig: {
|
|
48
|
+
common: {
|
|
49
|
+
packageVersion,
|
|
50
|
+
deploy: { aws3: { bucketName } },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it('returns empty string for other build schemes as latest or distribution', () => {
|
|
56
|
+
const schemesWithDefinedBaseUrl = [
|
|
57
|
+
constants_1.BuildSchemes.DEV_LATEST,
|
|
58
|
+
constants_1.BuildSchemes.RC_LATEST,
|
|
59
|
+
constants_1.BuildSchemes.RELEASE_LATEST,
|
|
60
|
+
constants_1.BuildSchemes.RELEASE_DIST,
|
|
61
|
+
];
|
|
62
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
63
|
+
Object.values(constants_1.BuildSchemes).forEach((scheme) => {
|
|
64
|
+
const baseUrl = (0, resolveBaseUrl_1.resolveBaseUrl)({ platform, scheme, flavour });
|
|
65
|
+
if (schemesWithDefinedBaseUrl.includes(scheme)) {
|
|
66
|
+
expect(baseUrl).not.toBe('');
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
expect(baseUrl).toBe('');
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it('returns proper url for "latest development" build scheme', () => {
|
|
75
|
+
const scheme = constants_1.BuildSchemes.DEV_LATEST;
|
|
76
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
77
|
+
expect((0, resolveBaseUrl_1.resolveBaseUrl)({ platform, flavour, scheme })).toBe(`${bucketUrl}/builds/${platform}/${flavour}/latest/dev`);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it('returns proper url for "latest release candidate" scheme', () => {
|
|
81
|
+
const scheme = constants_1.BuildSchemes.RC_LATEST;
|
|
82
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
83
|
+
expect((0, resolveBaseUrl_1.resolveBaseUrl)({ platform, flavour, scheme })).toBe(`${bucketUrl}/builds/${platform}/${flavour}/latest/rc`);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('returns proper url for "latest release" build scheme', () => {
|
|
87
|
+
const scheme = constants_1.BuildSchemes.RELEASE_LATEST;
|
|
88
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
89
|
+
expect((0, resolveBaseUrl_1.resolveBaseUrl)({ platform, flavour, scheme })).toBe(`${bucketUrl}/builds/${platform}/${flavour}/latest/release`);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
it('returns proper url for "distribution release" build scheme', () => {
|
|
93
|
+
const scheme = constants_1.BuildSchemes.RELEASE_DIST;
|
|
94
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
95
|
+
expect((0, resolveBaseUrl_1.resolveBaseUrl)({ platform, flavour, scheme })).toBe(`${bucketUrl}/builds/${platform}/${flavour}/dist/v${packageVersion}`);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const resolveBuildFileExtension_1 = require("../../resolvers/resolveBuildFileExtension");
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
describe('resolveBuildFileExtension', () => {
|
|
6
|
+
it('returns "wgt" for tizen platform', () => {
|
|
7
|
+
const resolvedExtension = (0, resolveBuildFileExtension_1.resolveBuildFileExtension)(constants_1.Platforms.TIZEN);
|
|
8
|
+
expect(resolvedExtension).toBe('wgt');
|
|
9
|
+
});
|
|
10
|
+
it('returns "ipk" for webos platform', () => {
|
|
11
|
+
const resolvedExtension = (0, resolveBuildFileExtension_1.resolveBuildFileExtension)(constants_1.Platforms.WEBOS);
|
|
12
|
+
expect(resolvedExtension).toBe('ipk');
|
|
13
|
+
});
|
|
14
|
+
it('returns "zip" for all platforms except tizen and webos', () => {
|
|
15
|
+
const excludedPlatforms = [constants_1.Platforms.TIZEN, constants_1.Platforms.WEBOS];
|
|
16
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
17
|
+
const resolvedExtension = (0, resolveBuildFileExtension_1.resolveBuildFileExtension)(platform);
|
|
18
|
+
if (excludedPlatforms.includes(platform)) {
|
|
19
|
+
expect(resolvedExtension).not.toBe('zip');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
expect(resolvedExtension).toBe('zip');
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const resolveBuildFileName_1 = require("../../resolvers/resolveBuildFileName");
|
|
4
|
+
const resolveGenericRnvConfig_1 = require("../../resolvers/resolveGenericRnvConfig");
|
|
5
|
+
const resolveBuildVersionOffset_1 = require("../../resolvers/resolveBuildVersionOffset");
|
|
6
|
+
const constants_1 = require("../../constants");
|
|
7
|
+
jest.mock('../../resolvers/resolveGenericRnvConfig');
|
|
8
|
+
jest.mock('../../resolvers/resolveBuildVersionOffset');
|
|
9
|
+
const getPackageExtensionByPlatform = (platform) => {
|
|
10
|
+
switch (platform) {
|
|
11
|
+
case constants_1.Platforms.TIZEN: return 'wgt';
|
|
12
|
+
case constants_1.Platforms.WEBOS: return 'ipk';
|
|
13
|
+
default: return 'zip';
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
describe('resolveBuildFileName', () => {
|
|
17
|
+
let c = {};
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue({
|
|
20
|
+
runtime: {},
|
|
21
|
+
buildConfig: { common: { packageVersion: '1.0.0' } },
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
jest.clearAllMocks();
|
|
26
|
+
jest.resetAllMocks();
|
|
27
|
+
jest.resetModules();
|
|
28
|
+
});
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
c = {
|
|
31
|
+
runtime: { appId: 'flavour' },
|
|
32
|
+
buildConfig: {
|
|
33
|
+
common: { appNameInFileName: 'appName' },
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
it('returns proper string when there is no version offset', () => {
|
|
38
|
+
resolveBuildVersionOffset_1.resolveBuildVersionOffset.mockReturnValue('');
|
|
39
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
40
|
+
c.platform = platform;
|
|
41
|
+
const ext = getPackageExtensionByPlatform(platform);
|
|
42
|
+
c.runtime.scheme = constants_1.BuildSchemes.DEBUG;
|
|
43
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0.debug_flavour.${ext}`);
|
|
44
|
+
c.runtime.scheme = constants_1.BuildSchemes.DEV;
|
|
45
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0.dev_flavour.${ext}`);
|
|
46
|
+
c.runtime.scheme = constants_1.BuildSchemes.DEV_LATEST;
|
|
47
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_latest.dev_flavour.${ext}`);
|
|
48
|
+
c.runtime.scheme = constants_1.BuildSchemes.RC;
|
|
49
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0.rc_flavour.${ext}`);
|
|
50
|
+
c.runtime.scheme = constants_1.BuildSchemes.RC_LATEST;
|
|
51
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_latest.rc_flavour.${ext}`);
|
|
52
|
+
c.runtime.scheme = constants_1.BuildSchemes.RELEASE;
|
|
53
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0_flavour.${ext}`);
|
|
54
|
+
c.runtime.scheme = constants_1.BuildSchemes.RELEASE_LATEST;
|
|
55
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_latest.release_flavour.${ext}`);
|
|
56
|
+
c.runtime.scheme = constants_1.BuildSchemes.RELEASE_DIST;
|
|
57
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0_flavour.${ext}`);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
it('returns proper string when there is version offset', () => {
|
|
61
|
+
resolveBuildVersionOffset_1.resolveBuildVersionOffset.mockReturnValue('1');
|
|
62
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
63
|
+
c.platform = platform;
|
|
64
|
+
const ext = getPackageExtensionByPlatform(platform);
|
|
65
|
+
c.runtime.scheme = constants_1.BuildSchemes.DEBUG;
|
|
66
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0.debug-1_flavour.${ext}`);
|
|
67
|
+
c.runtime.scheme = constants_1.BuildSchemes.DEV;
|
|
68
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0.dev-1_flavour.${ext}`);
|
|
69
|
+
c.runtime.scheme = constants_1.BuildSchemes.DEV_LATEST;
|
|
70
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_latest.dev_flavour.${ext}`);
|
|
71
|
+
c.runtime.scheme = constants_1.BuildSchemes.RC;
|
|
72
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0.rc-1_flavour.${ext}`);
|
|
73
|
+
c.runtime.scheme = constants_1.BuildSchemes.RC_LATEST;
|
|
74
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_latest.rc_flavour.${ext}`);
|
|
75
|
+
c.runtime.scheme = constants_1.BuildSchemes.RELEASE;
|
|
76
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0-1_flavour.${ext}`);
|
|
77
|
+
c.runtime.scheme = constants_1.BuildSchemes.RELEASE_LATEST;
|
|
78
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_latest.release_flavour.${ext}`);
|
|
79
|
+
c.runtime.scheme = constants_1.BuildSchemes.RELEASE_DIST;
|
|
80
|
+
expect((0, resolveBuildFileName_1.resolveBuildFileName)(c)).toBe(`appName_${platform}_v1.0.0-1_flavour.${ext}`);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
it('throws an error when c.buildConfig.common.appNameInFileName is not present', () => {
|
|
84
|
+
c.buildConfig.common.appNameInFileName = '';
|
|
85
|
+
expect(() => {
|
|
86
|
+
(0, resolveBuildFileName_1.resolveBuildFileName)(c);
|
|
87
|
+
}).toThrowError(new Error('Missing value for "c.buildConfig.common.appNameInFileName"!'));
|
|
88
|
+
});
|
|
89
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const resolveBuildVersion_1 = require("../../resolvers/resolveBuildVersion");
|
|
4
|
+
const resolveBuildVersionOffset_1 = require("../../resolvers/resolveBuildVersionOffset");
|
|
5
|
+
const resolveGenericRnvConfig_1 = require("../../resolvers/resolveGenericRnvConfig");
|
|
6
|
+
const constants_1 = require("../../constants");
|
|
7
|
+
jest.mock('../../resolvers/resolveBuildVersionOffset');
|
|
8
|
+
jest.mock('../../resolvers/resolveGenericRnvConfig');
|
|
9
|
+
describe('resolveBuildVersion', () => {
|
|
10
|
+
const flavour = 'flavour';
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
jest.clearAllMocks();
|
|
13
|
+
jest.resetAllMocks();
|
|
14
|
+
jest.resetModules();
|
|
15
|
+
});
|
|
16
|
+
it('returns proper string when there is no version offset', () => {
|
|
17
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue({
|
|
18
|
+
runtime: {},
|
|
19
|
+
buildConfig: { common: { packageVersion: '1.0.0' } },
|
|
20
|
+
});
|
|
21
|
+
resolveBuildVersionOffset_1.resolveBuildVersionOffset.mockReturnValue('');
|
|
22
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
23
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.DEBUG })).toBe('v1.0.0.debug');
|
|
24
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.DEV })).toBe('v1.0.0.dev');
|
|
25
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.DEV_LATEST })).toBe('v1.0.0.dev');
|
|
26
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RC })).toBe('v1.0.0.rc');
|
|
27
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RC_LATEST })).toBe('v1.0.0.rc');
|
|
28
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RELEASE })).toBe('v1.0.0');
|
|
29
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RELEASE_LATEST })).toBe('v1.0.0');
|
|
30
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RELEASE_DIST })).toBe('v1.0.0');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
it('returns proper string when there is version offset', () => {
|
|
34
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue({
|
|
35
|
+
runtime: {},
|
|
36
|
+
buildConfig: { common: { packageVersion: '1.0.0' } },
|
|
37
|
+
});
|
|
38
|
+
resolveBuildVersionOffset_1.resolveBuildVersionOffset.mockReturnValue('2');
|
|
39
|
+
Object.values(constants_1.Platforms).forEach((platform) => {
|
|
40
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.DEBUG })).toBe('v1.0.0.debug-2');
|
|
41
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.DEV })).toBe('v1.0.0.dev-2');
|
|
42
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.DEV_LATEST })).toBe('v1.0.0.dev-2');
|
|
43
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RC })).toBe('v1.0.0.rc-2');
|
|
44
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RC_LATEST })).toBe('v1.0.0.rc-2');
|
|
45
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RELEASE })).toBe('v1.0.0-2');
|
|
46
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RELEASE_LATEST })).toBe('v1.0.0-2');
|
|
47
|
+
expect((0, resolveBuildVersion_1.resolveBuildVersion)({ platform, flavour, scheme: constants_1.BuildSchemes.RELEASE_DIST })).toBe('v1.0.0-2');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const child_process_1 = require("child_process");
|
|
4
|
+
const resolveBuildVersionOffset_1 = require("../../resolvers/resolveBuildVersionOffset");
|
|
5
|
+
const c = {
|
|
6
|
+
buildConfig: {
|
|
7
|
+
common: {
|
|
8
|
+
git: {
|
|
9
|
+
branchNames: {
|
|
10
|
+
dev: 'DEV',
|
|
11
|
+
rc: 'RC',
|
|
12
|
+
dist: 'DIST',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
jest.mock('child_process');
|
|
19
|
+
describe('resolveBuildVersionOffset', () => {
|
|
20
|
+
const oldEnv = process.env;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
process.env = { ...oldEnv };
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
jest.clearAllMocks();
|
|
26
|
+
jest.resetAllMocks();
|
|
27
|
+
jest.resetModules();
|
|
28
|
+
});
|
|
29
|
+
afterAll(() => {
|
|
30
|
+
process.env = oldEnv;
|
|
31
|
+
});
|
|
32
|
+
it('resolve process.env.BRANCH as a current branch when it is set', () => {
|
|
33
|
+
child_process_1.execSync.mockImplementation(() => '');
|
|
34
|
+
process.env.BRANCH = 'DEV';
|
|
35
|
+
(0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c);
|
|
36
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(1);
|
|
37
|
+
const firstCalledCmd = child_process_1.execSync.mock.calls[0][0];
|
|
38
|
+
expect(firstCalledCmd).not.toBe('git branch --show-current');
|
|
39
|
+
});
|
|
40
|
+
it('uses git command to resolve current branch when process.env.BRANCH is not set', () => {
|
|
41
|
+
child_process_1.execSync.mockImplementation(() => '');
|
|
42
|
+
(0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c);
|
|
43
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(1);
|
|
44
|
+
const firstCalledCmd = child_process_1.execSync.mock.calls[0][0];
|
|
45
|
+
expect(firstCalledCmd).toBe('git branch --show-current');
|
|
46
|
+
});
|
|
47
|
+
it('compares against DIST branch when current branch is DEV', () => {
|
|
48
|
+
child_process_1.execSync.mockImplementation((cmd) => {
|
|
49
|
+
if (cmd === 'git branch --show-current')
|
|
50
|
+
return 'DEV';
|
|
51
|
+
return '';
|
|
52
|
+
});
|
|
53
|
+
(0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c);
|
|
54
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(2);
|
|
55
|
+
const secondCalledCmd = child_process_1.execSync.mock.calls[1][0];
|
|
56
|
+
expect(secondCalledCmd).toBe('git rev-list --count --merges --grep="^Merge pull request #" HEAD ^origin/DIST');
|
|
57
|
+
});
|
|
58
|
+
it('compares against DEV branch when current branch is RC', () => {
|
|
59
|
+
child_process_1.execSync.mockImplementation((cmd) => {
|
|
60
|
+
if (cmd === 'git branch --show-current')
|
|
61
|
+
return 'RC';
|
|
62
|
+
return '';
|
|
63
|
+
});
|
|
64
|
+
(0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c);
|
|
65
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(2);
|
|
66
|
+
const secondCalledCmd = child_process_1.execSync.mock.calls[1][0];
|
|
67
|
+
expect(secondCalledCmd).toBe('git rev-list --count --merges --grep="^Merge pull request #" HEAD ^origin/DEV');
|
|
68
|
+
});
|
|
69
|
+
it('returns empty string when current branch is not DEV or RC', () => {
|
|
70
|
+
child_process_1.execSync.mockImplementation((cmd) => {
|
|
71
|
+
if (cmd === 'git branch --show-current')
|
|
72
|
+
return 'ANY_BRANCH';
|
|
73
|
+
return '';
|
|
74
|
+
});
|
|
75
|
+
expect((0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c)).toBe('');
|
|
76
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(1);
|
|
77
|
+
});
|
|
78
|
+
it('returns empty string when there is no version offset', () => {
|
|
79
|
+
child_process_1.execSync.mockImplementation((cmd) => {
|
|
80
|
+
if (cmd === 'git branch --show-current')
|
|
81
|
+
return 'DEV';
|
|
82
|
+
if (cmd.startsWith('git rev-list --count --merges'))
|
|
83
|
+
return '0';
|
|
84
|
+
return '';
|
|
85
|
+
});
|
|
86
|
+
expect((0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c)).toBe('');
|
|
87
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(2);
|
|
88
|
+
});
|
|
89
|
+
it('returns version offset as string', () => {
|
|
90
|
+
child_process_1.execSync.mockImplementation((cmd) => {
|
|
91
|
+
if (cmd === 'git branch --show-current')
|
|
92
|
+
return 'DEV';
|
|
93
|
+
if (cmd.startsWith('git rev-list --count --merges'))
|
|
94
|
+
return '10';
|
|
95
|
+
return '';
|
|
96
|
+
});
|
|
97
|
+
expect((0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c)).toBe('10');
|
|
98
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(2);
|
|
99
|
+
});
|
|
100
|
+
it('returns empty string when git rev-list cmd throws an error', () => {
|
|
101
|
+
child_process_1.execSync.mockImplementation((cmd) => {
|
|
102
|
+
if (cmd === 'git branch --show-current')
|
|
103
|
+
return 'DEV';
|
|
104
|
+
if (cmd.startsWith('git rev-list --count --merges'))
|
|
105
|
+
throw new Error('test error');
|
|
106
|
+
return '';
|
|
107
|
+
});
|
|
108
|
+
expect((0, resolveBuildVersionOffset_1.resolveBuildVersionOffset)(c)).toBe('');
|
|
109
|
+
expect(child_process_1.execSync.mock.calls).toHaveLength(2);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const resolveGenericRnvConfig_1 = require("../../resolvers/resolveGenericRnvConfig");
|
|
4
|
+
const resolveDeployLocations_1 = require("../../resolvers/resolveDeployLocations");
|
|
5
|
+
const resolveBuildVersionOffset_1 = require("../../resolvers/resolveBuildVersionOffset");
|
|
6
|
+
const constants_1 = require("../../constants");
|
|
7
|
+
jest.mock('../../resolvers/resolveGenericRnvConfig');
|
|
8
|
+
jest.mock('../../resolvers/resolveBuildVersionOffset');
|
|
9
|
+
const c = {
|
|
10
|
+
platform: constants_1.Platforms.WEBTV,
|
|
11
|
+
runtime: {
|
|
12
|
+
scheme: constants_1.BuildSchemes.RELEASE_LATEST,
|
|
13
|
+
appId: 'flavour1',
|
|
14
|
+
},
|
|
15
|
+
buildConfig: {
|
|
16
|
+
defaults: { supportedPlatforms: [constants_1.Platforms.TIZEN, constants_1.Platforms.WEBTV, constants_1.Platforms.HBBTV, constants_1.Platforms.XBOX] },
|
|
17
|
+
common: {
|
|
18
|
+
appNameInFileName: 'appName',
|
|
19
|
+
packageVersion: '1.0.0',
|
|
20
|
+
deploy: {
|
|
21
|
+
aws3: {
|
|
22
|
+
bucketName: 'bucketName',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
platforms: {
|
|
27
|
+
tizen: {
|
|
28
|
+
deploy: {
|
|
29
|
+
supportedFlavours: ['flavour1', 'flavour2'],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
webtv: {
|
|
33
|
+
deploy: {
|
|
34
|
+
supportedFlavours: ['flavour1'],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
hbbtv: {
|
|
38
|
+
deploy: {
|
|
39
|
+
supportedFlavours: ['flavour3'],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
xbox: {
|
|
43
|
+
deploy: {
|
|
44
|
+
supportedFlavours: ['flavour1'],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
describe('resolveDeployLocations', () => {
|
|
51
|
+
resolveGenericRnvConfig_1.getBaseConfig.mockReturnValue(c);
|
|
52
|
+
resolveBuildVersionOffset_1.resolveBuildVersionOffset.mockReturnValue('');
|
|
53
|
+
afterAll(() => {
|
|
54
|
+
jest.clearAllMocks();
|
|
55
|
+
jest.resetAllMocks();
|
|
56
|
+
jest.resetModules();
|
|
57
|
+
});
|
|
58
|
+
it('returns object with correct structure', () => {
|
|
59
|
+
const resolvedDeployLocations = (0, resolveDeployLocations_1.resolveDeployLocations)(c);
|
|
60
|
+
const bucketBaseUrl = 'http://bucketName.s3.amazonaws.com';
|
|
61
|
+
expect(resolvedDeployLocations).toStrictEqual({
|
|
62
|
+
versions: {
|
|
63
|
+
'v1.0.0': {
|
|
64
|
+
platforms: {
|
|
65
|
+
hbbtv: {
|
|
66
|
+
flavour3: {
|
|
67
|
+
indexUrl: 'http://nxg-bigscreen-test.24imedia.tv/appName/flavour3/latest/release/public/index.html',
|
|
68
|
+
packageUrl: `${bucketBaseUrl}/builds/hbbtv/flavour3/latest/release/build/appName_hbbtv_latest.release_flavour3.zip`,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
tizen: {
|
|
72
|
+
flavour1: {
|
|
73
|
+
indexUrl: `${bucketBaseUrl}/builds/tizen/flavour1/latest/release/public/index.html`,
|
|
74
|
+
packageUrl: `${bucketBaseUrl}/builds/tizen/flavour1/latest/release/build/appName_tizen_latest.release_flavour1.wgt`,
|
|
75
|
+
},
|
|
76
|
+
flavour2: {
|
|
77
|
+
indexUrl: `${bucketBaseUrl}/builds/tizen/flavour2/latest/release/public/index.html`,
|
|
78
|
+
packageUrl: `${bucketBaseUrl}/builds/tizen/flavour2/latest/release/build/appName_tizen_latest.release_flavour2.wgt`,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
webtv: {
|
|
82
|
+
flavour1: {
|
|
83
|
+
indexUrl: `${bucketBaseUrl}/builds/webtv/flavour1/latest/release/public/index.html`,
|
|
84
|
+
packageUrl: `${bucketBaseUrl}/builds/webtv/flavour1/latest/release/build/appName_webtv_latest.release_flavour1.zip`,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
xbox: {
|
|
88
|
+
flavour1: {
|
|
89
|
+
indexUrl: `${bucketBaseUrl}/builds/xbox/flavour1/latest/release/public/index.html`,
|
|
90
|
+
packageUrl: `${bucketBaseUrl}/builds/xbox/flavour1/latest/release/build/appName_xbox_latest.release_flavour1.zip`,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|