github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/git.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/drycc/workflow-cli/pkg/git"
     7  )
     8  
     9  const remoteCreationMsg = "Git remote %s successfully created for app %s.\n"
    10  const remoteDeletionMsg = "Git remotes for app %s removed.\n"
    11  
    12  // GitRemote creates a git remote for a drycc app.
    13  func (d *DryccCmd) GitRemote(appID, remote string, force bool) error {
    14  	s, appID, err := load(d.ConfigFile, appID)
    15  	if err != nil {
    16  		return err
    17  	}
    18  
    19  	remoteURL, err := git.RemoteURL(git.DefaultCmd, remote)
    20  
    21  	if err != nil {
    22  		//If git remote doesn't exist, create it without issue
    23  		if err == git.ErrRemoteNotFound {
    24  			err := git.CreateRemote(git.DefaultCmd, s.Client.ControllerURL.Host, remote, appID)
    25  			if err != nil {
    26  				return err
    27  			}
    28  			d.Printf(remoteCreationMsg, remote, appID)
    29  			return nil
    30  		}
    31  
    32  		return err
    33  	}
    34  
    35  	expectedURL := git.RepositoryURL(s.Client.ControllerURL.Host, appID)
    36  
    37  	if remoteURL == expectedURL {
    38  		d.Printf("Remote %s already exists and is correctly configured for app %s.\n", remote, appID)
    39  		return nil
    40  	}
    41  
    42  	if force {
    43  		d.Printf("Deleting git remote %s.\n", remote)
    44  		err := git.DeleteRemote(git.DefaultCmd, remote)
    45  		if err != nil {
    46  			return err
    47  		}
    48  		err = git.CreateRemote(git.DefaultCmd, s.Client.ControllerURL.Host, remote, appID)
    49  		if err != nil {
    50  			return err
    51  		}
    52  		d.Printf(remoteCreationMsg, remote, appID)
    53  		return nil
    54  	}
    55  
    56  	msg := "Remote %s already exists, please run 'drycc git:remote -f' to overwrite\n"
    57  	msg += "Existing remote URL: %s\n"
    58  	msg += "When forced, will overwrite with: %s"
    59  
    60  	return fmt.Errorf(msg, remote, remoteURL, expectedURL)
    61  }
    62  
    63  // GitRemove removes a application git remote from a repository
    64  func (d *DryccCmd) GitRemove(appID string) error {
    65  	s, appID, err := load(d.ConfigFile, appID)
    66  
    67  	if err != nil {
    68  		return err
    69  	}
    70  
    71  	err = git.DeleteAppRemotes(git.DefaultCmd, s.Client.ControllerURL.Host, appID)
    72  
    73  	if err != nil {
    74  		return err
    75  	}
    76  
    77  	d.Printf(remoteDeletionMsg, appID)
    78  	return nil
    79  }