func()

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
}