@docupace/pipeline 1.0.56 → 1.0.58

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.
Files changed (45) hide show
  1. package/.prettierrc.cjs +12 -12
  2. package/README.md +135 -135
  3. package/bin/azuread_update_callbacks_for_app.sh +58 -58
  4. package/bin/next-changeset-validate.sh +8 -8
  5. package/eslint.config.js +26 -26
  6. package/next/changeset.sh +75 -75
  7. package/next/copy.sh +34 -34
  8. package/next/deploy.sh +40 -40
  9. package/next/execute.sh +123 -123
  10. package/next/sonar.sh +23 -23
  11. package/package.json +50 -50
  12. package/src/auth0/alias.js +72 -72
  13. package/src/auth0/cli.js +5 -3
  14. package/src/auth0/configure.js +154 -82
  15. package/src/auth0/export.js +43 -43
  16. package/src/auth0/metadata.js +132 -132
  17. package/src/auth0/vault.js +107 -107
  18. package/src/changeset/changeset-config.js +34 -34
  19. package/src/changeset/cli.js +200 -200
  20. package/src/changeset/create.js +205 -205
  21. package/src/changeset/package-util.js +86 -86
  22. package/src/changeset/util.js +43 -43
  23. package/src/changeset/validate.js +84 -84
  24. package/src/changeset/version.js +102 -102
  25. package/src/jenkins/setParams.groovy +58 -58
  26. package/src/next/alias.js +53 -53
  27. package/src/next/apache.js +81 -81
  28. package/src/next/cli.js +226 -228
  29. package/src/next/config.js +137 -137
  30. package/src/next/connect.js +227 -227
  31. package/src/next/copy.js +61 -61
  32. package/src/next/deploy.js +600 -595
  33. package/src/next/haproxy.js +75 -75
  34. package/src/next/jira.js +84 -84
  35. package/src/next/logger.js +17 -17
  36. package/src/next/pipline.js +114 -114
  37. package/src/next/publish.js +71 -71
  38. package/src/next/pull.js +7 -7
  39. package/src/next/sonar.js +23 -23
  40. package/src/next/util.js +93 -93
  41. package/src/next/vault.js +45 -45
  42. package/terraform/apply.sh +37 -37
  43. package/terraform/init.sh +72 -72
  44. package/terraform/plan.sh +76 -76
  45. package/terraform/validate.sh +17 -17
@@ -1,72 +1,72 @@
1
- import axios from 'axios';
2
-
3
- import { createAlias } from '../next/alias.js';
4
-
5
- import { getAuth0AuthToken } from './configure.js';
6
-
7
- import { getVaultSecrets } from './vault.js';
8
-
9
- import { getVaultSecretsConfigs } from '../next/config.js';
10
-
11
- import { cloneEnvRepository, readDeployConfig } from '../next/deploy.js';
12
-
13
- export async function getCCAlias({ application, auth0Domain, auth0AuthToken }) {
14
- console.log(`Forming alias name for application ${application}...`);
15
-
16
- try {
17
- const auth0Response = await axios.get(
18
- `https://${auth0Domain}/api/v2/clients`,
19
- {
20
- headers: { authorization: `Bearer ${auth0AuthToken}` },
21
- },
22
- );
23
-
24
- const appAuth0ClientIdData = auth0Response.data.find(
25
- (client) => client.name === `${application}`,
26
- );
27
- const appAuth0ClientId = appAuth0ClientIdData.client_id;
28
-
29
- console.log(`Client Credentials Alias: ${appAuth0ClientId}@clients`);
30
- return `${appAuth0ClientId}@clients`;
31
- } catch (err) {
32
- console.error(
33
- `Failed to form alias name for application: ${application}: ${err.message}`,
34
- );
35
- }
36
- }
37
-
38
- export async function configureAlias(site, env, username, password, realm) {
39
- console.log(`Creating alias for site: ${site} in env: ${env}`);
40
- // Site Common Secrets
41
- const siteCommonSecretsPath =
42
- getVaultSecretsConfigs(site).siteCommonSecretsPath;
43
- console.log(`siteCommonSecretsPath => ${siteCommonSecretsPath}`);
44
- const siteCommonSecrets = await getVaultSecrets(siteCommonSecretsPath);
45
-
46
- const auth0Domain = `docupace-${env}-${site}.us.auth0.com`;
47
- const auth0ClientId = siteCommonSecrets.AUTH0_CLIENT_ID;
48
- const auth0ClientSecret = siteCommonSecrets.AUTH0_CLIENT_SECRET;
49
- const auth0Token = await getAuth0AuthToken(
50
- auth0Domain,
51
- auth0ClientId,
52
- auth0ClientSecret,
53
- );
54
-
55
- await cloneEnvRepository(env);
56
-
57
- const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig(
58
- 'graphql-server',
59
- env,
60
- site,
61
- 'values',
62
- );
63
- const coreUrl = deployGraphQLServerConfig.graphqlServer.coreUrl;
64
-
65
- const clientCredentialsAlias = await getCCAlias({
66
- application: 'docupace-graphql-client-credentials',
67
- auth0Domain: auth0Domain,
68
- auth0AuthToken: auth0Token,
69
- });
70
-
71
- await createAlias(coreUrl, username, password, realm, clientCredentialsAlias);
72
- }
1
+ import axios from 'axios';
2
+
3
+ import { createAlias } from '../next/alias.js';
4
+
5
+ import { getAuth0AuthToken } from './configure.js';
6
+
7
+ import { getVaultSecrets } from './vault.js';
8
+
9
+ import { getVaultSecretsConfigs } from '../next/config.js';
10
+
11
+ import { cloneEnvRepository, readDeployConfig } from '../next/deploy.js';
12
+
13
+ export async function getCCAlias({ application, auth0Domain, auth0AuthToken }) {
14
+ console.log(`Forming alias name for application ${application}...`);
15
+
16
+ try {
17
+ const auth0Response = await axios.get(
18
+ `https://${auth0Domain}/api/v2/clients`,
19
+ {
20
+ headers: { authorization: `Bearer ${auth0AuthToken}` },
21
+ },
22
+ );
23
+
24
+ const appAuth0ClientIdData = auth0Response.data.find(
25
+ (client) => client.name === `${application}`,
26
+ );
27
+ const appAuth0ClientId = appAuth0ClientIdData.client_id;
28
+
29
+ console.log(`Client Credentials Alias: ${appAuth0ClientId}@clients`);
30
+ return `${appAuth0ClientId}@clients`;
31
+ } catch (err) {
32
+ console.error(
33
+ `Failed to form alias name for application: ${application}: ${err.message}`,
34
+ );
35
+ }
36
+ }
37
+
38
+ export async function configureAlias(site, env, username, password, realm) {
39
+ console.log(`Creating alias for site: ${site} in env: ${env}`);
40
+ // Site Common Secrets
41
+ const siteCommonSecretsPath =
42
+ getVaultSecretsConfigs(site).siteCommonSecretsPath;
43
+ console.log(`siteCommonSecretsPath => ${siteCommonSecretsPath}`);
44
+ const siteCommonSecrets = await getVaultSecrets(siteCommonSecretsPath);
45
+
46
+ const auth0Domain = `docupace-${env}-${site}.us.auth0.com`;
47
+ const auth0ClientId = siteCommonSecrets.AUTH0_CLIENT_ID;
48
+ const auth0ClientSecret = siteCommonSecrets.AUTH0_CLIENT_SECRET;
49
+ const auth0Token = await getAuth0AuthToken(
50
+ auth0Domain,
51
+ auth0ClientId,
52
+ auth0ClientSecret,
53
+ );
54
+
55
+ await cloneEnvRepository(env);
56
+
57
+ const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig(
58
+ 'graphql-server',
59
+ env,
60
+ site,
61
+ 'values',
62
+ );
63
+ const coreUrl = deployGraphQLServerConfig.graphqlServer.coreUrl;
64
+
65
+ const clientCredentialsAlias = await getCCAlias({
66
+ application: 'docupace-graphql-client-credentials',
67
+ auth0Domain: auth0Domain,
68
+ auth0AuthToken: auth0Token,
69
+ });
70
+
71
+ await createAlias(coreUrl, username, password, realm, clientCredentialsAlias);
72
+ }
package/src/auth0/cli.js CHANGED
@@ -15,7 +15,7 @@ const program = new Command();
15
15
 
16
16
  program
17
17
  .command(
18
- 'configureFromSite <fromSite> <toSite> <fromEnv> <toEnv> <deployUI> <deployGraphQLServer> <useNewDomain> <useS3> <deployCCUI>',
18
+ 'configureFromSite <fromSite> <toSite> <fromEnv> <toEnv> <deployUI> <deployGraphQLServer> <useNewDomain> <useS3Ui> <deployCCUI> <useS3Gq> ',
19
19
  )
20
20
  .description('Configure the Auth0 tenants in env for the given site')
21
21
  .action(
@@ -27,8 +27,9 @@ program
27
27
  deployUI,
28
28
  deployGraphQLServer,
29
29
  useNewDomain,
30
- useS3,
30
+ useS3Ui,
31
31
  deployCCUI,
32
+ useS3Gq,
32
33
  ) => {
33
34
  await configureFromSite(
34
35
  fromSite,
@@ -38,8 +39,9 @@ program
38
39
  deployUI,
39
40
  deployGraphQLServer,
40
41
  useNewDomain,
41
- useS3 === 'true' || useS3 === true,
42
+ useS3Ui === 'true' || useS3Ui === true,
42
43
  deployCCUI,
44
+ useS3Gq === 'true' || useS3Gq === true,
43
45
  );
44
46
  },
45
47
  );
@@ -10,7 +10,10 @@ import {
10
10
  readDeployConfig,
11
11
  } from '../next/deploy.js';
12
12
 
13
- import { getVaultSecrets, updateVaultSecrets } from './vault.js';
13
+ import {
14
+ getVaultSecrets,
15
+ updateVaultSecrets
16
+ } from './vault.js';
14
17
  import {
15
18
  coreSiteEnvMap,
16
19
  environmentConfig,
@@ -19,7 +22,7 @@ import {
19
22
 
20
23
  async function ensureDirectoryExists(dirPath) {
21
24
  try {
22
- await fs.promises.mkdir(dirPath, { recursive: true });
25
+ await fs.promises.mkdir(dirPath, {recursive: true});
23
26
  console.log(`Directory created or already exists: ${dirPath}`);
24
27
  } catch (err) {
25
28
  console.error(`Failed to create directory: ${err.message}`);
@@ -67,6 +70,7 @@ async function configureUI(
67
70
  auth0Token,
68
71
  vaultSiteSecretsPath,
69
72
  imageTag,
73
+ revision,
70
74
  repoPath,
71
75
  useS3,
72
76
  ) {
@@ -81,7 +85,7 @@ async function configureUI(
81
85
  const auth0Response = await axios.get(
82
86
  `https://${auth0Domain}/api/v2/clients`,
83
87
  {
84
- headers: { authorization: `Bearer ${auth0Token}` },
88
+ headers: {authorization: `Bearer ${auth0Token}`},
85
89
  },
86
90
  );
87
91
 
@@ -117,10 +121,18 @@ async function configureUI(
117
121
  console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
118
122
  }
119
123
 
124
+ const awsS3Vars = (useS3 === true || useS3 === 'true')
125
+ ? `
126
+ AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
127
+ AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
128
+ AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
129
+ AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
130
+ : '';
131
+
120
132
  // Prepare ui.app.yaml
121
133
  const uiAppYaml = `
122
134
  repo: docupace-ui-main
123
- revision: master
135
+ revision: ${revision}
124
136
  `.trim();
125
137
 
126
138
  // Prepare ui.values.yaml
@@ -135,29 +147,19 @@ uiMain:
135
147
  coreUrl: https://${coreURL}
136
148
  env:
137
149
  AUTH0_CLIENT_SECRET: vault:secret/data/${site}/ui/config#AUTH0_CLIENT_SECRET
138
- AUTH0_SECRET: vault:secret/data/${site}/ui/config#AUTH0_SECRET
139
- ${
140
- useS3 === true || useS3 === 'true'
141
- ? `
142
- AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
143
- AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
144
- AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
145
- `.trim()
146
- : ''
147
- }
150
+ AUTH0_SECRET: vault:secret/data/${site}/ui/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
148
151
  image:
149
152
  repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/enterprise-ui-app
150
153
  tag: ${imageTag}
151
154
  ${
152
- useS3 === true || useS3 === 'true'
153
- ? `
155
+ useS3 === true || useS3 === 'true'
156
+ ? `
154
157
  serviceAccount:
155
158
  create: true
156
159
  annotations:
157
- eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket
158
- `.trim()
159
- : ''
160
- }
160
+ "helm.sh/hook": pre-install
161
+ "helm.sh/hook-weight": "-10"
162
+ eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`.trim() : ''}`.trim();`
161
163
  imagePullSecrets:
162
164
  - name: jf-artifactory
163
165
  ingress:
@@ -222,7 +224,7 @@ externalConnectService:
222
224
  if (err) {
223
225
  console.error('Failed to write the file:', err);
224
226
  } else {
225
- console.log('File written successfully.');
227
+ console.log(`File ${repoPath}/dp/${site}/ui.app.yaml written successfully.`);
226
228
  }
227
229
  },
228
230
  );
@@ -234,13 +236,11 @@ externalConnectService:
234
236
  if (err) {
235
237
  console.error('Failed to write the file:', err);
236
238
  } else {
237
- console.log('File written successfully.');
239
+ console.log(`File ${repoPath}/dp/${site}/ui.values.yaml written successfully.`);
238
240
  }
239
241
  },
240
242
  );
241
- console.log('Done!');
242
- console.log('Updating Core Site Config...');
243
- await updateCoreSiteConfig(site, env, useS3);
243
+ console.log('The UI part is done!');
244
244
  } catch (error) {
245
245
  console.error('Error configuring UI:', error);
246
246
  }
@@ -259,6 +259,7 @@ async function configureCCUI(
259
259
  auth0Token,
260
260
  vaultSiteSecretsPath,
261
261
  imageTag,
262
+ revision,
262
263
  repoPath,
263
264
  useS3,
264
265
  ccUrl,
@@ -275,7 +276,7 @@ async function configureCCUI(
275
276
  const auth0Response = await axios.get(
276
277
  `https://${auth0Domain}/api/v2/clients`,
277
278
  {
278
- headers: { authorization: `Bearer ${auth0Token}` },
279
+ headers: {authorization: `Bearer ${auth0Token}`},
279
280
  },
280
281
  );
281
282
 
@@ -311,13 +312,21 @@ async function configureCCUI(
311
312
  console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
312
313
  }
313
314
 
315
+ const awsS3Vars = (useS3 === true || useS3 === 'true')
316
+ ? `
317
+ AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
318
+ AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
319
+ AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
320
+ AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
321
+ : '';
322
+
314
323
  // Prepare cc.app.yaml
315
- const uiССAppYaml = `
324
+ const uiCCAppYaml = `
316
325
  repo: docupace-ui-main
317
- revision: master
326
+ revision: ${revision}
318
327
  `.trim();
319
328
  // Prepare cc.values.yaml
320
- const uiССValuesYaml = `
329
+ const uiCCValuesYaml = `
321
330
  uiMain:
322
331
  auth0BaseUrl: https://${ccUrl}
323
332
  auth0IssuerBaseUrl: https://${auth0Domain}
@@ -329,13 +338,7 @@ uiMain:
329
338
  env:
330
339
  AUTH0_AUDIENCE: core-api-access
331
340
  AUTH0_CLIENT_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_CLIENT_SECRET
332
- AUTH0_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_SECRET
333
- ${
334
- useS3 === true || useS3 === 'true'
335
- ? `
336
- AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
337
- AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
338
- AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
341
+ AUTH0_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
339
342
  image:
340
343
  repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/cc-ui-app
341
344
  tag: ${imageTag}
@@ -358,52 +361,45 @@ ingress:
358
361
  - hosts:
359
362
  - ${ccUrl}
360
363
  secretName: dp-cc-ui-cert
361
- `.trim()
362
- : ''
363
- }
364
364
  ${
365
- useS3 === true || useS3 === 'true'
366
- ? `
365
+ useS3 === true || useS3 === 'true'
366
+ ? `
367
367
  serviceAccount:
368
368
  create: true
369
369
  annotations:
370
- eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket
371
- `.trim()
372
- : ''
373
- }
374
- `.trim();
370
+ "helm.sh/hook": pre-install
371
+ "helm.sh/hook-weight": "-10"
372
+ eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`.trim() : ''}`.trim();
375
373
 
376
374
  console.log('Writing configuration files...');
377
375
  await ensureDirectoryExists(path.resolve(`${repoPath}/dp/${site}`));
378
376
 
379
377
  await fs.writeFile(
380
378
  `${repoPath}/dp/${site}/cc.app.yaml`,
381
- uiССAppYaml,
379
+ uiCCAppYaml,
382
380
  (err) => {
383
381
  if (err) {
384
- console.error('Failed to write the file:', err);
382
+ console.error(`Failed to write ${repoPath}/dp/${site}/cc.app.yaml file:`, err);
385
383
  } else {
386
- console.log('File written successfully.');
384
+ console.log(`File ${repoPath}/dp/${site}/cc.app.yaml written successfully.`);
387
385
  }
388
386
  },
389
387
  );
390
388
 
391
389
  await fs.writeFile(
392
390
  `${repoPath}/dp/${site}/cc.values.yaml`,
393
- uiССValuesYaml,
391
+ uiCCValuesYaml,
394
392
  (err) => {
395
393
  if (err) {
396
- console.error('Failed to write the file:', err);
394
+ console.error(`Failed to write ${repoPath}/dp/${site}/cc.values.yaml file:`, err);
397
395
  } else {
398
- console.log('File written successfully.');
396
+ console.log(`File ${repoPath}/dp/${site}/cc.values.yaml written successfully.`);
399
397
  }
400
398
  },
401
399
  );
402
- console.log('Done!');
403
- console.log('Updating Core Site Config...');
404
- await updateCoreSiteConfig(site, env, useS3);
400
+ console.log('CC-UI configuration is done!');
405
401
  } catch (error) {
406
- console.error('Error configuring UI:', error);
402
+ console.error('Error configuring CC-UI:', error);
407
403
  }
408
404
  }
409
405
 
@@ -418,12 +414,12 @@ export async function cleanAndWritePropertiesFile(configPath, content) {
418
414
  await fs.writeFile(configPath, cleanedContent, 'utf8');
419
415
  console.log(`Cleaned and written file to: ${configPath}`);
420
416
  } catch (error) {
421
- console.error('Error writing properties file:', error.message);
417
+ console.error(`Error writing properties file to ${configPath}:`, error.message);
422
418
  process.exit(1);
423
419
  }
424
420
  }
425
421
 
426
- export async function updateCoreSiteConfig(site, env, useS3) {
422
+ export async function updateCoreSiteConfig(site, env, useS3Ui, useS3Gq) {
427
423
  try {
428
424
  const coreSiteEnv = coreSiteEnvMap[env];
429
425
 
@@ -439,7 +435,7 @@ export async function updateCoreSiteConfig(site, env, useS3) {
439
435
 
440
436
  let siteAWSSecrets = null;
441
437
 
442
- if (useS3 === true || useS3 === 'true') {
438
+ if (useS3Ui === true || useS3Ui === 'true' || useS3Gq === true || useS3Gq === 'true') {
443
439
  const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
444
440
  siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
445
441
  console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
@@ -447,14 +443,11 @@ export async function updateCoreSiteConfig(site, env, useS3) {
447
443
 
448
444
  const coreSiteConfig = `
449
445
  ${
450
- siteAWSSecrets
451
- ? `
446
+ siteAWSSecrets
447
+ ? `
452
448
  com.docupace.imports.files.FilesImportConfig.aws.accessKeyId=${siteAWSSecrets.AWS_ACCESS_KEY_ID}
453
449
  com.docupace.imports.files.FilesImportConfig.aws.accessKeySecret=${siteAWSSecrets.AWS_SECRET_ACCESS_KEY}
454
- com.docupace.imports.files.FilesImportConfig.aws.region=${siteAWSSecrets.AWS_REGION}
455
- `.trim()
456
- : ''
457
- }
450
+ com.docupace.imports.files.FilesImportConfig.aws.region=${siteAWSSecrets.AWS_REGION}`.trim() : ''}
458
451
  `;
459
452
 
460
453
  await fs.ensureDir(path.join(coreSiteConfigRepoPath, site.toUpperCase()));
@@ -481,9 +474,11 @@ async function configureGraphQLServer(
481
474
  auth0Token,
482
475
  vaultSiteSecretsPath,
483
476
  imageTag,
477
+ revision,
484
478
  standardConfigRemoteBranch,
485
479
  repoPath,
486
480
  commonSecrets,
481
+ useS3,
487
482
  ) {
488
483
  siteHost = siteHost.replace('https://', '');
489
484
  coreURL = coreURL.replace('https://', '');
@@ -495,7 +490,7 @@ async function configureGraphQLServer(
495
490
  const auth0Response = await axios.get(
496
491
  `https://${auth0Domain}/api/v2/clients`,
497
492
  {
498
- headers: { authorization: `Bearer ${auth0Token}` },
493
+ headers: {authorization: `Bearer ${auth0Token}`},
499
494
  },
500
495
  );
501
496
 
@@ -530,13 +525,28 @@ async function configureGraphQLServer(
530
525
 
531
526
  await updateVaultSecrets(vaultSiteSecretsPath, graphQLServerSecretData);
532
527
 
533
- // Prepare ui.app.yaml
528
+ let siteAWSSecrets = null;
529
+
530
+ if (useS3 === true || useS3 === 'true') {
531
+ const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
532
+ siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
533
+ console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
534
+ }
535
+
536
+ const awsS3Vars = (useS3 === true || useS3 === 'true')
537
+ ? `
538
+ AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
539
+ AWS_S3_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
540
+ AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
541
+ AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`.trim()
542
+ : '';
543
+ // Prepare graphql-server.app.yaml
534
544
  const graphQLServerAppYaml = `
535
545
  repo: docupace-graphql-server
536
- revision: ${standardConfigRemoteBranch}
546
+ revision: ${revision}
537
547
  `.trim();
538
548
 
539
- // Prepare ui.values.yaml
549
+ // Prepare graphql-server.values.yaml
540
550
  const graphQLServerValuesYaml = `
541
551
  graphqlServer:
542
552
  auth0Domain: https://${auth0Domain}
@@ -552,7 +562,17 @@ graphqlServer:
552
562
  STANDARD_CONFIG_REMOTE_PATH: vault:secret/data/common/config#STANDARD_CONFIG_REMOTE_PATH
553
563
  SITE_CONFIG_REMOTE_PATH: vault:secret/data/${site}/common/config#SITE_CONFIG_REMOTE_PATH
554
564
  AUTH0_CC_CLIENT_ID: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_ID
555
- AUTH0_CC_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_SECRET
565
+ AUTH0_CC_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
566
+ ${
567
+ useS3 === true || useS3 === 'true'
568
+ ? `
569
+ serviceAccount:
570
+ create: true
571
+ annotations:
572
+ "helm.sh/hook": pre-install
573
+ "helm.sh/hook-weight": "-10"
574
+ eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`.trim()
575
+ : ''}
556
576
  image:
557
577
  repository: registry.paperout.com/docupace-graphql-server-${env}-docker-local/docupace-graphql-server
558
578
  tag: ${imageTag}
@@ -574,8 +594,7 @@ ingress:
574
594
  tls:
575
595
  - hosts:
576
596
  - ${siteHost}
577
- secretName: dp-next-ui-cert
578
- `.trim();
597
+ secretName: dp-next-ui-cert`.trim();
579
598
 
580
599
  // Write configuration files
581
600
  console.log('Writing ArgoCD GraphQL Server configuration files...');
@@ -598,13 +617,13 @@ ingress:
598
617
  graphQLServerValuesYaml,
599
618
  (err) => {
600
619
  if (err) {
601
- console.error('Failed to write the file:', err);
620
+ console.error(`Failed to write ${repoPath}/dp/${site}/graphql-server.values.yaml file:`, err);
602
621
  } else {
603
- console.log('File written successfully.');
622
+ console.log(`File ${repoPath}/dp/${site}/graphql-server.values.yaml written successfully.`);
604
623
  }
605
624
  },
606
625
  );
607
- console.log('Done!');
626
+ console.log('GraphQL Server configuration is done!');
608
627
  } catch (error) {
609
628
  console.error('Error configuring GraphQL Server:', error);
610
629
  }
@@ -618,8 +637,9 @@ export async function configureFromSite(
618
637
  deployUI,
619
638
  deployGraphQLServer,
620
639
  useNewDomain,
621
- useS3,
640
+ useS3Ui,
622
641
  deployCCUI,
642
+ useS3Gq,
623
643
  ) {
624
644
  console.log(
625
645
  `Configuring Auth0 tenants and ArgoCD apps for site: ${toSite} in env: ${toEnv} from site: ${fromSite}`,
@@ -673,20 +693,61 @@ export async function configureFromSite(
673
693
  // const auth0RepoPath = await cloneRepository('auth0-site-setup');
674
694
 
675
695
  // Read deploy configs
676
- const { deployConfig: deployUIConfig } = await readDeployConfig(
696
+ const {deployConfig: deployUIConfig} = await readDeployConfig(
677
697
  'ui',
678
698
  fromEnv,
679
699
  fromSite,
680
700
  'values',
681
701
  );
702
+ const {deployConfig: deployUiRevisionConfig} = await readDeployConfig(
703
+ 'ui',
704
+ fromEnv,
705
+ fromSite,
706
+ 'app',
707
+ );
708
+
682
709
  const uiImageTag = deployUIConfig.image.tag;
710
+ const uiRevision = deployUiRevisionConfig.revision;
711
+
712
+ console.log(`Copying Latest UI Revision: ${uiRevision}`);
683
713
 
684
- const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig(
714
+ const {deployConfig: deployCCConfig} = await readDeployConfig(
715
+ 'cc',
716
+ fromEnv,
717
+ fromSite,
718
+ 'values',
719
+ );
720
+
721
+ const {deployConfig: deployCCRevisionConfig} = await readDeployConfig(
722
+ 'cc',
723
+ fromEnv,
724
+ fromSite,
725
+ 'app',
726
+ );
727
+
728
+ const ccImageTag = deployCCConfig.image.tag;
729
+ const ccRevision = deployCCRevisionConfig.revision;
730
+
731
+ console.log(`Copying Latest CC Revision: ${uiRevision}`);
732
+
733
+ const {deployConfig: deployGraphQLServerConfig} = await readDeployConfig(
685
734
  'graphql-server',
686
735
  fromEnv,
687
736
  fromSite,
688
737
  'values',
689
738
  );
739
+
740
+ const {deployConfig: deployGraphQLServerRevisionConfig} = await readDeployConfig(
741
+ 'graphql-server',
742
+ fromEnv,
743
+ fromSite,
744
+ 'app',
745
+ );
746
+
747
+ const gqRevision = deployGraphQLServerRevisionConfig.revision;
748
+
749
+ console.log(`Copying Latest GQ Server Revision: ${gqRevision}`);
750
+
690
751
  const graphqlImageTag = deployGraphQLServerConfig.image.tag;
691
752
  const graphqlStandardConfigRemoteBranch =
692
753
  deployGraphQLServerConfig.graphqlServer.standardConfigRemoteBranch;
@@ -700,7 +761,11 @@ export async function configureFromSite(
700
761
 
701
762
  const envConfig = environmentConfig[toEnv];
702
763
 
703
- let CORE_URL, SITE_HOST, CORE_API_CONTEXT, CONNECT_URL, DOCUPACE_HOST;
764
+ let CORE_URL,
765
+ SITE_HOST,
766
+ CORE_API_CONTEXT,
767
+ CONNECT_URL,
768
+ DOCUPACE_HOST;
704
769
  const newUrl = envConfig.newUrl(toSite);
705
770
  const ccUrl = envConfig.ccUrl(toSite);
706
771
 
@@ -735,8 +800,9 @@ export async function configureFromSite(
735
800
  auth0Token,
736
801
  uiSecretsPath,
737
802
  uiImageTag,
803
+ uiRevision,
738
804
  repoPathToEnv,
739
- useS3,
805
+ useS3Ui,
740
806
  );
741
807
  }
742
808
 
@@ -753,9 +819,10 @@ export async function configureFromSite(
753
819
  auth0ClientSecret,
754
820
  auth0Token,
755
821
  ccUISecretsPath,
756
- uiImageTag,
822
+ ccImageTag,
823
+ ccRevision,
757
824
  repoPathToEnv,
758
- useS3,
825
+ useS3Ui,
759
826
  ccUrl,
760
827
  );
761
828
  }
@@ -772,10 +839,15 @@ export async function configureFromSite(
772
839
  auth0Token,
773
840
  graphqlSecretsPath,
774
841
  graphqlImageTag,
842
+ gqRevision,
775
843
  graphqlStandardConfigRemoteBranch,
776
844
  repoPathToEnv,
777
845
  commonSecrets,
846
+ useS3Gq,
778
847
  );
848
+
849
+ console.log('Updating Core Site Config...');
850
+ await updateCoreSiteConfig(toSite, toEnv, useS3Ui, useS3Gq);
779
851
  await pushDeployConfig(
780
852
  repoPathToEnv,
781
853
  `Config update for ${toSite} from ${fromSite} with UI: ${uiImageTag} and GraphQL: ${graphqlImageTag}`,