@docupace/pipeline 1.0.15 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/auth0/cli.js +3 -3
- package/src/auth0/configure.js +54 -14
- package/src/next/apache.js +8 -4
- package/src/next/connect.js +17 -8
package/package.json
CHANGED
package/src/auth0/cli.js
CHANGED
|
@@ -18,10 +18,10 @@ dotenv.config({ path: ['.env.pipeline.local', 'config/.env.pipeline.local'] });
|
|
|
18
18
|
const program = new Command();
|
|
19
19
|
|
|
20
20
|
program
|
|
21
|
-
.command('configureFromSite <fromSite> <toSite> <
|
|
21
|
+
.command('configureFromSite <fromSite> <toSite> <fromEnv> <toEnv> <deployUI> <deployGraphQLServer> <useNewDomain>')
|
|
22
22
|
.description('Configure the Auth0 tenants in env for the given site')
|
|
23
|
-
.action(async (fromSite, toSite,
|
|
24
|
-
await configureFromSite(fromSite, toSite,
|
|
23
|
+
.action(async (fromSite, toSite, fromEnv,toEnv, deployUI, deployGraphQLServer, useNewDomain) => {
|
|
24
|
+
await configureFromSite(fromSite, toSite, fromEnv, toEnv, deployUI, deployGraphQLServer, useNewDomain);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
program
|
package/src/auth0/configure.js
CHANGED
|
@@ -159,6 +159,8 @@ async function templateAuth0(siteUrl, coreApiContext, env, filePaths, deployUI,
|
|
|
159
159
|
uiAllowedLogoutUrls;
|
|
160
160
|
let graphqlAllowedCallbacksUrls,
|
|
161
161
|
graphqlAllowedLogoutUrls;
|
|
162
|
+
let connectAllowedCallbacksUrls,
|
|
163
|
+
connectlAllowedLogoutUrls;
|
|
162
164
|
|
|
163
165
|
// Configure URLs based on environment
|
|
164
166
|
if (env === 'prd') {
|
|
@@ -167,6 +169,9 @@ async function templateAuth0(siteUrl, coreApiContext, env, filePaths, deployUI,
|
|
|
167
169
|
|
|
168
170
|
graphqlAllowedCallbacksUrls = [`${siteUrl}/api/graphql/callback`];
|
|
169
171
|
graphqlAllowedLogoutUrls = [`${siteUrl}/api/graphql/`];
|
|
172
|
+
|
|
173
|
+
connectAllowedCallbacksUrls = [`${siteUrl}/connect/samlCallback?client_name=auth0`];
|
|
174
|
+
connectlAllowedLogoutUrls = [ `${siteUrl}/connect`];
|
|
170
175
|
} else {
|
|
171
176
|
uiAllowedCallbacksUrls = [
|
|
172
177
|
`${siteUrl}/api/auth/callback`,
|
|
@@ -176,7 +181,6 @@ async function templateAuth0(siteUrl, coreApiContext, env, filePaths, deployUI,
|
|
|
176
181
|
`${siteUrl}`,
|
|
177
182
|
`http://localhost:3000`,
|
|
178
183
|
];
|
|
179
|
-
|
|
180
184
|
graphqlAllowedCallbacksUrls = [
|
|
181
185
|
`${siteUrl}/api/graphql/callback`,
|
|
182
186
|
`http://localhost:4000/api/graphql/callback`,
|
|
@@ -185,6 +189,13 @@ async function templateAuth0(siteUrl, coreApiContext, env, filePaths, deployUI,
|
|
|
185
189
|
`http://localhost:4000/api/graphql/`,
|
|
186
190
|
`${siteUrl}/api/graphql/`,
|
|
187
191
|
];
|
|
192
|
+
connectAllowedCallbacksUrls = [
|
|
193
|
+
`${siteUrl}/connect/samlCallback?client_name=auth0`,
|
|
194
|
+
`http://localhost:9000/connect/samlCallback?client_name=auth0`,
|
|
195
|
+
];
|
|
196
|
+
connectlAllowedLogoutUrls = [
|
|
197
|
+
`${siteUrl}/connect`
|
|
198
|
+
];
|
|
188
199
|
}
|
|
189
200
|
|
|
190
201
|
const configureUI = deployUI === 'true';
|
|
@@ -196,6 +207,16 @@ async function templateAuth0(siteUrl, coreApiContext, env, filePaths, deployUI,
|
|
|
196
207
|
callbacks: uiAllowedCallbacksUrls,
|
|
197
208
|
allowed_logout_urls: uiAllowedLogoutUrls,
|
|
198
209
|
});
|
|
210
|
+
|
|
211
|
+
//TODO: move to separate function for connect
|
|
212
|
+
console.log('connect_allowed_callbacks_urls ->', connectAllowedCallbacksUrls);
|
|
213
|
+
console.log('connect_allowed_logout_urls ->', connectlAllowedLogoutUrls);
|
|
214
|
+
|
|
215
|
+
await updateJsonFile(filePaths.connectJson, {
|
|
216
|
+
callbacks: connectAllowedCallbacksUrls,
|
|
217
|
+
allowed_logout_urls: connectlAllowedLogoutUrls,
|
|
218
|
+
});
|
|
219
|
+
|
|
199
220
|
console.log('Updated URLs for main UI...');
|
|
200
221
|
} else {
|
|
201
222
|
await fs.promises.unlink(filePaths.uiJson);
|
|
@@ -249,7 +270,8 @@ async function templateAuth0(siteUrl, coreApiContext, env, filePaths, deployUI,
|
|
|
249
270
|
|
|
250
271
|
console.log('Template configuration completed.');
|
|
251
272
|
} catch (err) {
|
|
252
|
-
console.error('Error configuring Auth0 templates:', err);
|
|
273
|
+
// console.error('Error configuring Auth0 templates:', err);
|
|
274
|
+
throw err;
|
|
253
275
|
}
|
|
254
276
|
}
|
|
255
277
|
|
|
@@ -276,6 +298,9 @@ export async function getAuth0AuthToken(auth0Domain, clientId, clientSecret) {
|
|
|
276
298
|
|
|
277
299
|
async function configureUI(siteHost, coreURL, docupaceHost, site, env, useNewDomain, auth0Domain, auth0ClientId, auth0ClientSecret, auth0Token, vaultSiteSecretsPath, imageTag, repoPath) {
|
|
278
300
|
console.log(`Configuring UI for site: ${site} Host: ${siteHost} in env: ${env}`);
|
|
301
|
+
siteHost = siteHost.replace('https://', '');
|
|
302
|
+
coreURL = coreURL.replace('https://', '');
|
|
303
|
+
|
|
279
304
|
|
|
280
305
|
try {
|
|
281
306
|
const auth0Response = await axios.get(`https://${auth0Domain}/api/v2/clients`, {
|
|
@@ -403,6 +428,8 @@ externalConnectService:
|
|
|
403
428
|
}
|
|
404
429
|
|
|
405
430
|
async function configureGraphQLServer(siteHost, coreURL, docupaceHost, site, env, auth0Domain, auth0ClientId, auth0ClientSecret, auth0Token, vaultSiteSecretsPath, imageTag, standardConfigRemoteBranch, repoPath, commonSecrets) {
|
|
431
|
+
siteHost = siteHost.replace('https://', '');
|
|
432
|
+
coreURL = coreURL.replace('https://', '');
|
|
406
433
|
console.log(`Configuring GraphQL Server for site: ${site} Host: ${siteHost} in env: ${env}`);
|
|
407
434
|
|
|
408
435
|
try {
|
|
@@ -507,8 +534,9 @@ ingress:
|
|
|
507
534
|
}
|
|
508
535
|
}
|
|
509
536
|
|
|
510
|
-
|
|
511
|
-
|
|
537
|
+
|
|
538
|
+
export async function configureFromSite(fromSite, toSite, fromEnv,toEnv, deployUI, deployGraphQLServer, useNewDomain) {
|
|
539
|
+
console.log(`Configuring Auth0 tenants and ArgoCD apps for site: ${toSite} in env: ${toEnv} from site: ${fromSite}`);
|
|
512
540
|
// Common Secrets
|
|
513
541
|
const commonSecretsPath = getVaultSecretsConfigs(toSite).commonSecretsPath;
|
|
514
542
|
console.log(`commonSecretsPath => ${commonSecretsPath}`)
|
|
@@ -519,7 +547,7 @@ export async function configureFromSite(fromSite, toSite, env, deployUI, deployG
|
|
|
519
547
|
console.log(`siteCommonSecretsPath => ${siteCommonSecretsPath}`)
|
|
520
548
|
const siteCommonSecrets = await getVaultSecrets(siteCommonSecretsPath);
|
|
521
549
|
|
|
522
|
-
const auth0Domain = `docupace-${
|
|
550
|
+
const auth0Domain = `docupace-${toEnv}-${toSite}.us.auth0.com`
|
|
523
551
|
const auth0ClientId = siteCommonSecrets.AUTH0_CLIENT_ID;
|
|
524
552
|
const auth0ClientSecret = siteCommonSecrets.AUTH0_CLIENT_SECRET;
|
|
525
553
|
const auth0Token = await getAuth0AuthToken(auth0Domain, auth0ClientId, auth0ClientSecret);
|
|
@@ -530,17 +558,28 @@ export async function configureFromSite(fromSite, toSite, env, deployUI, deployG
|
|
|
530
558
|
|
|
531
559
|
// GraphQL-Server app
|
|
532
560
|
const graphqlSecretsPath = getVaultSecretsConfigs(toSite).graphqlServerSecretsPath;
|
|
533
|
-
console.log(`graphqlSecretsPath => ${graphqlSecretsPath}`)
|
|
561
|
+
console.log(`graphqlSecretsPath => ${graphqlSecretsPath}`);
|
|
534
562
|
|
|
563
|
+
let repoPathFromEnv ="";
|
|
564
|
+
let repoPathToEnv = "";
|
|
535
565
|
// Clone repositories
|
|
536
|
-
|
|
566
|
+
if ( fromEnv == toEnv ) {
|
|
567
|
+
repoPathFromEnv = await cloneEnvRepository(fromEnv);
|
|
568
|
+
repoPathToEnv = repoPathFromEnv;
|
|
569
|
+
}else {
|
|
570
|
+
repoPathFromEnv = await cloneEnvRepository(fromEnv);
|
|
571
|
+
repoPathToEnv = await cloneEnvRepository(toEnv);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
//TODO: clone fromEnv and toEnv. replace above with this
|
|
575
|
+
|
|
537
576
|
const auth0RepoPath = await cloneRepository('auth0-site-setup');
|
|
538
577
|
|
|
539
578
|
// Read deploy configs
|
|
540
|
-
const { deployConfig: deployUIConfig } = await readDeployConfig('ui',
|
|
579
|
+
const { deployConfig: deployUIConfig } = await readDeployConfig('ui', fromEnv, fromSite, 'values');
|
|
541
580
|
const uiImageTag = deployUIConfig.image.tag;
|
|
542
581
|
|
|
543
|
-
const { deployConfig: deployGraphQLServerConfig} = await readDeployConfig('graphql-server',
|
|
582
|
+
const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig('graphql-server', fromEnv, fromSite, 'values');
|
|
544
583
|
const graphqlImageTag = deployGraphQLServerConfig.image.tag;
|
|
545
584
|
const graphqlStandardConfigRemoteBranch = deployGraphQLServerConfig.graphqlServer.standardConfigRemoteBranch;
|
|
546
585
|
|
|
@@ -551,6 +590,7 @@ export async function configureFromSite(fromSite, toSite, env, deployUI, deployG
|
|
|
551
590
|
loginHtml: './auth0-site-setup/template/pages/login.html',
|
|
552
591
|
graphqlJson: './auth0-site-setup/template/clients/docupace-graphql.json',
|
|
553
592
|
uiJson: './auth0-site-setup/template/clients/docupace-ui-main.json',
|
|
593
|
+
connectJson: './auth0-site-setup/template/clients/docupace-connect.json',
|
|
554
594
|
databaseJson: './auth0-site-setup/template/database-connections/docupace/database.json',
|
|
555
595
|
twilioJson: './auth0-site-setup/template/guardian/providers/sms-twilio.json',
|
|
556
596
|
};
|
|
@@ -558,7 +598,7 @@ export async function configureFromSite(fromSite, toSite, env, deployUI, deployG
|
|
|
558
598
|
console.log(`Copying Latest UI Image Tag: ${deployUIConfig.image.tag} from site: ${fromSite} to site: ${toSite}`);
|
|
559
599
|
console.log(`Copying Latest GraphQL Server Image Tag: ${deployGraphQLServerConfig.image.tag} from site: ${fromSite} to site: ${toSite}`);
|
|
560
600
|
|
|
561
|
-
const envConfig = environmentConfig[
|
|
601
|
+
const envConfig = environmentConfig[toEnv];
|
|
562
602
|
|
|
563
603
|
let CORE_URL,
|
|
564
604
|
SITE_HOST,
|
|
@@ -580,15 +620,15 @@ export async function configureFromSite(fromSite, toSite, env, deployUI, deployG
|
|
|
580
620
|
CONNECT_URL = `${oldUrl}_ui`;
|
|
581
621
|
}
|
|
582
622
|
|
|
583
|
-
await templateAuth0(SITE_HOST, CORE_API_CONTEXT,
|
|
623
|
+
await templateAuth0(SITE_HOST, CORE_API_CONTEXT, toEnv, filePaths, deployUI, deployGraphQLServer, commonSecrets);
|
|
584
624
|
await importAuth0Templates('./auth0-site-setup/template', auth0Domain, auth0ClientId, auth0ClientSecret);
|
|
585
625
|
|
|
586
626
|
if (deployUI === 'true') {
|
|
587
|
-
await configureUI(SITE_HOST, CORE_URL, DOCUPACE_HOST, toSite,
|
|
627
|
+
await configureUI(SITE_HOST, CORE_URL, DOCUPACE_HOST, toSite, toEnv, useNewDomain, auth0Domain, auth0ClientId, auth0ClientSecret, auth0Token, uiSecretsPath, uiImageTag, repoPathToEnv);
|
|
588
628
|
}
|
|
589
629
|
|
|
590
|
-
await configureGraphQLServer(SITE_HOST, CORE_URL, DOCUPACE_HOST, toSite,
|
|
591
|
-
await pushDeployConfig(
|
|
630
|
+
await configureGraphQLServer(SITE_HOST, CORE_URL, DOCUPACE_HOST, toSite, toEnv, auth0Domain, auth0ClientId, auth0ClientSecret, auth0Token, graphqlSecretsPath, graphqlImageTag, graphqlStandardConfigRemoteBranch, repoPathToEnv, commonSecrets);
|
|
631
|
+
await pushDeployConfig(repoPathToEnv, `Config update for ${toSite} from ${fromSite} with UI: ${uiImageTag} and GraphQL: ${graphqlImageTag}`);
|
|
592
632
|
|
|
593
633
|
await initializeAuth0Configuration({
|
|
594
634
|
initConfiguration: "true",
|
package/src/next/apache.js
CHANGED
|
@@ -23,14 +23,18 @@ export async function addApacheSite() {
|
|
|
23
23
|
await fs.writeFile('private.key', Buffer.from(haproxyPrivateKey, 'base64'));
|
|
24
24
|
await fs.chmod('private.key', 0o600);
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
console.log("Running command");
|
|
28
|
-
const sshCmd = (script) =>
|
|
28
|
+
const sshCmd = (server,script) =>
|
|
29
29
|
$`ssh -i private.key -o StrictHostKeyChecking=no root@${server} ${script}`;
|
|
30
30
|
|
|
31
|
+
let server = `${process.env.ENVIRONMENT}-apalb01a.corp.docupace.com`;
|
|
31
32
|
// The script is run twice in the Bash version
|
|
32
|
-
await sshCmd(`/root/repo/iis-preprod/scripts/addsite/add_core_site.sh ${process.env.ENVIRONMENT} ${process.env.SITE}`);
|
|
33
|
-
|
|
33
|
+
await sshCmd(server, `/root/repo/iis-preprod/scripts/addsite/add_core_site.sh ${process.env.ENVIRONMENT} ${process.env.SITE}`);
|
|
34
|
+
|
|
35
|
+
server = `${process.env.ENVIRONMENT}-apalb01b.corp.docupace.com`;
|
|
36
|
+
|
|
37
|
+
await sshCmd(server,`/root/repo/iis-preprod/scripts/addsite/add_core_site.sh ${process.env.ENVIRONMENT} ${process.env.SITE}`);
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
|
package/src/next/connect.js
CHANGED
|
@@ -25,6 +25,14 @@ process.env.CONNECT_DIR = process.env.CONNECT_DIR || 'connect';
|
|
|
25
25
|
const vaultToken = process.env.VAULT_TOKEN;
|
|
26
26
|
const vaultAddr = process.env.VAULT_ADDR;
|
|
27
27
|
|
|
28
|
+
const connectUIEnvMap= {
|
|
29
|
+
'dev': 'dev',
|
|
30
|
+
'qa': 'preprod',
|
|
31
|
+
'stg': 'stg',
|
|
32
|
+
'uat': 'uat',
|
|
33
|
+
'prd': 'prod-las'
|
|
34
|
+
};
|
|
35
|
+
|
|
28
36
|
function log(msg) {
|
|
29
37
|
console.log(`[*] ${msg}`);
|
|
30
38
|
}
|
|
@@ -57,8 +65,8 @@ function log(msg) {
|
|
|
57
65
|
|
|
58
66
|
|
|
59
67
|
export async function connectClone() {
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
const connectFromEnv = connectUIEnvMap[process.env.BUILD_ENVIRONMENT];
|
|
69
|
+
const connectToEnv = connectUIEnvMap[process.env.BUILD_ENVIRONMENT];
|
|
62
70
|
if (!vaultToken || !vaultAddr) {
|
|
63
71
|
console.error("Error: VAULT_TOKEN and VAULT_ADDR must be set.");
|
|
64
72
|
throw new Error("VAULT_TOKEN and VAULT_ADDR must be set.");
|
|
@@ -87,7 +95,7 @@ export async function connectClone() {
|
|
|
87
95
|
|
|
88
96
|
process.env.AUTH0_REGION_DOMAIN="us.auth0.com";
|
|
89
97
|
|
|
90
|
-
log(`BUILD_ENVIRONMENT: ${
|
|
98
|
+
log(`BUILD_ENVIRONMENT: ${connectToEnv}`);
|
|
91
99
|
log(`BUILD_SITE: ${process.env.BUILD_SITE}`);
|
|
92
100
|
log(`AUTH0_SUBDOMAIN: ${process.env.AUTH0_SUBDOMAIN}`);
|
|
93
101
|
log(`AUTH0_REGION_DOMAIN: ${process.env.AUTH0_REGION_DOMAIN}`);
|
|
@@ -101,11 +109,12 @@ export async function connectClone() {
|
|
|
101
109
|
|
|
102
110
|
|
|
103
111
|
await gitCheckout('connect-deploy', process.env.CONNECT_DIR);
|
|
104
|
-
|
|
112
|
+
|
|
113
|
+
await gitCheckout(`${connectToEnv}-site-settings`, `${process.env.CONNECT_DIR}/${connectToEnv}-site-settings`);
|
|
105
114
|
|
|
106
115
|
// 5) Create site clone (emulating the dock.sh call)
|
|
107
|
-
const cloneFrom = path.join(projectRoot,process.env.CONNECT_DIR,`envs`,`${
|
|
108
|
-
const cloneTo = path.join(projectRoot,process.env.CONNECT_DIR,`envs`,`${
|
|
116
|
+
const cloneFrom = path.join(projectRoot,process.env.CONNECT_DIR,`envs`,`${connectFromEnv}/${process.env.FROM_BUILD_SITE}`);
|
|
117
|
+
const cloneTo = path.join(projectRoot,process.env.CONNECT_DIR,`envs`,`${connectToEnv}/${process.env.BUILD_SITE}`);
|
|
109
118
|
|
|
110
119
|
const connectHome = path.join(projectRoot,process.env.CONNECT_DIR);
|
|
111
120
|
if (!(await fs.pathExists(cloneFrom))) {
|
|
@@ -123,7 +132,7 @@ export async function connectClone() {
|
|
|
123
132
|
await (async () => {
|
|
124
133
|
try {
|
|
125
134
|
// Execute the shell command
|
|
126
|
-
const result = await $`cd ${cloneFrom} && bash dock.sh clone ${
|
|
135
|
+
const result = await $`cd ${cloneFrom} && bash dock.sh clone ${connectToEnv} ${process.env.BUILD_SITE} ${process.env.IMAGE_VERSION}`;
|
|
127
136
|
console.log('Command succeeded:');
|
|
128
137
|
console.log('stdout:', result.stdout); // Standard output
|
|
129
138
|
console.log('stderr:', result.stderr); // Standard error
|
|
@@ -179,7 +188,7 @@ export async function connectClone() {
|
|
|
179
188
|
|
|
180
189
|
if (numChanges > 0) {
|
|
181
190
|
const jiraTicket = process.env.JIRA_TICKET || 'NO_JIRA';
|
|
182
|
-
const message = `${jiraTicket} usdoc-s-builui job download_auth0_metadata for ${
|
|
191
|
+
const message = `${jiraTicket} usdoc-s-builui job download_auth0_metadata for ${connectToEnv}/${process.env.BUILD_SITE}`;
|
|
183
192
|
log('About to commit changes to git');
|
|
184
193
|
await $`cd ${cloneTo} && git commit -m ${message}`;
|
|
185
194
|
await $`cd ${cloneTo} && git push -u origin master`;
|