package git import ( "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/config" "github.com/sirupsen/logrus" ) // Push pushes the latest changes & optionally tags to the default remote func Push(repoDir string, remote string, tags bool, dryRun bool) error { if dryRun { logrus.Infof("dry run: no git changes pushed in %s", repoDir) return nil } commitRepo, err := git.PlainOpen(repoDir) if err != nil { return err } opts := &git.PushOptions{} if remote != "" { opts.RemoteName = remote } if err := commitRepo.Push(opts); err != nil { return err } logrus.Info("git changes pushed") if tags { opts.RefSpecs = append(opts.RefSpecs, config.RefSpec("+refs/tags/*:refs/tags/*")) if err := commitRepo.Push(opts); err != nil { return err } logrus.Info("git tags pushed") } return nil }