@payfit/nx-core 4.32.3-ephemeral-feature-customize-helm-folder-a48adbb.0 → 4.33.0
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/executors/publisher/docker.js +12 -0
- package/src/executors/publisher/docker.js.map +1 -1
- package/src/executors/publisher/helm.js +2 -3
- package/src/executors/publisher/helm.js.map +1 -1
- package/src/executors/publisher/schema.d.ts +0 -1
- package/src/executors/publisher/schema.json +0 -5
- package/src/index.js +1 -4
- package/src/index.js.map +1 -1
- package/src/utils/aws-auth.d.ts +7 -0
- package/src/utils/aws-auth.js +72 -1
- package/src/utils/aws-auth.js.map +1 -1
- package/src/utils/docker.js +15 -1
- package/src/utils/docker.js.map +1 -1
package/package.json
CHANGED
|
@@ -23,6 +23,18 @@ async function publishDocker(options, context, version, projectRoot) {
|
|
|
23
23
|
: process.env.AWS_ECR_REGISTRY;
|
|
24
24
|
await (0, aws_auth_1.checkAwsAuth)();
|
|
25
25
|
await (0, aws_auth_1.loginToEcr)(registry);
|
|
26
|
+
// Verify that we have valid ECR credentials before proceeding
|
|
27
|
+
const hasValidCredentials = await (0, aws_auth_1.verifyEcrCredentials)(registry);
|
|
28
|
+
if (!hasValidCredentials) {
|
|
29
|
+
logger_1.consola.warn('ECR credentials verification failed. Attempting to login again...');
|
|
30
|
+
// Try logging in again
|
|
31
|
+
await (0, aws_auth_1.loginToEcr)(registry);
|
|
32
|
+
// Verify credentials again
|
|
33
|
+
const retryCredentials = await (0, aws_auth_1.verifyEcrCredentials)(registry);
|
|
34
|
+
if (!retryCredentials) {
|
|
35
|
+
throw new Error('No valid ECR credentials available for pushing Docker image');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
26
38
|
logger_1.consola.box(`Publishing docker image to ${registry}/${options.ecrRegistry} with version ${version}`);
|
|
27
39
|
logger_1.consola.start('Building docker image');
|
|
28
40
|
await (0, docker_1.buildDockerImage)(options.ecrRegistry, projectDockerfile, version, await (0, github_1.getSanitizedCurrentGitRepoUrl)(), await (0, github_1.getCurrentGitCommitSha)(), registry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../../packages/nx-core/src/executors/publisher/docker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../../packages/nx-core/src/executors/publisher/docker.ts"],"names":[],"mappings":";;AAsBA,sCAuEC;AA7FD,8BAA6B;AAI7B,mDAI6B;AAC7B,qDAA2D;AAC3D,+CAI2B;AAC3B,+CAG2B;AAC3B,+CAA4C;AAGrC,KAAK,UAAU,aAAa,CACjC,OAAiC,EACjC,OAAwB,EACxB,OAAe,EACf,WAAmB;IAEnB,MAAM,iBAAiB,GAAG,GAAG,WAAW,aAAa,CAAA;IAErD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,gBAAO,CAAC,IAAI,CAAC,2BAA2B,iBAAiB,YAAY,CAAC,CAAA;QACtE,OAAM;IACR,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,gBAAO,CAAC,KAAK,CACX,mGAAmG,CACpG,CAAA;QACD,OAAM;IACR,CAAC;IAED,mEAAmE;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB;QACvC,CAAC,CAAC,+BAAmB;QACrB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;IAEhC,MAAM,IAAA,uBAAY,GAAE,CAAA;IACpB,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAA;IAE1B,8DAA8D;IAC9D,MAAM,mBAAmB,GAAG,MAAM,IAAA,+BAAoB,EAAC,QAAQ,CAAC,CAAA;IAChE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,gBAAO,CAAC,IAAI,CACV,mEAAmE,CACpE,CAAA;QACD,uBAAuB;QACvB,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAA;QAE1B,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,MAAM,IAAA,+BAAoB,EAAC,QAAQ,CAAC,CAAA;QAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAA;QACH,CAAC;IACH,CAAC;IAED,gBAAO,CAAC,GAAG,CACT,8BAA8B,QAAQ,IAAI,OAAO,CAAC,WAAW,iBAAiB,OAAO,EAAE,CACxF,CAAA;IAED,gBAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IACtC,MAAM,IAAA,yBAAgB,EACpB,OAAO,CAAC,WAAW,EACnB,iBAAiB,EACjB,OAAO,EACP,MAAM,IAAA,sCAA6B,GAAE,EACrC,MAAM,IAAA,+BAAsB,GAAE,EAC9B,QAAQ,CACT,CAAA;IACD,gBAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAEtC,gBAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,MAAM,IAAA,uBAAc,EAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5D,gBAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAA;IAEpD,wFAAwF;IACxF,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,gBAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAC/C,MAAM,IAAA,uBAAc,EAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC5D,MAAM,IAAA,uBAAc,EAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC7D,gBAAO,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -11,8 +11,7 @@ const tsh_1 = require("../../utils/tsh");
|
|
|
11
11
|
async function publishHelm(options, context, version, projectRoot, projectDist) {
|
|
12
12
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
13
13
|
try {
|
|
14
|
-
const
|
|
15
|
-
const projectHelmFolder = `${projectRoot}/${helmChartFolder}`;
|
|
14
|
+
const projectHelmFolder = `${projectRoot}/.deploy`;
|
|
16
15
|
const valuesConfigPath = `${projectHelmFolder}/values.yaml`;
|
|
17
16
|
const chartConfigPath = `${projectHelmFolder}/Chart.yaml`;
|
|
18
17
|
const destinationHelmFolder = `${projectDist}/chart/`;
|
|
@@ -20,7 +19,7 @@ async function publishHelm(options, context, version, projectRoot, projectDist)
|
|
|
20
19
|
if (!gitBranchName)
|
|
21
20
|
throw new Error('Unable to get current Git branch');
|
|
22
21
|
if (!fs.existsSync(projectHelmFolder)) {
|
|
23
|
-
logger_1.consola.warn(
|
|
22
|
+
logger_1.consola.warn(`.deploy folder not found at ${projectHelmFolder}, skipping`);
|
|
24
23
|
return;
|
|
25
24
|
}
|
|
26
25
|
if (!options.chartRegistry) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../../../../../packages/nx-core/src/executors/publisher/helm.ts"],"names":[],"mappings":";;AAoBA,
|
|
1
|
+
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../../../../../packages/nx-core/src/executors/publisher/helm.ts"],"names":[],"mappings":";;AAoBA,kCAkEC;;AAtFD,8BAA6B;AAI7B,mDAAmD;AACnD,+CAAiE;AACjE,2CASyB;AACzB,+CAA4C;AAC5C,yCAA4D;AAGrD,KAAK,UAAU,WAAW,CAC/B,OAAiC,EACjC,OAAwB,EACxB,OAAe,EACf,WAAmB,EACnB,WAAmB;;;QAEnB,MAAM,iBAAiB,GAAG,GAAG,WAAW,UAAU,CAAA;QAClD,MAAM,gBAAgB,GAAG,GAAG,iBAAiB,cAAc,CAAA;QAC3D,MAAM,eAAe,GAAG,GAAG,iBAAiB,aAAa,CAAA;QACzD,MAAM,qBAAqB,GAAG,GAAG,WAAW,SAAS,CAAA;QACrD,MAAM,aAAa,GAAG,MAAM,IAAA,qCAA4B,GAAE,CAAA;QAE1D,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAEvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtC,gBAAO,CAAC,IAAI,CAAC,+BAA+B,iBAAiB,YAAY,CAAC,CAAA;YAC1E,OAAM;QACR,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,gBAAO,CAAC,KAAK,CACX,uGAAuG,CACxG,CAAA;YACD,OAAM;QACR,CAAC;QAED,MAAM,IAAA,uBAAY,GAAE,CAAA;QAEpB,gBAAO,CAAC,GAAG,CACT,4BAA4B,OAAO,CAAC,aAAa,IAAI,aAAa,iBAAiB,OAAO,EAAE,CAC7F,CAAA;QACD,8CAA8C;QAC9C,MAAM,SAAS,0CAAG,MAAM,IAAA,gCAA0B,GAAE,QAAA,CAAA;QACpD,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;QAEzB,gBAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpC,MAAM,IAAA,sCAA+B,EAAC,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QACxE,MAAM,IAAA,sBAAe,EAAC,iBAAiB,CAAC,CAAA;QACxC,MAAM,IAAA,oBAAa,EAAC,gBAAgB,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;QAC/D,MAAM,IAAA,kBAAW,EAAC,iBAAiB,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAA;QACpE,MAAM,IAAA,sCAA+B,EAAC,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QACxE,gBAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAEvC,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAgB,EAAC,iBAAiB,CAAC,CAAA;QAC7D,MAAM,qBAAqB,GAAG,GAAG,WAAW,CAAC,IAAI,IAAI,OAAO,MAAM,CAAA;QAClE,MAAM,qBAAqB,GAAG,GAAG,qBAAqB,GAAG,qBAAqB,EAAE,CAAA;QAEhF,gBAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACtC,8DAA8D;QAC9D,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,gBAAO,CAAC,GAAG,CACT,yCAAyC,OAAO,CAAC,cAAc,EAAE,CAClE,CAAA;YACD,MAAM,IAAA,0BAAmB,EAAC,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;QAC1E,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,MAAM,IAAA,uBAAgB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,OAAO,CAAC,aAAa,EACrB,aAAa,CACd,CAAA;QACH,CAAC;QAED,gBAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAA;;;;;;;;;CACtD"}
|
|
@@ -21,11 +21,6 @@
|
|
|
21
21
|
"type": "boolean",
|
|
22
22
|
"description": "Whether to use the public ECR registry",
|
|
23
23
|
"default": false
|
|
24
|
-
},
|
|
25
|
-
"helmChartFolder": {
|
|
26
|
-
"type": "string",
|
|
27
|
-
"description": "The folder containing the Helm chart files (Chart.yaml, values.yaml, etc.)",
|
|
28
|
-
"default": ".deploy"
|
|
29
24
|
}
|
|
30
25
|
},
|
|
31
26
|
"required": []
|
package/src/index.js
CHANGED
|
@@ -14,9 +14,7 @@ async function createNodesInternal(configFilePath, options, context) {
|
|
|
14
14
|
const projectConfiguration = (0, devkit_1.readJsonFile)(configFilePath);
|
|
15
15
|
const projectRoot = (0, path_1.dirname)(configFilePath);
|
|
16
16
|
const isDockerProject = (0, fs_1.existsSync)((0, path_1.join)(projectRoot, 'Dockerfile'));
|
|
17
|
-
|
|
18
|
-
const helmChartFolder = projectConfiguration.metadata?.helmChartFolder || '.deploy';
|
|
19
|
-
const isHelmProject = (0, fs_1.existsSync)((0, path_1.join)(projectRoot, helmChartFolder, 'Chart.yaml'));
|
|
17
|
+
const isHelmProject = (0, fs_1.existsSync)((0, path_1.join)(projectRoot, '.deploy/Chart.yaml'));
|
|
20
18
|
const targets = {};
|
|
21
19
|
const ecrRegistry = isDockerProject
|
|
22
20
|
? projectConfiguration.metadata &&
|
|
@@ -40,7 +38,6 @@ async function createNodesInternal(configFilePath, options, context) {
|
|
|
40
38
|
ecrRegistry,
|
|
41
39
|
chartRegistry,
|
|
42
40
|
isPublicRegistry,
|
|
43
|
-
helmChartFolder,
|
|
44
41
|
},
|
|
45
42
|
metadata: {
|
|
46
43
|
technologies: ['helm', 'docker'],
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/nx-core/src/index.ts"],"names":[],"mappings":";;;AAAA,2BAA+B;AAC/B,+BAAoC;AAEpC,uCAKmB;AAKN,QAAA,aAAa,GAAmC;IAC3D,iBAAiB;IACjB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,OAAO,MAAM,IAAA,6BAAoB,EAC/B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAC/B,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EACnD,WAAW,EACX,OAAO,EACP,OAAO,CACR,CAAA;IACH,CAAC;CACF,CAAA;AAED,KAAK,UAAU,mBAAmB,CAChC,cAAsB,EACtB,OAAwB,EACxB,OAA6B;IAE7B,MAAM,oBAAoB,GAAG,IAAA,qBAAY,EAAC,cAAc,CAAC,CAAA;IACzD,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,cAAc,CAAC,CAAA;IAE3C,MAAM,eAAe,GAAG,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/nx-core/src/index.ts"],"names":[],"mappings":";;;AAAA,2BAA+B;AAC/B,+BAAoC;AAEpC,uCAKmB;AAKN,QAAA,aAAa,GAAmC;IAC3D,iBAAiB;IACjB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,OAAO,MAAM,IAAA,6BAAoB,EAC/B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAC/B,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EACnD,WAAW,EACX,OAAO,EACP,OAAO,CACR,CAAA;IACH,CAAC;CACF,CAAA;AAED,KAAK,UAAU,mBAAmB,CAChC,cAAsB,EACtB,OAAwB,EACxB,OAA6B;IAE7B,MAAM,oBAAoB,GAAG,IAAA,qBAAY,EAAC,cAAc,CAAC,CAAA;IACzD,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,cAAc,CAAC,CAAA;IAE3C,MAAM,eAAe,GAAG,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAA;IAEzE,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,MAAM,WAAW,GAAG,eAAe;QACjC,CAAC,CAAC,oBAAoB,CAAC,QAAQ;YAC7B,oBAAoB,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,aAAa,GAAG,aAAa;QACjC,CAAC,CAAC,oBAAoB,CAAC,QAAQ;YAC7B,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC;QAChD,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,gBAAgB,GAAG,eAAe;QACtC,CAAC,CAAC,oBAAoB,CAAC,QAAQ;YAC7B,oBAAoB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI;QAC3D,CAAC,CAAC,KAAK,CAAA;IAET,IAAI,OAAO,GAAG,IAAI,CAAA;IAElB,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,IAAA,qBAAY,EAClC,IAAA,WAAI,EAAC,SAAS,EAAE,kCAAkC,CAAC,CACpD,CAAA;QACD,OAAO,CAAC,oBAAoB,CAAC,GAAG;YAC9B,iFAAiF;YACjF,QAAQ,EAAE,2BAA2B;YACrC,OAAO,EAAE;gBACP,WAAW;gBACX,aAAa;gBACb,gBAAgB;aACjB;YACD,QAAQ,EAAE;gBACR,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAChC,WAAW,EAAE,eAAe,CAAC,WAAW;aACzC;SACF,CAAA;QACD,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;YAC5D,OAAO,GAAG;gBACR,4DAA4D;gBAC5D,OAAO,EAAE;oBACP,cAAc,EAAE,gCAAgC;iBACjD;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,CAAC,WAAW,CAAC,EAAE;gBACb,GAAG,oBAAoB;gBACvB,OAAO;gBACP,OAAO;aACR;SACF;KACF,CAAA;AACH,CAAC"}
|
package/src/utils/aws-auth.d.ts
CHANGED
|
@@ -32,6 +32,13 @@ export declare function getAuthWithOidcProfile(): Promise<string | boolean>;
|
|
|
32
32
|
* @returns A promise that resolves to the result of the login command
|
|
33
33
|
*/
|
|
34
34
|
export declare function loginToEcr(registry: string): Promise<Result>;
|
|
35
|
+
/**
|
|
36
|
+
* Verify that we have valid ECR credentials by checking the Docker config file
|
|
37
|
+
*
|
|
38
|
+
* @param registry The ECR registry to verify credentials for
|
|
39
|
+
* @returns A promise that resolves to true if credentials are valid, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
export declare function verifyEcrCredentials(registry: string): Promise<boolean>;
|
|
35
42
|
/**
|
|
36
43
|
* Check AWS CLI with the OIDC profile otherwise use the default credentials
|
|
37
44
|
* @returns {string} the profile's name
|
package/src/utils/aws-auth.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.getProfileName = getProfileName;
|
|
|
4
4
|
exports.getAwsCredentialsSet = getAwsCredentialsSet;
|
|
5
5
|
exports.getAuthWithOidcProfile = getAuthWithOidcProfile;
|
|
6
6
|
exports.loginToEcr = loginToEcr;
|
|
7
|
+
exports.verifyEcrCredentials = verifyEcrCredentials;
|
|
7
8
|
exports.checkAwsAuth = checkAwsAuth;
|
|
8
9
|
const consola_1 = require("consola");
|
|
9
10
|
const constants_1 = require("./constants");
|
|
@@ -70,7 +71,77 @@ async function loginToEcr(registry) {
|
|
|
70
71
|
ecrCommand = `aws ecr-public get-login-password --region us-east-1`;
|
|
71
72
|
registry = registry.split('/')[0]; // Remove the repository part for public ECR
|
|
72
73
|
}
|
|
73
|
-
|
|
74
|
+
consola_1.consola.log(`Logging in to ECR registry: ${registry}`);
|
|
75
|
+
try {
|
|
76
|
+
const result = await (0, exec_1.exec)(ecrCommand, { throwOnError: true }).pipe(await (0, docker_1.getDockerOrPodman)(), `login --username AWS --password-stdin ${registry}`.split(' '));
|
|
77
|
+
consola_1.consola.success(`Successfully logged in to ECR registry: ${registry}`);
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
consola_1.consola.error(`Failed to login to ECR registry: ${registry}`);
|
|
82
|
+
consola_1.consola.error(error);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Verify that we have valid ECR credentials by checking the Docker config file
|
|
88
|
+
*
|
|
89
|
+
* @param registry The ECR registry to verify credentials for
|
|
90
|
+
* @returns A promise that resolves to true if credentials are valid, false otherwise
|
|
91
|
+
*/
|
|
92
|
+
async function verifyEcrCredentials(registry) {
|
|
93
|
+
if (!registry) {
|
|
94
|
+
consola_1.consola.error('No ECR registry provided for credential verification');
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const dockerOrPodman = await (0, docker_1.getDockerOrPodman)();
|
|
98
|
+
try {
|
|
99
|
+
consola_1.consola.log(`Verifying ECR credentials for registry: ${registry}`);
|
|
100
|
+
// Check if we're using Docker or Podman
|
|
101
|
+
if (dockerOrPodman === 'docker') {
|
|
102
|
+
// For Docker, check the config.json file
|
|
103
|
+
const fs = require('fs');
|
|
104
|
+
const path = require('path');
|
|
105
|
+
const os = require('os');
|
|
106
|
+
// Docker config file path
|
|
107
|
+
const configPath = path.join(os.homedir(), '.docker', 'config.json');
|
|
108
|
+
// Check if the config file exists
|
|
109
|
+
if (!fs.existsSync(configPath)) {
|
|
110
|
+
consola_1.consola.error('Docker config file not found');
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
// Read and parse the config file
|
|
114
|
+
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
115
|
+
const config = JSON.parse(configContent);
|
|
116
|
+
// Check if the registry is in the auths section
|
|
117
|
+
if (config.auths && config.auths[registry]) {
|
|
118
|
+
consola_1.consola.success(`ECR credentials verified for registry: ${registry}`);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
consola_1.consola.error(`ECR credentials verification failed: No authentication found for ${registry}`);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// For Podman, we might need a different approach
|
|
128
|
+
// For now, we'll use a simple check to see if we can list images from the registry
|
|
129
|
+
const result = await (0, exec_1.exec)(`${dockerOrPodman} login --get-login ${registry}`, { throwOnError: false });
|
|
130
|
+
if (result.exitCode === 0) {
|
|
131
|
+
consola_1.consola.success(`ECR credentials verified for registry: ${registry}`);
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
consola_1.consola.error(`ECR credentials verification failed for registry: ${registry}`);
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
consola_1.consola.error(`ECR credentials verification failed with unexpected error`);
|
|
142
|
+
consola_1.consola.error(error);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
74
145
|
}
|
|
75
146
|
/**
|
|
76
147
|
* Check AWS CLI with the OIDC profile otherwise use the default credentials
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-auth.js","sourceRoot":"","sources":["../../../../../packages/nx-core/src/utils/aws-auth.ts"],"names":[],"mappings":";;AAYA,wCAEC;AAYD,oDAmBC;AAQD,wDAUC;AAQD,
|
|
1
|
+
{"version":3,"file":"aws-auth.js","sourceRoot":"","sources":["../../../../../packages/nx-core/src/utils/aws-auth.ts"],"names":[],"mappings":"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"}
|
package/src/utils/docker.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.buildDockerImage = buildDockerImage;
|
|
|
5
5
|
exports.pushImageToEcr = pushImageToEcr;
|
|
6
6
|
exports.tagLatestImage = tagLatestImage;
|
|
7
7
|
const exec_1 = require("./exec");
|
|
8
|
+
const logger_1 = require("./logger");
|
|
8
9
|
/**
|
|
9
10
|
* Determines the available container management tool by checking for Docker and fallback to Podman if Docker is unavailable.
|
|
10
11
|
*
|
|
@@ -50,7 +51,20 @@ async function buildDockerImage(imageName, dockerfilePath, version, gitRepoUrl,
|
|
|
50
51
|
*/
|
|
51
52
|
async function pushImageToEcr(repositoryName, version, registry) {
|
|
52
53
|
const dockerOrPodman = await getDockerOrPodman();
|
|
53
|
-
|
|
54
|
+
try {
|
|
55
|
+
return await (0, exec_1.exec)(`${dockerOrPodman} push ${registry}/${repositoryName}:${version}`, { throwOnError: true });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Check if the error is related to authentication
|
|
59
|
+
const errorMessage = error.toString();
|
|
60
|
+
if (errorMessage.includes('no basic auth credentials')) {
|
|
61
|
+
logger_1.consola.error('Authentication error when pushing to ECR. Your Docker credentials may have expired.');
|
|
62
|
+
logger_1.consola.error('Please ensure you are properly authenticated with ECR before pushing images.');
|
|
63
|
+
throw new Error(`Failed to push image due to authentication error: ${errorMessage}`);
|
|
64
|
+
}
|
|
65
|
+
// Re-throw the original error for other types of errors
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
54
68
|
}
|
|
55
69
|
async function tagLatestImage(repositoryName, version, registry) {
|
|
56
70
|
const dockerOrPodman = await getDockerOrPodman();
|
package/src/utils/docker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../packages/nx-core/src/utils/docker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../packages/nx-core/src/utils/docker.ts"],"names":[],"mappings":";;AAUA,8CAQC;AAaD,4CAkBC;AAUD,wCA4BC;AAED,wCASC;AAhGD,iCAA6B;AAC7B,qCAAkC;AAElC;;;;GAIG;AACI,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,IAAA,WAAI,EAAC,kBAAkB,CAAC,CAAA;QAC9B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;QAC9C,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,cAAsB,EACtB,OAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,QAAgB;IAEhB,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAChD,OAAO,IAAA,WAAI,EACT,GAAG,cAAc,oBAAoB,QAAQ,IAAI,SAAS,IAAI,OAAO,OAAO,cAAc,yEAAyE,UAAU,mDAAmD,SAAS,sCAAsC,UAAU,kCAAkC,SAAS,EAAE,EACtU;QACE,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE;YACX,KAAK,EAAE,SAAS;SACjB;KACF,CACF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAClC,cAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAChD,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,WAAI,EACf,GAAG,cAAc,SAAS,QAAQ,IAAI,cAAc,IAAI,OAAO,EAAE,EACjE,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kDAAkD;QAClD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QACrC,IAAI,YAAY,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YACvD,gBAAO,CAAC,KAAK,CACX,qFAAqF,CACtF,CAAA;YACD,gBAAO,CAAC,KAAK,CACX,8EAA8E,CAC/E,CAAA;YACD,MAAM,IAAI,KAAK,CACb,qDAAqD,YAAY,EAAE,CACpE,CAAA;QACH,CAAC;QACD,wDAAwD;QACxD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,cAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAChD,OAAO,IAAA,WAAI,EACT,GAAG,cAAc,QAAQ,QAAQ,IAAI,cAAc,IAAI,OAAO,IAAI,QAAQ,IAAI,cAAc,SAAS,CACtG,CAAA;AACH,CAAC"}
|