From 3154895fb33ed33ee34bd5f079bbc7b192f8ec99 Mon Sep 17 00:00:00 2001 From: Maarten Groeneweg Date: Sat, 17 Feb 2024 14:29:58 +0100 Subject: [PATCH] feat(validate-cmd-file): async validation --- src/renovate.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/renovate.ts b/src/renovate.ts index 4596d8b7..d1a6450b 100644 --- a/src/renovate.ts +++ b/src/renovate.ts @@ -119,22 +119,23 @@ class Renovate { private async validateDockerCmdFileArgument(): Promise { const dockerCmdFile = this.input.getDockerCmdFile(); - if (dockerCmdFile !== null) { + if (dockerCmdFile === null) return; + + try { + const s = await fs.stat(dockerCmdFile); + if (!s.isFile) + throw new Error(`dockerCmdFile '${dockerCmdFile}' MUST be a file`); if ( - !fs.existsSync(dockerCmdFile) || - !fs.statSync(dockerCmdFile).isFile() - ) { - throw new Error( - `dockerCmdFile '${dockerCmdFile}' MUST be an existing file`, - ); - } - try { - fs.accessSync(dockerCmdFile, fs.constants.R_OK | fs.constants.X_OK); - } catch { + (s.mode & fs.constants.R_OK) === 0 || + (s.mode & fs.constants.X_OK) === 0 + ) throw new Error( `dockerCmdFile '${dockerCmdFile}' MUST have read and execute rights`, ); - } + } catch (err) { + if (err instanceof Error && 'code' in err && err.code === 'ENOENT') + throw new Error(`dockerCmdFile '${dockerCmdFile}' does not exist`); + throw new Error(err as string); } } }