@jira-deploy/core 1.0.11 → 1.0.13

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.
@@ -0,0 +1,183 @@
1
+ import { readFileSync } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { join } from 'path';
4
+
5
+ const EMPTY_OBJECT = Object.freeze({});
6
+
7
+ const DEFAULT_DEPLOY_CONFIG = {
8
+ jira: {
9
+ projectKey: 'PROJ',
10
+ projectIdNumeric: 10000,
11
+ releaseProjectKey: 'REL',
12
+ },
13
+ fieldIds: {
14
+ shared: {
15
+ summary: 'summary',
16
+ dueDate: 'duedate',
17
+ description: 'description',
18
+ assignee: { automatic: '-1' },
19
+ env: 'customfield_env',
20
+ deptCode: 'customfield_dept_code',
21
+ systemCode: 'customfield_system_code',
22
+ systemModule: 'customfield_system_module',
23
+ gitBranch: 'customfield_git_branch',
24
+ jenkinsBranch: 'customfield_jenkins_branch',
25
+ extraVars: 'customfield_extra_vars',
26
+ clusterDeploy: 'customfield_cluster_deploy',
27
+ expectedStartTime: 'customfield_expected_start_time',
28
+ deptManagerSign: 'customfield_dept_manager_sign',
29
+ authManagerSign: 'customfield_auth_manager_sign',
30
+ releaseInfo: 'customfield_release_info',
31
+ },
32
+ cd: {
33
+ systemSubmodule: 'customfield_system_submodule',
34
+ serverList: 'customfield_server_list',
35
+ restartOnly: 'customfield_restart_only',
36
+ linkType: 'issuelinks-linktype',
37
+ linkIssuesTextarea: 'issuelinks-issues-textarea',
38
+ linkIssuesSelect: 'issuelinks-issues',
39
+ cdNotes: 'customfield_cd_notes',
40
+ deployVersion: 'customfield_deploy_version',
41
+ },
42
+ library: {
43
+ libModuleParent: 'customfield_library_module',
44
+ libModuleChild: 'customfield_library_module:1',
45
+ fortifyScan: 'customfield_fortify_scan',
46
+ },
47
+ ci: {
48
+ releaseOpType: 'customfield_release_op_type',
49
+ antiScanRequired: 'customfield_anti_scan_required',
50
+ ciNotes: 'customfield_ci_notes',
51
+ releaseVersion: 'customfield_release_version',
52
+ },
53
+ grayRelease: {
54
+ grayReleaseVersion: 'customfield_grayrelease_version',
55
+ clusterList: 'customfield_cluster_list',
56
+ grayReleaseNotes: 'customfield_grayrelease_notes',
57
+ buildResult: 'customfield_build_result',
58
+ deployResult: 'customfield_deploy_result',
59
+ },
60
+ },
61
+ issueTypes: {
62
+ names: { LIBRARY: 'Library', GRAY_RELEASE: 'GrayRelease', CI: 'CI', CD: 'CD' },
63
+ ids: { Library: '10001', GrayRelease: '10002', CI: '10003', CD: '10004' },
64
+ },
65
+ environments: {
66
+ codes: { dev: 'env_dev', stg: 'env_stg', uat: 'env_uat', prd: 'env_prd', dr: 'env_dr', 'prd/dr': 'env_prd_dr' },
67
+ deptCodes: { DEMO: 'dept_demo' },
68
+ supported: {
69
+ library: ['dev', 'stg', 'uat', 'prd'],
70
+ ci: ['dev', 'stg'],
71
+ cd: ['dev', 'stg', 'uat', 'prd/dr', 'prd', 'dr'],
72
+ grayRelease: ['dev', 'stg', 'uat'],
73
+ },
74
+ labels: { dev: 'Development', stg: 'Staging', uat: 'UAT', prd: 'Production', dr: 'DR', 'prd/dr': 'Production+DR' },
75
+ },
76
+ fieldOptions: {
77
+ fortifyScan: { scanned: 'fortify_scanned', notScanned: 'fortify_not_scanned' },
78
+ restartOnly: { false: 'restart_false', true: 'restart_true' },
79
+ clusterDeploy: { false: 'cluster_false', true: 'cluster_true' },
80
+ antiScan: { true: 'anti_scan_true', false: 'anti_scan_false' },
81
+ releaseOpType: { main: 'release_main' },
82
+ systemModule: { assembly: 'system_module_assembly' },
83
+ },
84
+ systemCodes: { APP: 'APP' },
85
+ systemToDept: { APP: 'DEMO' },
86
+ systemCodeJiraIds: {
87
+ library: { APP: 'library_app' },
88
+ ci: { APP: 'ci_app' },
89
+ },
90
+ systemModules: { APP: ['web'] },
91
+ moduleToRepo: { web: 'demo-web' },
92
+ systemToCiRepo: { APP: 'demo-assembly' },
93
+ libraryModuleIds: { APP: { web: 'library_app_web' } },
94
+ grayReleaseModuleIds: { web: 'gray_web' },
95
+ servers: { APP: { dev: ['dev-app-01'], stg: ['stg-app-01'], uat: ['uat-app-01'], prd: ['prd-app-01'], dr: ['dr-app-01'], 'prd/dr': ['prd-app-01', 'dr-app-01'] } },
96
+ serverModuleMap: { web: 'web' },
97
+ metaTestNodes: {},
98
+ moduleName: {
99
+ systemAliases: {},
100
+ moduleAliases: { web: 'WEB' },
101
+ },
102
+ repos: {
103
+ maps: {
104
+ 'demo-web': { project: 'DEMO', repoId: '100' },
105
+ 'demo-assembly': { project: 'DEMO', repoId: '101' },
106
+ },
107
+ moduleMap: { web: 'demo-web' },
108
+ labels: { 'demo-web': 'Demo Web' },
109
+ },
110
+ users: {
111
+ aliases: {},
112
+ },
113
+ release: {
114
+ managerSubCalendarId: '',
115
+ dryRunManager: { name: 'Demo User', accountId: 'demo-user' },
116
+ grayReleaseUatApprovers: {
117
+ commentReviewerAlias: 'uat-comment-reviewer',
118
+ finalApproverAlias: 'uat-final-approver',
119
+ },
120
+ },
121
+ jabber: {
122
+ domain: 'example.internal',
123
+ },
124
+ };
125
+
126
+ let cachedConfig;
127
+
128
+ function parseJsonConfig(value, source) {
129
+ try {
130
+ return JSON.parse(value);
131
+ } catch (error) {
132
+ throw new Error(`Invalid ${source}: ${error.message}`);
133
+ }
134
+ }
135
+
136
+ function isPlainObject(value) {
137
+ return value && typeof value === 'object' && !Array.isArray(value);
138
+ }
139
+
140
+ function deepMerge(base, override) {
141
+ if (!isPlainObject(override)) return base;
142
+ const merged = { ...base };
143
+ for (const [key, value] of Object.entries(override)) {
144
+ if (isPlainObject(value) && isPlainObject(base[key])) {
145
+ merged[key] = deepMerge(base[key], value);
146
+ } else {
147
+ merged[key] = value;
148
+ }
149
+ }
150
+ return merged;
151
+ }
152
+
153
+ function expandHomePath(filePath) {
154
+ if (filePath === '~') return homedir();
155
+ if (filePath.startsWith('~/')) return join(homedir(), filePath.slice(2));
156
+ return filePath;
157
+ }
158
+
159
+ function loadExternalConfig() {
160
+ if (process.env.JIRA_DEPLOY_CONFIG_PATH) {
161
+ const configPath = expandHomePath(process.env.JIRA_DEPLOY_CONFIG_PATH);
162
+ return parseJsonConfig(
163
+ readFileSync(configPath, 'utf8'),
164
+ `JIRA_DEPLOY_CONFIG_PATH (${process.env.JIRA_DEPLOY_CONFIG_PATH})`,
165
+ );
166
+ }
167
+ return EMPTY_OBJECT;
168
+ }
169
+
170
+ export function getDeployConfig() {
171
+ if (!cachedConfig) {
172
+ cachedConfig = deepMerge(DEFAULT_DEPLOY_CONFIG, loadExternalConfig());
173
+ }
174
+ return cachedConfig;
175
+ }
176
+
177
+ export function getReleaseProjectKey() {
178
+ return process.env.JIRA_RELEASE_PROJECT_KEY ?? getDeployConfig().jira.releaseProjectKey;
179
+ }
180
+
181
+ export function resetDeployConfigForTests() {
182
+ cachedConfig = undefined;
183
+ }
@@ -1,6 +1,6 @@
1
- /**
2
- * Jira Issue 建立的預設值及模板
3
- */
1
+ import {getDeployConfig} from './config.js';
2
+
3
+ const config = getDeployConfig();
4
4
 
5
5
  /** 簽核欄位預設值 */
6
6
  export const SIGN_VALUES = {
@@ -16,41 +16,7 @@ export const JIRA_DEFAULTS = {
16
16
  };
17
17
 
18
18
  /** 欄位值選項 */
19
- export const FIELD_OPTIONS = {
20
- // Fortify Scan 選項
21
- fortifyScan: {
22
- scanned: '14602',
23
- notScanned: '14603',
24
- },
25
-
26
- // 重啟選項
27
- restartOnly: {
28
- false: '14901',
29
- true: '14902',
30
- },
31
-
32
- // 集群部署選項
33
- clusterDeploy: {
34
- false: '15505',
35
- true: '15506',
36
- },
37
-
38
- // 防毒掃描選項
39
- antiScan: {
40
- true: '14606',
41
- false: '14607',
42
- },
43
-
44
- // 發佈操作類型
45
- releaseOpType: {
46
- main: '15200',
47
- },
48
-
49
- // 系統模組 (CI 用)
50
- systemModule: {
51
- assembly: '14369',
52
- },
53
- };
19
+ export const FIELD_OPTIONS = config.fieldOptions;
54
20
 
55
21
  /** Issue 預設值 */
56
22
  export const ASSIGNEE_DEFAULTS = {
@@ -1,37 +1,15 @@
1
- /**
2
- * 環境設定及其代碼映射
3
- */
1
+ import {getDeployConfig} from './config.js';
2
+
3
+ const config = getDeployConfig().environments;
4
4
 
5
5
  /** 共用環境代碼 */
6
- export const ENV_CODES = {
7
- dev: '14355',
8
- stg: '14356',
9
- uat: '14357',
10
- prd: '14358',
11
- dr: '14359',
12
- 'prd/dr': '14360',
13
- };
6
+ export const ENV_CODES = config.codes;
14
7
 
15
8
  /** 部門代碼 */
16
- export const DEPT_CODES = {
17
- CH014: '14520',
18
- CH015: '14521',
19
- };
9
+ export const DEPT_CODES = config.deptCodes;
20
10
 
21
11
  /** 各 Issue Type 支援的環境列表 */
22
- export const SUPPORTED_ENVS = {
23
- library: ['dev', 'stg', 'uat', 'prd'],
24
- ci: ['dev', 'stg'],
25
- cd: ['dev', 'stg', 'uat', 'prd/dr', 'prd', 'dr'],
26
- grayRelease: ['dev', 'stg', 'uat'],
27
- };
12
+ export const SUPPORTED_ENVS = config.supported;
28
13
 
29
14
  /** 環境對應的簡短標籤 */
30
- export const ENV_LABELS = {
31
- dev: '開發',
32
- stg: '測試',
33
- uat: '驗收',
34
- prd: '正式',
35
- dr: '災備',
36
- 'prd/dr': '正式+災備',
37
- };
15
+ export const ENV_LABELS = config.labels;
@@ -1,66 +1,34 @@
1
- /**
2
- * Jira Custom Field ID 映射表
3
- * 所有 customfield_XXXXX 在這裡集中管理
4
- */
1
+ import {getDeployConfig} from './config.js';
2
+ import {ASSIGNEE_DEFAULTS} from './defaults.js';
5
3
 
6
- import { ASSIGNEE_DEFAULTS } from './defaults.js';
4
+ const config = getDeployConfig();
5
+ const fieldIds = config.fieldIds;
7
6
 
8
7
  // ============ 共用欄位 (所有 Issue Type 都用) ============
9
8
  export const SHARED_FIELD_IDS = {
10
- summary: 'summary',
11
- dueDate: 'duedate',
12
- description: 'description',
9
+ ...fieldIds.shared,
13
10
  assignee: ASSIGNEE_DEFAULTS,
14
- env: 'customfield_13436',
15
- deptCode: 'customfield_13434',
16
- systemCode: 'customfield_13443',
17
- systemModule: 'customfield_13444',
18
- gitBranch: 'customfield_13431',
19
- jenkinsBranch: 'customfield_14702',
20
- extraVars: 'customfield_13437',
21
- clusterDeploy: 'customfield_14704',
22
- expectedStartTime: 'customfield_13446',
23
- deptManagerSign: 'customfield_13903',
24
- authManagerSign: 'customfield_13904',
25
- releaseInfo: 'customfield_13906',
26
11
  };
27
12
 
28
13
  // ============ CD 專用欄位 ============
29
14
  export const CD_FIELD_IDS = {
30
15
  ...SHARED_FIELD_IDS,
31
- systemSubmodule: 'customfield_14500',
32
- serverList: 'customfield_13442',
33
- restartOnly: 'customfield_14102',
34
- linkType: 'issuelinks-linktype',
35
- linkIssuesTextarea: 'issuelinks-issues-textarea',
36
- linkIssuesSelect: 'issuelinks-issues',
37
- cdNotes: 'customfield_14108',
38
- deployVersion: 'customfield_14101', // CID_deploy_version:CD 單的佈署版本號(JSON 格式,如 {"ibk_ap_version":"0.0.11"})
16
+ ...fieldIds.cd,
39
17
  };
40
18
  // ============ Library 專用欄位 ============
41
19
  export const LIBRARY_FIELD_IDS = {
42
20
  ...SHARED_FIELD_IDS,
43
- libModuleParent: 'customfield_13702',
44
- libModuleChild: 'customfield_13702:1',
45
- fortifyScan: 'customfield_13807',
21
+ ...fieldIds.library,
46
22
  };
47
23
 
48
24
  // ============ CI 專用欄位 ============
49
25
  export const CI_FIELD_IDS = {
50
26
  ...SHARED_FIELD_IDS,
51
- releaseOpType: 'customfield_14400',
52
- antiScanRequired: 'customfield_13812',
53
- ciNotes: 'customfield_14107',
54
- releaseVersion: 'customfield_13438', // CID_deploy_version:Jenkins build 後寫入的版本號 JSON(如 {"cwa_ap_version":"0.0.12"})
27
+ ...fieldIds.ci,
55
28
  };
56
29
 
57
30
  // ============ GrayRelease 專用欄位 ============
58
31
  export const GRAY_RELEASE_FIELD_IDS = {
59
32
  ...SHARED_FIELD_IDS,
60
- grayReleaseVersion: 'customfield_14700',
61
- clusterList: 'customfield_14701',
62
- grayReleaseNotes: 'customfield_14511',
63
- // Field names resolved to customfield IDs at runtime.
64
- buildResult: 'customfield_13432',
65
- deployResult: 'customfield_13433',
33
+ ...fieldIds.grayRelease,
66
34
  };
@@ -4,6 +4,8 @@
4
4
  */
5
5
 
6
6
  // Field IDs
7
+ export {getDeployConfig, getReleaseProjectKey} from './config.js';
8
+
7
9
  export {
8
10
  SHARED_FIELD_IDS,
9
11
  CD_FIELD_IDS,
@@ -26,7 +28,7 @@ export {
26
28
  export {ENV_CODES, DEPT_CODES, SUPPORTED_ENVS, ENV_LABELS} from './environments.js';
27
29
 
28
30
  // Servers
29
- export {SERVERS, SERVER_MODULE_MAP} from './server.js';
31
+ export {SERVERS, SERVER_MODULE_MAP, META_TEST_NODES} from './server.js';
30
32
 
31
33
  // Issue Types
32
34
  export {ISSUE_TYPES, ISSUE_TYPE_IDS, JIRA_PROJECT_ID} from './issue-types.js';
@@ -1,23 +1,11 @@
1
- /**
2
- * Jira Issue Type 定義及 ID
3
- */
1
+ import {getDeployConfig} from './config.js';
4
2
 
5
- export const ISSUE_TYPES = {
6
- LIBRARY: 'Library',
7
- CI: 'CI',
8
- CD: 'CD',
9
- GRAY_RELEASE: 'GrayRelease',
10
- };
3
+ const config = getDeployConfig();
11
4
 
12
- export const ISSUE_TYPE_IDS = {
13
- Library: '12501',
14
- GrayRelease: '12601',
15
- CI: '12305',
16
- CD: '12306',
17
- };
5
+ export const ISSUE_TYPES = config.issueTypes.names;
18
6
 
19
- /** Jira Project ID(數字)*/
20
- export const JIRA_PROJECT_ID_NUMERIC = 13305;
7
+ export const ISSUE_TYPE_IDS = config.issueTypes.ids;
21
8
 
22
- /** Jira Project Key(用於 API)*/
23
- export const JIRA_PROJECT_ID = 'CID';
9
+ export const JIRA_PROJECT_ID_NUMERIC = config.jira.projectIdNumeric;
10
+
11
+ export const JIRA_PROJECT_ID = process.env.JIRA_PROJECT_KEY ?? config.jira.projectKey;
@@ -1,39 +1,12 @@
1
- /**
2
- * 模組 ID 映射
3
- */
1
+ import {getDeployConfig} from './config.js';
2
+
3
+ const config = getDeployConfig();
4
4
 
5
5
  /** Library 中的模組 ID */
6
- export const LIBRARY_MODULE_IDS = {
7
- EVT: {
8
- evt005: '15609',
9
- evt007: '15610',
10
- evt009: '15510',
11
- nextjs_web: '15511',
12
- },
13
- IBK: {
14
- ibk: '15601',
15
- a11y: '15602',
16
- landing: '15603',
17
- ssr: '15604',
18
- wealth: '15605',
19
- },
20
- CWA: {cwa: '15514'},
21
- BOF: {web: '15801'},
22
- EIB: {web_cust: '15804', web_agnt: '15805'},
23
- NPM: {utils: '15808'},
24
- };
6
+ export const LIBRARY_MODULE_IDS = config.libraryModuleIds;
25
7
 
26
8
  /** GrayRelease 中的模組 ID */
27
- export const GRAY_RELEASE_MODULE_IDS = {
28
- ibk: '15500',
29
- a11y: '15501',
30
- ssr: '15503',
31
- wealth: '15507',
32
- cwa: '15515',
33
- web: '15809',
34
- web_cust: '15810',
35
- web_agnt: '15811',
36
- };
9
+ export const GRAY_RELEASE_MODULE_IDS = config.grayReleaseModuleIds;
37
10
 
38
11
  /**
39
12
  * 取得模組的 Jira ID
@@ -1,55 +1,7 @@
1
- /**
2
- * Bitbucket repo 相關對應表
3
- */
1
+ import {getDeployConfig} from './config.js';
4
2
 
5
- /** Bitbucket repo metadata(也供 CD release notes 使用) */
6
- export const REPO_MAPS = {
7
- 'tw-bank-web': {project: 'CHANNEL', repoId: '110'},
8
- 'tw-bank-web-ssr': {project: 'CHANNEL', repoId: '787'},
9
- 'tw-bank-web-wealth': {project: 'CHANNEL', repoId: '1403'},
10
- 'tw-bank-web-a11y': {project: 'CHANNEL', repoId: '690'},
11
- 'tw-bank-webapp': {project: 'CHANNEL', repoId: '36'},
12
- 'tw-bank-admin-web': {project: 'CHANNEL', repoId: '1042'},
13
- 'tw-bank-enterprise-cust': {project: 'CHANNEL', repoId: '836'},
14
- 'tw-bank-enterprise-agent': {project: 'CHANNEL', repoId: '850'},
15
- 'tw-bank-evt': {project: 'CHANNEL', repoId: '827'},
16
- 'tw-bank-web-evt': {project: 'CHANNEL', repoId: '937'},
17
- 'tw-bank-npm': {project: 'CHANNEL', repoId: '1274'},
18
- 'ch014.ibk.assembly': {project: 'LBTWGOL', repoId: '1241'},
19
- 'ch014.cwa.assembly': {project: 'LBTWGOL', repoId: '1460'},
20
- 'ch015.bof.assembly': {project: 'LBTWGOL', repoId: '1514'},
21
- 'ch015.eib.assembly': {project: 'LBTWGOL', repoId: '1516'},
22
- 'ch015.evt.assembly': {project: 'LBTWGOL', repoId: '1412'},
23
- };
3
+ const repos = getDeployConfig().repos;
24
4
 
25
- /** moduleChild repo name 對應 */
26
- export const MODULE_MAP = {
27
- ibk: 'tw-bank-web',
28
- ssr: 'tw-bank-web-ssr',
29
- wealth: 'tw-bank-web-wealth',
30
- a11y: 'tw-bank-web-a11y',
31
- cwa: 'tw-bank-webapp',
32
- web: 'tw-bank-admin-web',
33
- web_cust: 'tw-bank-enterprise-cust',
34
- web_agnt: 'tw-bank-enterprise-agent',
35
- evt007: 'tw-bank-evt',
36
- evt009: 'tw-bank-evt',
37
- evt005: 'tw-bank-evt',
38
- nextjs_web: 'tw-bank-web-evt',
39
- utils: 'tw-bank-npm',
40
- };
41
-
42
- /** repo name → 顯示標籤 */
43
- export const REPO_LABEL_MAP = {
44
- 'tw-bank-web': 'IBK',
45
- 'tw-bank-web-ssr': 'SSR',
46
- 'tw-bank-web-wealth': 'Wealth',
47
- 'tw-bank-web-a11y': 'A11y',
48
- 'tw-bank-webapp': 'CWA',
49
- 'tw-bank-admin-web': 'BOF Web',
50
- 'tw-bank-enterprise-cust': 'EIB Cust',
51
- 'tw-bank-enterprise-agent': 'EIB Agent',
52
- 'tw-bank-evt': 'EVT',
53
- 'tw-bank-web-evt': 'EVT Next',
54
- 'tw-bank-npm': 'NPM',
55
- };
5
+ export const REPO_MAPS = repos.maps;
6
+ export const MODULE_MAP = repos.moduleMap;
7
+ export const REPO_LABEL_MAP = repos.labels;
@@ -1,100 +1,7 @@
1
- /**
2
- * Server 配置及部署列表
3
- */
1
+ import {getDeployConfig} from './config.js';
4
2
 
5
- export const SERVERS = {
6
- IBK: {
7
- dev: ['tvdev-ibk-web01'],
8
- stg: ['tvstg-ibk-web01', 'tvstg-ibk-web02'],
9
- uat: ['tvuat-ibk-web01', 'tvuat-ibk-web02'],
10
- prd: [
11
- 'tvprd-ibk-web01',
12
- 'tvprd-ibk-web02',
13
- 'tvprd-ibk-web03',
14
- 'tvprd-ibk-web04',
15
- 'tvprd-ibk-web05',
16
- ],
17
- dr: ['lvprd-ibk-web01', 'lvprd-ibk-web02'],
18
- 'prd/dr': [
19
- 'tvprd-ibk-web01',
20
- 'tvprd-ibk-web02',
21
- 'tvprd-ibk-web03',
22
- 'tvprd-ibk-web04',
23
- 'tvprd-ibk-web05',
24
- 'lvprd-ibk-web01',
25
- 'lvprd-ibk-web02',
26
- ],
27
- },
3
+ const config = getDeployConfig();
28
4
 
29
- CWA: {
30
- dev: ['tvdev-cwa-web01'],
31
- stg: ['tvstg-cwa-web01', 'tvstg-cwa-web02'],
32
- uat: ['tvuat-cwa-web01', 'tvuat-cwa-web02'],
33
- prd: [
34
- 'tvprd-cwa-web01',
35
- 'tvprd-cwa-web02',
36
- 'tvprd-cwa-web03',
37
- 'tvprd-cwa-web04',
38
- 'tvprd-cwa-web05',
39
- ],
40
- dr: ['lvprd-cwa-web01', 'lvprd-cwa-web02'],
41
- 'prd/dr': [
42
- 'tvprd-cwa-web01',
43
- 'tvprd-cwa-web02',
44
- 'tvprd-cwa-web03',
45
- 'tvprd-cwa-web04',
46
- 'tvprd-cwa-web05',
47
- 'lvprd-cwa-web01',
48
- 'lvprd-cwa-web02',
49
- ],
50
- },
51
-
52
- BOF: {
53
- dev: ['tvdev-bof-was01'],
54
- stg: ['tvstg-bof-was01'],
55
- uat: ['tvuat-bof-was01'],
56
- prd: ['tvprd-bof-was01'],
57
- },
58
-
59
- EIB: {
60
- dev: {was: ['tvdev-eib-was01'], web: ['tvdev-eib-web01']},
61
- stg: {was: ['tvstg-eib-was01'], web: ['tvstg-eib-web01']},
62
- uat: {
63
- was: ['tvuat-eib-was01', 'tvuat-eib-was02'],
64
- web: ['tvuat-eib-web01', 'tvuat-eib-web02'],
65
- },
66
- prd: {
67
- was: ['tvprd-eib-was01', 'tvprd-eib-was02'],
68
- web: ['tvprd-eib-web01', 'tvprd-eib-web02'],
69
- },
70
- dr: {
71
- was: ['lvprd-eib-was01', 'lvprd-eib-was02'],
72
- web: ['lvprd-eib-web01', 'lvprd-eib-web02'],
73
- },
74
- 'prd/dr': {
75
- was: ['tvprd-eib-was01', 'tvprd-eib-was02', 'lvprd-eib-was01', 'lvprd-eib-was02'],
76
- web: ['tvprd-eib-web01', 'tvprd-eib-web02', 'lvprd-eib-web01', 'lvprd-eib-web02'],
77
- },
78
- },
79
-
80
- EVT: {
81
- stg: {web: ['tvstg-evt-web01'], was: ['tvstg-evt-was01']},
82
- uat: {
83
- web: ['tvuat-evt-web01', 'tvuat-evt-web02'],
84
- was: ['tvuat-evt-was01', 'tvuat-evt-was02'],
85
- },
86
- prd: {
87
- web: ['tvprd-evt-web01', 'tvprd-evt-web02'],
88
- was: ['tvprd-evt-was01', 'tvprd-evt-was02'],
89
- },
90
- },
91
- };
92
-
93
- export const SERVER_MODULE_MAP = {
94
- web_cust: 'web',
95
- web_agnt: 'was',
96
- evt005: 'was',
97
- evt007: 'was',
98
- evt009: 'web',
99
- nextjs_web: 'was',
100
- };
5
+ export const SERVERS = config.servers;
6
+ export const SERVER_MODULE_MAP = config.serverModuleMap;
7
+ export const META_TEST_NODES = config.metaTestNodes;