Skip to content

Commit e674c91

Browse files
authored
Merge pull request #10 from drone-plugins/ci-10505
adds access token support for docker
2 parents bc2ba51 + 19fed9b commit e674c91

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

app.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,11 @@ func Run() {
322322
Usage: "registry type",
323323
EnvVar: "PLUGIN_REGISTRY_TYPE",
324324
},
325+
cli.StringFlag{
326+
Name: "access-token",
327+
Usage: "access token",
328+
EnvVar: "ACCESS_TOKEN",
329+
},
325330
}
326331

327332
if err := app.Run(os.Args); err != nil {

docker.go

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@ type (
4040

4141
// Login defines Docker login parameters.
4242
Login struct {
43-
Registry string // Docker registry address
44-
Username string // Docker registry username
45-
Password string // Docker registry password
46-
Email string // Docker registry email
47-
Config string // Docker Auth Config
43+
Registry string // Docker registry address
44+
Username string // Docker registry username
45+
Password string // Docker registry password
46+
Email string // Docker registry email
47+
Config string // Docker Auth Config
48+
AccessToken string // External Access Token
4849
}
4950

5051
// Build defines Docker build parameters.
@@ -152,6 +153,8 @@ func (p Plugin) Exec() error {
152153
fmt.Println("Detected registry credentials")
153154
case p.Login.Config != "":
154155
fmt.Println("Detected registry credentials file")
156+
case p.Login.AccessToken != "":
157+
fmt.Println("Detected access token")
155158
default:
156159
fmt.Println("Registry credentials or Docker config not provided. Guest mode enabled.")
157160
}
@@ -177,6 +180,17 @@ func (p Plugin) Exec() error {
177180
fmt.Println(out)
178181
return fmt.Errorf("Error authenticating: exit status 1")
179182
}
183+
} else if p.Login.AccessToken != "" {
184+
cmd := commandLoginAccessToken(p.Login, p.Login.AccessToken)
185+
output, err := cmd.CombinedOutput()
186+
if err != nil {
187+
return fmt.Errorf("error logging in to Docker registry: %s", err)
188+
}
189+
if strings.Contains(string(output), "Login Succeeded") {
190+
fmt.Println("Login successful")
191+
} else {
192+
return fmt.Errorf("login did not succeed")
193+
}
180194
}
181195

182196
// cache export feature is currently not supported for docker driver hence we have to create docker-container driver
@@ -301,6 +315,18 @@ func commandLogin(login Login) *exec.Cmd {
301315
)
302316
}
303317

318+
// helper to login via access token
319+
func commandLoginAccessToken(login Login, accessToken string) *exec.Cmd {
320+
cmd := exec.Command(dockerExe,
321+
"login",
322+
"-u",
323+
"oauth2accesstoken",
324+
"--password-stdin",
325+
login.Registry)
326+
cmd.Stdin = strings.NewReader(accessToken)
327+
return cmd
328+
}
329+
304330
// helper to check if args match "docker pull <image>"
305331
func isCommandPull(args []string) bool {
306332
return len(args) > 2 && args[1] == "pull"

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module github.com/drone-plugins/drone-buildx
33
require (
44
github.com/aws/aws-sdk-go v1.26.7
55
github.com/coreos/go-semver v0.3.0
6-
github.com/drone-plugins/drone-plugin-lib v0.4.1
76
github.com/drone/drone-go v1.7.1
87
github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743
98
github.com/joho/godotenv v1.3.0
@@ -13,6 +12,7 @@ require (
1312

1413
require (
1514
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
15+
github.com/drone-plugins/drone-plugin-lib v0.4.2 // indirect
1616
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect
1717
github.com/russross/blackfriday/v2 v2.1.0 // indirect
1818
golang.org/x/sys v0.0.0-20220731174439-a90be440212d // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1212
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1313
github.com/drone-plugins/drone-plugin-lib v0.4.1 h1:47rZlmcMpr1hSp+6Gl+1Z4t+efi/gMQU3lxukC1Yg64=
1414
github.com/drone-plugins/drone-plugin-lib v0.4.1/go.mod h1:KwCu92jFjHV3xv2hu5Qg/8zBNvGwbhoJDQw/EwnTvoM=
15+
github.com/drone-plugins/drone-plugin-lib v0.4.2 h1:EiJ3Kco6ypP5noBQqVt1bBbuO1eUAumtPvLTX/NVAYg=
16+
github.com/drone-plugins/drone-plugin-lib v0.4.2/go.mod h1:KwCu92jFjHV3xv2hu5Qg/8zBNvGwbhoJDQw/EwnTvoM=
1517
github.com/drone/drone-go v1.7.1 h1:ZX+3Rs8YHUSUQ5mkuMLmm1zr1ttiiE2YGNxF3AnyDKw=
1618
github.com/drone/drone-go v1.7.1/go.mod h1:fxCf9jAnXDZV1yDr0ckTuWd1intvcQwfJmTRpTZ1mXg=
1719
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=

0 commit comments

Comments
 (0)