Fix func to determine default login (#29)
only add default login if auth profided or no login entry exist Reviewed-on: https://codeberg.org/woodpecker-plugins/plugin-docker-buildx/pulls/29 Reviewed-by: qwerty287 <qwerty287@noreply.codeberg.org>
This commit is contained in:
@@ -84,15 +84,18 @@ func (l Login) anonymous() bool {
|
||||
|
||||
// Init initialise plugin settings
|
||||
func (p *Plugin) InitSettings() error {
|
||||
if err := json.Unmarshal([]byte(p.settings.LoginsRaw), &p.settings.Logins); err != nil {
|
||||
return fmt.Errorf("Could not unmarshal logins: %v", err)
|
||||
if p.settings.LoginsRaw != "" {
|
||||
if err := json.Unmarshal([]byte(p.settings.LoginsRaw), &p.settings.Logins); err != nil {
|
||||
return fmt.Errorf("Could not unmarshal logins: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
p.settings.Build.Branch = p.pipeline.Repo.Branch
|
||||
p.settings.Build.Ref = p.pipeline.Commit.Ref
|
||||
if p.settings.DefaultLogin.anonymous() {
|
||||
p.settings.Logins = append(p.settings.Logins, p.settings.DefaultLogin)
|
||||
} else {
|
||||
|
||||
if len(p.settings.Logins) == 0 {
|
||||
p.settings.Logins = []Login{p.settings.DefaultLogin}
|
||||
} else if !p.settings.DefaultLogin.anonymous() {
|
||||
p.settings.Logins = prepend(p.settings.Logins, p.settings.DefaultLogin)
|
||||
}
|
||||
|
||||
|
||||
77
plugin/impl_test.go
Normal file
77
plugin/impl_test.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"codeberg.org/6543/go-yaml2json"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
var defaultSettings = Settings{
|
||||
Daemon: Daemon{
|
||||
StoragePath: "/var/lib/docker",
|
||||
},
|
||||
Build: Build{
|
||||
Context: ".",
|
||||
Tags: *cli.NewStringSlice("latest"),
|
||||
LabelsAuto: true,
|
||||
Pull: true,
|
||||
},
|
||||
DefaultLogin: Login{
|
||||
Registry: "https://index.docker.io/v1/",
|
||||
},
|
||||
LoginsRaw: "[]",
|
||||
Cleanup: true,
|
||||
}
|
||||
|
||||
func TestDefaultLogin(t *testing.T) {
|
||||
s := defaultSettings
|
||||
assert.NoError(t, newSettingsOnly(&s).Validate())
|
||||
if assert.Len(t, s.Logins, 1) {
|
||||
assert.EqualValues(t, defaultSettings.DefaultLogin.Registry, s.Logins[0].Registry)
|
||||
}
|
||||
|
||||
// only use login to auth to registrys
|
||||
loginsRaw, err := yaml2json.Convert([]byte(`
|
||||
- registry: https://index.docker.io/v1/
|
||||
username: docker_username
|
||||
password: docker_password
|
||||
- registry: https://codeberg.org
|
||||
username: cb_username
|
||||
password: cb_password`))
|
||||
assert.NoError(t, err)
|
||||
s.LoginsRaw = string(loginsRaw)
|
||||
assert.NoError(t, newSettingsOnly(&s).Validate())
|
||||
if assert.Len(t, s.Logins, 2) {
|
||||
assert.EqualValues(t, defaultSettings.DefaultLogin.Registry, s.Logins[0].Registry)
|
||||
}
|
||||
|
||||
// mixed login settings ('logins' and 'username', 'password' are used)
|
||||
s = defaultSettings
|
||||
loginsRaw, err = yaml2json.Convert([]byte(`
|
||||
- registry: https://codeberg.org
|
||||
username: cb_username
|
||||
password: cb_password`))
|
||||
assert.NoError(t, err)
|
||||
s.LoginsRaw = string(loginsRaw)
|
||||
s.DefaultLogin.Username = "docker_username"
|
||||
s.DefaultLogin.Password = "docker_password"
|
||||
assert.NoError(t, newSettingsOnly(&s).Validate())
|
||||
if assert.Len(t, s.Logins, 2) {
|
||||
assert.EqualValues(t, defaultSettings.DefaultLogin.Registry, s.Logins[0].Registry)
|
||||
}
|
||||
|
||||
// ignore default registry
|
||||
s = defaultSettings
|
||||
loginsRaw, err = yaml2json.Convert([]byte(`
|
||||
- registry: https://codeberg.org
|
||||
username: cb_username
|
||||
password: cb_password`))
|
||||
assert.NoError(t, err)
|
||||
s.LoginsRaw = string(loginsRaw)
|
||||
assert.NoError(t, newSettingsOnly(&s).Validate())
|
||||
if assert.Len(t, s.Logins, 1) {
|
||||
assert.EqualValues(t, "https://codeberg.org", s.Logins[0].Registry)
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
|
||||
// Plugin implements drone.Plugin to provide the plugin implementation.
|
||||
type Plugin struct {
|
||||
settings Settings
|
||||
settings *Settings
|
||||
pipeline drone.Pipeline
|
||||
network drone.Network
|
||||
}
|
||||
@@ -14,8 +14,15 @@ type Plugin struct {
|
||||
// New initializes a plugin from the given Settings, Pipeline, and Network.
|
||||
func New(settings Settings, pipeline drone.Pipeline, network drone.Network) drone.Plugin {
|
||||
return &Plugin{
|
||||
settings: settings,
|
||||
settings: &settings,
|
||||
pipeline: pipeline,
|
||||
network: network,
|
||||
}
|
||||
}
|
||||
|
||||
// newSettingsOnly initializes a plugin from the given Settings only.
|
||||
func newSettingsOnly(settings *Settings) drone.Plugin {
|
||||
return &Plugin{
|
||||
settings: settings,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user