Skip to content

Commit 2c3e075

Browse files
authored
Opt in to qualify source image name optionally (#11055)
* Revert "[DockerV1] Honoring qualifyImageName value in tag (#10736)" This reverts commit 975f59b. * opt in qualify source image name optionally
1 parent c0e3366 commit 2c3e075

File tree

7 files changed

+56
-13
lines changed

7 files changed

+56
-13
lines changed

Tasks/DockerV1/Strings/resources.resjson/en-US/resources.resjson

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
"loc.input.help.imageNamesPath": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line.",
3232
"loc.input.label.qualifyImageName": "Qualify image name",
3333
"loc.input.help.qualifyImageName": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified.",
34+
"loc.input.label.qualifySourceImageName": "Qualify source image name",
35+
"loc.input.help.qualifySourceImageName": "Qualify the source image name with the Docker registry service connection's hostname if not otherwise specified.",
3436
"loc.input.label.includeSourceTags": "Include source tags",
3537
"loc.input.help.includeSourceTags": "Include Git tags when building or pushing the Docker image.",
3638
"loc.input.label.includeLatestTag": "Include latest tag",

Tasks/DockerV1/Tests/L0.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ describe('Docker Suite', function() {
2222
delete process.env[shared.TestEnvVars.pushMultipleImages];
2323
delete process.env[shared.TestEnvVars.tagMultipleImages];
2424
delete process.env[shared.TestEnvVars.arguments];
25+
delete process.env[shared.TestEnvVars.qualifySourceImageName];
2526
});
2627
after(function () {
2728
});
@@ -205,7 +206,7 @@ describe('Docker Suite', function() {
205206
assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount);
206207
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
207208
assert(tr.succeeded, 'task should have succeeded');
208-
assert(tr.stdout.indexOf(`[command]docker tag ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}`) != -1, "docker tag should run");
209+
assert(tr.stdout.indexOf(`[command]docker tag ${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}`) != -1, "docker tag should run");
209210
console.log(tr.stderr);
210211
done();
211212
});
@@ -215,13 +216,30 @@ describe('Docker Suite', function() {
215216
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
216217
process.env[shared.TestEnvVars.command] = shared.CommandTypes.tagImages;
217218
process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry;
218-
process.env[shared.TestEnvVars.qualifyImageName] = "false";
219+
process.env[shared.TestEnvVars.qualifyImageName] = "true";
220+
tr.run();
221+
222+
assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount);
223+
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
224+
assert(tr.succeeded, 'task should have succeeded');
225+
assert(tr.stdout.indexOf(`[command]docker tag test/test:2 ajgtestacr1.azurecr.io/test/test:2`) != -1, "docker tag should run");
226+
console.log(tr.stderr);
227+
done();
228+
});
229+
230+
it('Runs successfully for docker tag image with sourcequalify set to true', (done:MochaDone) => {
231+
let tp = path.join(__dirname, 'TestSetup.js');
232+
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
233+
process.env[shared.TestEnvVars.command] = shared.CommandTypes.tagImages;
234+
process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry;
235+
process.env[shared.TestEnvVars.qualifyImageName] = "true";
236+
process.env[shared.TestEnvVars.qualifySourceImageName] = "true";
219237
tr.run();
220238

221239
assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount);
222240
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
223241
assert(tr.succeeded, 'task should have succeeded');
224-
assert(tr.stdout.indexOf(`[command]docker tag test/test:2 test/test:2`) != -1, "docker tag should run");
242+
assert(tr.stdout.indexOf(`[command]docker tag ajgtestacr1.azurecr.io/test/test:2 ajgtestacr1.azurecr.io/test/test:2`) != -1, "docker tag should run");
225243
console.log(tr.stderr);
226244
done();
227245
});

Tasks/DockerV1/Tests/TestSetup.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ tr.setInput('dockerRegistryEndpoint', 'dockerhubendpoint');
1818
tr.setInput('dockerFile', DockerFilePath);
1919
tr.setInput('includeLatestTag', process.env[shared.TestEnvVars.includeLatestTag] || "false");
2020
tr.setInput('qualifyImageName', process.env[shared.TestEnvVars.qualifyImageName] || "false");
21+
tr.setInput('qualifySourceImageName', process.env[shared.TestEnvVars.qualifySourceImageName] || "false");
2122
tr.setInput('azureSubscriptionEndpoint', 'AzureRMSpn');
2223
tr.setInput('azureContainerRegistry', '{"loginServer":"ajgtestacr1.azurecr.io", "id" : "/subscriptions/c00d16c7-6c1f-4c03-9be1-6934a4c49682/resourcegroups/ajgtestacr1rg/providers/Microsoft.ContainerRegistry/registries/ajgtestacr1"}')
2324
tr.setInput('enforceDockerNamingConvention', process.env[shared.TestEnvVars.enforceDockerNamingConvention]);
@@ -100,7 +101,7 @@ a.exec[`docker build -f ${DockerFilePath} -t ajgtestacr1.azurecr.io/test/test:2`
100101
a.exec[`docker build -f ${DockerFilePath} -t ${shared.ImageNamesFileImageName}`] = {
101102
"code": 0
102103
};
103-
a.exec[`docker tag test/test:2 test/test:2`] = {
104+
a.exec[`docker tag test/test:2 ajgtestacr1.azurecr.io/test/test:2`] = {
104105
"code": 0
105106
};
106107
a.exec[`docker tag test/test:latest test/test:latest`] = {
@@ -109,10 +110,10 @@ a.exec[`docker tag test/test:latest test/test:latest`] = {
109110
a.exec[`docker tag test/test:latest test/test:v1`] = {
110111
"code": 0
111112
};
112-
a.exec[`docker tag ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}`] = {
113+
a.exec[`docker tag ${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}`] = {
113114
"code": 0
114115
};
115-
a.exec[`docker tag ${shared.ImageNamesFileImageName} ${shared.ImageNamesFileImageName}`] = {
116+
a.exec[`docker tag ajgtestacr1.azurecr.io/test/test:2 ajgtestacr1.azurecr.io/test/test:2`] = {
116117
"code": 0
117118
};
118119
a.exec[`docker run --rm ${shared.ImageNamesFileImageName}`] = {

Tasks/DockerV1/Tests/TestShared.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ export let TestEnvVars = {
1111
memoryLimit: "__memoryLimit__",
1212
pushMultipleImages: "__pushMultipleImages__",
1313
tagMultipleImages: "__tagMultipleImages__",
14-
arguments: "__arguments__"
14+
arguments: "__arguments__",
15+
qualifySourceImageName: "__qualifySourceImageName__"
1516
};
1617

1718
export let OperatingSystems = {

Tasks/DockerV1/containertag.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import * as imageUtils from "docker-common/containerimageutils";
88
import * as utils from "./utils";
99
import * as Q from 'q';
1010

11-
function dockerTag(connection: ContainerConnection, sourceImage: string, targetImage: string, qualifyImageName: boolean): Q.Promise<void> {
11+
function dockerTag(connection: ContainerConnection, sourceImage: string, targetImage: string, qualifyImageName: boolean, qualifySourceImageName: boolean): Q.Promise<void> {
1212
let command = connection.createCommand();
1313
command.arg("tag");
1414
if (qualifyImageName) {
15-
sourceImage = connection.getQualifiedImageNameIfRequired(sourceImage);
1615
targetImage = connection.getQualifiedImageNameIfRequired(targetImage);
1716
}
17+
if (qualifySourceImageName) {
18+
sourceImage = connection.getQualifiedImageNameIfRequired(sourceImage);
19+
}
1820
command.arg(sourceImage);
1921
command.arg(targetImage);
2022

@@ -31,13 +33,14 @@ export function run(connection: ContainerConnection): Q.Promise<void> {
3133
imageNames = [utils.getImageName()];
3234
}
3335
var qualifyImageName = tl.getBoolInput("qualifyImageName");
36+
const qualifySourceImageName = tl.getBoolInput("qualifySourceImageName");
3437
let additionalImageTags = tl.getDelimitedInput("arguments", "\n");
3538
let imageMappings = utils.getImageMappings(connection, imageNames, additionalImageTags);
3639

3740
let firstMapping = imageMappings.shift();
38-
let promise = dockerTag(connection, firstMapping.sourceImageName, firstMapping.targetImageName, qualifyImageName);
41+
let promise = dockerTag(connection, firstMapping.sourceImageName, firstMapping.targetImageName, qualifyImageName, qualifySourceImageName);
3942
imageMappings.forEach(mapping => {
40-
promise = promise.then(() => dockerTag(connection, mapping.sourceImageName, mapping.targetImageName, qualifyImageName));
43+
promise = promise.then(() => dockerTag(connection, mapping.sourceImageName, mapping.targetImageName, qualifyImageName, qualifySourceImageName));
4144
});
4245

4346
return promise;

Tasks/DockerV1/task.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"author": "Microsoft Corporation",
1414
"version": {
1515
"Major": 1,
16-
"Minor": 154,
16+
"Minor": 155,
1717
"Patch": 3
1818
},
1919
"demands": [],
@@ -167,6 +167,15 @@
167167
"groupName": "commands",
168168
"helpMarkDown": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified."
169169
},
170+
{
171+
"name": "qualifySourceImageName",
172+
"type": "boolean",
173+
"label": "Qualify source image name",
174+
"defaultValue": "false",
175+
"visibleRule": "command = Tag image || command = tag",
176+
"groupName": "commands",
177+
"helpMarkDown": "Qualify the source image name with the Docker registry service connection's hostname if not otherwise specified."
178+
},
170179
{
171180
"name": "includeSourceTags",
172181
"type": "boolean",

Tasks/DockerV1/task.loc.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"author": "Microsoft Corporation",
1414
"version": {
1515
"Major": 1,
16-
"Minor": 154,
16+
"Minor": 155,
1717
"Patch": 3
1818
},
1919
"demands": [],
@@ -167,6 +167,15 @@
167167
"groupName": "commands",
168168
"helpMarkDown": "ms-resource:loc.input.help.qualifyImageName"
169169
},
170+
{
171+
"name": "qualifySourceImageName",
172+
"type": "boolean",
173+
"label": "ms-resource:loc.input.label.qualifySourceImageName",
174+
"defaultValue": "false",
175+
"visibleRule": "command = Tag image || command = tag",
176+
"groupName": "commands",
177+
"helpMarkDown": "ms-resource:loc.input.help.qualifySourceImageName"
178+
},
170179
{
171180
"name": "includeSourceTags",
172181
"type": "boolean",

0 commit comments

Comments
 (0)