From b9d2ac32d54110636a3abd7863ed00af030fec84 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 13 Mar 2023 14:59:13 -0400 Subject: chore(ci): verify the PR title as part of linting (#18163) This verifies the PR title as part of the lint step. --- tools/verify_pr_title.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tools/verify_pr_title.js (limited to 'tools') diff --git a/tools/verify_pr_title.js b/tools/verify_pr_title.js new file mode 100644 index 000000000..be877bbfd --- /dev/null +++ b/tools/verify_pr_title.js @@ -0,0 +1,47 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +const prTitle = Deno.args[0]; + +if (prTitle == null) { + Deno.exit(0); // not a PR +} + +console.log("PR title:", prTitle); + +// This is a release PR, so it's valid. +if (/^[^\s]+\.[^\s]+\.[^\s]+$/.test(prTitle)) { + console.log("Valid."); + Deno.exit(0); +} + +const validPrefixes = [ + "chore", + "fix", + "feat", + "perf", + "ci", + "cleanup", + "docs", + "bench", + "build", + "refactor", + "test", + // allow Revert PRs because it allows us to remove the landed + // commit from the generated changelog + "Revert ", +]; + +if (validPrefixes.some((prefix) => prTitle.startsWith(prefix))) { + console.log("Valid."); +} else { + console.error( + "The PR title must start with one of the following prefixes:\n", + ); + for (const prefix of validPrefixes) { + console.error(` - ${prefix}`); + } + console.error( + "\nPlease fix the PR title according to https://www.conventionalcommits.org " + + "then push an empty commit to reset the CI.", + ); + Deno.exit(1); +} -- cgit v1.2.3