github.com/thetechnoweenie/graven@v1.0.2/repotool/docker_repotool.go (about)

     1  package repotool
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/cbegin/graven/config"
     7  	"github.com/cbegin/graven/domain"
     8  	"github.com/cbegin/graven/util"
     9  	"path"
    10  )
    11  
    12  type DockerRepotool struct{}
    13  
    14  func (r *DockerRepotool) Login(project *domain.Project, repo string) error {
    15  	return GenericLogin(project, repo)
    16  }
    17  
    18  func (r *DockerRepotool) Release(project *domain.Project, repo string) error {
    19  	config := config.NewConfig()
    20  
    21  	if err := config.Read(); err != nil {
    22  		return fmt.Errorf("Error reading configuration (try: graven repo --login --name %v): %v", repo, err)
    23  	}
    24  
    25  	username := config.Get(project.Name, fmt.Sprintf("%v-username", repo))
    26  	password, err := config.GetSecret(project.Name, fmt.Sprintf("%v-password", repo))
    27  	if err != nil {
    28  		return err
    29  	}
    30  
    31  	repository, ok := project.Repositories[repo]
    32  	if !ok {
    33  		return fmt.Errorf("Sorry, could not find repo configuration named %v", repo)
    34  	}
    35  
    36  	if username == "" || password == "" {
    37  		return fmt.Errorf("Could not find docker credentials. Please log in with: graven repo --login --name [reponame]")
    38  	}
    39  	if sout, serr, err := util.RunCommand(project.ProjectPath(), nil, "docker", "login", "-u", username, "-p", password, repository.URL); err != nil {
    40  		fmt.Printf("Logging into Docker...  %v\n%v\n", sout, serr)
    41  		return err
    42  	}
    43  
    44  	dockerPath := path.Join(repository.URL, repository.Group, repository.Artifact)
    45  	dockerTag := fmt.Sprintf("%v:%v", dockerPath, project.Version)
    46  
    47  	fmt.Printf("Pushing docker image %v\n", dockerTag)
    48  	if sout, serr, err := util.RunCommand(project.ProjectPath(), nil, "docker", "push", dockerTag); err != nil {
    49  		fmt.Printf("Running Docker build...  %v\n%v\n", sout, serr)
    50  		return err
    51  	}
    52  
    53  	return nil
    54  }
    55  
    56  func (r *DockerRepotool) UploadDependency(project *domain.Project, repo string, dependencyFile, dependencyPath string) error {
    57  	return fmt.Errorf("Docker repos don't support dependencies.")
    58  }
    59  
    60  
    61  func (g *DockerRepotool) DownloadDependency(project *domain.Project, repo string, dependencyFile, dependencyPath string) error {
    62  	return fmt.Errorf("Docker repos don't support dependencies.")
    63  }