github.com/azunymous/cdx@v0.0.0-20201122180449-fbb46cc4d252/vcs/gogit/promote.go (about)

     1  package gogit
     2  
     3  import (
     4  	"errors"
     5  	"github.com/sirupsen/logrus"
     6  )
     7  
     8  func (r *Repo) Promote(module, stage string) error {
     9  	tagsForModule, err := r.TagsForHead(module, stage)
    10  	if err != nil {
    11  		return err
    12  	}
    13  	if len(tagsForModule) > 0 {
    14  		r.log.Printf("Already tagged with %s, continuing", tagsForModule[0])
    15  		return nil
    16  	}
    17  
    18  	tagsForHead, err := r.TagsForHead(module)
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	if len(tagsForHead) == 0 {
    24  		return errors.New("un-versioned commit")
    25  	}
    26  
    27  	if len(tagsForHead) > 1 {
    28  		logrus.Warnln("Multiple version tags on same commit for " + module)
    29  	}
    30  
    31  	current := tagsForHead[len(tagsForHead)-1]
    32  	promoted := current + "+" + stage
    33  	r.log.Printf("Promoting version %s -> %s", current, promoted)
    34  	//
    35  	revision, err := r.gitRepo.ResolveRevision("HEAD")
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	_, err = r.gitRepo.CreateTag(promoted, *revision, nil)
    41  	return err
    42  }