Merge pull request #2149 from bradrydzewski/master

Capture file metadata
This commit is contained in:
Brad Rydzewski 2017-08-02 21:02:53 -04:00 committed by GitHub
commit 03bdc42778
25 changed files with 393 additions and 97 deletions

View file

@ -209,6 +209,11 @@ func run(ctx context.Context, client rpc.Peer, filter rpc.Filter) error {
file.Data, _ = ioutil.ReadAll(limitedPart) file.Data, _ = ioutil.ReadAll(limitedPart)
file.Size = len(file.Data) file.Size = len(file.Data)
file.Time = time.Now().Unix() file.Time = time.Now().Unix()
file.Meta = map[string]string{}
for key, value := range part.Header() {
file.Meta[key] = value[0]
}
if serr := client.Upload(ctxmeta, work.ID, file); serr != nil { if serr := client.Upload(ctxmeta, work.ID, file); serr != nil {
log.Printf("pipeline: cannot upload artifact: %s: %s: %s", work.ID, file.Mime, serr) log.Printf("pipeline: cannot upload artifact: %s: %s: %s", work.ID, file.Mime, serr)

View file

@ -12,12 +12,15 @@ type FileStore interface {
// File represents a pipeline artifact. // File represents a pipeline artifact.
type File struct { type File struct {
ID int64 `json:"id" meddler:"file_id,pk"` ID int64 `json:"id" meddler:"file_id,pk"`
BuildID int64 `json:"-" meddler:"file_build_id"` BuildID int64 `json:"-" meddler:"file_build_id"`
ProcID int64 `json:"proc_id" meddler:"file_proc_id"` ProcID int64 `json:"proc_id" meddler:"file_proc_id"`
PID int `json:"pid" meddler:"file_pid"` PID int `json:"pid" meddler:"file_pid"`
Name string `json:"name" meddler:"file_name"` Name string `json:"name" meddler:"file_name"`
Size int `json:"size" meddler:"file_size"` Size int `json:"size" meddler:"file_size"`
Mime string `json:"mime" meddler:"file_mime"` Mime string `json:"mime" meddler:"file_mime"`
Time int64 `json:"time" meddler:"file_time"` Time int64 `json:"time" meddler:"file_time"`
Passed int `json:"passed" meddler:"file_meta_passed"`
Failed int `json:"failed" meddler:"file_meta_failed"`
Skipped int `json:"skipped" meddler:"file_meta_skipped"`
} }

View file

@ -232,7 +232,7 @@ func (s *RPC) Upload(c context.Context, id string, file *rpc.File) error {
) )
} }
return Config.Storage.Files.FileCreate(&model.File{ report := &model.File{
BuildID: proc.BuildID, BuildID: proc.BuildID,
ProcID: proc.ID, ProcID: proc.ID,
PID: proc.PID, PID: proc.PID,
@ -240,7 +240,35 @@ func (s *RPC) Upload(c context.Context, id string, file *rpc.File) error {
Name: file.Name, Name: file.Name,
Size: file.Size, Size: file.Size,
Time: file.Time, Time: file.Time,
}, }
if d, ok := file.Meta["X-Tests-Passed"]; ok {
report.Passed, _ = strconv.Atoi(d)
}
if d, ok := file.Meta["X-Tests-Failed"]; ok {
report.Failed, _ = strconv.Atoi(d)
}
if d, ok := file.Meta["X-Tests-Skipped"]; ok {
report.Skipped, _ = strconv.Atoi(d)
}
if d, ok := file.Meta["X-Checks-Passed"]; ok {
report.Passed, _ = strconv.Atoi(d)
}
if d, ok := file.Meta["X-Checks-Failed"]; ok {
report.Failed, _ = strconv.Atoi(d)
}
if d, ok := file.Meta["X-Coverage-Lines"]; ok {
report.Passed, _ = strconv.Atoi(d)
}
if d, ok := file.Meta["X-Coverage-Total"]; ok {
if total, _ := strconv.Atoi(d); total != 0 {
report.Failed = total - report.Passed
}
}
return Config.Storage.Files.FileCreate(
report,
bytes.NewBuffer(file.Data), bytes.NewBuffer(file.Data),
) )
} }
@ -579,7 +607,9 @@ func (s *DroneServer) Upload(c oldcontext.Context, req *proto.UploadRequest) (*p
Proc: req.GetFile().GetProc(), Proc: req.GetFile().GetProc(),
Size: int(req.GetFile().GetSize()), Size: int(req.GetFile().GetSize()),
Time: req.GetFile().GetTime(), Time: req.GetFile().GetTime(),
Meta: req.GetFile().GetMeta(),
} }
res := new(proto.Empty) res := new(proto.Empty)
err := peer.Upload(c, req.GetId(), file) err := peer.Upload(c, req.GetId(), file)
return res, err return res, err

View file

@ -17,7 +17,12 @@
window.USER = {{ json .user }}; window.USER = {{ json .user }};
{{ end }} {{ end }}
</script> </script>
<script src="/bower_components/webcomponentsjs/webcomponents-loader.js"></script> <script>
window.WebComponents = window.WebComponents || {};
window.WebComponents.root = '//cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.4/';
// inline polymer loader
!function(){"use strict";window.WebComponents=window.WebComponents||{};var e="webcomponents-loader.js",t=[];if("import"in document.createElement("link")||t.push("hi"),(!("attachShadow"in Element.prototype&&"getRootNode"in Element.prototype)||window.ShadyDOM&&window.ShadyDOM.force)&&t.push("sd"),(!window.customElements||window.customElements.forcePolyfill)&&t.push("ce"),"content"in document.createElement("template")&&window.Promise&&Array.from&&document.createDocumentFragment().cloneNode()instanceof DocumentFragment||(t=["lite"]),t.length){var n,o="webcomponents-"+t.join("-")+".js";if(window.WebComponents.root)n=window.WebComponents.root+o;else{var c=document.querySelector('script[src*="'+e+'"]');n=c.src.replace(e,o)}var r=document.createElement("script");r.src=n,"loading"===document.readyState?document.write(r.outerHTML):document.head.appendChild(r)}else{var d=function(){requestAnimationFrame(function(){window.WebComponents.ready=!0,document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})};"loading"!==document.readyState?d():document.addEventListener("readystatechange",function a(){d(),document.removeEventListener("readystatechange",a)})}}();
</script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">

View file

@ -26,7 +26,12 @@
document.body.appendChild(ssePolyfill); document.body.appendChild(ssePolyfill);
} }
</script> </script>
<script src="/bower_components/webcomponentsjs/webcomponents-loader.js"></script> <script>
window.WebComponents = window.WebComponents || {};
window.WebComponents.root = '//cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.4/';
// inline polymer loader
!function(){"use strict";window.WebComponents=window.WebComponents||{};var e="webcomponents-loader.js",t=[];if("import"in document.createElement("link")||t.push("hi"),(!("attachShadow"in Element.prototype&&"getRootNode"in Element.prototype)||window.ShadyDOM&&window.ShadyDOM.force)&&t.push("sd"),(!window.customElements||window.customElements.forcePolyfill)&&t.push("ce"),"content"in document.createElement("template")&&window.Promise&&Array.from&&document.createDocumentFragment().cloneNode()instanceof DocumentFragment||(t=["lite"]),t.length){var n,o="webcomponents-"+t.join("-")+".js";if(window.WebComponents.root)n=window.WebComponents.root+o;else{var c=document.querySelector('script[src*="'+e+'"]');n=c.src.replace(e,o)}var r=document.createElement("script");r.src=n,"loading"===document.readyState?document.write(r.outerHTML):document.head.appendChild(r)}else{var d=function(){requestAnimationFrame(function(){window.WebComponents.ready=!0,document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})};"loading"!==document.readyState?d():document.addEventListener("readystatechange",function a(){d(),document.removeEventListener("readystatechange",a)})}}();
</script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">

View file

@ -84,7 +84,12 @@ var index = `<!DOCTYPE html>
window.USER = {{ json .user }}; window.USER = {{ json .user }};
{{ end }} {{ end }}
</script> </script>
<script src="/bower_components/webcomponentsjs/webcomponents-loader.js"></script> <script>
window.WebComponents = window.WebComponents || {};
window.WebComponents.root = '//cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.4/';
// inline polymer loader
!function(){"use strict";window.WebComponents=window.WebComponents||{};var e="webcomponents-loader.js",t=[];if("import"in document.createElement("link")||t.push("hi"),(!("attachShadow"in Element.prototype&&"getRootNode"in Element.prototype)||window.ShadyDOM&&window.ShadyDOM.force)&&t.push("sd"),(!window.customElements||window.customElements.forcePolyfill)&&t.push("ce"),"content"in document.createElement("template")&&window.Promise&&Array.from&&document.createDocumentFragment().cloneNode()instanceof DocumentFragment||(t=["lite"]),t.length){var n,o="webcomponents-"+t.join("-")+".js";if(window.WebComponents.root)n=window.WebComponents.root+o;else{var c=document.querySelector('script[src*="'+e+'"]');n=c.src.replace(e,o)}var r=document.createElement("script");r.src=n,"loading"===document.readyState?document.write(r.outerHTML):document.head.appendChild(r)}else{var d=function(){requestAnimationFrame(function(){window.WebComponents.ready=!0,document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})};"loading"!==document.readyState?d():document.addEventListener("readystatechange",function a(){d(),document.removeEventListener("readystatechange",a)})}}();
</script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">
@ -132,7 +137,12 @@ var indexpolymer = `<!DOCTYPE html>
document.body.appendChild(ssePolyfill); document.body.appendChild(ssePolyfill);
} }
</script> </script>
<script src="/bower_components/webcomponentsjs/webcomponents-loader.js"></script> <script>
window.WebComponents = window.WebComponents || {};
window.WebComponents.root = '//cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.4/';
// inline polymer loader
!function(){"use strict";window.WebComponents=window.WebComponents||{};var e="webcomponents-loader.js",t=[];if("import"in document.createElement("link")||t.push("hi"),(!("attachShadow"in Element.prototype&&"getRootNode"in Element.prototype)||window.ShadyDOM&&window.ShadyDOM.force)&&t.push("sd"),(!window.customElements||window.customElements.forcePolyfill)&&t.push("ce"),"content"in document.createElement("template")&&window.Promise&&Array.from&&document.createDocumentFragment().cloneNode()instanceof DocumentFragment||(t=["lite"]),t.length){var n,o="webcomponents-"+t.join("-")+".js";if(window.WebComponents.root)n=window.WebComponents.root+o;else{var c=document.querySelector('script[src*="'+e+'"]');n=c.src.replace(e,o)}var r=document.createElement("script");r.src=n,"loading"===document.readyState?document.write(r.outerHTML):document.head.appendChild(r)}else{var d=function(){requestAnimationFrame(function(){window.WebComponents.ready=!0,document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})};"loading"!==document.readyState?d():document.addEventListener("readystatechange",function a(){d(),document.removeEventListener("readystatechange",a)})}}();
</script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">

View file

@ -140,6 +140,22 @@ var migrations = []struct {
name: "alter-table-add-file-pid", name: "alter-table-add-file-pid",
stmt: alterTableAddFilePid, stmt: alterTableAddFilePid,
}, },
{
name: "alter-table-add-file-meta-passed",
stmt: alterTableAddFileMetaPassed,
},
{
name: "alter-table-add-file-meta-failed",
stmt: alterTableAddFileMetaFailed,
},
{
name: "alter-table-add-file-meta-skipped",
stmt: alterTableAddFileMetaSkipped,
},
{
name: "alter-table-update-file-meta",
stmt: alterTableUpdateFileMeta,
},
} }
// Migrate performs the database migration. If the migration fails // Migrate performs the database migration. If the migration fails
@ -587,3 +603,22 @@ CREATE INDEX ix_perms_user ON perms (perm_user_id);
var alterTableAddFilePid = ` var alterTableAddFilePid = `
ALTER TABLE files ADD COLUMN file_pid INTEGER ALTER TABLE files ADD COLUMN file_pid INTEGER
` `
var alterTableAddFileMetaPassed = `
ALTER TABLE files ADD COLUMN file_meta_passed INTEGER
`
var alterTableAddFileMetaFailed = `
ALTER TABLE files ADD COLUMN file_meta_failed INTEGER
`
var alterTableAddFileMetaSkipped = `
ALTER TABLE files ADD COLUMN file_meta_skipped INTEGER
`
var alterTableUpdateFileMeta = `
UPDATE files SET
file_meta_passed=0
,file_meta_failed=0
,file_meta_skipped=0
`

View file

@ -1,3 +1,22 @@
-- name: alter-table-add-file-pid -- name: alter-table-add-file-pid
ALTER TABLE files ADD COLUMN file_pid INTEGER ALTER TABLE files ADD COLUMN file_pid INTEGER
-- name: alter-table-add-file-meta-passed
ALTER TABLE files ADD COLUMN file_meta_passed INTEGER
-- name: alter-table-add-file-meta-failed
ALTER TABLE files ADD COLUMN file_meta_failed INTEGER
-- name: alter-table-add-file-meta-skipped
ALTER TABLE files ADD COLUMN file_meta_skipped INTEGER
-- name: alter-table-update-file-meta
UPDATE files SET
file_meta_passed=0
,file_meta_failed=0
,file_meta_skipped=0

View file

@ -140,6 +140,22 @@ var migrations = []struct {
name: "alter-table-add-file-pid", name: "alter-table-add-file-pid",
stmt: alterTableAddFilePid, stmt: alterTableAddFilePid,
}, },
{
name: "alter-table-add-file-meta-passed",
stmt: alterTableAddFileMetaPassed,
},
{
name: "alter-table-add-file-meta-failed",
stmt: alterTableAddFileMetaFailed,
},
{
name: "alter-table-add-file-meta-skipped",
stmt: alterTableAddFileMetaSkipped,
},
{
name: "alter-table-update-file-meta",
stmt: alterTableUpdateFileMeta,
},
} }
// Migrate performs the database migration. If the migration fails // Migrate performs the database migration. If the migration fails
@ -587,3 +603,22 @@ CREATE INDEX IF NOT EXISTS ix_perms_user ON perms (perm_user_id);
var alterTableAddFilePid = ` var alterTableAddFilePid = `
ALTER TABLE files ADD COLUMN file_pid INTEGER ALTER TABLE files ADD COLUMN file_pid INTEGER
` `
var alterTableAddFileMetaPassed = `
ALTER TABLE files ADD COLUMN file_meta_passed INTEGER
`
var alterTableAddFileMetaFailed = `
ALTER TABLE files ADD COLUMN file_meta_failed INTEGER
`
var alterTableAddFileMetaSkipped = `
ALTER TABLE files ADD COLUMN file_meta_skipped INTEGER
`
var alterTableUpdateFileMeta = `
UPDATE files SET
file_meta_passed=0
,file_meta_failed=0
,file_meta_skipped=0
`

View file

@ -1,3 +1,22 @@
-- name: alter-table-add-file-pid -- name: alter-table-add-file-pid
ALTER TABLE files ADD COLUMN file_pid INTEGER ALTER TABLE files ADD COLUMN file_pid INTEGER
-- name: alter-table-add-file-meta-passed
ALTER TABLE files ADD COLUMN file_meta_passed INTEGER
-- name: alter-table-add-file-meta-failed
ALTER TABLE files ADD COLUMN file_meta_failed INTEGER
-- name: alter-table-add-file-meta-skipped
ALTER TABLE files ADD COLUMN file_meta_skipped INTEGER
-- name: alter-table-update-file-meta
UPDATE files SET
file_meta_passed=0
,file_meta_failed=0
,file_meta_skipped=0

View file

@ -144,6 +144,22 @@ var migrations = []struct {
name: "alter-table-add-file-pid", name: "alter-table-add-file-pid",
stmt: alterTableAddFilePid, stmt: alterTableAddFilePid,
}, },
{
name: "alter-table-add-file-meta-passed",
stmt: alterTableAddFileMetaPassed,
},
{
name: "alter-table-add-file-meta-failed",
stmt: alterTableAddFileMetaFailed,
},
{
name: "alter-table-add-file-meta-skipped",
stmt: alterTableAddFileMetaSkipped,
},
{
name: "alter-table-update-file-meta",
stmt: alterTableUpdateFileMeta,
},
} }
// Migrate performs the database migration. If the migration fails // Migrate performs the database migration. If the migration fails
@ -588,3 +604,22 @@ CREATE INDEX IF NOT EXISTS ix_perms_user ON perms (perm_user_id);
var alterTableAddFilePid = ` var alterTableAddFilePid = `
ALTER TABLE files ADD COLUMN file_pid INTEGER ALTER TABLE files ADD COLUMN file_pid INTEGER
` `
var alterTableAddFileMetaPassed = `
ALTER TABLE files ADD COLUMN file_meta_passed INTEGER
`
var alterTableAddFileMetaFailed = `
ALTER TABLE files ADD COLUMN file_meta_failed INTEGER
`
var alterTableAddFileMetaSkipped = `
ALTER TABLE files ADD COLUMN file_meta_skipped INTEGER
`
var alterTableUpdateFileMeta = `
UPDATE files SET
file_meta_passed=0
,file_meta_failed=0
,file_meta_skipped=0
`

View file

@ -1,3 +1,22 @@
-- name: alter-table-add-file-pid -- name: alter-table-add-file-pid
ALTER TABLE files ADD COLUMN file_pid INTEGER ALTER TABLE files ADD COLUMN file_pid INTEGER
-- name: alter-table-add-file-meta-passed
ALTER TABLE files ADD COLUMN file_meta_passed INTEGER
-- name: alter-table-add-file-meta-failed
ALTER TABLE files ADD COLUMN file_meta_failed INTEGER
-- name: alter-table-add-file-meta-skipped
ALTER TABLE files ADD COLUMN file_meta_skipped INTEGER
-- name: alter-table-update-file-meta
UPDATE files SET
file_meta_passed=0
,file_meta_failed=0
,file_meta_skipped=0

View file

@ -47,6 +47,9 @@ func (db *datastore) FileCreate(file *model.File, r io.Reader) error {
Size: file.Size, Size: file.Size,
Mime: file.Mime, Mime: file.Mime,
Time: file.Time, Time: file.Time,
Passed: file.Passed,
Failed: file.Failed,
Skipped: file.Skipped,
Data: d, Data: d,
} }
return meddler.Insert(db, "files", &f) return meddler.Insert(db, "files", &f)
@ -61,5 +64,8 @@ type fileData struct {
Size int `meddler:"file_size"` Size int `meddler:"file_size"`
Mime string `meddler:"file_mime"` Mime string `meddler:"file_mime"`
Time int64 `meddler:"file_time"` Time int64 `meddler:"file_time"`
Passed int `meddler:"file_meta_passed"`
Failed int `meddler:"file_meta_failed"`
Skipped int `meddler:"file_meta_skipped"`
Data []byte `meddler:"file_data"` Data []byte `meddler:"file_data"`
} }

View file

@ -9,6 +9,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_build_id = ? WHERE file_build_id = ?
@ -23,6 +26,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?
AND file_name = ? AND file_name = ?
@ -38,6 +44,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
,file_data ,file_data
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?

View file

@ -170,6 +170,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_build_id = ? WHERE file_build_id = ?
` `
@ -184,6 +187,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?
AND file_name = ? AND file_name = ?
@ -199,6 +205,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
,file_data ,file_data
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?

View file

@ -9,6 +9,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_build_id = $1 WHERE file_build_id = $1
@ -23,6 +26,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_proc_id = $1 WHERE file_proc_id = $1
AND file_name = $2 AND file_name = $2
@ -38,6 +44,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
,file_data ,file_data
FROM files FROM files
WHERE file_proc_id = $1 WHERE file_proc_id = $1

View file

@ -170,6 +170,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_build_id = $1 WHERE file_build_id = $1
` `
@ -184,6 +187,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_proc_id = $1 WHERE file_proc_id = $1
AND file_name = $2 AND file_name = $2
@ -199,6 +205,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
,file_data ,file_data
FROM files FROM files
WHERE file_proc_id = $1 WHERE file_proc_id = $1

View file

@ -9,6 +9,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_build_id = ? WHERE file_build_id = ?
@ -23,6 +26,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?
AND file_name = ? AND file_name = ?
@ -38,6 +44,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
,file_data ,file_data
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?

View file

@ -170,6 +170,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_build_id = ? WHERE file_build_id = ?
` `
@ -184,6 +187,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?
AND file_name = ? AND file_name = ?
@ -199,6 +205,9 @@ SELECT
,file_mime ,file_mime
,file_size ,file_size
,file_time ,file_time
,file_meta_passed
,file_meta_failed
,file_meta_skipped
,file_data ,file_data
FROM files FROM files
WHERE file_proc_id = ? WHERE file_proc_id = ?

View file

@ -211,7 +211,7 @@ func (m *Metadata) EnvironDrone() map[string]string {
"DRONE_PREV_BUILD_NUMBER": fmt.Sprintf("%v", m.Prev.Number), "DRONE_PREV_BUILD_NUMBER": fmt.Sprintf("%v", m.Prev.Number),
"DRONE_PREV_COMMIT_SHA": m.Prev.Commit.Sha, "DRONE_PREV_COMMIT_SHA": m.Prev.Commit.Sha,
} }
if m.Curr.Event == EventTag { if m.Curr.Event == EventTag || strings.HasPrefix(m.Curr.Commit.Ref, "refs/tags/") {
params["DRONE_TAG"] = strings.TrimPrefix(m.Curr.Commit.Ref, "refs/tags/") params["DRONE_TAG"] = strings.TrimPrefix(m.Curr.Commit.Ref, "refs/tags/")
} }
if m.Curr.Event == EventPull { if m.Curr.Event == EventPull {

View file

@ -12,6 +12,9 @@ import (
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
) )
// generate protobuffs
// protoc --go_out=plugins=grpc,import_path=proto:. *.proto
var backoff = time.Second var backoff = time.Second
type client struct { type client struct {
@ -182,6 +185,7 @@ func (c *client) Upload(ctx context.Context, id string, file *File) (err error)
req.File.Size = int32(file.Size) req.File.Size = int32(file.Size)
req.File.Time = file.Time req.File.Time = file.Time
req.File.Data = file.Data req.File.Data = file.Data
req.File.Meta = file.Meta
for { for {
_, err = c.client.Upload(ctx, req) _, err = c.client.Upload(ctx, req)
if err == nil { if err == nil {

View file

@ -35,12 +35,13 @@ type (
// File defines a pipeline artifact. // File defines a pipeline artifact.
File struct { File struct {
Name string `json:"name"` Name string `json:"name"`
Proc string `json:"proc"` Proc string `json:"proc"`
Mime string `json:"mime"` Mime string `json:"mime"`
Time int64 `json:"time"` Time int64 `json:"time"`
Size int `json:"size"` Size int `json:"size"`
Data []byte `json:"data"` Data []byte `json:"data"`
Meta map[string]string `json:"meta"`
} }
) )

View file

@ -47,12 +47,13 @@ var _ = math.Inf
const _ = proto1.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto1.ProtoPackageIsVersion2 // please upgrade the proto package
type File struct { type File struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Proc string `protobuf:"bytes,2,opt,name=proc" json:"proc,omitempty"` Proc string `protobuf:"bytes,2,opt,name=proc" json:"proc,omitempty"`
Mime string `protobuf:"bytes,3,opt,name=mime" json:"mime,omitempty"` Mime string `protobuf:"bytes,3,opt,name=mime" json:"mime,omitempty"`
Time int64 `protobuf:"varint,4,opt,name=time" json:"time,omitempty"` Time int64 `protobuf:"varint,4,opt,name=time" json:"time,omitempty"`
Size int32 `protobuf:"varint,5,opt,name=size" json:"size,omitempty"` Size int32 `protobuf:"varint,5,opt,name=size" json:"size,omitempty"`
Data []byte `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` Data []byte `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"`
Meta map[string]string `protobuf:"bytes,7,rep,name=meta" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
} }
func (m *File) Reset() { *m = File{} } func (m *File) Reset() { *m = File{} }
@ -102,6 +103,13 @@ func (m *File) GetData() []byte {
return nil return nil
} }
func (m *File) GetMeta() map[string]string {
if m != nil {
return m.Meta
}
return nil
}
type State struct { type State struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Exited bool `protobuf:"varint,2,opt,name=exited" json:"exited,omitempty"` Exited bool `protobuf:"varint,2,opt,name=exited" json:"exited,omitempty"`
@ -770,45 +778,47 @@ var _Drone_serviceDesc = grpc.ServiceDesc{
func init() { proto1.RegisterFile("drone.proto", fileDescriptor0) } func init() { proto1.RegisterFile("drone.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 625 bytes of a gzipped FileDescriptorProto // 661 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x5d, 0x6b, 0xd4, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xed, 0x6a, 0xd4, 0x4c,
0x14, 0x35, 0x9f, 0xdd, 0xbd, 0x69, 0xb5, 0x0e, 0x45, 0xe2, 0x8a, 0x74, 0x19, 0x10, 0x82, 0xc2, 0x14, 0x7e, 0xb3, 0xf9, 0xe8, 0xee, 0x49, 0xfb, 0x5a, 0x87, 0x2a, 0x71, 0x45, 0xba, 0x04, 0x84,
0x82, 0xab, 0x0f, 0x55, 0x10, 0x94, 0x7e, 0x80, 0xb0, 0x14, 0x19, 0x11, 0x1f, 0x25, 0x6d, 0xa6, 0x55, 0x61, 0xc1, 0x55, 0xb0, 0x0a, 0x82, 0xd2, 0x0f, 0x10, 0xd6, 0x22, 0x23, 0xe2, 0x4f, 0x49,
0x75, 0x30, 0x9b, 0x89, 0xc9, 0xac, 0x6c, 0x7c, 0xf0, 0x07, 0xf8, 0x1b, 0xfc, 0x9b, 0xbe, 0xcb, 0x9b, 0xd3, 0x3a, 0x98, 0xcd, 0xc4, 0x64, 0x2a, 0x1b, 0x2f, 0xc1, 0x6b, 0xf0, 0xea, 0xbc, 0x07,
0x9d, 0x99, 0xa4, 0xd9, 0x76, 0xd7, 0x97, 0x3e, 0xf5, 0x7e, 0x9c, 0x3b, 0xf7, 0x9c, 0x7b, 0xd2, 0xff, 0xcb, 0x99, 0x99, 0xa4, 0xd9, 0x76, 0x2b, 0x48, 0x7f, 0xed, 0xf9, 0x78, 0x66, 0xce, 0x73,
0x85, 0x28, 0xab, 0x64, 0xc1, 0x27, 0x65, 0x25, 0x95, 0x24, 0x81, 0xfe, 0x43, 0x7f, 0x81, 0x7f, 0x9e, 0x67, 0xb2, 0x10, 0xa6, 0xa5, 0xcc, 0x71, 0x52, 0x94, 0x52, 0x49, 0xe6, 0xeb, 0x9f, 0xf8,
0x22, 0x72, 0x4e, 0x08, 0xf8, 0x45, 0x3a, 0xe7, 0xb1, 0x33, 0x76, 0x92, 0x21, 0xd3, 0x31, 0xd6, 0x97, 0x03, 0xde, 0x81, 0xc8, 0x90, 0x31, 0xf0, 0xf2, 0x64, 0x8e, 0x91, 0x33, 0x72, 0xc6, 0x03,
0xca, 0x4a, 0x9e, 0xc7, 0xae, 0xa9, 0x61, 0x8c, 0xb5, 0xb9, 0x98, 0xf3, 0xd8, 0x33, 0x35, 0x8c, 0xae, 0x63, 0xaa, 0x15, 0xa5, 0x3c, 0x8e, 0x7a, 0xa6, 0x46, 0x31, 0xd5, 0xe6, 0x62, 0x8e, 0x91,
0xb1, 0xa6, 0xb0, 0xe6, 0x8f, 0x9d, 0xc4, 0x63, 0x3a, 0xc6, 0x5a, 0x2d, 0x7e, 0xf2, 0x38, 0x18, 0x6b, 0x6a, 0x14, 0x53, 0x4d, 0x51, 0xcd, 0x1b, 0x39, 0x63, 0x97, 0xeb, 0x98, 0x6a, 0x95, 0xf8,
0x3b, 0x49, 0xc0, 0x74, 0x8c, 0xb5, 0x2c, 0x55, 0x69, 0x1c, 0x8e, 0x9d, 0x64, 0x9b, 0xe9, 0x98, 0x8e, 0x91, 0x3f, 0x72, 0xc6, 0x3e, 0xd7, 0x31, 0xd5, 0xd2, 0x44, 0x25, 0x51, 0x30, 0x72, 0xc6,
0xfe, 0x71, 0x20, 0xf8, 0xa8, 0x52, 0xb5, 0x9e, 0xc1, 0x03, 0x08, 0xf9, 0x52, 0x28, 0x9e, 0x69, 0xeb, 0x5c, 0xc7, 0xec, 0x01, 0x78, 0x73, 0x54, 0x49, 0xb4, 0x36, 0x72, 0xc7, 0xe1, 0xf4, 0x96,
0x0e, 0x03, 0x66, 0x33, 0xf2, 0x08, 0x86, 0x18, 0x7d, 0x39, 0x97, 0x99, 0xa1, 0x12, 0xb0, 0x01, 0x61, 0x37, 0x21, 0x4a, 0x93, 0xb7, 0xa8, 0x92, 0xfd, 0x5c, 0x95, 0x35, 0xd7, 0x90, 0xe1, 0x33,
0x16, 0x0e, 0x65, 0xc6, 0x49, 0x0c, 0x5b, 0xb5, 0x4a, 0x2b, 0x9c, 0x32, 0x8c, 0xda, 0x94, 0x8c, 0x18, 0xb4, 0x25, 0xb6, 0x09, 0xee, 0x17, 0xac, 0x2d, 0x5d, 0x0a, 0xd9, 0x16, 0xf8, 0xdf, 0x92,
0x60, 0x70, 0x21, 0x0a, 0x51, 0x7f, 0xe5, 0x99, 0x26, 0xe6, 0xb1, 0x2e, 0x27, 0x7b, 0x10, 0xf0, 0xec, 0x0c, 0x2d, 0x5d, 0x93, 0xbc, 0xe8, 0xed, 0x38, 0xf1, 0x4f, 0x07, 0xfc, 0xf7, 0x2a, 0x51,
0xaa, 0x92, 0x95, 0x66, 0x37, 0x64, 0x26, 0xa1, 0x0c, 0xfc, 0x99, 0x28, 0xae, 0x4e, 0xe1, 0xac, 0xab, 0xb7, 0xbc, 0x0d, 0x01, 0x2e, 0x84, 0xc2, 0x54, 0x1f, 0xec, 0x73, 0x9b, 0xb1, 0xbb, 0x30,
0x9e, 0x42, 0xcb, 0x76, 0x7b, 0xb2, 0x77, 0xc1, 0x2b, 0x65, 0x6d, 0x29, 0x61, 0x88, 0x15, 0xb9, 0xa0, 0xe8, 0xd3, 0xb1, 0x4c, 0xcd, 0xba, 0x3e, 0xef, 0x53, 0x61, 0x57, 0xa6, 0xc8, 0x22, 0x58,
0x50, 0x9a, 0xc9, 0x90, 0x61, 0x48, 0x7f, 0x3b, 0x10, 0x9e, 0x88, 0x5c, 0xf1, 0x8a, 0x3c, 0x87, 0xab, 0x54, 0x52, 0xd2, 0x29, 0xb3, 0x75, 0x93, 0xb2, 0x21, 0xf4, 0x4f, 0x44, 0x2e, 0xaa, 0xcf,
0x30, 0x4f, 0xcf, 0x78, 0x5e, 0xc7, 0xce, 0xd8, 0x4b, 0xa2, 0xe9, 0x43, 0x63, 0xce, 0xc4, 0xb4, 0x98, 0xea, 0xe5, 0x5d, 0xde, 0xe6, 0x44, 0x11, 0xcb, 0x52, 0x96, 0x5a, 0x81, 0x01, 0x37, 0x49,
0x27, 0x33, 0xdd, 0x3b, 0x2e, 0x54, 0xd5, 0x30, 0x0b, 0xc4, 0xad, 0x7c, 0x59, 0x56, 0xad, 0x29, 0xcc, 0xc1, 0x9b, 0x89, 0xfc, 0x5c, 0x6e, 0x67, 0x59, 0x6e, 0x2d, 0x6d, 0xaf, 0x23, 0xed, 0x26,
0x18, 0x8f, 0x5e, 0x41, 0xd4, 0x83, 0xe2, 0xca, 0x6f, 0xbc, 0xb1, 0x5c, 0x31, 0x44, 0x71, 0x3f, 0xb8, 0x85, 0xac, 0x2c, 0x25, 0x0a, 0xa9, 0x22, 0xcf, 0x94, 0x66, 0x32, 0xe0, 0x14, 0xc6, 0x3f,
0xd2, 0x7c, 0xc1, 0xed, 0x94, 0x49, 0x5e, 0xbb, 0x07, 0x0e, 0x3d, 0x85, 0xc1, 0x07, 0x51, 0xf2, 0x1c, 0x08, 0x0e, 0x44, 0xa6, 0xb0, 0x64, 0x8f, 0x21, 0xc8, 0x92, 0x23, 0xcc, 0xaa, 0xc8, 0xd1,
0x1c, 0x45, 0xde, 0x05, 0x57, 0x64, 0x76, 0xcc, 0x15, 0x19, 0x1e, 0x12, 0x45, 0x21, 0x7d, 0xa3, 0x1a, 0xdf, 0x39, 0xd7, 0x58, 0x61, 0x39, 0x99, 0xe9, 0x9e, 0xd1, 0xd9, 0x02, 0x69, 0x2a, 0x2e,
0xb1, 0x4d, 0xb1, 0x53, 0xa6, 0x4d, 0x2e, 0xd3, 0x4c, 0x4b, 0xdd, 0x66, 0x6d, 0x4a, 0x5f, 0x42, 0x8a, 0xb2, 0x31, 0x9e, 0xe2, 0xe1, 0x73, 0x08, 0x3b, 0xd0, 0x7f, 0xd2, 0xff, 0x10, 0xfa, 0xef,
0x74, 0xca, 0x97, 0x8a, 0xf1, 0xef, 0x0b, 0x5e, 0x2b, 0xf2, 0x04, 0xc2, 0x0b, 0xad, 0x45, 0x3f, 0x44, 0x81, 0x19, 0x2d, 0xf9, 0x3f, 0xf4, 0x44, 0x6a, 0x8f, 0xf5, 0x44, 0x4a, 0x42, 0xd2, 0x52,
0x1b, 0x4d, 0x77, 0x56, 0x04, 0x32, 0xdb, 0xa4, 0x07, 0x30, 0x34, 0x53, 0x65, 0xde, 0x90, 0x67, 0x44, 0xdf, 0xec, 0xd8, 0xa4, 0xd4, 0x29, 0x92, 0x3a, 0x93, 0x49, 0xaa, 0x57, 0x5d, 0xe7, 0x4d,
0x30, 0x28, 0x2d, 0x25, 0x3b, 0x75, 0xcf, 0x4e, 0xb5, 0x4c, 0x59, 0x07, 0xa0, 0xef, 0x20, 0x7a, 0x1a, 0x3f, 0x85, 0xf0, 0x10, 0x17, 0x8a, 0xe3, 0xd7, 0x33, 0xac, 0x14, 0xbb, 0x0f, 0xc1, 0x89,
0x5f, 0x88, 0x6e, 0xdf, 0x75, 0x09, 0x14, 0x82, 0x1a, 0xbf, 0x2e, 0x2d, 0x20, 0x9a, 0x6e, 0xdb, 0xde, 0x45, 0x5f, 0x1b, 0x4e, 0x37, 0x96, 0x16, 0xe4, 0xb6, 0x19, 0xef, 0xc0, 0xc0, 0x9c, 0x2a,
0x87, 0xf4, 0x17, 0xc7, 0x4c, 0x8b, 0x3e, 0x86, 0xe8, 0x73, 0xba, 0xf1, 0x09, 0xdc, 0x70, 0x24, 0xb2, 0x9a, 0x3d, 0x82, 0x7e, 0x61, 0x29, 0xd9, 0x53, 0x37, 0xec, 0xa9, 0x86, 0x29, 0x6f, 0x01,
0x0b, 0x7e, 0x9b, 0x0d, 0xfb, 0xb0, 0x73, 0xbc, 0x54, 0xbc, 0xc8, 0x36, 0xed, 0x78, 0x0b, 0x3b, 0xf1, 0x6b, 0x08, 0xdf, 0xe4, 0xa2, 0x9d, 0x77, 0x71, 0x85, 0x18, 0xfc, 0x8a, 0x5e, 0x97, 0x5e,
0x9f, 0x4a, 0xbc, 0xdf, 0xa6, 0x2d, 0xfb, 0xe0, 0x5f, 0x88, 0xbc, 0x5d, 0x12, 0x5d, 0x5d, 0x91, 0x20, 0x9c, 0xae, 0xdb, 0x8b, 0xf4, 0x8b, 0xe3, 0xa6, 0x15, 0xdf, 0x83, 0xf0, 0x63, 0x72, 0xe5,
0x33, 0xdd, 0xa0, 0x87, 0xf8, 0x42, 0x86, 0x3b, 0x6f, 0xc1, 0xf3, 0x0d, 0xc0, 0x4c, 0x5e, 0xfe, 0x15, 0x34, 0x61, 0x4f, 0xe6, 0x78, 0x9d, 0x09, 0xdb, 0xb0, 0xb1, 0xbf, 0x50, 0x98, 0xa7, 0x57,
0x87, 0x83, 0xf6, 0x64, 0x95, 0x03, 0xfe, 0x7b, 0x30, 0xdd, 0xa0, 0x5b, 0x10, 0x1c, 0xcf, 0x4b, 0xcd, 0x78, 0x05, 0x1b, 0x1f, 0x0a, 0xd2, 0xef, 0xaa, 0x29, 0xdb, 0xe0, 0x9d, 0x88, 0xac, 0x19,
0xd5, 0x4c, 0xff, 0xba, 0x10, 0x1c, 0xe1, 0x6f, 0x0d, 0x99, 0x80, 0x8f, 0xc6, 0x12, 0x62, 0xd1, 0x12, 0x76, 0x3e, 0x45, 0xae, 0x1b, 0xf1, 0x2e, 0xdd, 0x90, 0xd2, 0xcc, 0x6b, 0xf0, 0x7c, 0x09,
0xbd, 0x6f, 0x63, 0xb4, 0xbb, 0x52, 0x2b, 0xf3, 0x86, 0xde, 0x21, 0x4f, 0xc1, 0x47, 0x3b, 0x3b, 0x30, 0x93, 0xa7, 0x7f, 0xe1, 0xa0, 0x3d, 0x59, 0xe6, 0x40, 0x9f, 0x07, 0xd7, 0x8d, 0x78, 0x0d,
0x7c, 0xcf, 0xdb, 0x51, 0x4b, 0x59, 0xef, 0x30, 0x58, 0xf4, 0xad, 0xc3, 0xf6, 0x4c, 0x5c, 0x87, 0xfc, 0xfd, 0x79, 0xa1, 0xea, 0xe9, 0xef, 0x1e, 0xf8, 0x7b, 0xf4, 0x87, 0xc6, 0x26, 0xe0, 0x91,
0x45, 0x13, 0x3b, 0x6c, 0xcf, 0xd1, 0x1b, 0xd8, 0x09, 0x84, 0xc6, 0x2d, 0xb2, 0xd7, 0x76, 0xfa, 0xb1, 0x8c, 0x59, 0x74, 0xe7, 0x6d, 0x0c, 0x37, 0x97, 0x6a, 0x45, 0x56, 0xc7, 0xff, 0xb1, 0x87,
0xe6, 0xad, 0xc3, 0x9b, 0xd3, 0x77, 0xf8, 0x15, 0x27, 0xd6, 0xe3, 0xd1, 0xec, 0x1e, 0xbe, 0xe7, 0xe0, 0x91, 0x9d, 0x2d, 0xbe, 0xe3, 0xed, 0xb0, 0xa1, 0xac, 0x67, 0x18, 0x2c, 0xf9, 0xd6, 0x62,
0xfd, 0x0d, 0x7c, 0x02, 0xde, 0x4c, 0x5e, 0x92, 0xfb, 0xed, 0xc1, 0x3b, 0x87, 0xae, 0x23, 0xcf, 0x3b, 0x26, 0xae, 0xc2, 0x92, 0x89, 0x2d, 0xb6, 0xe3, 0xe8, 0x25, 0xec, 0x04, 0x02, 0xe3, 0x16,
0x42, 0x9d, 0xbe, 0xf8, 0x17, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x30, 0x6a, 0x80, 0xe9, 0x05, 0x00, 0xdb, 0x6a, 0x3a, 0x5d, 0xf3, 0x56, 0xe1, 0x8d, 0xf4, 0x2d, 0x7e, 0xc9, 0x89, 0xd5, 0x78, 0x32,
0x00, 0xbb, 0x83, 0xef, 0x78, 0x7f, 0x09, 0x3f, 0x06, 0x77, 0x26, 0x4f, 0xd9, 0xcd, 0x46, 0xf0, 0xd6,
0xa1, 0x8b, 0xc8, 0xa3, 0x40, 0xa7, 0x4f, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x21, 0xb6,
0xce, 0x4e, 0x06, 0x00, 0x00,
} }

View file

@ -9,6 +9,7 @@ message File {
int64 time = 4; int64 time = 4;
int32 size = 5; int32 size = 5;
bytes data = 6; bytes data = 6;
map<string, string> meta = 7;
} }
message State { message State {

58
vendor/vendor.json vendored
View file

@ -39,80 +39,80 @@
{ {
"checksumSHA1": "W3AuK8ocqHwlUajGmQLFvnRhTZE=", "checksumSHA1": "W3AuK8ocqHwlUajGmQLFvnRhTZE=",
"path": "github.com/cncd/pipeline/pipeline", "path": "github.com/cncd/pipeline/pipeline",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "rO+djTfB4LrT+FBbpotyUUobOtU=", "checksumSHA1": "rO+djTfB4LrT+FBbpotyUUobOtU=",
"path": "github.com/cncd/pipeline/pipeline/backend", "path": "github.com/cncd/pipeline/pipeline/backend",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "DzP4c915B+gJTE5RCKQHzxwrUg4=", "checksumSHA1": "DzP4c915B+gJTE5RCKQHzxwrUg4=",
"path": "github.com/cncd/pipeline/pipeline/backend/docker", "path": "github.com/cncd/pipeline/pipeline/backend/docker",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "8Hj/OZnYZyz5N2hqENCTTaGtkNQ=", "checksumSHA1": "2A3+CnkMfvvO4oRkjQKqi44no0g=",
"path": "github.com/cncd/pipeline/pipeline/frontend", "path": "github.com/cncd/pipeline/pipeline/frontend",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "9KYIsY8WlWbrRAP7caEpWT70P9c=", "checksumSHA1": "9KYIsY8WlWbrRAP7caEpWT70P9c=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml", "path": "github.com/cncd/pipeline/pipeline/frontend/yaml",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "EgCQ0v0mExUBHMoxA6+8J8zWqFE=", "checksumSHA1": "EgCQ0v0mExUBHMoxA6+8J8zWqFE=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/compiler", "path": "github.com/cncd/pipeline/pipeline/frontend/yaml/compiler",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "xBjAqRhLsJyh+8rbaKdPYOntTHw=", "checksumSHA1": "xBjAqRhLsJyh+8rbaKdPYOntTHw=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/linter", "path": "github.com/cncd/pipeline/pipeline/frontend/yaml/linter",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "kx2sPUIMozPC/g6E4w48h3FfH3k=", "checksumSHA1": "kx2sPUIMozPC/g6E4w48h3FfH3k=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/matrix", "path": "github.com/cncd/pipeline/pipeline/frontend/yaml/matrix",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "L7Q5qJmPITNmvFEEaj5MPwCWFRk=", "checksumSHA1": "L7Q5qJmPITNmvFEEaj5MPwCWFRk=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/types", "path": "github.com/cncd/pipeline/pipeline/frontend/yaml/types",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "2/3f3oNmxXy5kcrRLCFa24Oc9O4=", "checksumSHA1": "2/3f3oNmxXy5kcrRLCFa24Oc9O4=",
"path": "github.com/cncd/pipeline/pipeline/interrupt", "path": "github.com/cncd/pipeline/pipeline/interrupt",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "uOjTfke7Qxosrivgz/nVTHeIP5g=", "checksumSHA1": "uOjTfke7Qxosrivgz/nVTHeIP5g=",
"path": "github.com/cncd/pipeline/pipeline/multipart", "path": "github.com/cncd/pipeline/pipeline/multipart",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "YlIaMsvB5fFXRolugambNzkSu4I=", "checksumSHA1": "t2HtsL+IUCVkjvHk99Jn1Fj8AXU=",
"path": "github.com/cncd/pipeline/pipeline/rpc", "path": "github.com/cncd/pipeline/pipeline/rpc",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "WAQJYKWUIFBnL1s8AnY4fePnzJ8=", "checksumSHA1": "huYd+DhpBP/0kHMAC0mPZAZBmnw=",
"path": "github.com/cncd/pipeline/pipeline/rpc/proto", "path": "github.com/cncd/pipeline/pipeline/rpc/proto",
"revision": "ab22744b29732792a53fe22e322a7408ba04d758", "revision": "4ee869791092749a481c9ed9e888dfc503535917",
"revisionTime": "2017-07-21T21:40:10Z" "revisionTime": "2017-08-02T19:39:34Z"
}, },
{ {
"checksumSHA1": "7Qj1DK0ceAXkYztW0l3+L6sn+V8=", "checksumSHA1": "7Qj1DK0ceAXkYztW0l3+L6sn+V8=",