in pkg/git/git.go [480:523]
func (gp *GitProvider) CreateRemoteTag(key, user, p, branchName, name string) error {
log.Info("start creating remote tag", "tagName", name)
r, err := git.PlainOpen(p)
if err != nil {
return fmt.Errorf(errPlainOpenTmpl, p, err)
}
tags, err := r.Tags()
if err != nil {
return fmt.Errorf("failed to get git tags: %w", err)
}
exists, err := isTagExists(name, tags)
if err != nil {
return err
}
if exists {
log.Info("tag already exists. skip creating", "tagName", name)
return nil
}
ref, err := r.Reference(plumbing.ReferenceName(fmt.Sprintf("refs/heads/%v", branchName)), false)
if err != nil {
return fmt.Errorf("failed to get reference: %w", err)
}
newRef := plumbing.NewReferenceFromStrings(fmt.Sprintf("refs/tags/%v", name), ref.Hash().String())
err = r.Storer.SetReference(newRef)
if err != nil {
return fmt.Errorf("failed to set refference: %w", err)
}
err = gp.PushChanges(key, user, p, defaultSshPort)
if err != nil {
return err
}
log.Info("tag has been created", "tagName", name)
return nil
}