@docupace/pipeline 1.0.39-newrelease.13 → 1.0.39-newrelease.14
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/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/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,34 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
// Get absolute path to .changeset/config.json using current working directory
|
|
5
|
+
const configPath = path.join(process.cwd(), '.changeset', 'config.json');
|
|
6
|
+
|
|
7
|
+
// Function to update baseBranch to BITBUCKET_BRANCH
|
|
8
|
+
export function updateBaseBranch() {
|
|
9
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
10
|
+
if (!process.env.BITBUCKET_BRANCH) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
let originalbaseBranch = config.baseBranch;
|
|
14
|
+
config.baseBranch = process.env.BITBUCKET_BRANCH;
|
|
15
|
+
|
|
16
|
+
if (!config.baseBranch) {
|
|
17
|
+
throw new Error('BITBUCKET_BRANCH environment variable is not set.');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
21
|
+
console.log(`baseBranch updated to ${process.env.BITBUCKET_BRANCH}`);
|
|
22
|
+
|
|
23
|
+
return originalbaseBranch;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Function to revert baseBranch to original value
|
|
27
|
+
export function revertBaseBranch(originalBaseBranch) {
|
|
28
|
+
if (!originalBaseBranch) return;
|
|
29
|
+
|
|
30
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
31
|
+
config.baseBranch = originalBaseBranch;
|
|
32
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
33
|
+
console.log(`baseBranch reverted to ${originalBaseBranch}`);
|
|
34
|
+
}
|
package/src/changeset/cli.js
CHANGED
|
@@ -7,7 +7,11 @@ import { $ } from 'zx';
|
|
|
7
7
|
import { validateChangesets } from './validate.js';
|
|
8
8
|
|
|
9
9
|
import { isMonoRepo, setGitInfo } from '../next/util.js';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
toShortVersion,
|
|
12
|
+
updateJiraWithVersion,
|
|
13
|
+
versionCommand,
|
|
14
|
+
} from './version.js';
|
|
11
15
|
import { createChangeset } from './create.js';
|
|
12
16
|
|
|
13
17
|
const program = new Command();
|
|
@@ -36,8 +40,9 @@ async function commitTagCommand(releases) {
|
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
export function getAppReleases(releases) {
|
|
39
|
-
const appReleases = releases.filter(
|
|
40
|
-
release
|
|
43
|
+
const appReleases = releases.filter(
|
|
44
|
+
(release) =>
|
|
45
|
+
release.name.endsWith('-app') || release.name.endsWith('-template'),
|
|
41
46
|
);
|
|
42
47
|
return appReleases;
|
|
43
48
|
}
|
|
@@ -58,17 +63,30 @@ async function commitTagMono(releases) {
|
|
|
58
63
|
versions.push(`${appName}@${newVersion}`);
|
|
59
64
|
}
|
|
60
65
|
|
|
61
|
-
const
|
|
62
|
-
|
|
66
|
+
const defaultBranch = process.env.BITBUCKET_BRANCH;
|
|
67
|
+
|
|
68
|
+
if (!process.env.IS_DEV) {
|
|
69
|
+
await $`git commit -m "Version bump to ${versions.join(',')} and changelog"`;
|
|
70
|
+
await $`git push origin ${defaultBranch}`;
|
|
71
|
+
} else {
|
|
72
|
+
console.log(`Simulate Version bump to ${versions.join(',')} and changelog`);
|
|
73
|
+
}
|
|
63
74
|
|
|
64
|
-
await $`git commit -m "Version bump to ${versions.join(',')} and changelog"`;
|
|
65
|
-
await $`git push origin ${defaultBranch}`;
|
|
66
75
|
for (const newVersion of versions) {
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
if (!process.env.IS_DEV) {
|
|
77
|
+
await $`git tag ${newVersion}`;
|
|
78
|
+
console.log(`✅ Version ${newVersion} tagged.`);
|
|
79
|
+
} else {
|
|
80
|
+
console.log(`✅ Simulate Version ${newVersion} tagged.`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (!process.env.IS_DEV) {
|
|
85
|
+
await $`git push origin --tags`;
|
|
86
|
+
console.log(`✅ Version pushed.`);
|
|
87
|
+
} else {
|
|
88
|
+
console.log(`✅ Simulate Version pushed.`);
|
|
69
89
|
}
|
|
70
|
-
await $`git push origin --tags`;
|
|
71
|
-
console.log(`✅ Version pushed.`);
|
|
72
90
|
}
|
|
73
91
|
|
|
74
92
|
async function commitTag() {
|
|
@@ -76,8 +94,7 @@ async function commitTag() {
|
|
|
76
94
|
await $`node -p "require('./package.json').version"`
|
|
77
95
|
).stdout.trim();
|
|
78
96
|
|
|
79
|
-
const
|
|
80
|
-
const defaultBranch = stdout.trim().replace('refs/remotes/origin/', '');
|
|
97
|
+
const defaultBranch = process.env.BITBUCKET_BRANCH;
|
|
81
98
|
|
|
82
99
|
await $`git commit -m "Version bump to ${newVersion} and changelog"`;
|
|
83
100
|
await $`git push origin ${defaultBranch}`;
|
|
@@ -147,12 +164,20 @@ program
|
|
|
147
164
|
if (isMonoRepo()) {
|
|
148
165
|
for (const release of getAppReleases(releases)) {
|
|
149
166
|
const appName = getAppNameFromPackageName(release.name);
|
|
150
|
-
|
|
151
|
-
|
|
167
|
+
const newVersion = toShortVersion(release.newVersion);
|
|
168
|
+
if (!newVersion) {
|
|
169
|
+
throw new Error('Error calculating branch name');
|
|
170
|
+
}
|
|
171
|
+
await $`git checkout -b release/${appName}/${newVersion}`;
|
|
172
|
+
await $`git push origin release/${appName}/${newVersion}`;
|
|
152
173
|
}
|
|
153
174
|
} else {
|
|
154
|
-
|
|
155
|
-
|
|
175
|
+
const newVersion = toShortVersion(releases[0].newVersion);
|
|
176
|
+
if (!newVersion) {
|
|
177
|
+
throw new Error('Error calculating branch name');
|
|
178
|
+
}
|
|
179
|
+
await $`git checkout -b release/${newVersion}`;
|
|
180
|
+
await $`git push origin release/${newVersion}`;
|
|
156
181
|
}
|
|
157
182
|
|
|
158
183
|
// Return to original branch
|
package/src/changeset/version.js
CHANGED
|
@@ -3,6 +3,8 @@ import { $ } from 'zx';
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import { updateComponentVersion } from '../next/jira.js';
|
|
5
5
|
import { findJiraTicketId } from './util.js';
|
|
6
|
+
import { revertBaseBranch, updateBaseBranch } from './changeset-config.js';
|
|
7
|
+
import semver from 'semver';
|
|
6
8
|
|
|
7
9
|
const changeSetPackage = `{
|
|
8
10
|
"name": "changeset-package",
|
|
@@ -33,6 +35,12 @@ async function removeChangesetOutput() {
|
|
|
33
35
|
await fs.promises.rm(outputPath);
|
|
34
36
|
}
|
|
35
37
|
|
|
38
|
+
export function toShortVersion(version) {
|
|
39
|
+
const parsed = semver.parse(version);
|
|
40
|
+
if (!parsed) return null;
|
|
41
|
+
return `${parsed.major}.${parsed.minor}`;
|
|
42
|
+
}
|
|
43
|
+
|
|
36
44
|
export async function versionStatus(sinceBranch) {
|
|
37
45
|
const outputPath = './changeset-output.json';
|
|
38
46
|
|
|
@@ -50,27 +58,32 @@ export async function versionStatus(sinceBranch) {
|
|
|
50
58
|
|
|
51
59
|
export async function versionCommand(closeVersion = false) {
|
|
52
60
|
console.log('📦 Running Changeset versioning...');
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
if (!process.env.IS_DEV) {
|
|
62
|
+
await setGitInfo();
|
|
63
|
+
await $`mv package.json package.json.bak`;
|
|
64
|
+
await $`mv pnpm-lock.yaml pnpm-lock.yaml.bak`;
|
|
65
|
+
await fs.promises.writeFile('package.json', changeSetPackage);
|
|
66
|
+
await $`pnpm install`;
|
|
67
|
+
await $`rm package.json pnpm-lock.yaml`;
|
|
68
|
+
await $`mv package.json.bak package.json`;
|
|
69
|
+
await $`mv pnpm-lock.yaml.bak pnpm-lock.yaml`;
|
|
70
|
+
}
|
|
61
71
|
if (closeVersion) {
|
|
62
72
|
await $`pnpm changeset pre exit`;
|
|
63
73
|
}
|
|
64
74
|
|
|
75
|
+
let originalBaseBranch;
|
|
65
76
|
try {
|
|
77
|
+
originalBaseBranch = updateBaseBranch();
|
|
66
78
|
const releases = await versionStatus();
|
|
67
|
-
|
|
79
|
+
revertBaseBranch(originalBaseBranch);
|
|
68
80
|
await $`pnpm changeset version`;
|
|
69
81
|
|
|
70
82
|
await removeChangesetOutput();
|
|
71
83
|
|
|
72
84
|
return releases;
|
|
73
85
|
} catch {
|
|
86
|
+
revertBaseBranch(originalBaseBranch);
|
|
74
87
|
return [];
|
|
75
88
|
}
|
|
76
89
|
}
|
package/src/next/apache.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
1
2
|
import { $ } from 'zx';
|
|
2
3
|
|
|
4
|
+
function log(msg) {
|
|
5
|
+
console.log(`[*] ${msg}`);
|
|
6
|
+
}
|
|
7
|
+
|
|
3
8
|
export async function addApacheSite() {
|
|
4
9
|
if (
|
|
5
10
|
!process.env.ENVIRONMENT ||
|
|
6
|
-
|
|
11
|
+
!['dev', 'qa', 'uat', 'stage','www3'].includes(process.env.ENVIRONMENT)
|
|
7
12
|
) {
|
|
8
|
-
log(
|
|
13
|
+
log('Error: wront ENVIRONMENT');
|
|
9
14
|
process.exit(1);
|
|
10
15
|
}
|
|
11
16
|
if (!process.env.SITE) {
|
|
@@ -13,6 +18,34 @@ export async function addApacheSite() {
|
|
|
13
18
|
process.exit(1);
|
|
14
19
|
}
|
|
15
20
|
|
|
21
|
+
const apacheEnvHostMap = {
|
|
22
|
+
dev: {
|
|
23
|
+
host1: 'dev-apalb01a.corp.docupace.com',
|
|
24
|
+
host2: 'dev-apalb01b.corp.docupace.com',
|
|
25
|
+
repo: 'iis-preprod',
|
|
26
|
+
},
|
|
27
|
+
qa: {
|
|
28
|
+
host1: 'qa-apalb01a.corp.docupace.com',
|
|
29
|
+
host2: 'qa-apalb01b.corp.docupace.com',
|
|
30
|
+
repo: 'iis-preprod',
|
|
31
|
+
},
|
|
32
|
+
uat: {
|
|
33
|
+
host1: 'uat-apalb01a.edc.docupace.internal',
|
|
34
|
+
host2: 'uat-apalb01b.edc.docupace.internal',
|
|
35
|
+
repo: 'iis-www2',
|
|
36
|
+
},
|
|
37
|
+
stage: {
|
|
38
|
+
host1: 'stg-apalb01a.edc.docupace.internal',
|
|
39
|
+
host2: 'stg-apalb01b.edc.docupace.internal',
|
|
40
|
+
repo: 'iis-www2',
|
|
41
|
+
},
|
|
42
|
+
www3: {
|
|
43
|
+
host1: 'prd-apalb05a.edc.docupace.internal',
|
|
44
|
+
host2: 'prd-apalb05b.edc.docupace.internal',
|
|
45
|
+
repo: 'iis-www2',
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
|
|
16
49
|
// Save private key from base64
|
|
17
50
|
const haproxyPrivateKey = process.env.HAPROXY_PRIVATE_KEY;
|
|
18
51
|
if (!haproxyPrivateKey) {
|
|
@@ -27,17 +60,22 @@ export async function addApacheSite() {
|
|
|
27
60
|
const sshCmd = (server, script) =>
|
|
28
61
|
$`ssh -i private.key -o StrictHostKeyChecking=no root@${server} ${script}`;
|
|
29
62
|
|
|
30
|
-
let server = `${process.env.ENVIRONMENT}-apalb01a.corp.docupace.com`;
|
|
31
63
|
// The script is run twice in the Bash version
|
|
32
64
|
await sshCmd(
|
|
33
|
-
|
|
34
|
-
`/root/
|
|
65
|
+
apacheEnvHostMap[process.env.ENVIRONMENT].host1,
|
|
66
|
+
`/root/tomcat_repo_sync.sh`,
|
|
67
|
+
);
|
|
68
|
+
await sshCmd(
|
|
69
|
+
apacheEnvHostMap[process.env.ENVIRONMENT].host1,
|
|
70
|
+
`/root/repo/${apacheEnvHostMap[process.env.ENVIRONMENT].repo}/scripts/addsite/add_core_site.sh ${process.env.ENVIRONMENT} ${process.env.SITE}`,
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
await sshCmd(
|
|
74
|
+
apacheEnvHostMap[process.env.ENVIRONMENT].host2,
|
|
75
|
+
`/root/tomcat_repo_sync.sh`,
|
|
35
76
|
);
|
|
36
|
-
|
|
37
|
-
server = `${process.env.ENVIRONMENT}-apalb01b.corp.docupace.com`;
|
|
38
|
-
|
|
39
77
|
await sshCmd(
|
|
40
|
-
|
|
41
|
-
`/root/repo/
|
|
78
|
+
apacheEnvHostMap[process.env.ENVIRONMENT].host2,
|
|
79
|
+
`/root/repo/${apacheEnvHostMap[process.env.ENVIRONMENT].repo}/scripts/addsite/add_core_site.sh ${process.env.ENVIRONMENT} ${process.env.SITE}`,
|
|
42
80
|
);
|
|
43
81
|
}
|
package/src/next/cli.js
CHANGED
|
@@ -105,40 +105,46 @@ program
|
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
program
|
|
108
|
-
.command('deploy-template')
|
|
109
|
-
.description('Deploy an
|
|
110
|
-
.action(async () => {
|
|
111
|
-
const deployTag = await getDeployTag();
|
|
112
|
-
const
|
|
113
|
-
|
|
108
|
+
.command('deploy-template [tagPrefix]')
|
|
109
|
+
.description('Deploy an standard configuration for configured sites')
|
|
110
|
+
.action(async (tagPrefix) => {
|
|
111
|
+
const deployTag = await getDeployTag(tagPrefix);
|
|
112
|
+
const sites = await getDefaultDeploySite(deployTag);
|
|
113
|
+
for (const { env, site } of sites) {
|
|
114
|
+
await deployTemplate(env, site, deployTag);
|
|
115
|
+
}
|
|
114
116
|
});
|
|
115
117
|
|
|
116
118
|
program
|
|
117
|
-
.command('
|
|
118
|
-
.description('Deploy
|
|
119
|
-
.action(async () => {
|
|
120
|
-
const deployTag = await getDeployTag();
|
|
121
|
-
|
|
122
|
-
await deployTemplate(env, site, deployTag);
|
|
119
|
+
.command('deploy-site-config <env> <site> [tagPrefix]')
|
|
120
|
+
.description('Deploy site configuration for a specific site')
|
|
121
|
+
.action(async (env, site, tagPrefix) => {
|
|
122
|
+
const deployTag = await getDeployTag(tagPrefix);
|
|
123
|
+
await deployTemplate(env, site, deployTag, 'siteConfigRemoteBranch');
|
|
123
124
|
});
|
|
124
125
|
|
|
126
|
+
|
|
125
127
|
program
|
|
126
128
|
.command('deploy-app <application>')
|
|
127
129
|
.description('Deploy an application for a specific site')
|
|
128
130
|
.action(async (application) => {
|
|
129
131
|
const deployTag = await getDeployTag();
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
+
const sites = await getDefaultDeploySite(deployTag);
|
|
133
|
+
for (const { env, site } of sites) {
|
|
134
|
+
await deployAppWithTag(application, env, site, deployTag);
|
|
135
|
+
}
|
|
132
136
|
});
|
|
133
137
|
|
|
134
138
|
program
|
|
135
139
|
.command('deploy-mono-app <tag> <application>')
|
|
136
|
-
.description('Deploy an application for a specific site')
|
|
140
|
+
.description('Deploy an mono application for a specific site')
|
|
137
141
|
.action(async (tag, application) => {
|
|
138
142
|
const deployTag = await getDeployTag(tag);
|
|
139
143
|
const version = 'v' + deployTag.split('@')[1];
|
|
140
|
-
const
|
|
141
|
-
|
|
144
|
+
const sites = await getDefaultDeploySite(version);
|
|
145
|
+
for (const { env, site } of sites) {
|
|
146
|
+
await deployAppWithTag(application, env, site, version);
|
|
147
|
+
}
|
|
142
148
|
});
|
|
143
149
|
|
|
144
150
|
program
|
package/src/next/config.js
CHANGED
|
@@ -19,20 +19,20 @@ export const environmentConfig = {
|
|
|
19
19
|
},
|
|
20
20
|
uat: {
|
|
21
21
|
newUrl: (site) => `https://${site}.uat.dpai.tech`,
|
|
22
|
-
oldUrl: (site) => `https://
|
|
23
|
-
docupaceHost: () => '
|
|
22
|
+
oldUrl: (site) => `https://uat.paperout.com/${site}`,
|
|
23
|
+
docupaceHost: () => 'uat.paperout.com',
|
|
24
24
|
ccUrl: (site) => `https://${site}-cc.uat.dpai.tech`,
|
|
25
25
|
},
|
|
26
26
|
stage: {
|
|
27
|
-
newUrl: (site) => `https://${site}.
|
|
28
|
-
oldUrl: (site) => `https://
|
|
29
|
-
docupaceHost: () => '
|
|
30
|
-
ccUrl: (site) => `https://${site}-cc.
|
|
27
|
+
newUrl: (site) => `https://${site}.stage.dpai.tech`,
|
|
28
|
+
oldUrl: (site) => `https://stage.paperout.com/${site}`,
|
|
29
|
+
docupaceHost: () => 'stage.paperout.com',
|
|
30
|
+
ccUrl: (site) => `https://${site}-cc.stage.dpai.tech`,
|
|
31
31
|
},
|
|
32
32
|
prod: {
|
|
33
33
|
newUrl: (site) => `https://${site}.dpai.tech`,
|
|
34
|
-
oldUrl: (site) => `https://
|
|
35
|
-
docupaceHost: () => '
|
|
34
|
+
oldUrl: (site) => `https://www3.paperout.com/${site}`,
|
|
35
|
+
docupaceHost: () => 'www3.paperout.com',
|
|
36
36
|
ccUrl: (site) => `https://${site}-cc.dpai.tech`,
|
|
37
37
|
},
|
|
38
38
|
};
|
|
@@ -130,6 +130,8 @@ export const coreSiteEnvMap = {
|
|
|
130
130
|
dev: 'dev',
|
|
131
131
|
qa: 'preprod',
|
|
132
132
|
stg: 'staging',
|
|
133
|
+
stage: 'staging',
|
|
133
134
|
uat: 'uat',
|
|
134
135
|
prd: 'prod',
|
|
136
|
+
prod: 'prod',
|
|
135
137
|
};
|
package/src/next/connect.js
CHANGED
|
@@ -2,7 +2,7 @@ import 'zx/globals'; // npm i zx
|
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { $ } from 'zx';
|
|
5
|
-
|
|
5
|
+
import { getAuth0Metadata } from '../auth0/metadata.js';
|
|
6
6
|
import { getVaultSecrets } from '../auth0/vault.js';
|
|
7
7
|
|
|
8
8
|
process.env.COMMON_VAULT_PATH =
|
|
@@ -15,9 +15,42 @@ const vaultAddr = process.env.VAULT_ADDR;
|
|
|
15
15
|
const connectUIEnvMap = {
|
|
16
16
|
dev: 'dev',
|
|
17
17
|
qa: 'preprod',
|
|
18
|
-
|
|
18
|
+
stage: 'stg',
|
|
19
|
+
uat: 'uat',
|
|
20
|
+
prod: 'prod-www3',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const siteSettingsEnvMap = {
|
|
25
|
+
dev: 'dev',
|
|
26
|
+
preprod: 'preprod',
|
|
27
|
+
qa: 'preprod',
|
|
28
|
+
stage: 'staging',
|
|
29
|
+
stg: 'staging',
|
|
30
|
+
uat: 'uat',
|
|
31
|
+
prd: 'prod',
|
|
32
|
+
prod: 'prod',
|
|
33
|
+
'prod-www3': 'prod',
|
|
34
|
+
'prod-las': 'prod',
|
|
35
|
+
'prod-lax': 'prod',
|
|
36
|
+
'prod-athene': 'prod',
|
|
37
|
+
'prod-staging': 'prod',
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const idpEnvMap = {
|
|
41
|
+
dev: 'dev',
|
|
42
|
+
preprod: 'qa',
|
|
43
|
+
qa: 'qa',
|
|
44
|
+
stage: 'stage',
|
|
45
|
+
stg: 'stage',
|
|
19
46
|
uat: 'uat',
|
|
20
|
-
prd: 'prod
|
|
47
|
+
prd: 'prod',
|
|
48
|
+
prod: 'prod',
|
|
49
|
+
'prod-www3': 'prod',
|
|
50
|
+
'prod-las': 'prod',
|
|
51
|
+
'prod-lax': 'prod',
|
|
52
|
+
'prod-athene': 'prod',
|
|
53
|
+
'prod-staging': 'prod',
|
|
21
54
|
};
|
|
22
55
|
|
|
23
56
|
function log(msg) {
|
|
@@ -47,8 +80,10 @@ async function gitCheckout(repository, destDir, branch = 'master') {
|
|
|
47
80
|
}
|
|
48
81
|
|
|
49
82
|
export async function connectClone() {
|
|
50
|
-
const connectFromEnv = connectUIEnvMap[process.env.FROM_BUILD_ENVIRONMENT];
|
|
51
|
-
const
|
|
83
|
+
// const connectFromEnv = connectUIEnvMap[process.env.FROM_BUILD_ENVIRONMENT];
|
|
84
|
+
const connectFromEnv = process.env.FROM_BUILD_ENVIRONMENT;
|
|
85
|
+
const connectToEnv = process.env.BUILD_ENVIRONMENT;
|
|
86
|
+
|
|
52
87
|
if (!vaultToken || !vaultAddr) {
|
|
53
88
|
console.error('Error: VAULT_TOKEN and VAULT_ADDR must be set.');
|
|
54
89
|
throw new Error('VAULT_TOKEN and VAULT_ADDR must be set.');
|
|
@@ -81,7 +116,7 @@ export async function connectClone() {
|
|
|
81
116
|
log(`AUTH0_REGION_DOMAIN: ${process.env.AUTH0_REGION_DOMAIN}`);
|
|
82
117
|
log(`AUTH0_CLIENT_ID: ${process.env.AUTH0_CLIENT_ID}`);
|
|
83
118
|
|
|
84
|
-
process.env.AUTH0_DOMAIN = `docupace-${process.env.BUILD_ENVIRONMENT}-${process.env.BUILD_SITE}.${process.env.AUTH0_REGION_DOMAIN}`;
|
|
119
|
+
process.env.AUTH0_DOMAIN = `docupace-${idpEnvMap[process.env.BUILD_ENVIRONMENT]}-${process.env.BUILD_SITE}.${process.env.AUTH0_REGION_DOMAIN}`;
|
|
85
120
|
|
|
86
121
|
const projectRoot = process.cwd();
|
|
87
122
|
// 4) Clone 'connect-deploy' into CONNECT_DIR
|
|
@@ -89,8 +124,8 @@ export async function connectClone() {
|
|
|
89
124
|
await gitCheckout('connect-deploy', process.env.CONNECT_DIR);
|
|
90
125
|
|
|
91
126
|
await gitCheckout(
|
|
92
|
-
`${connectToEnv}-site-settings`,
|
|
93
|
-
`${process.env.CONNECT_DIR}/${connectToEnv}-site-settings`,
|
|
127
|
+
`${siteSettingsEnvMap[connectToEnv]}-site-settings`,
|
|
128
|
+
`${process.env.CONNECT_DIR}/${siteSettingsEnvMap[connectToEnv]}-site-settings`,
|
|
94
129
|
);
|
|
95
130
|
|
|
96
131
|
// 5) Create site clone (emulating the dock.sh call)
|
|
@@ -123,7 +158,7 @@ export async function connectClone() {
|
|
|
123
158
|
try {
|
|
124
159
|
// Execute the shell command
|
|
125
160
|
const result =
|
|
126
|
-
|
|
161
|
+
await $`cd ${cloneFrom} && bash dock.sh clone ${connectToEnv} ${process.env.BUILD_SITE} ${process.env.IMAGE_VERSION}`;
|
|
127
162
|
await $`cd ${cloneTo} && git checkout master && git pull --ff-only`;
|
|
128
163
|
await $`cd ${cloneTo} && git remote -v`;
|
|
129
164
|
await $`cd ${cloneTo} && git branch`;
|
|
@@ -145,31 +180,33 @@ export async function connectClone() {
|
|
|
145
180
|
log('Site already exists. Continuing Auth0 setup...');
|
|
146
181
|
}
|
|
147
182
|
|
|
148
|
-
await (async () => {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
183
|
+
// await (async () => {
|
|
184
|
+
// try {
|
|
185
|
+
// // Execute the shell command
|
|
186
|
+
// //await getAuth0Metadata(process.env.BUILD_SITE, connectToEnv);
|
|
187
|
+
// const result = await $`cd ${cloneTo} && bash dock.sh getAuth0Metadata`;
|
|
188
|
+
// console.log('Command succeeded:');
|
|
189
|
+
// console.log('stdout:', result.stdout); // Standard output
|
|
190
|
+
// console.log('stderr:', result.stderr); // Standard error
|
|
191
|
+
// } catch (error) {
|
|
192
|
+
// console.error('Command failed:');
|
|
193
|
+
// console.error('Exit Code:', error._code); // Exit code of the command
|
|
194
|
+
// console.error('Signal:', error._signal); // Signal that caused termination (if any)
|
|
195
|
+
// console.error('stdout:', error._stdout); // Standard output
|
|
196
|
+
// console.error('stderr:', error._stderr); // Standard error
|
|
197
|
+
// }
|
|
198
|
+
// })();
|
|
163
199
|
|
|
164
200
|
// 7) Check conf files, print logs
|
|
165
|
-
await $`grep "auth0" ${path.join(cloneTo, 'conf/application.conf')}`;
|
|
166
|
-
await $`ls -all ${path.join(cloneTo, 'conf')}`;
|
|
167
|
-
await $`ls -all ${path.join(cloneTo, 'conf/saml')}`;
|
|
168
|
-
await $`cat ${path.join(cloneTo, 'conf/saml/auth0.xml')}`;
|
|
201
|
+
// await $`grep "auth0" ${path.join(cloneTo, 'conf/application.conf')}`;
|
|
202
|
+
// await $`ls -all ${path.join(cloneTo, 'conf')}`;
|
|
203
|
+
// await $`ls -all ${path.join(cloneTo, 'conf/saml')}`;
|
|
204
|
+
// await $`cat ${path.join(cloneTo, 'conf/saml/auth0.xml')}`;
|
|
169
205
|
|
|
170
206
|
// 8) Git add, commit, push
|
|
171
|
-
await $`cd ${cloneTo} && git add ./conf/application.conf ./conf/saml/auth0.xml`;
|
|
172
|
-
await $`cd ${cloneTo} && git
|
|
207
|
+
// await $`cd ${cloneTo} && git add ./conf/application.conf ./conf/saml/auth0.xml`;
|
|
208
|
+
//await $`cd ${cloneTo} && git add ./conf/application.conf`;
|
|
209
|
+
//await $`cd ${cloneTo} && git status`;
|
|
173
210
|
|
|
174
211
|
const numChanges = (await $`cd ${cloneTo} && git diff-index HEAD`).stdout
|
|
175
212
|
.split('\n')
|
|
@@ -181,6 +218,7 @@ export async function connectClone() {
|
|
|
181
218
|
log('About to commit changes to git');
|
|
182
219
|
await $`cd ${cloneTo} && git commit -m ${message}`;
|
|
183
220
|
await $`cd ${cloneTo} && git push -u origin master`;
|
|
221
|
+
//await getAuth0Metadata(process.env.BUILD_SITE, connectToEnv);
|
|
184
222
|
} else {
|
|
185
223
|
log(
|
|
186
224
|
'No changes have been made. The site likely already has the correct configuration.',
|
package/src/next/deploy.js
CHANGED
|
@@ -274,19 +274,54 @@ export async function getDeployTag(prefix = 'v') {
|
|
|
274
274
|
return deployTag;
|
|
275
275
|
}
|
|
276
276
|
|
|
277
|
+
function getDeploymentTargets(tag, config) {
|
|
278
|
+
const semverRegex = /^v?(\d+)\.(\d+)\.(\d+)(?:-([\w.\-]+))?$/;
|
|
279
|
+
const match = tag.match(semverRegex);
|
|
280
|
+
|
|
281
|
+
if (!match) {
|
|
282
|
+
throw new Error(`Invalid tag format: ${tag}`);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const [_, major, minor, patch, preRelease] = match;
|
|
286
|
+
const isAlpha = preRelease && preRelease.toLowerCase().includes('alpha');
|
|
287
|
+
|
|
288
|
+
return config
|
|
289
|
+
.filter((entry) => {
|
|
290
|
+
if (entry.version.toLowerCase() === 'alpha' && isAlpha) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const [entryMajor, entryMinor] = entry.version.split('.');
|
|
295
|
+
return (
|
|
296
|
+
!isAlpha &&
|
|
297
|
+
parseInt(entryMajor) === parseInt(major) &&
|
|
298
|
+
parseInt(entryMinor) === parseInt(minor)
|
|
299
|
+
);
|
|
300
|
+
})
|
|
301
|
+
.map((entry) => ({ env: entry.env, site: entry.site }));
|
|
302
|
+
}
|
|
303
|
+
|
|
277
304
|
export async function getDefaultDeploySite(deployTag) {
|
|
278
|
-
const
|
|
279
|
-
const
|
|
280
|
-
|
|
305
|
+
const repPath = await cloneEnvRepository('dev');
|
|
306
|
+
const autoDeployConfigPath = path.resolve(repPath, 'auto-deploy.yaml');
|
|
307
|
+
const autoDeployConfig = yaml.load(
|
|
308
|
+
fs.readFileSync(autoDeployConfigPath, 'utf8'),
|
|
309
|
+
);
|
|
310
|
+
return getDeploymentTargets(deployTag, autoDeployConfig);
|
|
281
311
|
}
|
|
282
312
|
|
|
283
|
-
export async function deployTemplate(
|
|
313
|
+
export async function deployTemplate(
|
|
314
|
+
env,
|
|
315
|
+
site,
|
|
316
|
+
deployTag,
|
|
317
|
+
templateType = 'standardConfigRemoteBranch',
|
|
318
|
+
) {
|
|
284
319
|
console.log(`Deploying standard template for site: ${site}`);
|
|
285
320
|
console.log(`Using deployment tag: ${deployTag}`);
|
|
286
321
|
const { repoPath, deployConfigFilePath, deployConfig } =
|
|
287
322
|
await cloneAndReadDeployConfig('graphql-server', env, site);
|
|
288
323
|
|
|
289
|
-
deployConfig.graphqlServer
|
|
324
|
+
deployConfig.graphqlServer[templateType] = deployTag;
|
|
290
325
|
|
|
291
326
|
await writeAndPushDeployConfig(
|
|
292
327
|
repoPath,
|
|
@@ -300,9 +335,9 @@ export async function deployTemplate(env, site, deployTag) {
|
|
|
300
335
|
export async function deployAppWithTag(application, env, site, deployTag) {
|
|
301
336
|
console.log(`Deploying application: ${application} for site: ${site}`);
|
|
302
337
|
console.log(`Using deployment tag: ${deployTag}`);
|
|
338
|
+
const appDetails = appInfo[application];
|
|
303
339
|
|
|
304
340
|
if (env !== 'dev') {
|
|
305
|
-
const appDetails = appInfo[application];
|
|
306
341
|
await copy2(
|
|
307
342
|
appDetails.repositoryName,
|
|
308
343
|
'dev',
|
|
@@ -315,6 +350,18 @@ export async function deployAppWithTag(application, env, site, deployTag) {
|
|
|
315
350
|
const { repoPath, deployConfigFilePath, deployConfig } =
|
|
316
351
|
await cloneAndReadDeployConfig(application, env, site);
|
|
317
352
|
const updatedConfigData = setTag(deployConfig, deployTag);
|
|
353
|
+
|
|
354
|
+
const {
|
|
355
|
+
deployConfig: toDeployAppConfig,
|
|
356
|
+
deployConfigFilePath: toDeployAppConfigFilePath,
|
|
357
|
+
} = await readDeployConfig(application, env, site, 'app');
|
|
358
|
+
|
|
359
|
+
toDeployAppConfig.revision = appDetails.getAppRevision
|
|
360
|
+
? appDetails.getAppRevision(updatedConfigData)
|
|
361
|
+
: updatedConfigData.image.tag;
|
|
362
|
+
|
|
363
|
+
writeDeployConfig(toDeployAppConfigFilePath, toDeployAppConfig);
|
|
364
|
+
|
|
318
365
|
await writeAndPushDeployConfig(
|
|
319
366
|
repoPath,
|
|
320
367
|
deployConfigFilePath,
|