mirror of
https://github.com/thegeeklab/wp-git-action.git
synced 2024-11-10 03:20:40 +00:00
129 lines
2.4 KiB
Go
129 lines
2.4 KiB
Go
package plugin
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/thegeeklab/drone-git-action/git"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
type Netrc struct {
|
|
Machine string
|
|
Login string
|
|
Password string
|
|
}
|
|
|
|
type Commit struct {
|
|
Author Author
|
|
}
|
|
|
|
type Author struct {
|
|
Name string
|
|
Email string
|
|
}
|
|
|
|
// Settings for the Plugin.
|
|
type Settings struct {
|
|
Actions cli.StringSlice
|
|
SSHKey string
|
|
Remote string
|
|
Branch string
|
|
Path string
|
|
Message string
|
|
Force bool
|
|
FollowTags bool
|
|
InsecureSSLVerify bool
|
|
EmptyCommit bool
|
|
NoVerify bool
|
|
|
|
Netrc Netrc
|
|
Commit Commit
|
|
Author Author
|
|
}
|
|
|
|
// Validate handles the settings validation of the plugin.
|
|
func (p *Plugin) Validate() error {
|
|
for _, action := range p.settings.Actions.Value() {
|
|
switch action {
|
|
case "clone":
|
|
continue
|
|
case "commit":
|
|
continue
|
|
case "push":
|
|
if p.settings.SSHKey == "" && p.settings.Netrc.Password == "" {
|
|
return fmt.Errorf("either SSH key or netrc password are required")
|
|
}
|
|
default:
|
|
return fmt.Errorf("unknown action %s", action)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Execute provides the implementation of the plugin.
|
|
func (p *Plugin) Execute() error {
|
|
gitEnv := []string{
|
|
"GIT_AUTHOR_NAME",
|
|
"GIT_AUTHOR_EMAIL",
|
|
"GIT_AUTHOR_DATE",
|
|
"GIT_COMMITTER_NAME",
|
|
"GIT_COMMITTER_EMAIL",
|
|
"GIT_COMMITTER_DATE",
|
|
}
|
|
for _, env := range gitEnv {
|
|
if err := os.Unsetenv(env); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err := os.Setenv("GIT_TERMINAL_PROMPT", "0"); err != nil {
|
|
return err
|
|
}
|
|
|
|
if p.settings.Path != "" {
|
|
if err := p.initRepo(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if err := git.SetUserName(p.settings.Commit.Author.Name).Run(); err != nil {
|
|
return err
|
|
}
|
|
if err := git.SetUserEmail(p.settings.Commit.Author.Email).Run(); err != nil {
|
|
return err
|
|
}
|
|
if err := git.SetSSLVerify(p.settings.InsecureSSLVerify).Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if p.settings.SSHKey != "" {
|
|
if err := git.WriteSSHKey(p.settings.SSHKey); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if err := git.WriteNetrc(p.settings.Netrc.Machine, p.settings.Netrc.Login, p.settings.Netrc.Password); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, action := range p.settings.Actions.Value() {
|
|
switch action {
|
|
case "clone":
|
|
if err := p.handleClone(); err != nil {
|
|
return err
|
|
}
|
|
case "commit":
|
|
if err := p.handleCommit(); err != nil {
|
|
return err
|
|
}
|
|
case "push":
|
|
if err := p.handlePush(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|