Revert "refactor: use parameter list for multiple registries (#309)"

This reverts commit 0cc14f4114.
This commit is contained in:
Robert Kaussow 2023-08-11 10:03:20 +02:00
parent 0cc14f4114
commit 601a872acc
Signed by: xoxys
GPG Key ID: 4E692A2EAECC03C0
7 changed files with 47 additions and 68 deletions

View File

@ -95,7 +95,7 @@ steps:
tags: latest tags: latest
``` ```
#### Push to multiple registries **Multiple registries:**
```yaml ```yaml
kind: pipeline kind: pipeline
@ -105,19 +105,26 @@ steps:
- name: docker - name: docker
image: thegeeklab/drone-docker-buildx:23 image: thegeeklab/drone-docker-buildx:23
privileged: true privileged: true
environment:
DOCKER_REGISTRY_PASSWORD:
from_secret: docker_registry_password
GITHUB_REGISTRY_PASSWORD:
from_secret: github_registry_password
settings: settings:
repo: repo:
- octocat/example - octocat/example
- ghcr.io/octocat/example - ghcr.io/octocat/example
tags: latest tags: latest
registries: |
registries: registries:
- username: octocat - username: "octocat"
password: docker-password password: "$DOCKER_REGISTRY_PASSWORD"
- registry: ghcr.io - registry: "ghcr.io"
username: octocat username: "octocat"
password: ghrc-password password: "$GITHUB_REGISTRY_PASSWORD"
``` ```
## Build ## Build
Build the binary with the following command: Build the binary with the following command:

View File

@ -295,6 +295,6 @@ properties:
required: false required: false
- name: registries - name: registries
description: List of registry credentials. Check out the Examples for more information. description: Credentials for multiple registries described in YAML format. Check out the Examples for more information.
type: list type: string
required: false required: false

View File

@ -246,7 +246,7 @@ func settingsFlags(settings *plugin.Settings, category string) []cli.Flag {
Name: "docker.registry", Name: "docker.registry",
EnvVars: []string{"PLUGIN_REGISTRY", "DOCKER_REGISTRY"}, EnvVars: []string{"PLUGIN_REGISTRY", "DOCKER_REGISTRY"},
Usage: "docker registry to authenticate with", Usage: "docker registry to authenticate with",
Value: plugin.DefaultRegistry, Value: "https://index.docker.io/v1/",
Destination: &settings.Login.Registry, Destination: &settings.Login.Registry,
Category: category, Category: category,
}, },
@ -332,8 +332,7 @@ func settingsFlags(settings *plugin.Settings, category string) []cli.Flag {
Name: "docker.registries", Name: "docker.registries",
EnvVars: []string{"PLUGIN_REGISTRIES"}, EnvVars: []string{"PLUGIN_REGISTRIES"},
Usage: "credentials for registries", Usage: "credentials for registries",
Value: "[]", Destination: &settings.Login.RegistriesYaml,
Destination: &settings.Login.RegistriesRaw,
Category: category, Category: category,
}, },
} }

8
go.mod
View File

@ -6,20 +6,14 @@ require (
github.com/coreos/go-semver v0.3.1 github.com/coreos/go-semver v0.3.1
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
github.com/sirupsen/logrus v1.9.3 github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.7.0
github.com/thegeeklab/drone-plugin-lib/v2 v2.3.4 github.com/thegeeklab/drone-plugin-lib/v2 v2.3.4
github.com/urfave/cli/v2 v2.25.5 github.com/urfave/cli/v2 v2.25.5
golang.org/x/sys v0.11.0 golang.org/x/sys v0.11.0
) )
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
)
require ( require (
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1
) )

1
go.sum
View File

@ -25,7 +25,6 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsr
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

View File

@ -1,7 +1,6 @@
package plugin package plugin
import ( import (
"encoding/json"
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
@ -10,6 +9,7 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"golang.org/x/sys/execabs" "golang.org/x/sys/execabs"
"gopkg.in/yaml.v3"
) )
// Daemon defines Docker daemon parameters. // Daemon defines Docker daemon parameters.
@ -33,9 +33,8 @@ type Daemon struct {
// Login defines Docker login parameters. // Login defines Docker login parameters.
type Login struct { type Login struct {
RegistryData RegistryData
Config string Config string // Docker Auth Config
Registries []RegistryData RegistriesYaml string // Docker Auth with YAML config
RegistriesRaw string
} }
type RegistryData struct { type RegistryData struct {
@ -45,6 +44,10 @@ type RegistryData struct {
Email string // Docker registry email Email string // Docker registry email
} }
type RegistriesYaml struct {
Registries []RegistryData `yaml:"registries"`
}
// Build defines Docker build parameters. // Build defines Docker build parameters.
type Build struct { type Build struct {
Ref string // Git commit ref Ref string // Git commit ref
@ -83,10 +86,7 @@ type Settings struct {
Dryrun bool Dryrun bool
} }
const ( const strictFilePerm = 0o600
strictFilePerm = 0o600
DefaultRegistry = "https://index.docker.io/v1/"
)
// Validate handles the settings validation of the plugin. // Validate handles the settings validation of the plugin.
func (p *Plugin) Validate() error { func (p *Plugin) Validate() error {
@ -118,16 +118,6 @@ func (p *Plugin) Validate() error {
} }
} }
if err := json.Unmarshal([]byte(p.settings.Login.RegistriesRaw), &p.settings.Login.Registries); err != nil {
return fmt.Errorf("error unmarshal registries: %w", err)
}
for i, registryData := range p.settings.Login.Registries {
if registryData.Registry == "" {
p.settings.Login.Registries[i].Registry = DefaultRegistry
}
}
return nil return nil
} }
@ -195,7 +185,19 @@ func (p *Plugin) Execute() error {
} }
} }
for _, registryData := range p.settings.Login.Registries { if p.settings.Login.RegistriesYaml != "" {
var t RegistriesYaml
err := yaml.Unmarshal([]byte(p.settings.Login.RegistriesYaml), &t)
if err != nil {
return fmt.Errorf("error unmarshal registries: %w", err)
}
for _, registryData := range t.Registries {
if registryData.Registry == "" {
registryData.Registry = "https://index.docker.io/v1/"
}
cmd := commandLogin(registryData) cmd := commandLogin(registryData)
err := cmd.Run() err := cmd.Run()
@ -203,6 +205,7 @@ func (p *Plugin) Execute() error {
return fmt.Errorf("error authenticating: %w", err) return fmt.Errorf("error authenticating: %w", err)
} }
} }
}
if p.settings.Daemon.BuildkitConfig != "" { if p.settings.Daemon.BuildkitConfig != "" {
err := os.WriteFile(buildkitConfig, []byte(p.settings.Daemon.BuildkitConfig), strictFilePerm) err := os.WriteFile(buildkitConfig, []byte(p.settings.Daemon.BuildkitConfig), strictFilePerm)
@ -214,7 +217,7 @@ func (p *Plugin) Execute() error {
switch { switch {
case p.settings.Login.Password != "": case p.settings.Login.Password != "":
logrus.Info("Detected registry credentials") logrus.Info("Detected registry credentials")
case len(p.settings.Login.Registries) > 0: case p.settings.Login.RegistriesYaml != "":
logrus.Info("Detected multiple registry credentials") logrus.Info("Detected multiple registry credentials")
case p.settings.Login.Config != "": case p.settings.Login.Config != "":
logrus.Info("Detected registry credentials file") logrus.Info("Detected registry credentials file")

View File

@ -1,23 +0,0 @@
package plugin
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestRegistries(t *testing.T) {
p := &Plugin{}
p.settings.Login.RegistriesRaw = `[{"username": "docker_user", "password": "docker_password"}]`
assert.NoError(t, p.Validate())
fmt.Println(p.settings.Login.Registries[0].Password)
if assert.Len(t, p.settings.Login.Registries, 1) {
assert.EqualValues(t, "docker_user", p.settings.Login.Registries[0].Username)
assert.EqualValues(t, "docker_password", p.settings.Login.Registries[0].Password)
assert.EqualValues(t, DefaultRegistry, p.settings.Login.Registries[0].Registry)
}
}