Checks whether a semantic release should be run for a repository. π
This function determines whether a semantic release should occur for a package based on Git history. It returns true if a "meaningful" commit has come since the most recent release commit.
if npx should-semantic-release ; then npx release-it ; fi
This can be useful, for example, to prevent a release-it
release.
should-semantic-release
accepts the following CLI flag:
-v
/--verbose
(default:false
): Whether to log debug information to the console
$ npx should-semantic-release --verbose
Checking up to 123 commits for release readiness...
Checking commit: chore: an example chore (#101)
Found type chore.
Checking commit: chore: another example chore (#100)
Found type chore.
Checking commit: chore: release v1.27.31
This is a release commit. Returning false.
Based on a commit's conventional commit message type:
- If the type is
feat
fix
, orperf
, it's considered "meaningful" - If the commit is marked as being a breaking change, either via a
BREAKING CHANGE:
at the start of any commit message lines or via an!
appended to the type, it's considered "meaningful" - If the type is
docs
,refactor
,style
, ortest
, it's ignored - If the message looks like
v1.2.3
,chore: release 1.2.3
, or similar, it's considered a "release"
See getCommitMeaning
for the exact logic used.
Alternately, you can call this import asynchronous shouldSemanticRelease
function into Node scripts:
import { shouldSemanticRelease } from "should-semantic-release";
if (await shouldSemanticRelease()) {
console.log("Let's release! π");
}
shouldSemanticRelease
accepts an optional options object with the following parameter:
verbose
(default:false
)
import { shouldSemanticRelease } from "should-semantic-release";
await shouldSemanticRelease({ verbose: true });
See .github/CONTRIBUTING.md
.
Thanks! π
Josh Goldberg π» π§ π π€ |
Katya Pavlenko π» |
Stephen Zhou π» |
Steven Luscher π€ |
π This package is based on @JoshuaKGoldberg's create-typescript-app.