enable gcr and heroku plugins

This commit is contained in:
Brad Rydzewski 2017-08-27 12:27:28 -07:00
parent 7636c99bb6
commit 3e321f1904
23 changed files with 195 additions and 101 deletions

22
.drone.sh Normal file
View File

@ -0,0 +1,22 @@
#!/bin/sh
set -e
set -x
# compile the main binary
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/amd64/drone-docker github.com/drone-plugins/drone-docker/cmd/drone-docker
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/arm64/drone-docker github.com/drone-plugins/drone-docker/cmd/drone-docker
GOOS=linux GOARCH=arm CGO_ENABLED=0 GOARM=7 go build -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/arm/drone-docker github.com/drone-plugins/drone-docker/cmd/drone-docker
# build the heroku binary
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -a -tags netgo -o release/linux/amd64/drone-docker-heroku github.com/drone-plugins/drone-docker/cmd/drone-docker-heroku
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -a -tags netgo -o release/linux/arm64/drone-docker-heroku github.com/drone-plugins/drone-docker/cmd/drone-docker-heroku
GOOS=linux GOARCH=arm CGO_ENABLED=0 GOARM=7 go build -a -tags netgo -o release/linux/arm/drone-docker-heroku github.com/drone-plugins/drone-docker/cmd/drone-docker-heroku
# build the gcr binary
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -a -tags netgo -o release/linux/amd64/drone-docker-gcr github.com/drone-plugins/drone-docker/cmd/drone-docker-gcr
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -a -tags netgo -o release/linux/arm64/drone-docker-gcr github.com/drone-plugins/drone-docker/cmd/drone-docker-gcr
GOOS=linux GOARCH=arm CGO_ENABLED=0 GOARM=7 go build -a -tags netgo -o release/linux/arm/drone-docker-gcr github.com/drone-plugins/drone-docker/cmd/drone-docker-gcr
# build the ecr binary
# todo

View File

@ -3,21 +3,36 @@ workspace:
path: src/github.com/drone-plugins/drone-docker
pipeline:
test:
image: golang:1.6
environment:
- CGO_ENABLED=0
commands:
# Disabled: main.go:99: cli.StringSlice composite literal uses unkeyed fields
# - go vet
- go test -cover -coverprofile=coverage.out
- go build -ldflags "-s -w -X main.build=$DRONE_BUILD_NUMBER" -a -tags netgo
build:
image: golang:1.9
commands: sh .drone.sh
publish:
image: plugins/docker
repo: plugins/docker
tags: [ "latest", "17", "17.05" ]
secrets: [ docker_username, docker_password ]
dockerfile: docker/Dockerfile
when:
branch: master
event: push
publish_heroku:
image: plugins/docker
repo: plugins/heroku
tags: [ "latest", "17", "17.05" ]
secrets: [ docker_username, docker_password ]
dockerfile: docker/heroku/Dockerfile
when:
branch: master
event: push
publish_gcr:
image: plugins/docker
repo: plugins/gcr
tags: [ "latest", "17", "17.05" ]
secrets: [ docker_username, docker_password ]
dockerfile: docker/gcr/Dockerfile
when:
branch: master
event: push

29
.gitignore vendored
View File

@ -1,28 +1,3 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof
.env
release
coverage.out
drone-docker
tmp

View File

@ -1,4 +0,0 @@
FROM docker:17.05.0-ce-dind
ADD drone-docker /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker"]

View File

@ -1,4 +0,0 @@
FROM ???
ADD drone-docker /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker"]

View File

@ -1,46 +0,0 @@
[people]
[people.bradrydzewski]
name = "Brad Rydzewski"
email = "brad@drone.io"
login = "bradrydzewski"
[people.Bugagazavr]
name = "Kirill"
email = ""
login = "Bugagazavr"
[people.donny-dont]
name = "Don Olmstead"
email = "donny-dont@gmail.com"
login = "donny-dont"
[people.jackspirou]
name = "Jack Spirou"
email = ""
login = "jackspirou"
[people.msteinert]
name = "Mike Steinert"
email = ""
login = "msteinert"
[people.nlf]
name = "Nathan LaFreniere"
email = ""
login = "nlf"
[people.tboerger]
name = "Thomas Boerger"
email = "thomas@webhippie.de"
login = "tboerger"
[people.athieriot]
name = "Aurélien Thieriot"
email = "a.thieriot@gmail.com"
login = "athieriot"
[org]
[org.core]
people = [
"bradrydzewski",
"Bugagazavr",
"donny-dont",
"jackspirou",
"msteinert",
"nlf",
"tboerger",
"athieriot"
]

View File

@ -0,0 +1,5 @@
package main
func main() {
}

View File

@ -0,0 +1,50 @@
package main
import (
"encoding/base64"
"os"
"os/exec"
"path"
"strings"
)
func main() {
var (
username = "_json_key"
password = os.Getenv("GCR_TOKEN")
registry = os.Getenv("PLUGIN_REGISTRY")
repo = os.Getenv("PLUGIN_REPO")
)
// decode the token if base64 encoded
decoded, err := base64.StdEncoding.DecodeString(password)
if err == nil {
password = string(decoded)
}
// default registry value
if registry == "" {
registry = "gcr.io"
}
// must use the fully qualified repo name. If the
// repo name does not have the registry prefix we
// should prepend.
if !strings.HasPrefix(repo, registry) {
repo = path.Join(registry, repo)
os.Setenv("PLUGIN_REPO", repo)
}
os.Setenv("PLUGIN_REGISTRY", registry)
os.Setenv("DOCKER_USERNAME", username)
os.Setenv("DOCKER_PASSWORD", password)
// invoke the base docker plugin binary
cmd := exec.Command("drone-docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
os.Exit(1)
}
}

View File

@ -0,0 +1,45 @@
package main
import (
"os"
"os/exec"
"path"
)
func main() {
var (
registry = "registry.heroku.com"
process = os.Getenv("PLUGIN_PROCESS_TYPE")
app = os.Getenv("PLUGIN_APP")
email = os.Getenv("PLUGIN_EMAIL")
key = os.Getenv("PLUGIN_API_KEY")
)
// if the heroku email is provided as a named secret
// then we should use it.
if os.Getenv("HEROKU_EMAIL") != "" {
email = os.Getenv("HEROKU_EMAIL")
}
// if the heroku api key is provided as a named secret
// then we should use it.
if os.Getenv("HEROKU_API_KEY") != "" {
key = os.Getenv("HEROKU_API_KEY")
}
os.Setenv("PLUGIN_REGISTRY", registry)
os.Setenv("PLUGIN_REPO", path.Join(registry, app, process))
os.Setenv("DOCKER_PASSWORD", key)
os.Setenv("DOCKER_USERNAME", email)
os.Setenv("DOCKER_EMAIL", email)
// invoke the base docker plugin binary
cmd := exec.Command("drone-docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
os.Exit(1)
}
}

View File

@ -7,6 +7,8 @@ import (
"github.com/Sirupsen/logrus"
"github.com/joho/godotenv"
"github.com/urfave/cli"
"github.com/drone-plugins/drone-docker"
)
var build = "0" // build number set at compile-time
@ -152,7 +154,7 @@ func main() {
cli.StringFlag{
Name: "docker.registry",
Usage: "docker registry",
Value: defaultRegistry,
Value: "https://index.docker.io/v1/",
EnvVar: "PLUGIN_REGISTRY,DOCKER_REGISTRY",
},
cli.StringFlag{
@ -178,15 +180,15 @@ func main() {
}
func run(c *cli.Context) error {
plugin := Plugin{
plugin := docker.Plugin{
Dryrun: c.Bool("dry-run"),
Login: Login{
Login: docker.Login{
Registry: c.String("docker.registry"),
Username: c.String("docker.username"),
Password: c.String("docker.password"),
Email: c.String("docker.email"),
},
Build: Build{
Build: docker.Build{
Remote: c.String("remote.url"),
Name: c.String("commit.sha"),
Dockerfile: c.String("dockerfile"),
@ -199,7 +201,7 @@ func run(c *cli.Context) error {
Repo: c.String("repo"),
LabelSchema: c.StringSlice("label-schema"),
},
Daemon: Daemon{
Daemon: docker.Daemon{
Registry: c.String("docker.registry"),
Mirror: c.String("daemon.mirror"),
StorageDriver: c.String("daemon.storage-driver"),

View File

@ -1,4 +1,4 @@
package main
package docker
import (
"fmt"
@ -9,11 +9,6 @@ import (
"time"
)
const (
// default docker registry
defaultRegistry = "https://index.docker.io/v1/"
)
type (
// Daemon defines Docker daemon parameters.
Daemon struct {

6
docker/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
# docker build --rm -f docker/Dockerfile -t plugins/docker .
FROM docker:17.05.0-ce-dind
ADD release/linux/amd64/drone-docker /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker"]

1
docker/Dockerfile.arm Normal file
View File

@ -0,0 +1 @@
# see https://github.com/docker-library/docker/issues/67

1
docker/Dockerfile.arm64 Normal file
View File

@ -0,0 +1 @@
# see https://github.com/docker-library/docker/issues/67

1
docker/ecr/Dockerfile Normal file
View File

@ -0,0 +1 @@
FROM plugins/docker:latest

View File

@ -0,0 +1 @@
FROM plugins/docker:linux-arm

View File

@ -0,0 +1 @@
FROM plugins/docker:linux-arm64

6
docker/gcr/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
# docker build --rm -f docker/gcr/Dockerfile -t plugins/gcr .
FROM plugins/docker:latest
ADD release/linux/amd64/drone-docker-gcr /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker-gcr"]

View File

@ -0,0 +1,4 @@
FROM plugins/docker:linux-arm
ADD release/linux/arm64/drone-docker-gcr /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker-gcr"]

View File

@ -0,0 +1,4 @@
FROM plugins/docker:linux-arm64
ADD release/linux/arm64/drone-docker-gcr /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker-gcr"]

6
docker/heroku/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
# docker build --rm -f docker/heroku/Dockerfile -t plugins/heroku .
FROM plugins/docker:latest
ADD release/linux/amd64/drone-docker-heroku /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker-heroku"]

View File

@ -0,0 +1,4 @@
FROM plugins/docker:linux-arm
ADD release/linux/arm/drone-docker-heroku /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker-heroku"]

View File

@ -0,0 +1,4 @@
FROM plugins/docker:linux-arm64
ADD release/linux/arm64/drone-docker-heroku /bin/
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh", "/bin/drone-docker-heroku"]