github.com/thetechnoweenie/graven@v1.0.2/commands/release.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/cbegin/graven/domain"
     8  	"github.com/cbegin/graven/repotool"
     9  	"github.com/cbegin/graven/vcstool"
    10  	"github.com/urfave/cli"
    11  )
    12  
    13  var ReleaseCommand = cli.Command{
    14  	Name:   "release",
    15  	Usage:  "Releases artifacts to repositories",
    16  	Action: release,
    17  	Flags: []cli.Flag{
    18  		cli.StringFlag{
    19  			Name:  "branch,b",
    20  			Usage: "Branch name to release. Default 'master'.",
    21  		},
    22  		cli.StringFlag{
    23  			Name:  "remote,r",
    24  			Usage: "Remote name to verify repository state against. Default 'origin'.",
    25  		},
    26  	},
    27  }
    28  
    29  func release(c *cli.Context) error {
    30  	project, err := domain.FindProject()
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	branch := c.String("branch")
    36  	remote := c.String("remote")
    37  
    38  	//TODO: Make this configurable
    39  	var vcsTool vcstool.VCSTool = &vcstool.GitVCSTool{}
    40  	if os.Getenv("TESTRELEASE") == "" {
    41  		if err := vcsTool.VerifyRepoState(project, remote, branch); err != nil {
    42  			return err
    43  		}
    44  	}
    45  	if err := pkg(c); err != nil {
    46  		return err
    47  	}
    48  	if os.Getenv("TESTRELEASE") == "" {
    49  		tagName := fmt.Sprintf("v%s", project.Version)
    50  		if err := vcsTool.Tag(project, remote, tagName); err != nil {
    51  			return err
    52  		}
    53  	}
    54  
    55  	for repoName, repo := range project.Repositories {
    56  		if repo.HasRole(domain.RepositoryRoleRelease) {
    57  			if repoTool, ok := repotool.RepoRegistry[repo.Type]; ok {
    58  				if err := repoTool.Release(project, repoName); err != nil {
    59  					return err
    60  				}
    61  			} else {
    62  				fmt.Printf("Unkown repository type %v for %v\n", repo.Type, repoName)
    63  			}
    64  		}
    65  	}
    66  
    67  	return nil
    68  }