git icon indicating copy to clipboard operation
git copied to clipboard

Suggestion - Documentation & new option around commit hook

Open stuartjnelson opened this issue 1 year ago • 1 comments

  • Version: 10.0.1
  • Node: v18.18.2

We're using this plugin which is awesome. Recently we got an error when running semantic-release in our pipeline that took us a while to figure out.

[semantic-release] › ✘  Failed step "prepare" of plugin "@semantic-release/git"
[semantic-release] › ✘  An error occurred while running semantic-release: Error: Command failed with exit code 1: git commit -m chore(release): <version number> [skip ci]

We are using Husky, but that's disabled in the pipeline. There was a log at the bottom regarding our unit tests which I thought was a result of the job failing. This was an incorrect assumption. It was because our unit tests were being run due to the plugin and there was missing a build file. I was unaware until I looked at the source code that this plugin would run our git commit hook (which now feels obvious). Before putting in a PR I wanted to open a ticket with my suggestions;

  1. Update README.md so its clear if you have a git commit hook it will be ran
  2. Provide an option to add the --no-verify flag to the commit function
  3. Add some logging for when a commit hook runs, finishes and if it fails

I'm unsure how to do the 3rd option but something like the below I feel would work.

async function commit(message, execaOptions, noVerify = false) {
  const gitArgs = ['commit', '-m', message];

  // Add --no-verify flag if noVerify is true
  if (noVerify) {
    gitArgs.push('--no-verify');
  }

  try {
    console.log('Running git commit');
    await execa('git', gitArgs, execaOptions);
    console.log('Commit successful.');
  } catch (error) {
    console.error('Error during git commit:', error);
    throw error; // Rethrow the error to handle it outside this function if needed
  }
}

stuartjnelson avatar Nov 28 '23 09:11 stuartjnelson

We are using Husky, but that's disabled in the pipeline

Clearly, it isn't actually disabled. Husky does provide configuration to disable it properly:

https://github.com/semantic-release/git/issues/505#issuecomment-1948489909

We won't be adding extra configuration options to handle this situation, but would accept PRs to update our docs and point to those husky details

travi avatar Feb 17 '24 14:02 travi