docker: return actual error message when pull fails
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -23,13 +23,34 @@ const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'tr
|
|||||||
maybe('pull', () => {
|
maybe('pull', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
'busybox',
|
[
|
||||||
'busybox:1.36',
|
'busybox',
|
||||||
'busybox@sha256:7ae8447f3a7f5bccaa765926f25fc038e425cf1b2be6748727bbea9a13102094'
|
undefined,
|
||||||
])(
|
],
|
||||||
'pulling %s', async (image) => {
|
[
|
||||||
await expect((async () => {
|
'busybox:1.36',
|
||||||
|
undefined,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'busybox@sha256:7ae8447f3a7f5bccaa765926f25fc038e425cf1b2be6748727bbea9a13102094',
|
||||||
|
undefined,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'doesnotexist:foo',
|
||||||
|
`pull access denied for doesnotexist`,
|
||||||
|
],
|
||||||
|
])('pulling %p', async (image: string, err: string | undefined) => {
|
||||||
|
try {
|
||||||
await Docker.pull(image, true);
|
await Docker.pull(image, true);
|
||||||
})()).resolves.not.toThrow();
|
if (err !== undefined) {
|
||||||
|
throw new Error('Expected an error to be thrown');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
if (err === undefined) {
|
||||||
|
throw new Error(`Expected no error, but got: ${e.message}`);
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
|
expect(e.message).toContain(err);
|
||||||
|
}
|
||||||
}, 600000);
|
}, 600000);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -122,32 +122,43 @@ export class Docker {
|
|||||||
cacheFoundPath = await imageCache.find();
|
cacheFoundPath = await imageCache.find();
|
||||||
if (cacheFoundPath) {
|
if (cacheFoundPath) {
|
||||||
core.info(`Image found from cache in ${cacheFoundPath}`);
|
core.info(`Image found from cache in ${cacheFoundPath}`);
|
||||||
await Exec.getExecOutput(`docker`, ['load', '-i', cacheFoundPath]).catch(e => {
|
await Exec.getExecOutput(`docker`, ['load', '-i', cacheFoundPath], {
|
||||||
core.warning(`Failed to load image from cache: ${e}`);
|
ignoreReturnCode: true
|
||||||
|
}).then(res => {
|
||||||
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
|
core.warning(`Failed to load image from cache: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let pulled = true;
|
let pulled = true;
|
||||||
await Exec.getExecOutput(`docker`, ['pull', image]).catch(e => {
|
await Exec.getExecOutput(`docker`, ['pull', image], {
|
||||||
|
ignoreReturnCode: true
|
||||||
|
}).then(res => {
|
||||||
pulled = false;
|
pulled = false;
|
||||||
if (cacheFoundPath) {
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
core.warning(`Failed to pull image, using one from cache: ${e}`);
|
const err = res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error';
|
||||||
} else {
|
if (cacheFoundPath) {
|
||||||
throw new Error(e);
|
core.warning(`Failed to pull image, using one from cache: ${err}`);
|
||||||
|
} else {
|
||||||
|
throw new Error(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (cache && pulled) {
|
if (cache && pulled) {
|
||||||
const imageTarPath = path.join(Context.tmpDir(), `${Util.hash(image)}.tar`);
|
const imageTarPath = path.join(Context.tmpDir(), `${Util.hash(image)}.tar`);
|
||||||
await Exec.getExecOutput(`docker`, ['save', '-o', imageTarPath, image])
|
await Exec.getExecOutput(`docker`, ['save', '-o', imageTarPath, image], {
|
||||||
.then(async () => {
|
ignoreReturnCode: true
|
||||||
|
}).then(async res => {
|
||||||
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
|
core.warning(`Failed to save image: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
||||||
|
} else {
|
||||||
const cachePath = await imageCache.save(imageTarPath);
|
const cachePath = await imageCache.save(imageTarPath);
|
||||||
core.info(`Image cached to ${cachePath}`);
|
core.info(`Image cached to ${cachePath}`);
|
||||||
})
|
}
|
||||||
.catch(e => {
|
});
|
||||||
core.warning(`Failed to save image: ${e}`);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user