@docupace/pipeline 1.0.77 → 1.0.78
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/.prettierrc.cjs +12 -12
- package/README.md +135 -135
- package/bin/azuread_update_callbacks_for_app.sh +58 -58
- package/bin/next-changeset-validate.sh +8 -8
- package/bitbucket-pipelines.yml +59 -59
- package/eslint.config.js +49 -49
- package/jest.config.js +15 -15
- package/next/changeset.sh +75 -75
- package/next/copy.sh +34 -34
- package/next/deploy.sh +40 -40
- package/next/execute.sh +123 -123
- package/next/sonar.sh +23 -23
- package/package.json +1 -1
- package/src/auth0/alias.js +79 -79
- package/src/auth0/alias.test.js +172 -172
- package/src/auth0/cli.js +82 -82
- package/src/auth0/configure.js +902 -902
- package/src/auth0/configure.test.js +167 -167
- package/src/auth0/export.js +48 -48
- package/src/auth0/export.test.js +103 -103
- package/src/auth0/metadata.js +141 -141
- package/src/auth0/metadata.test.js +186 -186
- package/src/auth0/vault.js +60 -60
- package/src/auth0/vault.test.js +134 -134
- package/src/changeset/changelog-wiki.js +328 -328
- package/src/changeset/changeset-config.js +34 -34
- package/src/changeset/cli.js +237 -237
- package/src/changeset/create.js +215 -215
- package/src/changeset/package-util.js +87 -87
- package/src/changeset/util.js +43 -43
- package/src/changeset/validate.js +91 -91
- package/src/changeset/version.js +102 -102
- package/src/jenkins/setParams.groovy +58 -58
- package/src/lib/merge-driver.js +204 -204
- package/src/merge/cli-merge-all.js +507 -507
- package/src/merge/cli-merge.js +492 -492
- package/src/merge/cli-resolve.js +399 -399
- package/src/merge/cli.js +38 -38
- package/src/merge/merge-changelog.js +87 -87
- package/src/merge/merge-package.js +106 -106
- package/src/merge/merge-types.js +82 -82
- package/src/merge/pr.js +231 -231
- package/src/micro/deploy-microservice.js +153 -0
- package/src/micro/{ms-publish.js → publish-ms.js} +8 -6
- package/src/next/alias.js +53 -53
- package/src/next/apache.js +81 -81
- package/src/next/cli.js +10 -1
- package/src/next/config.js +137 -137
- package/src/next/connect.js +226 -226
- package/src/next/copy.js +61 -61
- package/src/next/deploy.js +633 -633
- package/src/next/git-to-semver.js +79 -79
- package/src/next/haproxy.js +76 -76
- package/src/next/jenkins.js +123 -123
- package/src/next/jira.js +84 -84
- package/src/next/logger.js +17 -17
- package/src/next/pipline.js +114 -114
- package/src/next/publish.js +71 -71
- package/src/next/pull.js +7 -7
- package/src/next/sonar.js +23 -23
- package/src/next/test.js +5 -5
- package/src/next/util.js +95 -93
- package/src/next/vault.js +45 -45
- package/terraform/apply.sh +37 -37
- package/terraform/init.sh +72 -72
- package/terraform/plan.sh +76 -76
- package/terraform/validate.sh +17 -17
- package/src/micro/cli.js +0 -71
- package/src/micro/ms-deploy.js +0 -271
package/src/auth0/configure.js
CHANGED
|
@@ -1,902 +1,902 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import axios from 'axios';
|
|
4
|
-
import * as crypto from 'crypto';
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
cloneEnvRepository,
|
|
8
|
-
cloneRepository,
|
|
9
|
-
pushDeployConfig,
|
|
10
|
-
readDeployConfig,
|
|
11
|
-
} from '../next/deploy.js';
|
|
12
|
-
|
|
13
|
-
import { getVaultSecrets, updateVaultSecrets } from './vault.js';
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
coreSiteEnvMap,
|
|
17
|
-
environmentConfig,
|
|
18
|
-
getVaultSecretsConfigs,
|
|
19
|
-
} from '../next/config.js';
|
|
20
|
-
|
|
21
|
-
async function ensureDirectoryExists(dirPath) {
|
|
22
|
-
try {
|
|
23
|
-
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
24
|
-
console.log(`Directory created or already exists: ${dirPath}`);
|
|
25
|
-
} catch (err) {
|
|
26
|
-
console.error(`Failed to create directory: ${err.message}`);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export async function getAuth0AuthToken(auth0Domain, clientId, clientSecret) {
|
|
31
|
-
try {
|
|
32
|
-
const response = await axios.post(
|
|
33
|
-
`https://${auth0Domain}/oauth/token`,
|
|
34
|
-
{
|
|
35
|
-
client_id: clientId,
|
|
36
|
-
client_secret: clientSecret,
|
|
37
|
-
audience: `https://${auth0Domain}/api/v2/`,
|
|
38
|
-
grant_type: 'client_credentials',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
headers: {
|
|
42
|
-
'Content-Type': 'application/json',
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
const authToken = response.data.access_token;
|
|
48
|
-
// console.log("Auth0 Auth Token:", authToken);
|
|
49
|
-
return authToken;
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.error(
|
|
52
|
-
'Error fetching Auth0 token:',
|
|
53
|
-
error.response ? error.response.data : error.message,
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async function configureUI(
|
|
59
|
-
siteHost,
|
|
60
|
-
coreURL,
|
|
61
|
-
connectURL,
|
|
62
|
-
docupaceHost,
|
|
63
|
-
site,
|
|
64
|
-
env,
|
|
65
|
-
auth0Domain,
|
|
66
|
-
auth0ClientId,
|
|
67
|
-
auth0ClientSecret,
|
|
68
|
-
auth0Token,
|
|
69
|
-
vaultSiteSecretsPath,
|
|
70
|
-
imageTag,
|
|
71
|
-
revision,
|
|
72
|
-
repoPath,
|
|
73
|
-
useS3,
|
|
74
|
-
) {
|
|
75
|
-
console.log(
|
|
76
|
-
`Configuring UI for site: ${site} Host: ${siteHost} in env: ${env}`,
|
|
77
|
-
);
|
|
78
|
-
siteHost = siteHost.replace('https://', '');
|
|
79
|
-
coreURL = coreURL.replace('https://', '');
|
|
80
|
-
connectURL = connectURL.replace('https://', '');
|
|
81
|
-
|
|
82
|
-
try {
|
|
83
|
-
const auth0Response = await axios.get(
|
|
84
|
-
`https://${auth0Domain}/api/v2/clients`,
|
|
85
|
-
{
|
|
86
|
-
headers: { authorization: `Bearer ${auth0Token}` },
|
|
87
|
-
},
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
const uiClient = auth0Response.data.find(
|
|
91
|
-
(client) => client.name === 'docupace-ui-main',
|
|
92
|
-
);
|
|
93
|
-
const uiAuth0ClientId = uiClient.client_id;
|
|
94
|
-
const uiAuth0ClientSecret = uiClient.client_secret;
|
|
95
|
-
|
|
96
|
-
// Generate Auth0 Secret
|
|
97
|
-
const uiAuth0Secret = crypto
|
|
98
|
-
.randomBytes(48)
|
|
99
|
-
.toString('base64')
|
|
100
|
-
.replace(/[^a-zA-Z0-9]/g, '');
|
|
101
|
-
|
|
102
|
-
// Prepare data payload
|
|
103
|
-
console.log('Preparing Vault UI data payload...');
|
|
104
|
-
const uiSecretData = JSON.stringify({
|
|
105
|
-
data: {
|
|
106
|
-
AUTH0_CLIENT_ID: uiAuth0ClientId,
|
|
107
|
-
AUTH0_CLIENT_SECRET: uiAuth0ClientSecret,
|
|
108
|
-
AUTH0_SECRET: uiAuth0Secret,
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
await updateVaultSecrets(vaultSiteSecretsPath, uiSecretData);
|
|
113
|
-
|
|
114
|
-
let siteAWSSecrets = null;
|
|
115
|
-
|
|
116
|
-
if (useS3 === true || useS3 === 'true') {
|
|
117
|
-
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
118
|
-
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
119
|
-
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const awsS3Vars =
|
|
123
|
-
useS3 === true || useS3 === 'true'
|
|
124
|
-
? `
|
|
125
|
-
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
126
|
-
AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
127
|
-
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
128
|
-
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
|
|
129
|
-
: '';
|
|
130
|
-
|
|
131
|
-
// Prepare ui.app.yaml
|
|
132
|
-
const uiAppYaml = `
|
|
133
|
-
repo: docupace-ui-main
|
|
134
|
-
revision: ${revision}
|
|
135
|
-
`.trim();
|
|
136
|
-
|
|
137
|
-
// Prepare ui.values.yaml
|
|
138
|
-
const uiValuesYaml = `
|
|
139
|
-
uiMain:
|
|
140
|
-
auth0BaseUrl: https://${siteHost}
|
|
141
|
-
auth0IssuerBaseUrl: https://${auth0Domain}
|
|
142
|
-
auth0ClientId: vault:secret/data/${site}/ui/config#AUTH0_CLIENT_ID
|
|
143
|
-
graphqlClientUrl: https://${siteHost}/api/graphql
|
|
144
|
-
graphqlServerUrl: https://${siteHost}/api/graphql
|
|
145
|
-
connectUrl: https://${connectURL}
|
|
146
|
-
coreUrl: https://${coreURL}
|
|
147
|
-
env:
|
|
148
|
-
AUTH0_CLIENT_SECRET: vault:secret/data/${site}/ui/config#AUTH0_CLIENT_SECRET
|
|
149
|
-
AUTH0_SECRET: vault:secret/data/${site}/ui/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
150
|
-
image:
|
|
151
|
-
repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/enterprise-ui-app
|
|
152
|
-
tag: ${imageTag}
|
|
153
|
-
${
|
|
154
|
-
useS3 === true || useS3 === 'true'
|
|
155
|
-
? `
|
|
156
|
-
serviceAccount:
|
|
157
|
-
create: true
|
|
158
|
-
annotations:
|
|
159
|
-
"helm.sh/hook": pre-install
|
|
160
|
-
"helm.sh/hook-weight": "-10"
|
|
161
|
-
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`
|
|
162
|
-
: ''
|
|
163
|
-
}
|
|
164
|
-
imagePullSecrets:
|
|
165
|
-
- name: jf-artifactory
|
|
166
|
-
ingress:
|
|
167
|
-
enabled: true
|
|
168
|
-
className: nginx
|
|
169
|
-
annotations:
|
|
170
|
-
external-dns.alpha.kubernetes.io/hostname: ${siteHost}
|
|
171
|
-
external-dns.alpha.kubernetes.io/zone: public
|
|
172
|
-
cert-manager.io/cluster-issuer: letsencrypt
|
|
173
|
-
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
|
|
174
|
-
hosts:
|
|
175
|
-
- host: ${siteHost}
|
|
176
|
-
paths:
|
|
177
|
-
- path: /
|
|
178
|
-
pathType: Prefix
|
|
179
|
-
tls:
|
|
180
|
-
- hosts:
|
|
181
|
-
- ${siteHost}
|
|
182
|
-
secretName: dp-next-ui-cert
|
|
183
|
-
externalConnectIngress:
|
|
184
|
-
enabled: true
|
|
185
|
-
className: nginx
|
|
186
|
-
annotations:
|
|
187
|
-
cert-manager.io/cluster-issuer: letsencrypt
|
|
188
|
-
external-dns.alpha.kubernetes.io/hostname: ${siteHost}
|
|
189
|
-
external-dns.alpha.kubernetes.io/zone: public
|
|
190
|
-
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
|
|
191
|
-
nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
192
|
-
proxy_set_header Host ${siteHost};
|
|
193
|
-
nginx.ingress.kubernetes.io/proxy-buffer-size: 8k
|
|
194
|
-
hosts:
|
|
195
|
-
- host: ${siteHost}
|
|
196
|
-
paths:
|
|
197
|
-
- path: /core
|
|
198
|
-
- path: /core_b2b
|
|
199
|
-
- path: /core_reports
|
|
200
|
-
- path: /corerealm
|
|
201
|
-
- path: /connect
|
|
202
|
-
- path: /webstart
|
|
203
|
-
- path: /core_ws
|
|
204
|
-
- path: /core_docupload
|
|
205
|
-
- path: /core_ariws
|
|
206
|
-
- path: /core_restws
|
|
207
|
-
- path: /core_webdav
|
|
208
|
-
tls:
|
|
209
|
-
- hosts:
|
|
210
|
-
- ${siteHost}
|
|
211
|
-
secretName: dp-next-ui-cert
|
|
212
|
-
externalConnectService:
|
|
213
|
-
enabled: true
|
|
214
|
-
name: external-connect
|
|
215
|
-
domain: ${docupaceHost}
|
|
216
|
-
`.trim();
|
|
217
|
-
|
|
218
|
-
console.log('Writing configuration files...');
|
|
219
|
-
await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
|
|
220
|
-
|
|
221
|
-
await fs.writeFile(
|
|
222
|
-
`${repoPath}/dp/${site}/ui.app.yaml`,
|
|
223
|
-
uiAppYaml,
|
|
224
|
-
(err) => {
|
|
225
|
-
if (err) {
|
|
226
|
-
console.error('Failed to write the file:', err);
|
|
227
|
-
} else {
|
|
228
|
-
console.log(
|
|
229
|
-
`File ${repoPath}/dp/${site}/ui.app.yaml written successfully.`,
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
},
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
await fs.writeFile(
|
|
236
|
-
`${repoPath}/dp/${site}/ui.values.yaml`,
|
|
237
|
-
uiValuesYaml,
|
|
238
|
-
(err) => {
|
|
239
|
-
if (err) {
|
|
240
|
-
console.error('Failed to write the file:', err);
|
|
241
|
-
} else {
|
|
242
|
-
console.log(
|
|
243
|
-
`File ${repoPath}/dp/${site}/ui.values.yaml written successfully.`,
|
|
244
|
-
);
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
);
|
|
248
|
-
console.log('The UI part is done!');
|
|
249
|
-
} catch (error) {
|
|
250
|
-
console.error('Error configuring UI:', error);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
async function configureCCUI(
|
|
255
|
-
siteHost,
|
|
256
|
-
coreURL,
|
|
257
|
-
connectURL,
|
|
258
|
-
docupaceHost,
|
|
259
|
-
site,
|
|
260
|
-
env,
|
|
261
|
-
auth0Domain,
|
|
262
|
-
auth0ClientId,
|
|
263
|
-
auth0ClientSecret,
|
|
264
|
-
auth0Token,
|
|
265
|
-
vaultSiteSecretsPath,
|
|
266
|
-
imageTag,
|
|
267
|
-
revision,
|
|
268
|
-
repoPath,
|
|
269
|
-
useS3,
|
|
270
|
-
ccUrl,
|
|
271
|
-
) {
|
|
272
|
-
console.log(
|
|
273
|
-
`Configuring CC UI for site: ${site} Host: ${siteHost} in env: ${env}`,
|
|
274
|
-
);
|
|
275
|
-
siteHost = siteHost.replace('https://', '');
|
|
276
|
-
coreURL = coreURL.replace('https://', '');
|
|
277
|
-
connectURL = connectURL.replace('https://', '');
|
|
278
|
-
ccUrl = ccUrl.replace('https://', '');
|
|
279
|
-
|
|
280
|
-
try {
|
|
281
|
-
const auth0Response = await axios.get(
|
|
282
|
-
`https://${auth0Domain}/api/v2/clients`,
|
|
283
|
-
{
|
|
284
|
-
headers: { authorization: `Bearer ${auth0Token}` },
|
|
285
|
-
},
|
|
286
|
-
);
|
|
287
|
-
|
|
288
|
-
const uiClient = auth0Response.data.find(
|
|
289
|
-
(client) => client.name === 'docupace-ui-cc',
|
|
290
|
-
);
|
|
291
|
-
const uiAuth0ClientId = uiClient.client_id;
|
|
292
|
-
const uiAuth0ClientSecret = uiClient.client_secret;
|
|
293
|
-
|
|
294
|
-
// Generate Auth0 Secret
|
|
295
|
-
const uiAuth0Secret = crypto
|
|
296
|
-
.randomBytes(48)
|
|
297
|
-
.toString('base64')
|
|
298
|
-
.replace(/[^a-zA-Z0-9]/g, '');
|
|
299
|
-
|
|
300
|
-
// Prepare data payload
|
|
301
|
-
console.log('Preparing Vault CC UI data payload...');
|
|
302
|
-
const ccUISecretData = JSON.stringify({
|
|
303
|
-
data: {
|
|
304
|
-
AUTH0_CLIENT_ID: uiAuth0ClientId,
|
|
305
|
-
AUTH0_CLIENT_SECRET: uiAuth0ClientSecret,
|
|
306
|
-
AUTH0_SECRET: uiAuth0Secret,
|
|
307
|
-
},
|
|
308
|
-
});
|
|
309
|
-
console.log('Updating Vault Site Secret =>', vaultSiteSecretsPath);
|
|
310
|
-
await updateVaultSecrets(vaultSiteSecretsPath, ccUISecretData);
|
|
311
|
-
|
|
312
|
-
let siteAWSSecrets = null;
|
|
313
|
-
|
|
314
|
-
if (useS3 === true || useS3 === 'true') {
|
|
315
|
-
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
316
|
-
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
317
|
-
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
const awsS3Vars =
|
|
321
|
-
useS3 === true || useS3 === 'true'
|
|
322
|
-
? `
|
|
323
|
-
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
324
|
-
AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
325
|
-
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
326
|
-
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
|
|
327
|
-
: '';
|
|
328
|
-
|
|
329
|
-
const uiCCAppYaml = `
|
|
330
|
-
repo: docupace-ui-main
|
|
331
|
-
revision: ${revision}
|
|
332
|
-
`.trim();
|
|
333
|
-
|
|
334
|
-
const uiCCValuesYaml = `
|
|
335
|
-
uiMain:
|
|
336
|
-
auth0BaseUrl: https://${ccUrl}
|
|
337
|
-
auth0IssuerBaseUrl: https://${auth0Domain}
|
|
338
|
-
auth0ClientId: vault:secret/data/${site}/ui-cc/config#AUTH0_CLIENT_ID
|
|
339
|
-
graphqlClientUrl: https://${siteHost}/api/graphql
|
|
340
|
-
graphqlServerUrl: https://${siteHost}/api/graphql
|
|
341
|
-
connectUrl: https://${connectURL}
|
|
342
|
-
coreUrl: https://${coreURL}
|
|
343
|
-
env:
|
|
344
|
-
AUTH0_AUDIENCE: core-api-access
|
|
345
|
-
AUTH0_CLIENT_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_CLIENT_SECRET
|
|
346
|
-
AUTH0_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
347
|
-
image:
|
|
348
|
-
repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/cc-ui-app
|
|
349
|
-
tag: ${imageTag}
|
|
350
|
-
imagePullSecrets:
|
|
351
|
-
- name: jf-artifactory
|
|
352
|
-
ingress:
|
|
353
|
-
enabled: true
|
|
354
|
-
className: nginx
|
|
355
|
-
annotations:
|
|
356
|
-
external-dns.alpha.kubernetes.io/hostname: ${ccUrl}
|
|
357
|
-
external-dns.alpha.kubernetes.io/zone: public
|
|
358
|
-
cert-manager.io/cluster-issuer: letsencrypt
|
|
359
|
-
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
|
|
360
|
-
hosts:
|
|
361
|
-
- host: ${ccUrl}
|
|
362
|
-
paths:
|
|
363
|
-
- path: /
|
|
364
|
-
pathType: Prefix
|
|
365
|
-
tls:
|
|
366
|
-
- hosts:
|
|
367
|
-
- ${ccUrl}
|
|
368
|
-
secretName: dp-cc-ui-cert
|
|
369
|
-
${
|
|
370
|
-
useS3 === true || useS3 === 'true'
|
|
371
|
-
? `
|
|
372
|
-
serviceAccount:
|
|
373
|
-
create: true
|
|
374
|
-
annotations:
|
|
375
|
-
"helm.sh/hook": pre-install
|
|
376
|
-
"helm.sh/hook-weight": "-10"
|
|
377
|
-
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`
|
|
378
|
-
: ''
|
|
379
|
-
}
|
|
380
|
-
`.trim();
|
|
381
|
-
|
|
382
|
-
console.log('Writing configuration files...');
|
|
383
|
-
await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
|
|
384
|
-
|
|
385
|
-
await fs.writeFile(
|
|
386
|
-
`${repoPath}/dp/${site}/cc.app.yaml`,
|
|
387
|
-
uiCCAppYaml,
|
|
388
|
-
(err) => {
|
|
389
|
-
if (err) {
|
|
390
|
-
console.error(
|
|
391
|
-
`Failed to write ${repoPath}/dp/${site}/cc.app.yaml file:`,
|
|
392
|
-
err,
|
|
393
|
-
);
|
|
394
|
-
} else {
|
|
395
|
-
console.log(
|
|
396
|
-
`File ${repoPath}/dp/${site}/cc.app.yaml written successfully.`,
|
|
397
|
-
);
|
|
398
|
-
}
|
|
399
|
-
},
|
|
400
|
-
);
|
|
401
|
-
|
|
402
|
-
await fs.writeFile(
|
|
403
|
-
`${repoPath}/dp/${site}/cc.values.yaml`,
|
|
404
|
-
uiCCValuesYaml,
|
|
405
|
-
(err) => {
|
|
406
|
-
if (err) {
|
|
407
|
-
console.error(
|
|
408
|
-
`Failed to write ${repoPath}/dp/${site}/cc.values.yaml file:`,
|
|
409
|
-
err,
|
|
410
|
-
);
|
|
411
|
-
} else {
|
|
412
|
-
console.log(
|
|
413
|
-
`File ${repoPath}/dp/${site}/cc.values.yaml written successfully.`,
|
|
414
|
-
);
|
|
415
|
-
}
|
|
416
|
-
},
|
|
417
|
-
);
|
|
418
|
-
console.log('CC-UI configuration is done!');
|
|
419
|
-
} catch (error) {
|
|
420
|
-
console.error('Error configuring CC-UI:', error);
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
export async function cleanAndWritePropertiesFile(configPath, content) {
|
|
425
|
-
try {
|
|
426
|
-
const cleanedContent = content
|
|
427
|
-
.split('\n')
|
|
428
|
-
.map((line) => line.trim())
|
|
429
|
-
.filter((line) => line !== '')
|
|
430
|
-
.join('\n');
|
|
431
|
-
|
|
432
|
-
await fs.writeFile(configPath, cleanedContent, 'utf8');
|
|
433
|
-
console.log(`Cleaned and written file to: ${configPath}`);
|
|
434
|
-
} catch (error) {
|
|
435
|
-
console.error(
|
|
436
|
-
`Error writing properties file to ${configPath}:`,
|
|
437
|
-
error.message,
|
|
438
|
-
);
|
|
439
|
-
process.exit(1);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
export async function updateCoreSiteConfig(site, env, useS3Ui, useS3Gq) {
|
|
444
|
-
try {
|
|
445
|
-
const coreSiteEnv = coreSiteEnvMap[env];
|
|
446
|
-
|
|
447
|
-
const coreSiteConfigRepoPath = await cloneRepository(
|
|
448
|
-
`${coreSiteEnv}-site-settings`,
|
|
449
|
-
);
|
|
450
|
-
|
|
451
|
-
const configPath = path.join(
|
|
452
|
-
`${coreSiteEnv}-site-settings`,
|
|
453
|
-
site.toUpperCase(),
|
|
454
|
-
'docucore-nextUI.properties',
|
|
455
|
-
);
|
|
456
|
-
|
|
457
|
-
let siteAWSSecrets = null;
|
|
458
|
-
|
|
459
|
-
if (
|
|
460
|
-
useS3Ui === true ||
|
|
461
|
-
useS3Ui === 'true' ||
|
|
462
|
-
useS3Gq === true ||
|
|
463
|
-
useS3Gq === 'true'
|
|
464
|
-
) {
|
|
465
|
-
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
466
|
-
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
467
|
-
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
const coreSiteConfig = `
|
|
471
|
-
${
|
|
472
|
-
siteAWSSecrets
|
|
473
|
-
? `
|
|
474
|
-
com.docupace.imports.files.FilesImportConfig.aws.accessKeyId=${siteAWSSecrets.AWS_ACCESS_KEY_ID}
|
|
475
|
-
com.docupace.imports.files.FilesImportConfig.aws.accessKeySecret=${siteAWSSecrets.AWS_SECRET_ACCESS_KEY}
|
|
476
|
-
com.docupace.imports.files.FilesImportConfig.aws.region=${siteAWSSecrets.AWS_REGION}`.trim()
|
|
477
|
-
: ''
|
|
478
|
-
}
|
|
479
|
-
`;
|
|
480
|
-
|
|
481
|
-
await fs.ensureDir(path.join(coreSiteConfigRepoPath, site.toUpperCase()));
|
|
482
|
-
await cleanAndWritePropertiesFile(configPath, coreSiteConfig);
|
|
483
|
-
await pushDeployConfig(
|
|
484
|
-
coreSiteConfigRepoPath,
|
|
485
|
-
`Core config: docucore-nextUI.properties for site: (${site.toUpperCase()}) update in env: (${env})`,
|
|
486
|
-
);
|
|
487
|
-
} catch (error) {
|
|
488
|
-
console.error('Error:', error.message);
|
|
489
|
-
process.exit(1);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
async function configureGraphQLServer(
|
|
494
|
-
siteHost,
|
|
495
|
-
coreURL,
|
|
496
|
-
docupaceHost,
|
|
497
|
-
site,
|
|
498
|
-
env,
|
|
499
|
-
auth0Domain,
|
|
500
|
-
auth0ClientId,
|
|
501
|
-
auth0ClientSecret,
|
|
502
|
-
auth0Token,
|
|
503
|
-
vaultSiteSecretsPath,
|
|
504
|
-
imageTag,
|
|
505
|
-
revision,
|
|
506
|
-
standardConfigRemoteBranch,
|
|
507
|
-
repoPath,
|
|
508
|
-
commonSecrets,
|
|
509
|
-
useS3,
|
|
510
|
-
) {
|
|
511
|
-
siteHost = siteHost.replace('https://', '');
|
|
512
|
-
coreURL = coreURL.replace('https://', '');
|
|
513
|
-
console.log(
|
|
514
|
-
`Configuring GraphQL Server for site: ${site} Host: ${siteHost} in env: ${env}`,
|
|
515
|
-
);
|
|
516
|
-
|
|
517
|
-
try {
|
|
518
|
-
const auth0Response = await axios.get(
|
|
519
|
-
`https://${auth0Domain}/api/v2/clients`,
|
|
520
|
-
{
|
|
521
|
-
headers: { authorization: `Bearer ${auth0Token}` },
|
|
522
|
-
},
|
|
523
|
-
);
|
|
524
|
-
|
|
525
|
-
const graphQLServerClient = auth0Response.data.find(
|
|
526
|
-
(client) => client.name === 'docupace-graphql',
|
|
527
|
-
);
|
|
528
|
-
const graphQLServerClientCredentials = auth0Response.data.find(
|
|
529
|
-
(client) => client.name === 'docupace-graphql-client-credentials',
|
|
530
|
-
);
|
|
531
|
-
|
|
532
|
-
const graphQLServerAuth0ClientId = graphQLServerClient.client_id;
|
|
533
|
-
const graphQLServerAuth0ClientSecret = graphQLServerClient.client_secret;
|
|
534
|
-
|
|
535
|
-
const graphQLServerCCAuth0ClientId =
|
|
536
|
-
graphQLServerClientCredentials.client_id;
|
|
537
|
-
const graphQLServerCCAuth0ClientSecret =
|
|
538
|
-
graphQLServerClientCredentials.client_secret;
|
|
539
|
-
|
|
540
|
-
// Prepare data payload
|
|
541
|
-
console.log('Preparing Vault GraphQL Server data payload...');
|
|
542
|
-
const graphQLServerSecretData = JSON.stringify({
|
|
543
|
-
data: {
|
|
544
|
-
AUTH0_CLIENT_ID: graphQLServerAuth0ClientId,
|
|
545
|
-
AUTH0_CLIENT_SECRET: graphQLServerAuth0ClientSecret,
|
|
546
|
-
AUTH0_CC_CLIENT_ID: graphQLServerCCAuth0ClientId,
|
|
547
|
-
AUTH0_CC_CLIENT_SECRET: graphQLServerCCAuth0ClientSecret,
|
|
548
|
-
CORE_PASSWORD: commonSecrets.CORE_PASSWORD,
|
|
549
|
-
REMOTE_CONFIG_PATH: commonSecrets.REMOTE_CONFIG_PATH,
|
|
550
|
-
STANDARD_CONFIG_REMOTE_PATH: commonSecrets.STANDARD_CONFIG_REMOTE_PATH,
|
|
551
|
-
},
|
|
552
|
-
});
|
|
553
|
-
|
|
554
|
-
await updateVaultSecrets(vaultSiteSecretsPath, graphQLServerSecretData);
|
|
555
|
-
|
|
556
|
-
let siteAWSSecrets = null;
|
|
557
|
-
|
|
558
|
-
if (useS3 === true || useS3 === 'true') {
|
|
559
|
-
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
560
|
-
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
561
|
-
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
const awsS3Vars =
|
|
565
|
-
useS3 === true || useS3 === 'true'
|
|
566
|
-
? `
|
|
567
|
-
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
568
|
-
AWS_S3_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
569
|
-
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
570
|
-
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`.trim()
|
|
571
|
-
: '';
|
|
572
|
-
// Prepare graphql-server.app.yaml
|
|
573
|
-
const graphQLServerAppYaml = `
|
|
574
|
-
repo: docupace-graphql-server
|
|
575
|
-
revision: ${revision}
|
|
576
|
-
`.trim();
|
|
577
|
-
|
|
578
|
-
// Prepare graphql-server.values.yaml
|
|
579
|
-
const graphQLServerValuesYaml = `
|
|
580
|
-
graphqlServer:
|
|
581
|
-
auth0Domain: https://${auth0Domain}
|
|
582
|
-
auth0ClientId: vault:secret/data/${site}/graphql-server/config#AUTH0_CLIENT_ID
|
|
583
|
-
auth0Audience: ${commonSecrets.CORE_API_IDENTIFIER}
|
|
584
|
-
baseUrl: https://${siteHost}/api/graphql
|
|
585
|
-
coreUrl: https://${coreURL}
|
|
586
|
-
integrationHubUrl: "https://${commonSecrets.INTEGRATION_HUB_URL}"
|
|
587
|
-
standardConfigRemoteBranch: ${standardConfigRemoteBranch}
|
|
588
|
-
apiLevel: "2"
|
|
589
|
-
env:
|
|
590
|
-
AUTH0_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CLIENT_SECRET
|
|
591
|
-
STANDARD_CONFIG_REMOTE_PATH: vault:secret/data/common/config#STANDARD_CONFIG_REMOTE_PATH
|
|
592
|
-
SITE_CONFIG_REMOTE_PATH: vault:secret/data/${site}/common/config#SITE_CONFIG_REMOTE_PATH
|
|
593
|
-
AUTH0_CC_CLIENT_ID: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_ID
|
|
594
|
-
AUTH0_CC_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
595
|
-
${
|
|
596
|
-
useS3 === true || useS3 === 'true'
|
|
597
|
-
? `
|
|
598
|
-
serviceAccount:
|
|
599
|
-
create: true
|
|
600
|
-
annotations:
|
|
601
|
-
"helm.sh/hook": pre-install
|
|
602
|
-
"helm.sh/hook-weight": "-10"
|
|
603
|
-
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`.trim()
|
|
604
|
-
: ''
|
|
605
|
-
}
|
|
606
|
-
image:
|
|
607
|
-
repository: registry.paperout.com/docupace-graphql-server-${env}-docker-local/docupace-graphql-server
|
|
608
|
-
tag: ${imageTag}
|
|
609
|
-
imagePullSecrets:
|
|
610
|
-
- name: jf-artifactory
|
|
611
|
-
ingress:
|
|
612
|
-
annotations:
|
|
613
|
-
external-dns.alpha.kubernetes.io/hostname: ${siteHost}
|
|
614
|
-
external-dns.alpha.kubernetes.io/zone: public
|
|
615
|
-
cert-manager.io/cluster-issuer: letsencrypt
|
|
616
|
-
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
|
|
617
|
-
enabled: true
|
|
618
|
-
className: nginx
|
|
619
|
-
hosts:
|
|
620
|
-
- host: ${siteHost}
|
|
621
|
-
paths:
|
|
622
|
-
- path: /api/graphql
|
|
623
|
-
pathType: Prefix
|
|
624
|
-
tls:
|
|
625
|
-
- hosts:
|
|
626
|
-
- ${siteHost}
|
|
627
|
-
secretName: dp-next-ui-cert`.trim();
|
|
628
|
-
|
|
629
|
-
// Write configuration files
|
|
630
|
-
console.log('Writing ArgoCD GraphQL Server configuration files...');
|
|
631
|
-
await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
|
|
632
|
-
|
|
633
|
-
await fs.writeFile(
|
|
634
|
-
`${repoPath}/dp/${site}/graphql-server.app.yaml`,
|
|
635
|
-
graphQLServerAppYaml,
|
|
636
|
-
(err) => {
|
|
637
|
-
if (err) {
|
|
638
|
-
console.error('Failed to write the file:', err);
|
|
639
|
-
} else {
|
|
640
|
-
console.log('File written successfully.');
|
|
641
|
-
}
|
|
642
|
-
},
|
|
643
|
-
);
|
|
644
|
-
|
|
645
|
-
await fs.writeFile(
|
|
646
|
-
`${repoPath}/dp/${site}/graphql-server.values.yaml`,
|
|
647
|
-
graphQLServerValuesYaml,
|
|
648
|
-
(err) => {
|
|
649
|
-
if (err) {
|
|
650
|
-
console.error(
|
|
651
|
-
`Failed to write ${repoPath}/dp/${site}/graphql-server.values.yaml file:`,
|
|
652
|
-
err,
|
|
653
|
-
);
|
|
654
|
-
} else {
|
|
655
|
-
console.log(
|
|
656
|
-
`File ${repoPath}/dp/${site}/graphql-server.values.yaml written successfully.`,
|
|
657
|
-
);
|
|
658
|
-
}
|
|
659
|
-
},
|
|
660
|
-
);
|
|
661
|
-
console.log('GraphQL Server configuration is done!');
|
|
662
|
-
} catch (error) {
|
|
663
|
-
console.error('Error configuring GraphQL Server:', error);
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
export async function configureFromSite(
|
|
668
|
-
fromSite,
|
|
669
|
-
toSite,
|
|
670
|
-
fromEnv,
|
|
671
|
-
toEnv,
|
|
672
|
-
deployUI,
|
|
673
|
-
deployGraphQLServer,
|
|
674
|
-
useNewDomain,
|
|
675
|
-
useS3Ui,
|
|
676
|
-
deployCCUI,
|
|
677
|
-
useS3Gq,
|
|
678
|
-
auth0Tenant,
|
|
679
|
-
) {
|
|
680
|
-
console.log(
|
|
681
|
-
`Configuring Auth0 tenants and ArgoCD apps for site: ${toSite} in env: ${toEnv} from site: ${fromSite}`,
|
|
682
|
-
);
|
|
683
|
-
// Common Secrets
|
|
684
|
-
const commonSecretsPath = getVaultSecretsConfigs(toSite).commonSecretsPath;
|
|
685
|
-
console.log(`commonSecretsPath => ${commonSecretsPath}`);
|
|
686
|
-
const commonSecrets = await getVaultSecrets(commonSecretsPath);
|
|
687
|
-
|
|
688
|
-
// Site Common Secrets
|
|
689
|
-
const siteCommonSecretsPath =
|
|
690
|
-
getVaultSecretsConfigs(toSite).siteCommonSecretsPath;
|
|
691
|
-
console.log(`siteCommonSecretsPath => ${siteCommonSecretsPath}`);
|
|
692
|
-
const siteCommonSecrets = await getVaultSecrets(siteCommonSecretsPath);
|
|
693
|
-
let auth0Domain;
|
|
694
|
-
if (auth0Tenant === '') {
|
|
695
|
-
auth0Domain = `docupace-${toEnv}-${toSite}.us.auth0.com`;
|
|
696
|
-
} else {
|
|
697
|
-
auth0Domain = `${auth0Tenant}.us.auth0.com`;
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
const auth0ClientId = siteCommonSecrets.AUTH0_CLIENT_ID;
|
|
701
|
-
const auth0ClientSecret = siteCommonSecrets.AUTH0_CLIENT_SECRET;
|
|
702
|
-
const auth0Token = await getAuth0AuthToken(
|
|
703
|
-
auth0Domain,
|
|
704
|
-
auth0ClientId,
|
|
705
|
-
auth0ClientSecret,
|
|
706
|
-
);
|
|
707
|
-
|
|
708
|
-
// UI MAIN app
|
|
709
|
-
const uiSecretsPath = getVaultSecretsConfigs(toSite).uiSecretsPath;
|
|
710
|
-
console.log(`uiSecretsPath => ${uiSecretsPath}`);
|
|
711
|
-
|
|
712
|
-
// UI CC app
|
|
713
|
-
const ccUISecretsPath = getVaultSecretsConfigs(toSite).ccUISecretsPath;
|
|
714
|
-
console.log(`ccUISecretsPath => ${ccUISecretsPath}`);
|
|
715
|
-
|
|
716
|
-
// GraphQL-Server app
|
|
717
|
-
const graphqlSecretsPath =
|
|
718
|
-
getVaultSecretsConfigs(toSite).graphqlServerSecretsPath;
|
|
719
|
-
console.log(`graphqlSecretsPath => ${graphqlSecretsPath}`);
|
|
720
|
-
|
|
721
|
-
let repoPathFromEnv = '';
|
|
722
|
-
let repoPathToEnv = '';
|
|
723
|
-
// Clone repositories
|
|
724
|
-
if (fromEnv === toEnv) {
|
|
725
|
-
repoPathFromEnv = await cloneEnvRepository(fromEnv);
|
|
726
|
-
repoPathToEnv = repoPathFromEnv;
|
|
727
|
-
} else {
|
|
728
|
-
repoPathFromEnv = await cloneEnvRepository(fromEnv);
|
|
729
|
-
repoPathToEnv = await cloneEnvRepository(toEnv);
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
//TODO: clone fromEnv and toEnv. replace above with this
|
|
733
|
-
|
|
734
|
-
// const auth0RepoPath = await cloneRepository('auth0-site-setup');
|
|
735
|
-
let uiImageTag, uiRevision;
|
|
736
|
-
if (deployUI === true || deployUI === 'true') {
|
|
737
|
-
// Read deploy configs
|
|
738
|
-
const { deployConfig: deployUIConfig } = await readDeployConfig(
|
|
739
|
-
'ui',
|
|
740
|
-
fromEnv,
|
|
741
|
-
fromSite,
|
|
742
|
-
'values',
|
|
743
|
-
);
|
|
744
|
-
const { deployConfig: deployUiRevisionConfig } = await readDeployConfig(
|
|
745
|
-
'ui',
|
|
746
|
-
fromEnv,
|
|
747
|
-
fromSite,
|
|
748
|
-
'app',
|
|
749
|
-
);
|
|
750
|
-
|
|
751
|
-
uiImageTag = deployUIConfig.image.tag;
|
|
752
|
-
uiRevision = deployUiRevisionConfig.revision;
|
|
753
|
-
|
|
754
|
-
console.log(`Copying Latest UI Revision: ${uiRevision}`);
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
let ccImageTag, ccRevision;
|
|
758
|
-
if (deployCCUI === true || deployCCUI === 'true') {
|
|
759
|
-
const { deployConfig: deployCCConfig } = await readDeployConfig(
|
|
760
|
-
'cc',
|
|
761
|
-
fromEnv,
|
|
762
|
-
fromSite,
|
|
763
|
-
'values',
|
|
764
|
-
);
|
|
765
|
-
|
|
766
|
-
const { deployConfig: deployCCRevisionConfig } = await readDeployConfig(
|
|
767
|
-
'cc',
|
|
768
|
-
fromEnv,
|
|
769
|
-
fromSite,
|
|
770
|
-
'app',
|
|
771
|
-
);
|
|
772
|
-
|
|
773
|
-
ccImageTag = deployCCConfig.image.tag;
|
|
774
|
-
ccRevision = deployCCRevisionConfig.revision;
|
|
775
|
-
|
|
776
|
-
console.log(`Copying Latest CC Revision: ${ccRevision}`);
|
|
777
|
-
}
|
|
778
|
-
|
|
779
|
-
const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig(
|
|
780
|
-
'graphql-server',
|
|
781
|
-
fromEnv,
|
|
782
|
-
fromSite,
|
|
783
|
-
'values',
|
|
784
|
-
);
|
|
785
|
-
|
|
786
|
-
const { deployConfig: deployGraphQLServerRevisionConfig } =
|
|
787
|
-
await readDeployConfig('graphql-server', fromEnv, fromSite, 'app');
|
|
788
|
-
|
|
789
|
-
const gqRevision = deployGraphQLServerRevisionConfig.revision;
|
|
790
|
-
|
|
791
|
-
console.log(`Copying Latest GQ Server Revision: ${gqRevision}`);
|
|
792
|
-
|
|
793
|
-
const graphqlImageTag = deployGraphQLServerConfig.image.tag;
|
|
794
|
-
const graphqlStandardConfigRemoteBranch =
|
|
795
|
-
deployGraphQLServerConfig.graphqlServer.standardConfigRemoteBranch;
|
|
796
|
-
|
|
797
|
-
if (deployUI === true || deployUI === 'true') {
|
|
798
|
-
console.log(
|
|
799
|
-
`Copying Latest UI Image Tag: ${uiImageTag} from site: ${fromSite} to site: ${toSite}`,
|
|
800
|
-
);
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
if (deployCCUI === true || deployCCUI === 'true') {
|
|
804
|
-
console.log(
|
|
805
|
-
`Copying Latest CC-UI Image Tag: ${ccImageTag} from site: ${fromSite} to site: ${toSite}`,
|
|
806
|
-
);
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
console.log(
|
|
810
|
-
`Copying Latest GraphQL Server Image Tag: ${deployGraphQLServerConfig.image.tag} from site: ${fromSite} to site: ${toSite}`,
|
|
811
|
-
);
|
|
812
|
-
|
|
813
|
-
const envConfig = environmentConfig[toEnv];
|
|
814
|
-
|
|
815
|
-
let CORE_URL, SITE_HOST, CORE_API_CONTEXT, CONNECT_URL, DOCUPACE_HOST;
|
|
816
|
-
const newUrl = envConfig.newUrl(toSite);
|
|
817
|
-
const ccUrl = envConfig.ccUrl(toSite);
|
|
818
|
-
|
|
819
|
-
SITE_HOST = `${newUrl}`;
|
|
820
|
-
|
|
821
|
-
if (useNewDomain === true || useNewDomain === 'true') {
|
|
822
|
-
const newUrl = envConfig.newUrl(toSite);
|
|
823
|
-
CORE_URL = `${newUrl}/core`;
|
|
824
|
-
// SITE_HOST = newUrl;
|
|
825
|
-
CORE_API_CONTEXT = 'core';
|
|
826
|
-
CONNECT_URL = `${newUrl}/connect`;
|
|
827
|
-
DOCUPACE_HOST = envConfig.docupaceHost();
|
|
828
|
-
} else {
|
|
829
|
-
const oldUrl = envConfig.oldUrl(toSite);
|
|
830
|
-
CORE_URL = oldUrl;
|
|
831
|
-
// SITE_HOST = oldUrl;
|
|
832
|
-
CORE_API_CONTEXT = toSite;
|
|
833
|
-
CONNECT_URL = `${oldUrl}_ui`;
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
if (deployUI === true || deployUI === 'true') {
|
|
837
|
-
await configureUI(
|
|
838
|
-
SITE_HOST,
|
|
839
|
-
CORE_URL,
|
|
840
|
-
CONNECT_URL,
|
|
841
|
-
DOCUPACE_HOST,
|
|
842
|
-
toSite,
|
|
843
|
-
toEnv,
|
|
844
|
-
auth0Domain,
|
|
845
|
-
auth0ClientId,
|
|
846
|
-
auth0ClientSecret,
|
|
847
|
-
auth0Token,
|
|
848
|
-
uiSecretsPath,
|
|
849
|
-
uiImageTag,
|
|
850
|
-
uiRevision,
|
|
851
|
-
repoPathToEnv,
|
|
852
|
-
useS3Ui,
|
|
853
|
-
);
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
if (deployCCUI === true || deployCCUI === 'true') {
|
|
857
|
-
await configureCCUI(
|
|
858
|
-
SITE_HOST,
|
|
859
|
-
CORE_URL,
|
|
860
|
-
CONNECT_URL,
|
|
861
|
-
DOCUPACE_HOST,
|
|
862
|
-
toSite,
|
|
863
|
-
toEnv,
|
|
864
|
-
auth0Domain,
|
|
865
|
-
auth0ClientId,
|
|
866
|
-
auth0ClientSecret,
|
|
867
|
-
auth0Token,
|
|
868
|
-
ccUISecretsPath,
|
|
869
|
-
ccImageTag,
|
|
870
|
-
ccRevision,
|
|
871
|
-
repoPathToEnv,
|
|
872
|
-
useS3Ui,
|
|
873
|
-
ccUrl,
|
|
874
|
-
);
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
await configureGraphQLServer(
|
|
878
|
-
SITE_HOST,
|
|
879
|
-
CORE_URL,
|
|
880
|
-
DOCUPACE_HOST,
|
|
881
|
-
toSite,
|
|
882
|
-
toEnv,
|
|
883
|
-
auth0Domain,
|
|
884
|
-
auth0ClientId,
|
|
885
|
-
auth0ClientSecret,
|
|
886
|
-
auth0Token,
|
|
887
|
-
graphqlSecretsPath,
|
|
888
|
-
graphqlImageTag,
|
|
889
|
-
gqRevision,
|
|
890
|
-
graphqlStandardConfigRemoteBranch,
|
|
891
|
-
repoPathToEnv,
|
|
892
|
-
commonSecrets,
|
|
893
|
-
useS3Gq,
|
|
894
|
-
);
|
|
895
|
-
|
|
896
|
-
console.log('Updating Core Site Config...');
|
|
897
|
-
await updateCoreSiteConfig(toSite, toEnv, useS3Ui, useS3Gq);
|
|
898
|
-
await pushDeployConfig(
|
|
899
|
-
repoPathToEnv,
|
|
900
|
-
`Config update for ${toSite} from ${fromSite} GraphQL: ${graphqlImageTag}`,
|
|
901
|
-
);
|
|
902
|
-
}
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
import * as crypto from 'crypto';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
cloneEnvRepository,
|
|
8
|
+
cloneRepository,
|
|
9
|
+
pushDeployConfig,
|
|
10
|
+
readDeployConfig,
|
|
11
|
+
} from '../next/deploy.js';
|
|
12
|
+
|
|
13
|
+
import { getVaultSecrets, updateVaultSecrets } from './vault.js';
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
coreSiteEnvMap,
|
|
17
|
+
environmentConfig,
|
|
18
|
+
getVaultSecretsConfigs,
|
|
19
|
+
} from '../next/config.js';
|
|
20
|
+
|
|
21
|
+
async function ensureDirectoryExists(dirPath) {
|
|
22
|
+
try {
|
|
23
|
+
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
24
|
+
console.log(`Directory created or already exists: ${dirPath}`);
|
|
25
|
+
} catch (err) {
|
|
26
|
+
console.error(`Failed to create directory: ${err.message}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function getAuth0AuthToken(auth0Domain, clientId, clientSecret) {
|
|
31
|
+
try {
|
|
32
|
+
const response = await axios.post(
|
|
33
|
+
`https://${auth0Domain}/oauth/token`,
|
|
34
|
+
{
|
|
35
|
+
client_id: clientId,
|
|
36
|
+
client_secret: clientSecret,
|
|
37
|
+
audience: `https://${auth0Domain}/api/v2/`,
|
|
38
|
+
grant_type: 'client_credentials',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
headers: {
|
|
42
|
+
'Content-Type': 'application/json',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const authToken = response.data.access_token;
|
|
48
|
+
// console.log("Auth0 Auth Token:", authToken);
|
|
49
|
+
return authToken;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error(
|
|
52
|
+
'Error fetching Auth0 token:',
|
|
53
|
+
error.response ? error.response.data : error.message,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function configureUI(
|
|
59
|
+
siteHost,
|
|
60
|
+
coreURL,
|
|
61
|
+
connectURL,
|
|
62
|
+
docupaceHost,
|
|
63
|
+
site,
|
|
64
|
+
env,
|
|
65
|
+
auth0Domain,
|
|
66
|
+
auth0ClientId,
|
|
67
|
+
auth0ClientSecret,
|
|
68
|
+
auth0Token,
|
|
69
|
+
vaultSiteSecretsPath,
|
|
70
|
+
imageTag,
|
|
71
|
+
revision,
|
|
72
|
+
repoPath,
|
|
73
|
+
useS3,
|
|
74
|
+
) {
|
|
75
|
+
console.log(
|
|
76
|
+
`Configuring UI for site: ${site} Host: ${siteHost} in env: ${env}`,
|
|
77
|
+
);
|
|
78
|
+
siteHost = siteHost.replace('https://', '');
|
|
79
|
+
coreURL = coreURL.replace('https://', '');
|
|
80
|
+
connectURL = connectURL.replace('https://', '');
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
const auth0Response = await axios.get(
|
|
84
|
+
`https://${auth0Domain}/api/v2/clients`,
|
|
85
|
+
{
|
|
86
|
+
headers: { authorization: `Bearer ${auth0Token}` },
|
|
87
|
+
},
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
const uiClient = auth0Response.data.find(
|
|
91
|
+
(client) => client.name === 'docupace-ui-main',
|
|
92
|
+
);
|
|
93
|
+
const uiAuth0ClientId = uiClient.client_id;
|
|
94
|
+
const uiAuth0ClientSecret = uiClient.client_secret;
|
|
95
|
+
|
|
96
|
+
// Generate Auth0 Secret
|
|
97
|
+
const uiAuth0Secret = crypto
|
|
98
|
+
.randomBytes(48)
|
|
99
|
+
.toString('base64')
|
|
100
|
+
.replace(/[^a-zA-Z0-9]/g, '');
|
|
101
|
+
|
|
102
|
+
// Prepare data payload
|
|
103
|
+
console.log('Preparing Vault UI data payload...');
|
|
104
|
+
const uiSecretData = JSON.stringify({
|
|
105
|
+
data: {
|
|
106
|
+
AUTH0_CLIENT_ID: uiAuth0ClientId,
|
|
107
|
+
AUTH0_CLIENT_SECRET: uiAuth0ClientSecret,
|
|
108
|
+
AUTH0_SECRET: uiAuth0Secret,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
await updateVaultSecrets(vaultSiteSecretsPath, uiSecretData);
|
|
113
|
+
|
|
114
|
+
let siteAWSSecrets = null;
|
|
115
|
+
|
|
116
|
+
if (useS3 === true || useS3 === 'true') {
|
|
117
|
+
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
118
|
+
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
119
|
+
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const awsS3Vars =
|
|
123
|
+
useS3 === true || useS3 === 'true'
|
|
124
|
+
? `
|
|
125
|
+
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
126
|
+
AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
127
|
+
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
128
|
+
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
|
|
129
|
+
: '';
|
|
130
|
+
|
|
131
|
+
// Prepare ui.app.yaml
|
|
132
|
+
const uiAppYaml = `
|
|
133
|
+
repo: docupace-ui-main
|
|
134
|
+
revision: ${revision}
|
|
135
|
+
`.trim();
|
|
136
|
+
|
|
137
|
+
// Prepare ui.values.yaml
|
|
138
|
+
const uiValuesYaml = `
|
|
139
|
+
uiMain:
|
|
140
|
+
auth0BaseUrl: https://${siteHost}
|
|
141
|
+
auth0IssuerBaseUrl: https://${auth0Domain}
|
|
142
|
+
auth0ClientId: vault:secret/data/${site}/ui/config#AUTH0_CLIENT_ID
|
|
143
|
+
graphqlClientUrl: https://${siteHost}/api/graphql
|
|
144
|
+
graphqlServerUrl: https://${siteHost}/api/graphql
|
|
145
|
+
connectUrl: https://${connectURL}
|
|
146
|
+
coreUrl: https://${coreURL}
|
|
147
|
+
env:
|
|
148
|
+
AUTH0_CLIENT_SECRET: vault:secret/data/${site}/ui/config#AUTH0_CLIENT_SECRET
|
|
149
|
+
AUTH0_SECRET: vault:secret/data/${site}/ui/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
150
|
+
image:
|
|
151
|
+
repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/enterprise-ui-app
|
|
152
|
+
tag: ${imageTag}
|
|
153
|
+
${
|
|
154
|
+
useS3 === true || useS3 === 'true'
|
|
155
|
+
? `
|
|
156
|
+
serviceAccount:
|
|
157
|
+
create: true
|
|
158
|
+
annotations:
|
|
159
|
+
"helm.sh/hook": pre-install
|
|
160
|
+
"helm.sh/hook-weight": "-10"
|
|
161
|
+
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`
|
|
162
|
+
: ''
|
|
163
|
+
}
|
|
164
|
+
imagePullSecrets:
|
|
165
|
+
- name: jf-artifactory
|
|
166
|
+
ingress:
|
|
167
|
+
enabled: true
|
|
168
|
+
className: nginx
|
|
169
|
+
annotations:
|
|
170
|
+
external-dns.alpha.kubernetes.io/hostname: ${siteHost}
|
|
171
|
+
external-dns.alpha.kubernetes.io/zone: public
|
|
172
|
+
cert-manager.io/cluster-issuer: letsencrypt
|
|
173
|
+
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
|
|
174
|
+
hosts:
|
|
175
|
+
- host: ${siteHost}
|
|
176
|
+
paths:
|
|
177
|
+
- path: /
|
|
178
|
+
pathType: Prefix
|
|
179
|
+
tls:
|
|
180
|
+
- hosts:
|
|
181
|
+
- ${siteHost}
|
|
182
|
+
secretName: dp-next-ui-cert
|
|
183
|
+
externalConnectIngress:
|
|
184
|
+
enabled: true
|
|
185
|
+
className: nginx
|
|
186
|
+
annotations:
|
|
187
|
+
cert-manager.io/cluster-issuer: letsencrypt
|
|
188
|
+
external-dns.alpha.kubernetes.io/hostname: ${siteHost}
|
|
189
|
+
external-dns.alpha.kubernetes.io/zone: public
|
|
190
|
+
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
|
|
191
|
+
nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
192
|
+
proxy_set_header Host ${siteHost};
|
|
193
|
+
nginx.ingress.kubernetes.io/proxy-buffer-size: 8k
|
|
194
|
+
hosts:
|
|
195
|
+
- host: ${siteHost}
|
|
196
|
+
paths:
|
|
197
|
+
- path: /core
|
|
198
|
+
- path: /core_b2b
|
|
199
|
+
- path: /core_reports
|
|
200
|
+
- path: /corerealm
|
|
201
|
+
- path: /connect
|
|
202
|
+
- path: /webstart
|
|
203
|
+
- path: /core_ws
|
|
204
|
+
- path: /core_docupload
|
|
205
|
+
- path: /core_ariws
|
|
206
|
+
- path: /core_restws
|
|
207
|
+
- path: /core_webdav
|
|
208
|
+
tls:
|
|
209
|
+
- hosts:
|
|
210
|
+
- ${siteHost}
|
|
211
|
+
secretName: dp-next-ui-cert
|
|
212
|
+
externalConnectService:
|
|
213
|
+
enabled: true
|
|
214
|
+
name: external-connect
|
|
215
|
+
domain: ${docupaceHost}
|
|
216
|
+
`.trim();
|
|
217
|
+
|
|
218
|
+
console.log('Writing configuration files...');
|
|
219
|
+
await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
|
|
220
|
+
|
|
221
|
+
await fs.writeFile(
|
|
222
|
+
`${repoPath}/dp/${site}/ui.app.yaml`,
|
|
223
|
+
uiAppYaml,
|
|
224
|
+
(err) => {
|
|
225
|
+
if (err) {
|
|
226
|
+
console.error('Failed to write the file:', err);
|
|
227
|
+
} else {
|
|
228
|
+
console.log(
|
|
229
|
+
`File ${repoPath}/dp/${site}/ui.app.yaml written successfully.`,
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
await fs.writeFile(
|
|
236
|
+
`${repoPath}/dp/${site}/ui.values.yaml`,
|
|
237
|
+
uiValuesYaml,
|
|
238
|
+
(err) => {
|
|
239
|
+
if (err) {
|
|
240
|
+
console.error('Failed to write the file:', err);
|
|
241
|
+
} else {
|
|
242
|
+
console.log(
|
|
243
|
+
`File ${repoPath}/dp/${site}/ui.values.yaml written successfully.`,
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
);
|
|
248
|
+
console.log('The UI part is done!');
|
|
249
|
+
} catch (error) {
|
|
250
|
+
console.error('Error configuring UI:', error);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
async function configureCCUI(
|
|
255
|
+
siteHost,
|
|
256
|
+
coreURL,
|
|
257
|
+
connectURL,
|
|
258
|
+
docupaceHost,
|
|
259
|
+
site,
|
|
260
|
+
env,
|
|
261
|
+
auth0Domain,
|
|
262
|
+
auth0ClientId,
|
|
263
|
+
auth0ClientSecret,
|
|
264
|
+
auth0Token,
|
|
265
|
+
vaultSiteSecretsPath,
|
|
266
|
+
imageTag,
|
|
267
|
+
revision,
|
|
268
|
+
repoPath,
|
|
269
|
+
useS3,
|
|
270
|
+
ccUrl,
|
|
271
|
+
) {
|
|
272
|
+
console.log(
|
|
273
|
+
`Configuring CC UI for site: ${site} Host: ${siteHost} in env: ${env}`,
|
|
274
|
+
);
|
|
275
|
+
siteHost = siteHost.replace('https://', '');
|
|
276
|
+
coreURL = coreURL.replace('https://', '');
|
|
277
|
+
connectURL = connectURL.replace('https://', '');
|
|
278
|
+
ccUrl = ccUrl.replace('https://', '');
|
|
279
|
+
|
|
280
|
+
try {
|
|
281
|
+
const auth0Response = await axios.get(
|
|
282
|
+
`https://${auth0Domain}/api/v2/clients`,
|
|
283
|
+
{
|
|
284
|
+
headers: { authorization: `Bearer ${auth0Token}` },
|
|
285
|
+
},
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
const uiClient = auth0Response.data.find(
|
|
289
|
+
(client) => client.name === 'docupace-ui-cc',
|
|
290
|
+
);
|
|
291
|
+
const uiAuth0ClientId = uiClient.client_id;
|
|
292
|
+
const uiAuth0ClientSecret = uiClient.client_secret;
|
|
293
|
+
|
|
294
|
+
// Generate Auth0 Secret
|
|
295
|
+
const uiAuth0Secret = crypto
|
|
296
|
+
.randomBytes(48)
|
|
297
|
+
.toString('base64')
|
|
298
|
+
.replace(/[^a-zA-Z0-9]/g, '');
|
|
299
|
+
|
|
300
|
+
// Prepare data payload
|
|
301
|
+
console.log('Preparing Vault CC UI data payload...');
|
|
302
|
+
const ccUISecretData = JSON.stringify({
|
|
303
|
+
data: {
|
|
304
|
+
AUTH0_CLIENT_ID: uiAuth0ClientId,
|
|
305
|
+
AUTH0_CLIENT_SECRET: uiAuth0ClientSecret,
|
|
306
|
+
AUTH0_SECRET: uiAuth0Secret,
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
console.log('Updating Vault Site Secret =>', vaultSiteSecretsPath);
|
|
310
|
+
await updateVaultSecrets(vaultSiteSecretsPath, ccUISecretData);
|
|
311
|
+
|
|
312
|
+
let siteAWSSecrets = null;
|
|
313
|
+
|
|
314
|
+
if (useS3 === true || useS3 === 'true') {
|
|
315
|
+
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
316
|
+
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
317
|
+
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
const awsS3Vars =
|
|
321
|
+
useS3 === true || useS3 === 'true'
|
|
322
|
+
? `
|
|
323
|
+
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
324
|
+
AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
325
|
+
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
326
|
+
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
|
|
327
|
+
: '';
|
|
328
|
+
|
|
329
|
+
const uiCCAppYaml = `
|
|
330
|
+
repo: docupace-ui-main
|
|
331
|
+
revision: ${revision}
|
|
332
|
+
`.trim();
|
|
333
|
+
|
|
334
|
+
const uiCCValuesYaml = `
|
|
335
|
+
uiMain:
|
|
336
|
+
auth0BaseUrl: https://${ccUrl}
|
|
337
|
+
auth0IssuerBaseUrl: https://${auth0Domain}
|
|
338
|
+
auth0ClientId: vault:secret/data/${site}/ui-cc/config#AUTH0_CLIENT_ID
|
|
339
|
+
graphqlClientUrl: https://${siteHost}/api/graphql
|
|
340
|
+
graphqlServerUrl: https://${siteHost}/api/graphql
|
|
341
|
+
connectUrl: https://${connectURL}
|
|
342
|
+
coreUrl: https://${coreURL}
|
|
343
|
+
env:
|
|
344
|
+
AUTH0_AUDIENCE: core-api-access
|
|
345
|
+
AUTH0_CLIENT_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_CLIENT_SECRET
|
|
346
|
+
AUTH0_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
347
|
+
image:
|
|
348
|
+
repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/cc-ui-app
|
|
349
|
+
tag: ${imageTag}
|
|
350
|
+
imagePullSecrets:
|
|
351
|
+
- name: jf-artifactory
|
|
352
|
+
ingress:
|
|
353
|
+
enabled: true
|
|
354
|
+
className: nginx
|
|
355
|
+
annotations:
|
|
356
|
+
external-dns.alpha.kubernetes.io/hostname: ${ccUrl}
|
|
357
|
+
external-dns.alpha.kubernetes.io/zone: public
|
|
358
|
+
cert-manager.io/cluster-issuer: letsencrypt
|
|
359
|
+
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
|
|
360
|
+
hosts:
|
|
361
|
+
- host: ${ccUrl}
|
|
362
|
+
paths:
|
|
363
|
+
- path: /
|
|
364
|
+
pathType: Prefix
|
|
365
|
+
tls:
|
|
366
|
+
- hosts:
|
|
367
|
+
- ${ccUrl}
|
|
368
|
+
secretName: dp-cc-ui-cert
|
|
369
|
+
${
|
|
370
|
+
useS3 === true || useS3 === 'true'
|
|
371
|
+
? `
|
|
372
|
+
serviceAccount:
|
|
373
|
+
create: true
|
|
374
|
+
annotations:
|
|
375
|
+
"helm.sh/hook": pre-install
|
|
376
|
+
"helm.sh/hook-weight": "-10"
|
|
377
|
+
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`
|
|
378
|
+
: ''
|
|
379
|
+
}
|
|
380
|
+
`.trim();
|
|
381
|
+
|
|
382
|
+
console.log('Writing configuration files...');
|
|
383
|
+
await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
|
|
384
|
+
|
|
385
|
+
await fs.writeFile(
|
|
386
|
+
`${repoPath}/dp/${site}/cc.app.yaml`,
|
|
387
|
+
uiCCAppYaml,
|
|
388
|
+
(err) => {
|
|
389
|
+
if (err) {
|
|
390
|
+
console.error(
|
|
391
|
+
`Failed to write ${repoPath}/dp/${site}/cc.app.yaml file:`,
|
|
392
|
+
err,
|
|
393
|
+
);
|
|
394
|
+
} else {
|
|
395
|
+
console.log(
|
|
396
|
+
`File ${repoPath}/dp/${site}/cc.app.yaml written successfully.`,
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
await fs.writeFile(
|
|
403
|
+
`${repoPath}/dp/${site}/cc.values.yaml`,
|
|
404
|
+
uiCCValuesYaml,
|
|
405
|
+
(err) => {
|
|
406
|
+
if (err) {
|
|
407
|
+
console.error(
|
|
408
|
+
`Failed to write ${repoPath}/dp/${site}/cc.values.yaml file:`,
|
|
409
|
+
err,
|
|
410
|
+
);
|
|
411
|
+
} else {
|
|
412
|
+
console.log(
|
|
413
|
+
`File ${repoPath}/dp/${site}/cc.values.yaml written successfully.`,
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
);
|
|
418
|
+
console.log('CC-UI configuration is done!');
|
|
419
|
+
} catch (error) {
|
|
420
|
+
console.error('Error configuring CC-UI:', error);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
export async function cleanAndWritePropertiesFile(configPath, content) {
|
|
425
|
+
try {
|
|
426
|
+
const cleanedContent = content
|
|
427
|
+
.split('\n')
|
|
428
|
+
.map((line) => line.trim())
|
|
429
|
+
.filter((line) => line !== '')
|
|
430
|
+
.join('\n');
|
|
431
|
+
|
|
432
|
+
await fs.writeFile(configPath, cleanedContent, 'utf8');
|
|
433
|
+
console.log(`Cleaned and written file to: ${configPath}`);
|
|
434
|
+
} catch (error) {
|
|
435
|
+
console.error(
|
|
436
|
+
`Error writing properties file to ${configPath}:`,
|
|
437
|
+
error.message,
|
|
438
|
+
);
|
|
439
|
+
process.exit(1);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
export async function updateCoreSiteConfig(site, env, useS3Ui, useS3Gq) {
|
|
444
|
+
try {
|
|
445
|
+
const coreSiteEnv = coreSiteEnvMap[env];
|
|
446
|
+
|
|
447
|
+
const coreSiteConfigRepoPath = await cloneRepository(
|
|
448
|
+
`${coreSiteEnv}-site-settings`,
|
|
449
|
+
);
|
|
450
|
+
|
|
451
|
+
const configPath = path.join(
|
|
452
|
+
`${coreSiteEnv}-site-settings`,
|
|
453
|
+
site.toUpperCase(),
|
|
454
|
+
'docucore-nextUI.properties',
|
|
455
|
+
);
|
|
456
|
+
|
|
457
|
+
let siteAWSSecrets = null;
|
|
458
|
+
|
|
459
|
+
if (
|
|
460
|
+
useS3Ui === true ||
|
|
461
|
+
useS3Ui === 'true' ||
|
|
462
|
+
useS3Gq === true ||
|
|
463
|
+
useS3Gq === 'true'
|
|
464
|
+
) {
|
|
465
|
+
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
466
|
+
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
467
|
+
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
const coreSiteConfig = `
|
|
471
|
+
${
|
|
472
|
+
siteAWSSecrets
|
|
473
|
+
? `
|
|
474
|
+
com.docupace.imports.files.FilesImportConfig.aws.accessKeyId=${siteAWSSecrets.AWS_ACCESS_KEY_ID}
|
|
475
|
+
com.docupace.imports.files.FilesImportConfig.aws.accessKeySecret=${siteAWSSecrets.AWS_SECRET_ACCESS_KEY}
|
|
476
|
+
com.docupace.imports.files.FilesImportConfig.aws.region=${siteAWSSecrets.AWS_REGION}`.trim()
|
|
477
|
+
: ''
|
|
478
|
+
}
|
|
479
|
+
`;
|
|
480
|
+
|
|
481
|
+
await fs.ensureDir(path.join(coreSiteConfigRepoPath, site.toUpperCase()));
|
|
482
|
+
await cleanAndWritePropertiesFile(configPath, coreSiteConfig);
|
|
483
|
+
await pushDeployConfig(
|
|
484
|
+
coreSiteConfigRepoPath,
|
|
485
|
+
`Core config: docucore-nextUI.properties for site: (${site.toUpperCase()}) update in env: (${env})`,
|
|
486
|
+
);
|
|
487
|
+
} catch (error) {
|
|
488
|
+
console.error('Error:', error.message);
|
|
489
|
+
process.exit(1);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
async function configureGraphQLServer(
|
|
494
|
+
siteHost,
|
|
495
|
+
coreURL,
|
|
496
|
+
docupaceHost,
|
|
497
|
+
site,
|
|
498
|
+
env,
|
|
499
|
+
auth0Domain,
|
|
500
|
+
auth0ClientId,
|
|
501
|
+
auth0ClientSecret,
|
|
502
|
+
auth0Token,
|
|
503
|
+
vaultSiteSecretsPath,
|
|
504
|
+
imageTag,
|
|
505
|
+
revision,
|
|
506
|
+
standardConfigRemoteBranch,
|
|
507
|
+
repoPath,
|
|
508
|
+
commonSecrets,
|
|
509
|
+
useS3,
|
|
510
|
+
) {
|
|
511
|
+
siteHost = siteHost.replace('https://', '');
|
|
512
|
+
coreURL = coreURL.replace('https://', '');
|
|
513
|
+
console.log(
|
|
514
|
+
`Configuring GraphQL Server for site: ${site} Host: ${siteHost} in env: ${env}`,
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
try {
|
|
518
|
+
const auth0Response = await axios.get(
|
|
519
|
+
`https://${auth0Domain}/api/v2/clients`,
|
|
520
|
+
{
|
|
521
|
+
headers: { authorization: `Bearer ${auth0Token}` },
|
|
522
|
+
},
|
|
523
|
+
);
|
|
524
|
+
|
|
525
|
+
const graphQLServerClient = auth0Response.data.find(
|
|
526
|
+
(client) => client.name === 'docupace-graphql',
|
|
527
|
+
);
|
|
528
|
+
const graphQLServerClientCredentials = auth0Response.data.find(
|
|
529
|
+
(client) => client.name === 'docupace-graphql-client-credentials',
|
|
530
|
+
);
|
|
531
|
+
|
|
532
|
+
const graphQLServerAuth0ClientId = graphQLServerClient.client_id;
|
|
533
|
+
const graphQLServerAuth0ClientSecret = graphQLServerClient.client_secret;
|
|
534
|
+
|
|
535
|
+
const graphQLServerCCAuth0ClientId =
|
|
536
|
+
graphQLServerClientCredentials.client_id;
|
|
537
|
+
const graphQLServerCCAuth0ClientSecret =
|
|
538
|
+
graphQLServerClientCredentials.client_secret;
|
|
539
|
+
|
|
540
|
+
// Prepare data payload
|
|
541
|
+
console.log('Preparing Vault GraphQL Server data payload...');
|
|
542
|
+
const graphQLServerSecretData = JSON.stringify({
|
|
543
|
+
data: {
|
|
544
|
+
AUTH0_CLIENT_ID: graphQLServerAuth0ClientId,
|
|
545
|
+
AUTH0_CLIENT_SECRET: graphQLServerAuth0ClientSecret,
|
|
546
|
+
AUTH0_CC_CLIENT_ID: graphQLServerCCAuth0ClientId,
|
|
547
|
+
AUTH0_CC_CLIENT_SECRET: graphQLServerCCAuth0ClientSecret,
|
|
548
|
+
CORE_PASSWORD: commonSecrets.CORE_PASSWORD,
|
|
549
|
+
REMOTE_CONFIG_PATH: commonSecrets.REMOTE_CONFIG_PATH,
|
|
550
|
+
STANDARD_CONFIG_REMOTE_PATH: commonSecrets.STANDARD_CONFIG_REMOTE_PATH,
|
|
551
|
+
},
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
await updateVaultSecrets(vaultSiteSecretsPath, graphQLServerSecretData);
|
|
555
|
+
|
|
556
|
+
let siteAWSSecrets = null;
|
|
557
|
+
|
|
558
|
+
if (useS3 === true || useS3 === 'true') {
|
|
559
|
+
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
560
|
+
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
561
|
+
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
const awsS3Vars =
|
|
565
|
+
useS3 === true || useS3 === 'true'
|
|
566
|
+
? `
|
|
567
|
+
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
568
|
+
AWS_S3_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
569
|
+
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
570
|
+
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`.trim()
|
|
571
|
+
: '';
|
|
572
|
+
// Prepare graphql-server.app.yaml
|
|
573
|
+
const graphQLServerAppYaml = `
|
|
574
|
+
repo: docupace-graphql-server
|
|
575
|
+
revision: ${revision}
|
|
576
|
+
`.trim();
|
|
577
|
+
|
|
578
|
+
// Prepare graphql-server.values.yaml
|
|
579
|
+
const graphQLServerValuesYaml = `
|
|
580
|
+
graphqlServer:
|
|
581
|
+
auth0Domain: https://${auth0Domain}
|
|
582
|
+
auth0ClientId: vault:secret/data/${site}/graphql-server/config#AUTH0_CLIENT_ID
|
|
583
|
+
auth0Audience: ${commonSecrets.CORE_API_IDENTIFIER}
|
|
584
|
+
baseUrl: https://${siteHost}/api/graphql
|
|
585
|
+
coreUrl: https://${coreURL}
|
|
586
|
+
integrationHubUrl: "https://${commonSecrets.INTEGRATION_HUB_URL}"
|
|
587
|
+
standardConfigRemoteBranch: ${standardConfigRemoteBranch}
|
|
588
|
+
apiLevel: "2"
|
|
589
|
+
env:
|
|
590
|
+
AUTH0_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CLIENT_SECRET
|
|
591
|
+
STANDARD_CONFIG_REMOTE_PATH: vault:secret/data/common/config#STANDARD_CONFIG_REMOTE_PATH
|
|
592
|
+
SITE_CONFIG_REMOTE_PATH: vault:secret/data/${site}/common/config#SITE_CONFIG_REMOTE_PATH
|
|
593
|
+
AUTH0_CC_CLIENT_ID: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_ID
|
|
594
|
+
AUTH0_CC_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
595
|
+
${
|
|
596
|
+
useS3 === true || useS3 === 'true'
|
|
597
|
+
? `
|
|
598
|
+
serviceAccount:
|
|
599
|
+
create: true
|
|
600
|
+
annotations:
|
|
601
|
+
"helm.sh/hook": pre-install
|
|
602
|
+
"helm.sh/hook-weight": "-10"
|
|
603
|
+
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`.trim()
|
|
604
|
+
: ''
|
|
605
|
+
}
|
|
606
|
+
image:
|
|
607
|
+
repository: registry.paperout.com/docupace-graphql-server-${env}-docker-local/docupace-graphql-server
|
|
608
|
+
tag: ${imageTag}
|
|
609
|
+
imagePullSecrets:
|
|
610
|
+
- name: jf-artifactory
|
|
611
|
+
ingress:
|
|
612
|
+
annotations:
|
|
613
|
+
external-dns.alpha.kubernetes.io/hostname: ${siteHost}
|
|
614
|
+
external-dns.alpha.kubernetes.io/zone: public
|
|
615
|
+
cert-manager.io/cluster-issuer: letsencrypt
|
|
616
|
+
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
|
|
617
|
+
enabled: true
|
|
618
|
+
className: nginx
|
|
619
|
+
hosts:
|
|
620
|
+
- host: ${siteHost}
|
|
621
|
+
paths:
|
|
622
|
+
- path: /api/graphql
|
|
623
|
+
pathType: Prefix
|
|
624
|
+
tls:
|
|
625
|
+
- hosts:
|
|
626
|
+
- ${siteHost}
|
|
627
|
+
secretName: dp-next-ui-cert`.trim();
|
|
628
|
+
|
|
629
|
+
// Write configuration files
|
|
630
|
+
console.log('Writing ArgoCD GraphQL Server configuration files...');
|
|
631
|
+
await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
|
|
632
|
+
|
|
633
|
+
await fs.writeFile(
|
|
634
|
+
`${repoPath}/dp/${site}/graphql-server.app.yaml`,
|
|
635
|
+
graphQLServerAppYaml,
|
|
636
|
+
(err) => {
|
|
637
|
+
if (err) {
|
|
638
|
+
console.error('Failed to write the file:', err);
|
|
639
|
+
} else {
|
|
640
|
+
console.log('File written successfully.');
|
|
641
|
+
}
|
|
642
|
+
},
|
|
643
|
+
);
|
|
644
|
+
|
|
645
|
+
await fs.writeFile(
|
|
646
|
+
`${repoPath}/dp/${site}/graphql-server.values.yaml`,
|
|
647
|
+
graphQLServerValuesYaml,
|
|
648
|
+
(err) => {
|
|
649
|
+
if (err) {
|
|
650
|
+
console.error(
|
|
651
|
+
`Failed to write ${repoPath}/dp/${site}/graphql-server.values.yaml file:`,
|
|
652
|
+
err,
|
|
653
|
+
);
|
|
654
|
+
} else {
|
|
655
|
+
console.log(
|
|
656
|
+
`File ${repoPath}/dp/${site}/graphql-server.values.yaml written successfully.`,
|
|
657
|
+
);
|
|
658
|
+
}
|
|
659
|
+
},
|
|
660
|
+
);
|
|
661
|
+
console.log('GraphQL Server configuration is done!');
|
|
662
|
+
} catch (error) {
|
|
663
|
+
console.error('Error configuring GraphQL Server:', error);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
export async function configureFromSite(
|
|
668
|
+
fromSite,
|
|
669
|
+
toSite,
|
|
670
|
+
fromEnv,
|
|
671
|
+
toEnv,
|
|
672
|
+
deployUI,
|
|
673
|
+
deployGraphQLServer,
|
|
674
|
+
useNewDomain,
|
|
675
|
+
useS3Ui,
|
|
676
|
+
deployCCUI,
|
|
677
|
+
useS3Gq,
|
|
678
|
+
auth0Tenant,
|
|
679
|
+
) {
|
|
680
|
+
console.log(
|
|
681
|
+
`Configuring Auth0 tenants and ArgoCD apps for site: ${toSite} in env: ${toEnv} from site: ${fromSite}`,
|
|
682
|
+
);
|
|
683
|
+
// Common Secrets
|
|
684
|
+
const commonSecretsPath = getVaultSecretsConfigs(toSite).commonSecretsPath;
|
|
685
|
+
console.log(`commonSecretsPath => ${commonSecretsPath}`);
|
|
686
|
+
const commonSecrets = await getVaultSecrets(commonSecretsPath);
|
|
687
|
+
|
|
688
|
+
// Site Common Secrets
|
|
689
|
+
const siteCommonSecretsPath =
|
|
690
|
+
getVaultSecretsConfigs(toSite).siteCommonSecretsPath;
|
|
691
|
+
console.log(`siteCommonSecretsPath => ${siteCommonSecretsPath}`);
|
|
692
|
+
const siteCommonSecrets = await getVaultSecrets(siteCommonSecretsPath);
|
|
693
|
+
let auth0Domain;
|
|
694
|
+
if (auth0Tenant === '') {
|
|
695
|
+
auth0Domain = `docupace-${toEnv}-${toSite}.us.auth0.com`;
|
|
696
|
+
} else {
|
|
697
|
+
auth0Domain = `${auth0Tenant}.us.auth0.com`;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
const auth0ClientId = siteCommonSecrets.AUTH0_CLIENT_ID;
|
|
701
|
+
const auth0ClientSecret = siteCommonSecrets.AUTH0_CLIENT_SECRET;
|
|
702
|
+
const auth0Token = await getAuth0AuthToken(
|
|
703
|
+
auth0Domain,
|
|
704
|
+
auth0ClientId,
|
|
705
|
+
auth0ClientSecret,
|
|
706
|
+
);
|
|
707
|
+
|
|
708
|
+
// UI MAIN app
|
|
709
|
+
const uiSecretsPath = getVaultSecretsConfigs(toSite).uiSecretsPath;
|
|
710
|
+
console.log(`uiSecretsPath => ${uiSecretsPath}`);
|
|
711
|
+
|
|
712
|
+
// UI CC app
|
|
713
|
+
const ccUISecretsPath = getVaultSecretsConfigs(toSite).ccUISecretsPath;
|
|
714
|
+
console.log(`ccUISecretsPath => ${ccUISecretsPath}`);
|
|
715
|
+
|
|
716
|
+
// GraphQL-Server app
|
|
717
|
+
const graphqlSecretsPath =
|
|
718
|
+
getVaultSecretsConfigs(toSite).graphqlServerSecretsPath;
|
|
719
|
+
console.log(`graphqlSecretsPath => ${graphqlSecretsPath}`);
|
|
720
|
+
|
|
721
|
+
let repoPathFromEnv = '';
|
|
722
|
+
let repoPathToEnv = '';
|
|
723
|
+
// Clone repositories
|
|
724
|
+
if (fromEnv === toEnv) {
|
|
725
|
+
repoPathFromEnv = await cloneEnvRepository(fromEnv);
|
|
726
|
+
repoPathToEnv = repoPathFromEnv;
|
|
727
|
+
} else {
|
|
728
|
+
repoPathFromEnv = await cloneEnvRepository(fromEnv);
|
|
729
|
+
repoPathToEnv = await cloneEnvRepository(toEnv);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
//TODO: clone fromEnv and toEnv. replace above with this
|
|
733
|
+
|
|
734
|
+
// const auth0RepoPath = await cloneRepository('auth0-site-setup');
|
|
735
|
+
let uiImageTag, uiRevision;
|
|
736
|
+
if (deployUI === true || deployUI === 'true') {
|
|
737
|
+
// Read deploy configs
|
|
738
|
+
const { deployConfig: deployUIConfig } = await readDeployConfig(
|
|
739
|
+
'ui',
|
|
740
|
+
fromEnv,
|
|
741
|
+
fromSite,
|
|
742
|
+
'values',
|
|
743
|
+
);
|
|
744
|
+
const { deployConfig: deployUiRevisionConfig } = await readDeployConfig(
|
|
745
|
+
'ui',
|
|
746
|
+
fromEnv,
|
|
747
|
+
fromSite,
|
|
748
|
+
'app',
|
|
749
|
+
);
|
|
750
|
+
|
|
751
|
+
uiImageTag = deployUIConfig.image.tag;
|
|
752
|
+
uiRevision = deployUiRevisionConfig.revision;
|
|
753
|
+
|
|
754
|
+
console.log(`Copying Latest UI Revision: ${uiRevision}`);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
let ccImageTag, ccRevision;
|
|
758
|
+
if (deployCCUI === true || deployCCUI === 'true') {
|
|
759
|
+
const { deployConfig: deployCCConfig } = await readDeployConfig(
|
|
760
|
+
'cc',
|
|
761
|
+
fromEnv,
|
|
762
|
+
fromSite,
|
|
763
|
+
'values',
|
|
764
|
+
);
|
|
765
|
+
|
|
766
|
+
const { deployConfig: deployCCRevisionConfig } = await readDeployConfig(
|
|
767
|
+
'cc',
|
|
768
|
+
fromEnv,
|
|
769
|
+
fromSite,
|
|
770
|
+
'app',
|
|
771
|
+
);
|
|
772
|
+
|
|
773
|
+
ccImageTag = deployCCConfig.image.tag;
|
|
774
|
+
ccRevision = deployCCRevisionConfig.revision;
|
|
775
|
+
|
|
776
|
+
console.log(`Copying Latest CC Revision: ${ccRevision}`);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig(
|
|
780
|
+
'graphql-server',
|
|
781
|
+
fromEnv,
|
|
782
|
+
fromSite,
|
|
783
|
+
'values',
|
|
784
|
+
);
|
|
785
|
+
|
|
786
|
+
const { deployConfig: deployGraphQLServerRevisionConfig } =
|
|
787
|
+
await readDeployConfig('graphql-server', fromEnv, fromSite, 'app');
|
|
788
|
+
|
|
789
|
+
const gqRevision = deployGraphQLServerRevisionConfig.revision;
|
|
790
|
+
|
|
791
|
+
console.log(`Copying Latest GQ Server Revision: ${gqRevision}`);
|
|
792
|
+
|
|
793
|
+
const graphqlImageTag = deployGraphQLServerConfig.image.tag;
|
|
794
|
+
const graphqlStandardConfigRemoteBranch =
|
|
795
|
+
deployGraphQLServerConfig.graphqlServer.standardConfigRemoteBranch;
|
|
796
|
+
|
|
797
|
+
if (deployUI === true || deployUI === 'true') {
|
|
798
|
+
console.log(
|
|
799
|
+
`Copying Latest UI Image Tag: ${uiImageTag} from site: ${fromSite} to site: ${toSite}`,
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
if (deployCCUI === true || deployCCUI === 'true') {
|
|
804
|
+
console.log(
|
|
805
|
+
`Copying Latest CC-UI Image Tag: ${ccImageTag} from site: ${fromSite} to site: ${toSite}`,
|
|
806
|
+
);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
console.log(
|
|
810
|
+
`Copying Latest GraphQL Server Image Tag: ${deployGraphQLServerConfig.image.tag} from site: ${fromSite} to site: ${toSite}`,
|
|
811
|
+
);
|
|
812
|
+
|
|
813
|
+
const envConfig = environmentConfig[toEnv];
|
|
814
|
+
|
|
815
|
+
let CORE_URL, SITE_HOST, CORE_API_CONTEXT, CONNECT_URL, DOCUPACE_HOST;
|
|
816
|
+
const newUrl = envConfig.newUrl(toSite);
|
|
817
|
+
const ccUrl = envConfig.ccUrl(toSite);
|
|
818
|
+
|
|
819
|
+
SITE_HOST = `${newUrl}`;
|
|
820
|
+
|
|
821
|
+
if (useNewDomain === true || useNewDomain === 'true') {
|
|
822
|
+
const newUrl = envConfig.newUrl(toSite);
|
|
823
|
+
CORE_URL = `${newUrl}/core`;
|
|
824
|
+
// SITE_HOST = newUrl;
|
|
825
|
+
CORE_API_CONTEXT = 'core';
|
|
826
|
+
CONNECT_URL = `${newUrl}/connect`;
|
|
827
|
+
DOCUPACE_HOST = envConfig.docupaceHost();
|
|
828
|
+
} else {
|
|
829
|
+
const oldUrl = envConfig.oldUrl(toSite);
|
|
830
|
+
CORE_URL = oldUrl;
|
|
831
|
+
// SITE_HOST = oldUrl;
|
|
832
|
+
CORE_API_CONTEXT = toSite;
|
|
833
|
+
CONNECT_URL = `${oldUrl}_ui`;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
if (deployUI === true || deployUI === 'true') {
|
|
837
|
+
await configureUI(
|
|
838
|
+
SITE_HOST,
|
|
839
|
+
CORE_URL,
|
|
840
|
+
CONNECT_URL,
|
|
841
|
+
DOCUPACE_HOST,
|
|
842
|
+
toSite,
|
|
843
|
+
toEnv,
|
|
844
|
+
auth0Domain,
|
|
845
|
+
auth0ClientId,
|
|
846
|
+
auth0ClientSecret,
|
|
847
|
+
auth0Token,
|
|
848
|
+
uiSecretsPath,
|
|
849
|
+
uiImageTag,
|
|
850
|
+
uiRevision,
|
|
851
|
+
repoPathToEnv,
|
|
852
|
+
useS3Ui,
|
|
853
|
+
);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
if (deployCCUI === true || deployCCUI === 'true') {
|
|
857
|
+
await configureCCUI(
|
|
858
|
+
SITE_HOST,
|
|
859
|
+
CORE_URL,
|
|
860
|
+
CONNECT_URL,
|
|
861
|
+
DOCUPACE_HOST,
|
|
862
|
+
toSite,
|
|
863
|
+
toEnv,
|
|
864
|
+
auth0Domain,
|
|
865
|
+
auth0ClientId,
|
|
866
|
+
auth0ClientSecret,
|
|
867
|
+
auth0Token,
|
|
868
|
+
ccUISecretsPath,
|
|
869
|
+
ccImageTag,
|
|
870
|
+
ccRevision,
|
|
871
|
+
repoPathToEnv,
|
|
872
|
+
useS3Ui,
|
|
873
|
+
ccUrl,
|
|
874
|
+
);
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
await configureGraphQLServer(
|
|
878
|
+
SITE_HOST,
|
|
879
|
+
CORE_URL,
|
|
880
|
+
DOCUPACE_HOST,
|
|
881
|
+
toSite,
|
|
882
|
+
toEnv,
|
|
883
|
+
auth0Domain,
|
|
884
|
+
auth0ClientId,
|
|
885
|
+
auth0ClientSecret,
|
|
886
|
+
auth0Token,
|
|
887
|
+
graphqlSecretsPath,
|
|
888
|
+
graphqlImageTag,
|
|
889
|
+
gqRevision,
|
|
890
|
+
graphqlStandardConfigRemoteBranch,
|
|
891
|
+
repoPathToEnv,
|
|
892
|
+
commonSecrets,
|
|
893
|
+
useS3Gq,
|
|
894
|
+
);
|
|
895
|
+
|
|
896
|
+
console.log('Updating Core Site Config...');
|
|
897
|
+
await updateCoreSiteConfig(toSite, toEnv, useS3Ui, useS3Gq);
|
|
898
|
+
await pushDeployConfig(
|
|
899
|
+
repoPathToEnv,
|
|
900
|
+
`Config update for ${toSite} from ${fromSite} GraphQL: ${graphqlImageTag}`,
|
|
901
|
+
);
|
|
902
|
+
}
|