[DEPRECATED] use drone-go instead
Switch branches/tags
Nothing to show
Clone or download
bradrydzewski Merge pull request #5 from objectpartners/escalate_filter
Include escalate plugins filter in model.
Latest commit d6109f6 Jan 12, 2016
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example updated README to reflect correct JSON Jul 13, 2015
plugin Include escalate plugins filter in model. Jan 12, 2016
.gitignore initial commit Feb 25, 2015
LICENSE Initial commit Feb 25, 2015
README.md README reflects updated JSON structure Jul 13, 2015

README.md

drone-plugin-go

This is a package with simple support for writing Drone plugins in Go.

Overview

Plugins are executable files run by Drone to customize the build lifecycle. Plugins receive input data from stdin (or arg[1]) and write the results to stdout

./slack-plugin <<EOF
{
    "repo" : {
        "owner": "foo",
        "name": "bar",
        "full_name": "foo/bar"
    },
    "build" : {
        "number": 1
        "status": "success",
        "started_at": 1421029603,
        "finished_at": 1421029813,
        "head_commit" : {
            "sha": "9f2849d5",
            "ref": "refs/heads/master"
            "branch": "master",
            "message": "Update the Readme",
            "author": {
                "login": "johnsmith"
                "email": "john.smith@gmail.com",
            }
        }
    },
    "job" : {
        "number": 1,
        "status": "success",
        "started_at": 1421029603,
        "finished_at": 1421029813,
        "exit_code": 0,
        "environment": { "GO_VERSION": "1.4" }
    }
    "clone" : {
        "branch": "master",
        "remote": "git://github.com/drone/drone",
        "dir": "/drone/src/github.com/drone/drone",
        "ref": "refs/heads/master",
        "sha": "436b7a6e2abaddfd35740527353e78a227ddcb2c"
    },
    "vargs": {
        "webhook_url": "https://hooks.slack.com/services/...",
        "username": "drone",
        "channel": "#dev"
    }
}
EOF

Use this plugin package to retrieve and parse input parameters:

var repo = plugin.Repo{}
var build = plugin.Build{}
var slack = struct {
    URL      string `json:"webhook_url"`
    Username string `json:"username"`
    Channel  string `json:"channel"`
}{}

plugin.Param("repo", &repo)
plugin.Param("build", &build)
plugin.Param("vargs", &slack)
plugin.Parse()

Note that your plugin configuration data (declared in the .drone.yml file) will be provided in the vargs section of the JSON input.

Shared Volumes

The repository clone directory (specified in the clone.dir input parameter) will be shared across all plugins as a container volume. This means that any files in your repository directory or subdirectories are accessible to plugins. This is useful for plugins that analyze or archive files, such as an S3 plugin.

Publishing

Drone plugins are distributed as Docker images. We therefore recommend publishing your plugins to Docker Hub.

The ENTRYPOINT must be defined and must point to your executable file. The CMD section will be overridden by Drone and will be used to send the JSON encoded data in arg[1]. An example Dockerfile for your plugin might look like this:

# Docker image for Drone's git-clone plugin
#
#     docker build -t drone/drone-clone-git .

FROM library/golang:1.4

# copy the local src files to the container's workspace.
ADD . /go/src/github.com/drone/drone-clone-git/

# build the git-clone plugin inside the container.
RUN go get github.com/drone/drone-clone-git/... && \
    go install github.com/drone/drone-clone-git

# run the git-clone plugin when the container starts
ENTRYPOINT ["/go/bin/drone-clone-git"]