@24i/bigscreen-sdk 1.0.36-alpha.2631 → 1.0.36-alpha.2638

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/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@24i/bigscreen-sdk",
3
- "version": "1.0.36-alpha.2631",
3
+ "version": "1.0.36-alpha.2638",
4
4
  "description": "SmartApps BIGscreen SDK monorepo",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "prepare": "husky install && npm run patch-types && npm run scripts:prepare",
7
+ "prepare": "husky && npm run patch-types && npm run scripts:prepare",
8
8
  "prepublishOnly": "npm run scripts:prepare",
9
9
  "scripts:prepare": "ts-node ./utils/run-scripts/index.ts \"prepare:.+\"",
10
10
  "scripts:prepare:create-export-maps": "ts-node ./utils/create-export-maps/index.ts --project ./tsconfig.utils.json",
11
11
  "scripts:prepare:webos": "cd packages/driver-webos && ts-node ./scripts/exportWebOSTVjs.ts --project ../../tsconfig.utils.json",
12
12
  "scripts:create-package": "ts-node ./utils/create-package/src/index.ts --project ./tsconfig.utils.json",
13
+ "release": "ts-node --project ./tsconfig.utils.json ./utils/release/release.ts",
13
14
  "jest": "cross-env NODE_ICU_DATA=node_modules/full-icu jest",
14
15
  "eslint": "eslint \"./packages/**/src/**/*.{ts,tsx}\"",
15
16
  "stylelint": "stylelint \"./packages/**/src/**/*.scss\"",
@@ -40,7 +41,7 @@
40
41
  "@24i/appstage-shared-analytics": "1.0.20-alpha.70",
41
42
  "@24i/appstage-shared-events-manager": "1.0.11",
42
43
  "@24i/appstage-shared-perf-utils": "1.0.11",
43
- "@24i/bigscreen-players-engine-base": "4.0.1",
44
+ "@24i/bigscreen-players-engine-base": "4.0.2",
44
45
  "@24i/smartapps-datalayer": "3.0.15",
45
46
  "@sentry/browser": "7.35.0",
46
47
  "@sentry/types": "7.35.0",
@@ -0,0 +1,154 @@
1
+ import { ok } from 'assert';
2
+ import { execSync, ExecSyncOptions } from 'child_process';
3
+
4
+ const branchNames = {
5
+ dev: 'development',
6
+ main: 'master',
7
+ release: 'release',
8
+ };
9
+
10
+ const cmdSync = (command: string, options?: ExecSyncOptions) => execSync(command, options);
11
+ const cmdSyncInheritOut = (command: string) => cmdSync(command, { stdio: 'inherit' });
12
+ const cmdSyncPipeOut = (command: string) => cmdSync(command, { stdio: 'pipe' });
13
+ const cmdSyncTrimOut = (command: string) => cmdSync(command).toString().trim();
14
+
15
+ const splitByNewLine = (string = '') => string.split(/\r?\n/);
16
+
17
+ const statusList = () => {
18
+ const gitCmd = 'git status --porcelain';
19
+ const outputString = cmdSyncTrimOut(gitCmd);
20
+
21
+ if (!outputString) return [];
22
+ const handleMultipleWhitespaces = (rowString: string) => {
23
+ const spaceChar = ' ';
24
+ const parts = rowString.split(spaceChar);
25
+ return parts.filter(Boolean).join(spaceChar);
26
+ };
27
+
28
+ return splitByNewLine(outputString).map(handleMultipleWhitespaces);
29
+ };
30
+ const createBranch = (branchName: string) => cmdSyncPipeOut(`git branch ${branchName}`);
31
+ const checkout = (branchName: string) => cmdSyncPipeOut(`git checkout ${branchName}`);
32
+ const addAll = () => cmdSyncPipeOut('git add --all');
33
+
34
+ const commit = (commitMessage: string, noVerify = false) => {
35
+ const maybeNoVerifyParam = noVerify ? '--no-verify' : '';
36
+ return cmdSyncPipeOut(`git commit -m "${commitMessage}" ${maybeNoVerifyParam}`.trimEnd());
37
+ };
38
+
39
+ const push = (branchName: string, noVerify = false) => {
40
+ const maybeNoVerifyParam = noVerify ? '--no-verify' : '';
41
+ const cmd = `git push --set-upstream origin ${branchName} ${maybeNoVerifyParam}`.trimEnd();
42
+ return cmdSyncPipeOut(cmd);
43
+ };
44
+
45
+ const pushTag = (version: string) => {
46
+ const cmd = `git push v${version}`;
47
+ return cmdSyncPipeOut(cmd);
48
+ };
49
+
50
+ const assertEmptyStatusList = () => {
51
+ ok(statusList().length === 0, 'An empty GIT stage is expected!');
52
+ };
53
+
54
+ const getCurrentBranchName = () => cmdSyncTrimOut('git branch --show-current');
55
+
56
+ const remoteBranchExists = (expectedBranchName: string) => {
57
+ const gitCmd = `git ls-remote --heads origin ${expectedBranchName}`;
58
+ const output = cmdSyncTrimOut(gitCmd);
59
+ return Boolean(output);
60
+ };
61
+
62
+ // only for GitHub
63
+ const pullRequest = (fromBranch: string, toBranch: string, prTitle: string) => {
64
+ const cmdTool = 'hub';
65
+ const installDocUrl = 'https://github.com/github/hub#installation';
66
+ const errorMsg = `${cmdTool} is not installed! See ${installDocUrl}\n`;
67
+
68
+ try {
69
+ const toolPath = cmdSyncTrimOut(`${cmdTool} --version`);
70
+ ok(toolPath, errorMsg);
71
+ } catch (error) {
72
+ throw new Error(errorMsg);
73
+ }
74
+
75
+ const cmd = `${cmdTool} pull-request -m "${prTitle}" --head ${fromBranch} --base ${toBranch}`;
76
+ cmdSyncInheritOut(cmd);
77
+ };
78
+
79
+ const assertCurrentBranch = (expectedBranchName: string) => {
80
+ const currentGitBranchName = getCurrentBranchName();
81
+ // eslint-disable-next-line max-len
82
+ const errorMsg = `The ${expectedBranchName} branch is expected to be active, not "${currentGitBranchName}"`;
83
+ ok(currentGitBranchName === expectedBranchName, errorMsg);
84
+ };
85
+
86
+ const bumpVersion = (version: string | 'major' | 'minor' | 'patch') => {
87
+ // it bumps version, creates commit and GIT tag
88
+ execSync(`npm version ${version}`, { stdio: 'inherit' });
89
+ };
90
+
91
+ const getNewReleaseBranchName = () => {
92
+ const date = new Date();
93
+ const yyyy = date.getFullYear();
94
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
95
+ const dd = String(date.getDate()).padStart(2, '0');
96
+ let bod = 0;
97
+ const dateString = `${yyyy}-${mm}-${dd}`;
98
+ while (true) {
99
+ bod += 1;
100
+ const bodString = String(bod).padStart(2, '0');
101
+ const branchName = `${branchNames.release}/${dateString}-${bodString}`;
102
+ if (!remoteBranchExists(branchName)) {
103
+ return branchName;
104
+ }
105
+ }
106
+ };
107
+
108
+ /**
109
+ * Release process.
110
+ * @param versionType Version type one of 'major', 'minor', 'patch' or specific
111
+ * version like '0.0.2'.
112
+ */
113
+ const release = (versionType: string | 'major' | 'minor' | 'patch') => {
114
+ console.log(`Start release with version: ${versionType}`);
115
+ assertCurrentBranch(branchNames.dev);
116
+ assertEmptyStatusList();
117
+ const newReleaseBranchName = getNewReleaseBranchName();
118
+
119
+ console.log(`Creating "${newReleaseBranchName}" branch ...`);
120
+ createBranch(newReleaseBranchName);
121
+ checkout(newReleaseBranchName);
122
+
123
+ console.log(`Bumping version with "${versionType}" ...`);
124
+ bumpVersion(versionType);
125
+ const version = cmdSyncTrimOut('npm pkg get version');
126
+ ok(version, 'Oops, cannot get current version from package.json');
127
+
128
+ console.log(`Publishing package version: ${version} ...`);
129
+ cmdSyncInheritOut('npm publish');
130
+
131
+ console.log(`Generating changelog: ${version} ...`);
132
+ cmdSyncInheritOut('npm run generate-changelog');
133
+ addAll(); // add version changes (changelog) into a git stage
134
+
135
+ console.log('Creating commit with changed version and changelog ...');
136
+ commit('chore(CHANGELOG): generated changelog', true);
137
+
138
+ console.log(`Pushing ${newReleaseBranchName} branch ...`);
139
+ push(newReleaseBranchName, true);
140
+
141
+ console.log(`Pushing ${version} tag ...`);
142
+ pushTag(version);
143
+
144
+ const prTitle = `Release: ${newReleaseBranchName.split('/')[1]}`;
145
+ // eslint-disable-next-line max-len
146
+ console.log(`Creating Pull Request from ${newReleaseBranchName} branch to ${branchNames.main} branch...`);
147
+ console.log(`Applied PR title: "${prTitle}"`);
148
+ pullRequest(newReleaseBranchName, branchNames.main, prTitle);
149
+
150
+ console.log('Done!');
151
+ };
152
+
153
+ const version = process.argv[2] || 'patch'; // 'major' | 'minor' | 'patch'
154
+ release(version);