From 87f8d7e49073a47fc6e9f939b45e98924ba728f9 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 4 Dec 2020 19:10:33 +0000 Subject: [PATCH] chore(NA): check git version on pre-commit hook install (#84811) * chore(NA): checks installed git version when installing pre-commit hook * chore(NA): throw an error instead of log a warning * chore(NA): use createFailError instead * fix(NA): apply feedback from pr review for isCorrectGitVersionInstalled Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../kbn-dev-utils/src/precommit_hook/cli.ts | 9 ++++++++- .../{get_git_dir.ts => git_utils.ts} | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) rename packages/kbn-dev-utils/src/precommit_hook/{get_git_dir.ts => git_utils.ts} (71%) diff --git a/packages/kbn-dev-utils/src/precommit_hook/cli.ts b/packages/kbn-dev-utils/src/precommit_hook/cli.ts index 28347f379150f6..81b253a6ceae11 100644 --- a/packages/kbn-dev-utils/src/precommit_hook/cli.ts +++ b/packages/kbn-dev-utils/src/precommit_hook/cli.ts @@ -23,8 +23,9 @@ import { promisify } from 'util'; import { REPO_ROOT } from '@kbn/utils'; import { run } from '../run'; +import { createFailError } from '../run'; import { SCRIPT_SOURCE } from './script_source'; -import { getGitDir } from './get_git_dir'; +import { getGitDir, isCorrectGitVersionInstalled } from './git_utils'; const chmodAsync = promisify(chmod); const writeFileAsync = promisify(writeFile); @@ -32,6 +33,12 @@ const writeFileAsync = promisify(writeFile); run( async ({ log }) => { try { + if (!(await isCorrectGitVersionInstalled())) { + throw createFailError( + `We could not detect a git version in the required range. Please install a git version >= 2.5. Skipping Kibana pre-commit git hook installation.` + ); + } + const gitDir = await getGitDir(); const installPath = Path.resolve(REPO_ROOT, gitDir, 'hooks/pre-commit'); diff --git a/packages/kbn-dev-utils/src/precommit_hook/get_git_dir.ts b/packages/kbn-dev-utils/src/precommit_hook/git_utils.ts similarity index 71% rename from packages/kbn-dev-utils/src/precommit_hook/get_git_dir.ts rename to packages/kbn-dev-utils/src/precommit_hook/git_utils.ts index f75c86f5100952..739e4d89f9fb7b 100644 --- a/packages/kbn-dev-utils/src/precommit_hook/get_git_dir.ts +++ b/packages/kbn-dev-utils/src/precommit_hook/git_utils.ts @@ -30,3 +30,20 @@ export async function getGitDir() { }) ).stdout.trim(); } + +// Checks if a correct git version is installed +export async function isCorrectGitVersionInstalled() { + const rawGitVersionStr = ( + await execa('git', ['--version'], { + cwd: REPO_ROOT, + }) + ).stdout.trim(); + + const match = rawGitVersionStr.match(/[0-9]+(\.[0-9]+)+/); + if (!match) { + return false; + } + + const [major, minor] = match[0].split('.').map((n) => parseInt(n, 10)); + return major > 2 || (major === 2 && minor >= 5); +}