@docupace/pipeline 1.0.39-newrelease.13 → 1.0.39-newrelease.15
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/.claude/settings.local.json +16 -0
- package/bin/azuread_update_callbacks_for_app.sh +58 -0
- package/eslint.config.js +1 -1
- package/package.json +1 -1
- package/src/auth0/cli.js +5 -3
- package/src/auth0/configure.js +175 -97
- package/src/auth0/metadata.js +10 -9
- package/src/changeset/changeset-config.js +34 -0
- package/src/changeset/cli.js +42 -17
- package/src/changeset/config.js +5 -0
- package/src/changeset/version.js +22 -9
- package/src/next/apache.js +48 -10
- package/src/next/cli.js +23 -17
- package/src/next/config.js +10 -8
- package/src/next/connect.js +68 -30
- package/src/next/deploy.js +53 -6
- package/src/next/haproxy.js +24 -8
- package/src/next/jira.js +11 -7
- package/terraform/apply.sh +12 -1
- package/terraform/init.sh +12 -1
- package/terraform/plan.sh +35 -22
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enableAllProjectMcpServers": false,
|
|
3
|
+
"permissions": {
|
|
4
|
+
"allow": [
|
|
5
|
+
"Bash(NODE_OPTIONS=\"--experimental-vm-modules\" npm test)",
|
|
6
|
+
"Bash(mkdir:*)",
|
|
7
|
+
"Bash(node:*)",
|
|
8
|
+
"Bash(npm install:*)",
|
|
9
|
+
"Bash(npm run lint)",
|
|
10
|
+
"Bash(npm run:*)",
|
|
11
|
+
"Bash(npm test)",
|
|
12
|
+
"Bash(npm test:*)",
|
|
13
|
+
"Bash(npx eslint:*)"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
ENV=$1
|
|
5
|
+
|
|
6
|
+
if [ -z "$ENV" ]; then
|
|
7
|
+
echo "Usage: $0 <environment>"
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
TENANT_ID="docupace.onmicrosoft.com"
|
|
12
|
+
CLIENT_ID=$ARM_CLIENT_ID
|
|
13
|
+
CLIENT_SECRET=$ARM_CLIENT_SECRET
|
|
14
|
+
NEW_REDIRECT="https://docupace-$ENV-$SITE_NAME.us.auth0.com/login/callback"
|
|
15
|
+
APP_ID="auth0-$ENV-docupace"
|
|
16
|
+
APP_SCOPE="https://graph.microsoft.com/.default"
|
|
17
|
+
GRAPH_API="https://graph.microsoft.com/v1.0"
|
|
18
|
+
|
|
19
|
+
ACCESS_TOKEN=$(curl -s -X POST \
|
|
20
|
+
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
21
|
+
-d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&scope=$APP_SCOPE" \
|
|
22
|
+
https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token | jq -r '.access_token')
|
|
23
|
+
|
|
24
|
+
APP_DETAILS=$(curl -s -G "https://graph.microsoft.com/v1.0/applications" \
|
|
25
|
+
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
26
|
+
-H "Content-Type: application/json" \
|
|
27
|
+
--data-urlencode "\$filter=appId eq '$CLIENT_ID'")
|
|
28
|
+
|
|
29
|
+
APP_ID=$(echo "$APP_DETAILS" | jq -r '.value[0].id')
|
|
30
|
+
echo "Application ID: $APP_ID"
|
|
31
|
+
|
|
32
|
+
CURRENT_REDIRECTS=$(echo "$APP_DETAILS" | jq -r '.value[0].web.redirectUris // []')
|
|
33
|
+
echo "Current redirect URIs: $CURRENT_REDIRECTS"
|
|
34
|
+
|
|
35
|
+
if echo "$CURRENT_REDIRECTS" | jq -e --arg uri "$NEW_REDIRECT" 'index($uri)' > /dev/null; then
|
|
36
|
+
echo "Redirect URI '$NEW_REDIRECT' already exists. No update needed."
|
|
37
|
+
else
|
|
38
|
+
UPDATED_REDIRECTS=$(echo "$CURRENT_REDIRECTS" | jq --arg uri "$NEW_REDIRECT" '. + [$uri]')
|
|
39
|
+
echo "Updated redirect URIs: $UPDATED_REDIRECTS"
|
|
40
|
+
|
|
41
|
+
UPDATE_REDIRECTS=$(curl -fs -X PATCH \
|
|
42
|
+
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
43
|
+
-H "Content-Type: application/json" \
|
|
44
|
+
-d "{
|
|
45
|
+
\"web\": {
|
|
46
|
+
\"redirectUris\": $UPDATED_REDIRECTS
|
|
47
|
+
}
|
|
48
|
+
}" \
|
|
49
|
+
"https://graph.microsoft.com/v1.0/applications/$APP_ID")
|
|
50
|
+
|
|
51
|
+
if [ $? -eq 0 ]; then
|
|
52
|
+
echo "Successfully updated redirect URIs"
|
|
53
|
+
echo $UPDATE_REDIRECTS
|
|
54
|
+
else
|
|
55
|
+
echo "Failed to update redirect URIs"
|
|
56
|
+
echo $UPDATE_REDIRECTS
|
|
57
|
+
fi
|
|
58
|
+
fi
|
package/eslint.config.js
CHANGED
package/package.json
CHANGED
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> <
|
|
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
|
-
|
|
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
|
-
|
|
42
|
+
useS3Ui === 'true' || useS3Ui === true,
|
|
42
43
|
deployCCUI,
|
|
44
|
+
useS3Gq === 'true' || useS3Gq === true,
|
|
43
45
|
);
|
|
44
46
|
},
|
|
45
47
|
);
|
package/src/auth0/configure.js
CHANGED
|
@@ -10,7 +10,10 @@ import {
|
|
|
10
10
|
readDeployConfig,
|
|
11
11
|
} from '../next/deploy.js';
|
|
12
12
|
|
|
13
|
-
import {
|
|
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, {
|
|
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: {
|
|
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:
|
|
135
|
+
revision: ${revision}
|
|
124
136
|
`.trim();
|
|
125
137
|
|
|
126
138
|
// Prepare ui.values.yaml
|
|
@@ -135,29 +147,17 @@ 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
|
-
repository: registry.paperout.com/docupace-ui-main-
|
|
152
|
+
repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/enterprise-ui-app
|
|
150
153
|
tag: ${imageTag}
|
|
151
|
-
${
|
|
152
|
-
useS3 === true || useS3 === 'true'
|
|
153
|
-
? `
|
|
154
|
+
${useS3 === true || useS3 === 'true' ? `
|
|
154
155
|
serviceAccount:
|
|
155
156
|
create: true
|
|
156
157
|
annotations:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
: ''
|
|
160
|
-
}
|
|
158
|
+
"helm.sh/hook": pre-install
|
|
159
|
+
"helm.sh/hook-weight": "-10"
|
|
160
|
+
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket` : ''}
|
|
161
161
|
imagePullSecrets:
|
|
162
162
|
- name: jf-artifactory
|
|
163
163
|
ingress:
|
|
@@ -222,7 +222,7 @@ externalConnectService:
|
|
|
222
222
|
if (err) {
|
|
223
223
|
console.error('Failed to write the file:', err);
|
|
224
224
|
} else {
|
|
225
|
-
console.log(
|
|
225
|
+
console.log(`File ${repoPath}/dp/${site}/ui.app.yaml written successfully.`);
|
|
226
226
|
}
|
|
227
227
|
},
|
|
228
228
|
);
|
|
@@ -234,13 +234,11 @@ externalConnectService:
|
|
|
234
234
|
if (err) {
|
|
235
235
|
console.error('Failed to write the file:', err);
|
|
236
236
|
} else {
|
|
237
|
-
console.log(
|
|
237
|
+
console.log(`File ${repoPath}/dp/${site}/ui.values.yaml written successfully.`);
|
|
238
238
|
}
|
|
239
239
|
},
|
|
240
240
|
);
|
|
241
|
-
console.log('
|
|
242
|
-
console.log('Updating Core Site Config...');
|
|
243
|
-
await updateCoreSiteConfig(site, env, useS3);
|
|
241
|
+
console.log('The UI part is done!');
|
|
244
242
|
} catch (error) {
|
|
245
243
|
console.error('Error configuring UI:', error);
|
|
246
244
|
}
|
|
@@ -259,6 +257,7 @@ async function configureCCUI(
|
|
|
259
257
|
auth0Token,
|
|
260
258
|
vaultSiteSecretsPath,
|
|
261
259
|
imageTag,
|
|
260
|
+
revision,
|
|
262
261
|
repoPath,
|
|
263
262
|
useS3,
|
|
264
263
|
ccUrl,
|
|
@@ -275,7 +274,7 @@ async function configureCCUI(
|
|
|
275
274
|
const auth0Response = await axios.get(
|
|
276
275
|
`https://${auth0Domain}/api/v2/clients`,
|
|
277
276
|
{
|
|
278
|
-
headers: {
|
|
277
|
+
headers: {authorization: `Bearer ${auth0Token}`},
|
|
279
278
|
},
|
|
280
279
|
);
|
|
281
280
|
|
|
@@ -311,13 +310,16 @@ async function configureCCUI(
|
|
|
311
310
|
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
312
311
|
}
|
|
313
312
|
|
|
313
|
+
const awsS3Vars = (useS3 === true || useS3 === 'true')
|
|
314
|
+
? `
|
|
315
|
+
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
316
|
+
AWS_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
317
|
+
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
318
|
+
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`
|
|
319
|
+
: '';
|
|
320
|
+
|
|
314
321
|
// Prepare cc.app.yaml
|
|
315
|
-
const
|
|
316
|
-
repo: docupace-ui-main
|
|
317
|
-
revision: master
|
|
318
|
-
`.trim();
|
|
319
|
-
// Prepare cc.values.yaml
|
|
320
|
-
const uiССValuesYaml = `
|
|
322
|
+
const uiCCValuesYaml = `
|
|
321
323
|
uiMain:
|
|
322
324
|
auth0BaseUrl: https://${ccUrl}
|
|
323
325
|
auth0IssuerBaseUrl: https://${auth0Domain}
|
|
@@ -329,15 +331,9 @@ uiMain:
|
|
|
329
331
|
env:
|
|
330
332
|
AUTH0_AUDIENCE: core-api-access
|
|
331
333
|
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
|
|
334
|
+
AUTH0_SECRET: vault:secret/data/${site}/ui-cc/config#AUTH0_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
339
335
|
image:
|
|
340
|
-
repository: registry.paperout.com/docupace-ui-main-
|
|
336
|
+
repository: registry.paperout.com/docupace-ui-main-${env}-docker-local/cc-ui-app
|
|
341
337
|
tag: ${imageTag}
|
|
342
338
|
imagePullSecrets:
|
|
343
339
|
- name: jf-artifactory
|
|
@@ -358,19 +354,13 @@ ingress:
|
|
|
358
354
|
- hosts:
|
|
359
355
|
- ${ccUrl}
|
|
360
356
|
secretName: dp-cc-ui-cert
|
|
361
|
-
|
|
362
|
-
: ''
|
|
363
|
-
}
|
|
364
|
-
${
|
|
365
|
-
useS3 === true || useS3 === 'true'
|
|
366
|
-
? `
|
|
357
|
+
${useS3 === true || useS3 === 'true' ? `
|
|
367
358
|
serviceAccount:
|
|
368
359
|
create: true
|
|
369
360
|
annotations:
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
: ''
|
|
373
|
-
}
|
|
361
|
+
"helm.sh/hook": pre-install
|
|
362
|
+
"helm.sh/hook-weight": "-10"
|
|
363
|
+
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket` : ''}
|
|
374
364
|
`.trim();
|
|
375
365
|
|
|
376
366
|
console.log('Writing configuration files...');
|
|
@@ -378,32 +368,30 @@ serviceAccount:
|
|
|
378
368
|
|
|
379
369
|
await fs.writeFile(
|
|
380
370
|
`${repoPath}/dp/${site}/cc.app.yaml`,
|
|
381
|
-
|
|
371
|
+
uiCCAppYaml,
|
|
382
372
|
(err) => {
|
|
383
373
|
if (err) {
|
|
384
|
-
console.error(
|
|
374
|
+
console.error(`Failed to write ${repoPath}/dp/${site}/cc.app.yaml file:`, err);
|
|
385
375
|
} else {
|
|
386
|
-
console.log(
|
|
376
|
+
console.log(`File ${repoPath}/dp/${site}/cc.app.yaml written successfully.`);
|
|
387
377
|
}
|
|
388
378
|
},
|
|
389
379
|
);
|
|
390
380
|
|
|
391
381
|
await fs.writeFile(
|
|
392
382
|
`${repoPath}/dp/${site}/cc.values.yaml`,
|
|
393
|
-
|
|
383
|
+
uiCCValuesYaml,
|
|
394
384
|
(err) => {
|
|
395
385
|
if (err) {
|
|
396
|
-
console.error(
|
|
386
|
+
console.error(`Failed to write ${repoPath}/dp/${site}/cc.values.yaml file:`, err);
|
|
397
387
|
} else {
|
|
398
|
-
console.log(
|
|
388
|
+
console.log(`File ${repoPath}/dp/${site}/cc.values.yaml written successfully.`);
|
|
399
389
|
}
|
|
400
390
|
},
|
|
401
391
|
);
|
|
402
|
-
console.log('
|
|
403
|
-
console.log('Updating Core Site Config...');
|
|
404
|
-
await updateCoreSiteConfig(site, env, useS3);
|
|
392
|
+
console.log('CC-UI configuration is done!');
|
|
405
393
|
} catch (error) {
|
|
406
|
-
console.error('Error configuring UI:', error);
|
|
394
|
+
console.error('Error configuring CC-UI:', error);
|
|
407
395
|
}
|
|
408
396
|
}
|
|
409
397
|
|
|
@@ -418,12 +406,12 @@ export async function cleanAndWritePropertiesFile(configPath, content) {
|
|
|
418
406
|
await fs.writeFile(configPath, cleanedContent, 'utf8');
|
|
419
407
|
console.log(`Cleaned and written file to: ${configPath}`);
|
|
420
408
|
} catch (error) {
|
|
421
|
-
console.error(
|
|
409
|
+
console.error(`Error writing properties file to ${configPath}:`, error.message);
|
|
422
410
|
process.exit(1);
|
|
423
411
|
}
|
|
424
412
|
}
|
|
425
413
|
|
|
426
|
-
export async function updateCoreSiteConfig(site, env,
|
|
414
|
+
export async function updateCoreSiteConfig(site, env, useS3Ui, useS3Gq) {
|
|
427
415
|
try {
|
|
428
416
|
const coreSiteEnv = coreSiteEnvMap[env];
|
|
429
417
|
|
|
@@ -439,7 +427,7 @@ export async function updateCoreSiteConfig(site, env, useS3) {
|
|
|
439
427
|
|
|
440
428
|
let siteAWSSecrets = null;
|
|
441
429
|
|
|
442
|
-
if (
|
|
430
|
+
if (useS3Ui === true || useS3Ui === 'true' || useS3Gq === true || useS3Gq === 'true') {
|
|
443
431
|
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
444
432
|
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
445
433
|
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
@@ -447,14 +435,11 @@ export async function updateCoreSiteConfig(site, env, useS3) {
|
|
|
447
435
|
|
|
448
436
|
const coreSiteConfig = `
|
|
449
437
|
${
|
|
450
|
-
|
|
451
|
-
|
|
438
|
+
siteAWSSecrets
|
|
439
|
+
? `
|
|
452
440
|
com.docupace.imports.files.FilesImportConfig.aws.accessKeyId=${siteAWSSecrets.AWS_ACCESS_KEY_ID}
|
|
453
441
|
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
|
-
}
|
|
442
|
+
com.docupace.imports.files.FilesImportConfig.aws.region=${siteAWSSecrets.AWS_REGION}`.trim() : ''}
|
|
458
443
|
`;
|
|
459
444
|
|
|
460
445
|
await fs.ensureDir(path.join(coreSiteConfigRepoPath, site.toUpperCase()));
|
|
@@ -481,9 +466,11 @@ async function configureGraphQLServer(
|
|
|
481
466
|
auth0Token,
|
|
482
467
|
vaultSiteSecretsPath,
|
|
483
468
|
imageTag,
|
|
469
|
+
revision,
|
|
484
470
|
standardConfigRemoteBranch,
|
|
485
471
|
repoPath,
|
|
486
472
|
commonSecrets,
|
|
473
|
+
useS3,
|
|
487
474
|
) {
|
|
488
475
|
siteHost = siteHost.replace('https://', '');
|
|
489
476
|
coreURL = coreURL.replace('https://', '');
|
|
@@ -495,7 +482,7 @@ async function configureGraphQLServer(
|
|
|
495
482
|
const auth0Response = await axios.get(
|
|
496
483
|
`https://${auth0Domain}/api/v2/clients`,
|
|
497
484
|
{
|
|
498
|
-
headers: {
|
|
485
|
+
headers: {authorization: `Bearer ${auth0Token}`},
|
|
499
486
|
},
|
|
500
487
|
);
|
|
501
488
|
|
|
@@ -530,13 +517,28 @@ async function configureGraphQLServer(
|
|
|
530
517
|
|
|
531
518
|
await updateVaultSecrets(vaultSiteSecretsPath, graphQLServerSecretData);
|
|
532
519
|
|
|
533
|
-
|
|
520
|
+
let siteAWSSecrets = null;
|
|
521
|
+
|
|
522
|
+
if (useS3 === true || useS3 === 'true') {
|
|
523
|
+
const siteAWSSecretsPath = getVaultSecretsConfigs(site).awsSecretsPath;
|
|
524
|
+
siteAWSSecrets = await getVaultSecrets(siteAWSSecretsPath);
|
|
525
|
+
console.log(`siteAWSSecretsPath => ${siteAWSSecretsPath}`);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
const awsS3Vars = (useS3 === true || useS3 === 'true')
|
|
529
|
+
? `
|
|
530
|
+
AWS_ACCESS_KEY_ID: vault:secret/data/${site}/aws/config#AWS_ACCESS_KEY_ID
|
|
531
|
+
AWS_S3_BUCKET_NAME: vault:secret/data/${site}/aws/config#AWS_BUCKET_NAME
|
|
532
|
+
AWS_SECRET_ACCESS_KEY: vault:secret/data/${site}/aws/config#AWS_SECRET_ACCESS_KEY
|
|
533
|
+
AWS_REGION: vault:secret/data/${site}/aws/config#AWS_REGION`.trim()
|
|
534
|
+
: '';
|
|
535
|
+
// Prepare graphql-server.app.yaml
|
|
534
536
|
const graphQLServerAppYaml = `
|
|
535
537
|
repo: docupace-graphql-server
|
|
536
|
-
revision: ${
|
|
538
|
+
revision: ${revision}
|
|
537
539
|
`.trim();
|
|
538
540
|
|
|
539
|
-
// Prepare
|
|
541
|
+
// Prepare graphql-server.values.yaml
|
|
540
542
|
const graphQLServerValuesYaml = `
|
|
541
543
|
graphqlServer:
|
|
542
544
|
auth0Domain: https://${auth0Domain}
|
|
@@ -552,9 +554,19 @@ graphqlServer:
|
|
|
552
554
|
STANDARD_CONFIG_REMOTE_PATH: vault:secret/data/common/config#STANDARD_CONFIG_REMOTE_PATH
|
|
553
555
|
SITE_CONFIG_REMOTE_PATH: vault:secret/data/${site}/common/config#SITE_CONFIG_REMOTE_PATH
|
|
554
556
|
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
|
|
557
|
+
AUTH0_CC_CLIENT_SECRET: vault:secret/data/${site}/graphql-server/config#AUTH0_CC_CLIENT_SECRET${awsS3Vars ? '\n ' + awsS3Vars.trim() : ''}
|
|
558
|
+
${
|
|
559
|
+
useS3 === true || useS3 === 'true'
|
|
560
|
+
? `
|
|
561
|
+
serviceAccount:
|
|
562
|
+
create: true
|
|
563
|
+
annotations:
|
|
564
|
+
"helm.sh/hook": pre-install
|
|
565
|
+
"helm.sh/hook-weight": "-10"
|
|
566
|
+
eks.amazonaws.com/role-arn: arn:aws:iam::${siteAWSSecrets.AWS_ACCOUNT_ID}:role/eks-pod-identity-connect-next-${env}-${site}-bucket`.trim()
|
|
567
|
+
: ''}
|
|
556
568
|
image:
|
|
557
|
-
repository: registry.paperout.com/docupace-graphql-server-
|
|
569
|
+
repository: registry.paperout.com/docupace-graphql-server-${env}-docker-local/docupace-graphql-server
|
|
558
570
|
tag: ${imageTag}
|
|
559
571
|
imagePullSecrets:
|
|
560
572
|
- name: jf-artifactory
|
|
@@ -574,8 +586,7 @@ ingress:
|
|
|
574
586
|
tls:
|
|
575
587
|
- hosts:
|
|
576
588
|
- ${siteHost}
|
|
577
|
-
secretName: dp-next-ui-cert
|
|
578
|
-
`.trim();
|
|
589
|
+
secretName: dp-next-ui-cert`.trim();
|
|
579
590
|
|
|
580
591
|
// Write configuration files
|
|
581
592
|
console.log('Writing ArgoCD GraphQL Server configuration files...');
|
|
@@ -598,13 +609,13 @@ ingress:
|
|
|
598
609
|
graphQLServerValuesYaml,
|
|
599
610
|
(err) => {
|
|
600
611
|
if (err) {
|
|
601
|
-
console.error(
|
|
612
|
+
console.error(`Failed to write ${repoPath}/dp/${site}/graphql-server.values.yaml file:`, err);
|
|
602
613
|
} else {
|
|
603
|
-
console.log(
|
|
614
|
+
console.log(`File ${repoPath}/dp/${site}/graphql-server.values.yaml written successfully.`);
|
|
604
615
|
}
|
|
605
616
|
},
|
|
606
617
|
);
|
|
607
|
-
console.log('
|
|
618
|
+
console.log('GraphQL Server configuration is done!');
|
|
608
619
|
} catch (error) {
|
|
609
620
|
console.error('Error configuring GraphQL Server:', error);
|
|
610
621
|
}
|
|
@@ -618,8 +629,9 @@ export async function configureFromSite(
|
|
|
618
629
|
deployUI,
|
|
619
630
|
deployGraphQLServer,
|
|
620
631
|
useNewDomain,
|
|
621
|
-
|
|
632
|
+
useS3Ui,
|
|
622
633
|
deployCCUI,
|
|
634
|
+
useS3Gq,
|
|
623
635
|
) {
|
|
624
636
|
console.log(
|
|
625
637
|
`Configuring Auth0 tenants and ArgoCD apps for site: ${toSite} in env: ${toEnv} from site: ${fromSite}`,
|
|
@@ -671,36 +683,95 @@ export async function configureFromSite(
|
|
|
671
683
|
//TODO: clone fromEnv and toEnv. replace above with this
|
|
672
684
|
|
|
673
685
|
// const auth0RepoPath = await cloneRepository('auth0-site-setup');
|
|
686
|
+
let uiImageTag, uiRevision;
|
|
687
|
+
if (deployUI === true || deployUI === 'true') {
|
|
688
|
+
// Read deploy configs
|
|
689
|
+
const {deployConfig: deployUIConfig} = await readDeployConfig(
|
|
690
|
+
'ui',
|
|
691
|
+
fromEnv,
|
|
692
|
+
fromSite,
|
|
693
|
+
'values',
|
|
694
|
+
);
|
|
695
|
+
const {deployConfig: deployUiRevisionConfig} = await readDeployConfig(
|
|
696
|
+
'ui',
|
|
697
|
+
fromEnv,
|
|
698
|
+
fromSite,
|
|
699
|
+
'app',
|
|
700
|
+
);
|
|
701
|
+
|
|
702
|
+
uiImageTag = deployUIConfig.image.tag;
|
|
703
|
+
uiRevision = deployUiRevisionConfig.revision;
|
|
704
|
+
|
|
705
|
+
console.log(`Copying Latest UI Revision: ${uiRevision}`);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
let ccImageTag, ccRevision;
|
|
709
|
+
if (deployCCUI === true || deployCCUI === 'true') {
|
|
710
|
+
const {deployConfig: deployCCConfig} = await readDeployConfig(
|
|
711
|
+
'cc',
|
|
712
|
+
fromEnv,
|
|
713
|
+
fromSite,
|
|
714
|
+
'values',
|
|
715
|
+
);
|
|
674
716
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
717
|
+
const {deployConfig: deployCCRevisionConfig} = await readDeployConfig(
|
|
718
|
+
'cc',
|
|
719
|
+
fromEnv,
|
|
720
|
+
fromSite,
|
|
721
|
+
'app',
|
|
722
|
+
);
|
|
723
|
+
|
|
724
|
+
ccImageTag = deployCCConfig.image.tag;
|
|
725
|
+
ccRevision = deployCCRevisionConfig.revision;
|
|
726
|
+
|
|
727
|
+
console.log(`Copying Latest CC Revision: ${ccRevision}`);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
const {deployConfig: deployGraphQLServerConfig} = await readDeployConfig(
|
|
731
|
+
'graphql-server',
|
|
678
732
|
fromEnv,
|
|
679
733
|
fromSite,
|
|
680
734
|
'values',
|
|
681
735
|
);
|
|
682
|
-
const uiImageTag = deployUIConfig.image.tag;
|
|
683
736
|
|
|
684
|
-
const {
|
|
737
|
+
const {deployConfig: deployGraphQLServerRevisionConfig} = await readDeployConfig(
|
|
685
738
|
'graphql-server',
|
|
686
739
|
fromEnv,
|
|
687
740
|
fromSite,
|
|
688
|
-
'
|
|
741
|
+
'app',
|
|
689
742
|
);
|
|
743
|
+
|
|
744
|
+
const gqRevision = deployGraphQLServerRevisionConfig.revision;
|
|
745
|
+
|
|
746
|
+
console.log(`Copying Latest GQ Server Revision: ${gqRevision}`);
|
|
747
|
+
|
|
690
748
|
const graphqlImageTag = deployGraphQLServerConfig.image.tag;
|
|
691
749
|
const graphqlStandardConfigRemoteBranch =
|
|
692
750
|
deployGraphQLServerConfig.graphqlServer.standardConfigRemoteBranch;
|
|
693
751
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
752
|
+
if (deployUI === true || deployUI === 'true') {
|
|
753
|
+
console.log(
|
|
754
|
+
`Copying Latest UI Image Tag: ${uiImageTag} from site: ${fromSite} to site: ${toSite}`,
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
if (deployCCUI === true || deployCCUI === 'true') {
|
|
759
|
+
console.log(
|
|
760
|
+
`Copying Latest CC-UI Image Tag: ${ccImageTag} from site: ${fromSite} to site: ${toSite}`,
|
|
761
|
+
);
|
|
762
|
+
}
|
|
763
|
+
|
|
697
764
|
console.log(
|
|
698
765
|
`Copying Latest GraphQL Server Image Tag: ${deployGraphQLServerConfig.image.tag} from site: ${fromSite} to site: ${toSite}`,
|
|
699
766
|
);
|
|
700
767
|
|
|
701
768
|
const envConfig = environmentConfig[toEnv];
|
|
702
769
|
|
|
703
|
-
let CORE_URL,
|
|
770
|
+
let CORE_URL,
|
|
771
|
+
SITE_HOST,
|
|
772
|
+
CORE_API_CONTEXT,
|
|
773
|
+
CONNECT_URL,
|
|
774
|
+
DOCUPACE_HOST;
|
|
704
775
|
const newUrl = envConfig.newUrl(toSite);
|
|
705
776
|
const ccUrl = envConfig.ccUrl(toSite);
|
|
706
777
|
|
|
@@ -735,8 +806,9 @@ export async function configureFromSite(
|
|
|
735
806
|
auth0Token,
|
|
736
807
|
uiSecretsPath,
|
|
737
808
|
uiImageTag,
|
|
809
|
+
uiRevision,
|
|
738
810
|
repoPathToEnv,
|
|
739
|
-
|
|
811
|
+
useS3Ui,
|
|
740
812
|
);
|
|
741
813
|
}
|
|
742
814
|
|
|
@@ -753,9 +825,10 @@ export async function configureFromSite(
|
|
|
753
825
|
auth0ClientSecret,
|
|
754
826
|
auth0Token,
|
|
755
827
|
ccUISecretsPath,
|
|
756
|
-
|
|
828
|
+
ccImageTag,
|
|
829
|
+
ccRevision,
|
|
757
830
|
repoPathToEnv,
|
|
758
|
-
|
|
831
|
+
useS3Ui,
|
|
759
832
|
ccUrl,
|
|
760
833
|
);
|
|
761
834
|
}
|
|
@@ -772,12 +845,17 @@ export async function configureFromSite(
|
|
|
772
845
|
auth0Token,
|
|
773
846
|
graphqlSecretsPath,
|
|
774
847
|
graphqlImageTag,
|
|
848
|
+
gqRevision,
|
|
775
849
|
graphqlStandardConfigRemoteBranch,
|
|
776
850
|
repoPathToEnv,
|
|
777
851
|
commonSecrets,
|
|
852
|
+
useS3Gq,
|
|
778
853
|
);
|
|
854
|
+
|
|
855
|
+
console.log('Updating Core Site Config...');
|
|
856
|
+
await updateCoreSiteConfig(toSite, toEnv, useS3Ui, useS3Gq);
|
|
779
857
|
await pushDeployConfig(
|
|
780
858
|
repoPathToEnv,
|
|
781
|
-
`Config update for ${toSite} from ${fromSite}
|
|
859
|
+
`Config update for ${toSite} from ${fromSite} GraphQL: ${graphqlImageTag}`,
|
|
782
860
|
);
|
|
783
861
|
}
|