Skip to content

Commit 153acf8

Browse files
committed
Fix tagging. Add test for multiple tags.
1 parent 697bcf5 commit 153acf8

File tree

3 files changed

+55
-13
lines changed

3 files changed

+55
-13
lines changed

dist/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1607,7 +1607,7 @@ const processBuildArgsInput = buildArgsInput => {
16071607
};
16081608

16091609
const splitTags = stringTags =>
1610-
stringTags === null || stringTags === undefined ? undefined : tags.split(',').map(tag => tag.trim());
1610+
stringTags === null || stringTags === undefined ? undefined : stringTags.split(',').map(tag => tag.trim());
16111611

16121612
// Get GitHub Action inputs
16131613
const processInputs = () => {
@@ -1646,7 +1646,7 @@ const run = () => {
16461646
core.info(`Docker image ${imageFullName}:${firstTag} pushed to registry`);
16471647

16481648
tagsCopy.forEach(tag => {
1649-
docker.tag(imageFullName, tag, buildArgs);
1649+
docker.tag(imageFullName, firstTag, tag);
16501650
docker.push(imageFullName, tag);
16511651
core.info(`Docker image ${imageFullName}:${firstTag} pushed to registry`);
16521652
});

src/docker-build-push.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const processBuildArgsInput = buildArgsInput => {
2020
};
2121

2222
const splitTags = stringTags =>
23-
stringTags === null || stringTags === undefined ? undefined : tags.split(',').map(tag => tag.trim());
23+
stringTags === null || stringTags === undefined ? undefined : stringTags.split(',').map(tag => tag.trim());
2424

2525
// Get GitHub Action inputs
2626
const processInputs = () => {
@@ -59,7 +59,7 @@ const run = () => {
5959
core.info(`Docker image ${imageFullName}:${firstTag} pushed to registry`);
6060

6161
tagsCopy.forEach(tag => {
62-
docker.tag(imageFullName, tag, buildArgs);
62+
docker.tag(imageFullName, firstTag, tag);
6363
docker.push(imageFullName, tag);
6464
core.info(`Docker image ${imageFullName}:${firstTag} pushed to registry`);
6565
});

tests/docker-build-push.test.js

+51-9
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,22 @@ const convertBuildArgs = buildArgs => {
4242
};
4343

4444
const runAssertions = (imageFullName, image, tags, dockerfile, buildArgs) => {
45-
expect(docker.createTag).toHaveBeenCalledTimes(1);
4645
expect(core.getInput).toHaveBeenCalledTimes(7);
4746
expect(core.setOutput).toHaveBeenCalledTimes(3);
4847
expect(core.setOutput).toHaveBeenCalledWith('imageFullName', imageFullName);
4948
expect(core.setOutput).toHaveBeenCalledWith('imageName', image);
50-
expect(core.setOutput).toHaveBeenCalledWith('tags', tags);
49+
expect(core.setOutput).toHaveBeenCalledWith('tags', tags.join(','));
5150

5251
if (buildArgs) {
5352
expect(cp.execSync).toHaveBeenCalledWith(
54-
`docker build -f ${dockerfile} -t ${imageFullName}:${tags} ${convertBuildArgs(buildArgs)} .`,
53+
`docker build -f ${dockerfile} -t ${imageFullName}:${tags[0]} ${convertBuildArgs(buildArgs)} .`,
5554
cpOptions
5655
);
5756
} else {
58-
expect(cp.execSync).toHaveBeenCalledWith(`docker build -f ${dockerfile} -t ${imageFullName}:${tags} .`, cpOptions);
57+
expect(cp.execSync).toHaveBeenCalledWith(
58+
`docker build -f ${dockerfile} -t ${imageFullName}:${tags[0]} .`,
59+
cpOptions
60+
);
5961
}
6062
};
6163

@@ -85,7 +87,9 @@ describe('Create & push Docker image to GitHub Registry', () => {
8587

8688
run();
8789

88-
runAssertions(imageFullName, image, tag, dockerfile);
90+
runAssertions(imageFullName, image, [tag], dockerfile);
91+
92+
expect(docker.createTag).toHaveBeenCalledTimes(1);
8993
});
9094

9195
test('Keep default GitHub organization', () => {
@@ -104,7 +108,9 @@ describe('Create & push Docker image to GitHub Registry', () => {
104108

105109
run();
106110

107-
runAssertions(imageFullName, image, tag, dockerfile);
111+
runAssertions(imageFullName, image, [tag], dockerfile);
112+
113+
expect(docker.createTag).toHaveBeenCalledTimes(1);
108114
});
109115

110116
test('Converts owner name to lowercase', () => {
@@ -125,7 +131,9 @@ describe('Create & push Docker image to GitHub Registry', () => {
125131

126132
run();
127133

128-
runAssertions(imageFullName, image, tag, dockerfile);
134+
runAssertions(imageFullName, image, [tag], dockerfile);
135+
136+
expect(docker.createTag).toHaveBeenCalledTimes(1);
129137
});
130138
});
131139

@@ -146,7 +154,41 @@ describe('Create & push Docker image to GCR', () => {
146154

147155
run();
148156

149-
runAssertions(imageFullName, image, tag, dockerfile);
157+
runAssertions(imageFullName, image, [tag], dockerfile);
158+
159+
expect(docker.createTag).toHaveBeenCalledTimes(1);
160+
});
161+
});
162+
163+
describe('Create & push Docker image with many tags', () => {
164+
test('Valid Docker inputs with two tags', () => {
165+
const image = 'gcp-project/image';
166+
const registry = 'gcr.io';
167+
const tag1 = 'latest';
168+
const tag2 = 'v1';
169+
const inputTags = ` ${tag1}, ${tag2} `;
170+
const outputTags = `${tag1},${tag2}`;
171+
const buildArgs = '';
172+
const dockerfile = 'Dockerfile';
173+
const imageFullName = createFullImageName(registry, image);
174+
175+
docker.login = jest.fn();
176+
docker.createTag = jest.fn().mockReturnValueOnce(tag1);
177+
mockInputs(image, registry, inputTags, buildArgs, dockerfile);
178+
mockOutputs(imageFullName, image, outputTags);
179+
cp.execSync = jest.fn();
180+
181+
run();
182+
183+
expect(docker.createTag).toHaveBeenCalledTimes(0);
184+
expect(core.getInput).toHaveBeenCalledTimes(7);
185+
expect(core.setOutput).toHaveBeenCalledTimes(3);
186+
expect(core.setOutput).toHaveBeenCalledWith('imageFullName', imageFullName);
187+
expect(core.setOutput).toHaveBeenCalledWith('imageName', image);
188+
expect(core.setOutput).toHaveBeenCalledWith('tags', outputTags);
189+
190+
expect(cp.execSync).toHaveBeenCalledWith(`docker build -f ${dockerfile} -t ${imageFullName}:${tag1} .`, cpOptions);
191+
expect(cp.execSync).toHaveBeenCalledWith(`docker tag ${imageFullName}:${tag1} ${imageFullName}:${tag2}`, cpOptions);
150192
});
151193
});
152194

@@ -167,7 +209,7 @@ describe('Create & push Docker image with build args', () => {
167209

168210
run();
169211

170-
runAssertions(imageFullName, image, tag, dockerfile, buildArgs);
212+
runAssertions(imageFullName, image, [tag], dockerfile, buildArgs);
171213

172214
expect(docker.createTag).toHaveBeenCalledTimes(1);
173215
expect(core.getInput).toHaveBeenCalledTimes(7);

0 commit comments

Comments
 (0)