@payfit/nx-core 4.34.0 → 4.34.1-ephemeral-bugfix-docker-push-annotations-8c27de1.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 +6 -13
- package/src/executors/publisher/docker.js.map +1 -1
- package/src/executors/publisher/schema.d.ts +1 -0
- package/src/executors/publisher/schema.json +8 -0
- package/src/index.js +5 -0
- package/src/index.js.map +1 -1
- package/src/utils/aws-auth.js +19 -37
- package/src/utils/aws-auth.js.map +1 -1
- package/src/utils/docker.d.ts +10 -19
- package/src/utils/docker.js +63 -48
- package/src/utils/docker.js.map +1 -1
package/package.json
CHANGED
|
@@ -39,18 +39,11 @@ async function publishDocker(options, context, version, projectRoot) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
logger_1.consola.box(`Publishing docker image to ${registry.url}/${options.ecrRegistry} with version ${version}`);
|
|
42
|
-
logger_1.consola.start('Building docker image');
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
await (0, docker_1.
|
|
47
|
-
logger_1.consola.success('Docker image pushed successfully!');
|
|
48
|
-
// If the image is public, and the version is not ephemeral, we need to tag it as latest
|
|
49
|
-
if (options.isPublicRegistry && !version.includes('ephemeral')) {
|
|
50
|
-
logger_1.consola.start('Tagging docker image as latest');
|
|
51
|
-
await (0, docker_1.tagLatestImage)(options.ecrRegistry, version, registry.url);
|
|
52
|
-
await (0, docker_1.pushImageToEcr)(options.ecrRegistry, 'latest', registry.url);
|
|
53
|
-
logger_1.consola.success('Docker image tagged as latest successfully!');
|
|
54
|
-
}
|
|
42
|
+
logger_1.consola.start('Building and pushing docker image');
|
|
43
|
+
const extraTags = !version.includes('ephemeral') && options.extraReleaseTags
|
|
44
|
+
? options.extraReleaseTags
|
|
45
|
+
: [];
|
|
46
|
+
await (0, docker_1.buildAndPushDockerImage)(options.ecrRegistry, projectDockerfile, version, await (0, github_1.getSanitizedCurrentGitRepoUrl)(), await (0, github_1.getCurrentGitCommitSha)(), registry.url, extraTags);
|
|
47
|
+
logger_1.consola.success('Docker image built and pushed successfully!');
|
|
55
48
|
}
|
|
56
49
|
//# sourceMappingURL=docker.js.map
|
|
@@ -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,sCAsEC;AA5FD,8BAA6B;AAI7B,mDAI6B;AAC7B,+CAA4D;AAC5D,+CAG2B;AAC3B,+CAA4C;AAQrC,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,MAAM,QAAQ,GAAgB;QAC5B,GAAG,EAAE,OAAO,CAAC,gBAAgB;YAC3B,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAChC,IAAI,EAAE,OAAO,CAAC,gBAAgB;YAC5B,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;KACjC,CAAA;IAED,MAAM,IAAA,uBAAY,GAAE,CAAA;IACpB,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEzD,8DAA8D;IAC9D,MAAM,mBAAmB,GAAG,MAAM,IAAA,+BAAoB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACrE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,gBAAO,CAAC,IAAI,CACV,mEAAmE,CACpE,CAAA;QACD,uBAAuB;QACvB,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAEzD,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,MAAM,IAAA,+BAAoB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAA;QACH,CAAC;IACH,CAAC;IAED,gBAAO,CAAC,GAAG,CACT,8BAA8B,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,WAAW,iBAAiB,OAAO,EAAE,CAC5F,CAAA;IAED,gBAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAElD,MAAM,SAAS,GACb,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,gBAAgB;QACxD,CAAC,CAAC,OAAO,CAAC,gBAAgB;QAC1B,CAAC,CAAC,EAAE,CAAA;IAER,MAAM,IAAA,gCAAuB,EAC3B,OAAO,CAAC,WAAW,EACnB,iBAAiB,EACjB,OAAO,EACP,MAAM,IAAA,sCAA6B,GAAE,EACrC,MAAM,IAAA,+BAAsB,GAAE,EAC9B,QAAQ,CAAC,GAAG,EACZ,SAAS,CACV,CAAA;IACD,gBAAO,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;AAChE,CAAC"}
|
|
@@ -26,6 +26,14 @@
|
|
|
26
26
|
"type": "string",
|
|
27
27
|
"description": "The folder containing the Helm chart files (Chart.yaml, values.yaml, etc.)",
|
|
28
28
|
"default": ".deploy"
|
|
29
|
+
},
|
|
30
|
+
"extraReleaseTags": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": {
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
"description": "Additional tags to add to the Docker image during a release",
|
|
36
|
+
"default": []
|
|
29
37
|
}
|
|
30
38
|
},
|
|
31
39
|
"required": []
|
package/src/index.js
CHANGED
|
@@ -31,6 +31,10 @@ async function createNodesInternal(configFilePath, options, context) {
|
|
|
31
31
|
? projectConfiguration.metadata &&
|
|
32
32
|
projectConfiguration.metadata['isPublicRegistry'] == true
|
|
33
33
|
: false;
|
|
34
|
+
const extraReleaseTags = isDockerProject
|
|
35
|
+
? projectConfiguration.metadata &&
|
|
36
|
+
projectConfiguration.metadata['extraReleaseTags']
|
|
37
|
+
: undefined;
|
|
34
38
|
let release = null;
|
|
35
39
|
if (isHelmProject || isDockerProject) {
|
|
36
40
|
const publisherConfig = (0, devkit_1.readJsonFile)((0, path_1.join)(__dirname, '/executors/publisher/schema.json'));
|
|
@@ -42,6 +46,7 @@ async function createNodesInternal(configFilePath, options, context) {
|
|
|
42
46
|
chartRegistry,
|
|
43
47
|
isPublicRegistry,
|
|
44
48
|
helmChartFolder,
|
|
49
|
+
extraReleaseTags,
|
|
45
50
|
},
|
|
46
51
|
metadata: {
|
|
47
52
|
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":";;;AA0BA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/nx-core/src/index.ts"],"names":[],"mappings":";;;AA0BA,kDA4EC;AAtGD,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;AAEM,KAAK,UAAU,mBAAmB,CACvC,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;IAEnE,8DAA8D;IAC9D,MAAM,eAAe,GACnB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,IAAI,SAAS,CAAA;IAC7D,MAAM,aAAa,GAAG,IAAA,eAAU,EAC9B,IAAA,WAAI,EAAC,WAAW,EAAE,eAAe,EAAE,YAAY,CAAC,CACjD,CAAA;IAED,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;IACT,MAAM,gBAAgB,GAAG,eAAe;QACtC,CAAC,CAAC,oBAAoB,CAAC,QAAQ;YAC7B,oBAAoB,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACnD,CAAC,CAAC,SAAS,CAAA;IAEb,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;gBAChB,eAAe;gBACf,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.js
CHANGED
|
@@ -52,7 +52,7 @@ async function getAuthWithOidcProfile() {
|
|
|
52
52
|
const profileExist = await (0, exec_1.exec)(`aws configure list-profiles`).pipe('grep', [profileName]);
|
|
53
53
|
return profileExist.exitCode == 0 ? profileExist.stdout.trim() : false;
|
|
54
54
|
}
|
|
55
|
-
catch
|
|
55
|
+
catch {
|
|
56
56
|
return false;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -74,7 +74,8 @@ async function loginToEcr(registry, isPublicRegistry = false) {
|
|
|
74
74
|
}
|
|
75
75
|
consola_1.consola.log(`Logging in to ECR registry: ${registry}`);
|
|
76
76
|
try {
|
|
77
|
-
|
|
77
|
+
await (0, docker_1.getDocker)();
|
|
78
|
+
const result = await (0, exec_1.exec)(ecrCommand, { throwOnError: true }).pipe(`docker`, `login --username AWS --password-stdin ${registry}`.split(' '));
|
|
78
79
|
consola_1.consola.success(`Successfully logged in to ECR registry: ${registry}`);
|
|
79
80
|
return result;
|
|
80
81
|
}
|
|
@@ -95,45 +96,26 @@ async function verifyEcrCredentials(registry) {
|
|
|
95
96
|
consola_1.consola.error('No ECR registry provided for credential verification');
|
|
96
97
|
return false;
|
|
97
98
|
}
|
|
98
|
-
const dockerOrPodman = await (0, docker_1.getDockerOrPodman)();
|
|
99
99
|
try {
|
|
100
100
|
consola_1.consola.log(`Verifying ECR credentials for registry: ${registry}`);
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
consola_1.consola.success(`ECR credentials verified for registry: ${registry}`);
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
consola_1.consola.error(`ECR credentials verification failed: No authentication found for ${registry} in the .docker/config.json file`);
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
101
|
+
// Docker config file path
|
|
102
|
+
const configPath = path.join(os.homedir(), '.docker', 'config.json');
|
|
103
|
+
// Check if the config file exists
|
|
104
|
+
if (!fs.existsSync(configPath)) {
|
|
105
|
+
consola_1.consola.error('Docker config file not found');
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Read and parse the config file
|
|
109
|
+
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
110
|
+
const config = JSON.parse(configContent);
|
|
111
|
+
// Check if the registry is in the auths section
|
|
112
|
+
if (config.auths && config.auths[registry]) {
|
|
113
|
+
consola_1.consola.success(`ECR credentials verified for registry: ${registry}`);
|
|
114
|
+
return true;
|
|
122
115
|
}
|
|
123
116
|
else {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const result = await (0, exec_1.exec)(`podman login --get-login ${registry}`, {
|
|
127
|
-
throwOnError: false,
|
|
128
|
-
});
|
|
129
|
-
if (result.exitCode === 0) {
|
|
130
|
-
consola_1.consola.success(`ECR credentials verified for registry: ${registry}`);
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
consola_1.consola.error(`ECR credentials verification failed for registry: ${registry}`);
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
117
|
+
consola_1.consola.error(`ECR credentials verification failed: No authentication found for ${registry} in the .docker/config.json file`);
|
|
118
|
+
return false;
|
|
137
119
|
}
|
|
138
120
|
}
|
|
139
121
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-auth.js","sourceRoot":"","sources":["../../../../../packages/nx-core/src/utils/aws-auth.ts"],"names":[],"mappings":";;AAeA,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.d.ts
CHANGED
|
@@ -4,26 +4,17 @@ import { Result } from 'tinyexec';
|
|
|
4
4
|
*
|
|
5
5
|
* @return {Promise<string>} A promise that resolves to the string 'docker' if Docker is available, or 'podman' if Podman is used as a fallback.
|
|
6
6
|
*/
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function getDocker(): Promise<void>;
|
|
8
8
|
/**
|
|
9
|
-
* Builds a Docker image using the provided Dockerfile.
|
|
9
|
+
* Builds and pushes a Docker image using the provided Dockerfile.
|
|
10
10
|
*
|
|
11
|
-
* @param imageName
|
|
12
|
-
* @param dockerfilePath
|
|
13
|
-
* @param version
|
|
14
|
-
* @param gitRepoUrl
|
|
15
|
-
* @param commitSha
|
|
16
|
-
* @param registry
|
|
11
|
+
* @param imageName - The name of the image
|
|
12
|
+
* @param dockerfilePath - Path to the Dockerfile
|
|
13
|
+
* @param version - Version tag for the image
|
|
14
|
+
* @param gitRepoUrl - Git repository URL for annotations
|
|
15
|
+
* @param commitSha - Git commit SHA for annotations
|
|
16
|
+
* @param registry - Docker registry URL
|
|
17
|
+
* @param extraTags - Optional additional tags for the image
|
|
17
18
|
* @return {Promise<Result>}
|
|
18
19
|
*/
|
|
19
|
-
export declare function
|
|
20
|
-
/**
|
|
21
|
-
* Push a Docker image to ECR
|
|
22
|
-
*
|
|
23
|
-
* @param repositoryName - The name of the repository
|
|
24
|
-
* @param version - The version of the image
|
|
25
|
-
* @param registry
|
|
26
|
-
* @returns A promise that resolves to the result of the push command
|
|
27
|
-
*/
|
|
28
|
-
export declare function pushImageToEcr(repositoryName: string, version: string, registry: string): Promise<Result>;
|
|
29
|
-
export declare function tagLatestImage(repositoryName: string, version: string, registry: string): Promise<Result>;
|
|
20
|
+
export declare function buildAndPushDockerImage(imageName: string, dockerfilePath: string, version: string, gitRepoUrl: string, commitSha: string, registry: string, extraTags?: string[]): Promise<Result>;
|
package/src/utils/docker.js
CHANGED
|
@@ -1,73 +1,88 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.pushImageToEcr = pushImageToEcr;
|
|
6
|
-
exports.tagLatestImage = tagLatestImage;
|
|
3
|
+
exports.getDocker = getDocker;
|
|
4
|
+
exports.buildAndPushDockerImage = buildAndPushDockerImage;
|
|
7
5
|
const exec_1 = require("./exec");
|
|
8
6
|
const logger_1 = require("./logger");
|
|
7
|
+
const BUILDKIT_BUILDER_NAME = 'dockerContainerBuildkit';
|
|
9
8
|
/**
|
|
10
9
|
* Determines the available container management tool by checking for Docker and fallback to Podman if Docker is unavailable.
|
|
11
10
|
*
|
|
12
11
|
* @return {Promise<string>} A promise that resolves to the string 'docker' if Docker is available, or 'podman' if Podman is used as a fallback.
|
|
13
12
|
*/
|
|
14
|
-
async function
|
|
13
|
+
async function getDocker() {
|
|
15
14
|
try {
|
|
16
15
|
await (0, exec_1.exec)('docker --version');
|
|
17
|
-
return 'docker';
|
|
18
16
|
}
|
|
19
|
-
catch
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
catch {
|
|
18
|
+
logger_1.consola.error('No container management tool found. Please install Docker or Docker binary + Colima.');
|
|
19
|
+
throw new Error('No container management tool found');
|
|
22
20
|
}
|
|
23
21
|
}
|
|
22
|
+
async function setupDockerBuilder() {
|
|
23
|
+
await getDocker();
|
|
24
|
+
// Get list of builders
|
|
25
|
+
/*
|
|
26
|
+
Expected command output is:
|
|
27
|
+
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
|
|
28
|
+
buildkit* docker-container
|
|
29
|
+
\_ buildkit0 \_ unix:///var/run/docker.sock running v0.22.0 linux/amd64 (+3), ...
|
|
30
|
+
default docker
|
|
31
|
+
\_ default \_ default running v0.23.1 linux/amd64 (+3), ...
|
|
32
|
+
*/
|
|
33
|
+
const buildersResult = await (0, exec_1.exec)(`docker buildx ls`);
|
|
34
|
+
const hasBuildkitBuilder = buildersResult.stdout.includes(BUILDKIT_BUILDER_NAME);
|
|
35
|
+
const isBuildkitCurrentBuilder = buildersResult.stdout.includes(`${BUILDKIT_BUILDER_NAME}*`);
|
|
36
|
+
if (!hasBuildkitBuilder) {
|
|
37
|
+
// Create new buildkit builder
|
|
38
|
+
await (0, exec_1.exec)(`docker buildx create \
|
|
39
|
+
--name ${BUILDKIT_BUILDER_NAME} \
|
|
40
|
+
--driver=docker-container \
|
|
41
|
+
--use`, {
|
|
42
|
+
throwOnError: true,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else if (!isBuildkitCurrentBuilder) {
|
|
46
|
+
// Use existing buildkit builder
|
|
47
|
+
await (0, exec_1.exec)(`docker buildx use ${BUILDKIT_BUILDER_NAME}`, {
|
|
48
|
+
throwOnError: true,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
logger_1.consola.info(`Buildx context is set to ${BUILDKIT_BUILDER_NAME}`);
|
|
52
|
+
}
|
|
24
53
|
/**
|
|
25
|
-
* Builds a Docker image using the provided Dockerfile.
|
|
54
|
+
* Builds and pushes a Docker image using the provided Dockerfile.
|
|
26
55
|
*
|
|
27
|
-
* @param imageName
|
|
28
|
-
* @param dockerfilePath
|
|
29
|
-
* @param version
|
|
30
|
-
* @param gitRepoUrl
|
|
31
|
-
* @param commitSha
|
|
32
|
-
* @param registry
|
|
56
|
+
* @param imageName - The name of the image
|
|
57
|
+
* @param dockerfilePath - Path to the Dockerfile
|
|
58
|
+
* @param version - Version tag for the image
|
|
59
|
+
* @param gitRepoUrl - Git repository URL for annotations
|
|
60
|
+
* @param commitSha - Git commit SHA for annotations
|
|
61
|
+
* @param registry - Docker registry URL
|
|
62
|
+
* @param extraTags - Optional additional tags for the image
|
|
33
63
|
* @return {Promise<Result>}
|
|
34
64
|
*/
|
|
35
|
-
async function
|
|
36
|
-
|
|
37
|
-
|
|
65
|
+
async function buildAndPushDockerImage(imageName, dockerfilePath, version, gitRepoUrl, commitSha, registry, extraTags = []) {
|
|
66
|
+
await getDocker();
|
|
67
|
+
await setupDockerBuilder();
|
|
68
|
+
// Build all tags including base version and extra tags
|
|
69
|
+
const tagArgs = [`${version}`, ...extraTags]
|
|
70
|
+
.map(tag => `-t ${registry}/${imageName}:${tag}`)
|
|
71
|
+
.join(' ');
|
|
72
|
+
return (0, exec_1.exec)(`docker buildx build ${tagArgs} \
|
|
73
|
+
-f ${dockerfilePath} \
|
|
74
|
+
--secret id=NPM_TOKEN \
|
|
75
|
+
--push \
|
|
76
|
+
--provenance=false \
|
|
77
|
+
--annotation org.opencontainers.image.source=${gitRepoUrl} \
|
|
78
|
+
--annotation org.opencontainers.image.revision=${commitSha} \
|
|
79
|
+
--build-arg DD_GIT_REPOSITORY_URL=${gitRepoUrl} \
|
|
80
|
+
--build-arg DD_GIT_COMMIT_SHA=${commitSha} \
|
|
81
|
+
.`, {
|
|
38
82
|
throwOnError: true,
|
|
39
83
|
nodeOptions: {
|
|
40
84
|
stdio: 'inherit',
|
|
41
85
|
},
|
|
42
86
|
});
|
|
43
87
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Push a Docker image to ECR
|
|
46
|
-
*
|
|
47
|
-
* @param repositoryName - The name of the repository
|
|
48
|
-
* @param version - The version of the image
|
|
49
|
-
* @param registry
|
|
50
|
-
* @returns A promise that resolves to the result of the push command
|
|
51
|
-
*/
|
|
52
|
-
async function pushImageToEcr(repositoryName, version, registry) {
|
|
53
|
-
const dockerOrPodman = await getDockerOrPodman();
|
|
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
|
-
}
|
|
68
|
-
}
|
|
69
|
-
async function tagLatestImage(repositoryName, version, registry) {
|
|
70
|
-
const dockerOrPodman = await getDockerOrPodman();
|
|
71
|
-
return (0, exec_1.exec)(`${dockerOrPodman} tag ${registry}/${repositoryName}:${version} ${registry}/${repositoryName}:latest`);
|
|
72
|
-
}
|
|
73
88
|
//# sourceMappingURL=docker.js.map
|
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":";;AAYA,8BASC;AAuDD,0DAmCC;AA7GD,iCAA6B;AAC7B,qCAAkC;AAElC,MAAM,qBAAqB,GAAG,yBAAyB,CAAA;AAEvD;;;;GAIG;AACI,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,IAAA,WAAI,EAAC,kBAAkB,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,gBAAO,CAAC,KAAK,CACX,sFAAsF,CACvF,CAAA;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,SAAS,EAAE,CAAA;IAEjB,uBAAuB;IACvB;;;;;;;MAOE;IACF,MAAM,cAAc,GAAG,MAAM,IAAA,WAAI,EAAC,kBAAkB,CAAC,CAAA;IACrD,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CACvD,qBAAqB,CACtB,CAAA;IACD,MAAM,wBAAwB,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAC7D,GAAG,qBAAqB,GAAG,CAC5B,CAAA;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,8BAA8B;QAC9B,MAAM,IAAA,WAAI,EACR;iBACW,qBAAqB;;cAExB,EACR;YACE,YAAY,EAAE,IAAI;SACnB,CACF,CAAA;IACH,CAAC;SAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACrC,gCAAgC;QAChC,MAAM,IAAA,WAAI,EAAC,qBAAqB,qBAAqB,EAAE,EAAE;YACvD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,gBAAO,CAAC,IAAI,CAAC,4BAA4B,qBAAqB,EAAE,CAAC,CAAA;AACnE,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,cAAsB,EACtB,OAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,QAAgB,EAChB,YAAsB,EAAE;IAExB,MAAM,SAAS,EAAE,CAAA;IACjB,MAAM,kBAAkB,EAAE,CAAA;IAE1B,uDAAuD;IACvD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,SAAS,CAAC;SACzC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,QAAQ,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;SAChD,IAAI,CAAC,GAAG,CAAC,CAAA;IAEZ,OAAO,IAAA,WAAI,EACT,uBAAuB,OAAO;WACvB,cAAc;;;;qDAI4B,UAAU;uDACR,SAAS;0CACtB,UAAU;sCACd,SAAS;QACvC,EACJ;QACE,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE;YACX,KAAK,EAAE,SAAS;SACjB;KACF,CACF,CAAA;AACH,CAAC"}
|