docs: @Override
      public void execute() throws MojoExecutionException, MojoFailureException {
          validateConfiguration();
  
          try {
              // set git flow configuration
              initGitFlowConfig();
  
              // check uncommitted changes
              checkUncommittedChanges();
  
              String tag = null;
              if (settings.isInteractiveMode()) {
                  // get tags
                  String tagsStr = gitFindTags();
  
                  if (StringUtils.isBlank(tagsStr)) {
                      throw new MojoFailureException("There are no tags.");
                  }
  
                  try {
                      tag = prompter.prompt("Choose tag to start support branch",
                              Arrays.asList(tagsStr.split("\\r?\\n")));
                  } catch (PrompterException e) {
                      throw new MojoFailureException("support-start", e);
                  }
              } else if (StringUtils.isNotBlank(tagName)) {
                  if (gitCheckTagExists(tagName)) {
                      tag = tagName;
                  } else {
                      throw new MojoFailureException("The tag '" + tagName + "' doesn't exist.");
                  }
              } else {
                  getLog().info("The tagName is blank. Using the last tag.");
                  tag = gitFindLastTag();
              }
  
              if (StringUtils.isBlank(tag)) {
                  throw new MojoFailureException("Tag is blank.");
              }
  
              // git for-each-ref refs/heads/support/...
              final boolean supportBranchExists = gitCheckBranchExists(gitFlowConfig
                      .getSupportBranchPrefix() + tag);
  
              if (supportBranchExists) {
                  throw new MojoFailureException(
                          "Support branch with that name already exists.");
              }
  
              // git checkout -b ... tag
              gitCreateAndCheckout(gitFlowConfig.getSupportBranchPrefix() + tag, tag);
  
              if (installProject) {
                  // mvn clean install
                  mvnCleanInstall();
              }
  
              if (pushRemote) {
                  gitPush(gitFlowConfig.getSupportBranchPrefix() + tag, false);
              }
          } catch (CommandLineException e) {
              throw new MojoFailureException("support-start", e);
          }
      }