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 }