mirror of
https://github.com/thegeeklab/wp-git-action.git
synced 2024-11-24 22:50:39 +00:00
chore: pass ssh key to git config instead of file (#114)
This commit is contained in:
parent
a07e0d2ef6
commit
dbc0ea945b
@ -75,3 +75,17 @@ func (r *Repository) ConfigSSLVerify(skipVerify bool) *types.Cmd {
|
|||||||
Cmd: cmd,
|
Cmd: cmd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ConfigSSHCommand sets custom SSH key.
|
||||||
|
func (r *Repository) ConfigSSHCommand(sshKey string) *types.Cmd {
|
||||||
|
args := []string{
|
||||||
|
"config",
|
||||||
|
"--local",
|
||||||
|
"core.sshCommand",
|
||||||
|
"ssh -i " + sshKey,
|
||||||
|
}
|
||||||
|
|
||||||
|
return &types.Cmd{
|
||||||
|
Cmd: execabs.Command(gitBin, args...),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -122,3 +122,26 @@ func TestConfigSSLVerify(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfigSSHCommand(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
repo Repository
|
||||||
|
sshKey string
|
||||||
|
want []string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "set SSH command with key",
|
||||||
|
repo: Repository{},
|
||||||
|
sshKey: "/path/to/ssh/key",
|
||||||
|
want: []string{gitBin, "config", "--local", "core.sshCommand", "ssh -i /path/to/ssh/key"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
cmd := tt.repo.ConfigSSHCommand(tt.sshKey)
|
||||||
|
assert.Equal(t, tt.want, cmd.Cmd.Args)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -125,9 +125,7 @@ func (p *Plugin) Execute() error {
|
|||||||
|
|
||||||
// Write SSH key and netrc file.
|
// Write SSH key and netrc file.
|
||||||
if p.Settings.SSHKey != "" {
|
if p.Settings.SSHKey != "" {
|
||||||
if err := WriteSSHKey(homeDir, p.Settings.SSHKey); err != nil {
|
batchCmd = append(batchCmd, p.Settings.Repo.ConfigSSHCommand(p.Settings.SSHKey))
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
netrc := p.Settings.Netrc
|
netrc := p.Settings.Netrc
|
||||||
|
@ -10,38 +10,10 @@ const (
|
|||||||
netrcFile = `machine %s
|
netrcFile = `machine %s
|
||||||
login %s
|
login %s
|
||||||
password %s
|
password %s
|
||||||
`
|
|
||||||
configFile = `Host *
|
|
||||||
StrictHostKeyChecking no
|
|
||||||
UserKnownHostsFile=/dev/null
|
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const strictFilePerm = 0o600
|
||||||
strictFilePerm = 0o600
|
|
||||||
strictDirPerm = 0o700
|
|
||||||
)
|
|
||||||
|
|
||||||
// WriteKey writes the SSH private key.
|
|
||||||
func WriteSSHKey(path, key string) error {
|
|
||||||
sshPath := filepath.Join(path, ".ssh")
|
|
||||||
confPath := filepath.Join(sshPath, "config")
|
|
||||||
keyPath := filepath.Join(sshPath, "id_rsa")
|
|
||||||
|
|
||||||
if err := os.MkdirAll(sshPath, strictDirPerm); err != nil {
|
|
||||||
return fmt.Errorf("failed to create .ssh directory: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.WriteFile(confPath, []byte(configFile), strictFilePerm); err != nil {
|
|
||||||
return fmt.Errorf("failed to create .ssh/config file: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.WriteFile(keyPath, []byte(key), strictFilePerm); err != nil {
|
|
||||||
return fmt.Errorf("failed to create .ssh/id_rsa file: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteNetrc writes the netrc file.
|
// WriteNetrc writes the netrc file.
|
||||||
func WriteNetrc(path, machine, login, password string) error {
|
func WriteNetrc(path, machine, login, password string) error {
|
||||||
|
@ -9,49 +9,6 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWriteSSHKey(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
privateKey string
|
|
||||||
dir string
|
|
||||||
wantErr bool
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "valid private key",
|
|
||||||
privateKey: "valid_private_key",
|
|
||||||
dir: t.TempDir(),
|
|
||||||
wantErr: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "empty private key",
|
|
||||||
privateKey: "",
|
|
||||||
dir: t.TempDir(),
|
|
||||||
wantErr: false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
err := WriteSSHKey(tt.dir, tt.privateKey)
|
|
||||||
if tt.wantErr {
|
|
||||||
assert.Error(t, err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
privateKeyPath := filepath.Join(tt.dir, ".ssh", "id_rsa")
|
|
||||||
_, err = os.Stat(privateKeyPath)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
configPath := filepath.Join(tt.dir, ".ssh", "config")
|
|
||||||
_, err = os.Stat(configPath)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestWriteNetrc(t *testing.T) {
|
func TestWriteNetrc(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
Loading…
Reference in New Issue
Block a user