Skip to content
This repository has been archived by the owner on Jan 29, 2022. It is now read-only.

Re-enable stash (post receive hook plugin) support #90

Merged
merged 1 commit into from
Feb 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions lib/parsers/webhook_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@ def call(body)
end

def detect_vcs
return 'github' if github_webhook?
return 'gitlab' if gitlab_webhook?
return 'stash' if stash_webhook?
return 'bitbucket' if bitbucket_webhook?
return 'tfs' if tfs_webhook?
return 'github' if github_webhook?
return 'gitlab' if gitlab_webhook?
return 'bitbucket-server' if bitbucket_server_webhook?
return 'bitbucket' if bitbucket_webhook?
return 'stash' if stash_webhook?
return 'tfs' if tfs_webhook?

raise StandardError, 'payload not recognised'
end
Expand All @@ -38,8 +39,8 @@ def gitlab_webhook?
env.key?('HTTP_X_GITLAB_EVENT')
end

# stash/bitbucket server
def stash_webhook?
# bitbucket server
def bitbucket_server_webhook?
# https://confluence.atlassian.com/bitbucketserver/event-payload-938025882.html
env.key?('HTTP_X_EVENT_KEY') && env.key?('HTTP_X_REQUEST_ID')
end
Expand All @@ -49,6 +50,11 @@ def bitbucket_webhook?
env.key?('HTTP_X_EVENT_KEY') && env.key?('HTTP_X_HOOK_UUID')
end

def stash_webhook?
# https://confluence.atlassian.com/bitbucketserver/post-service-webhook-for-bitbucket-server-776640367.html
env.key?('HTTP_X_ATLASSIAN_TOKEN')
end

def tfs_webhook?
# https://docs.microsoft.com/en-us/vsts/service-hooks/services/webhooks
return false unless @data.key? 'resource'
Expand All @@ -67,12 +73,14 @@ def branch
end
when 'gitlab'
@data['ref'].sub('refs/heads/', '')
when 'stash'
when 'bitbucket-server'
@data['changes'][0]['refId'].sub('refs/heads/', '')
when 'bitbucket'
return @data['push']['changes'][0]['new']['name'] unless deleted?

@data['push']['changes'][0]['old']['name']
when 'stash'
@data['refChanges'][0]['refId'].sub('refs/heads/', '')
when 'tfs'
@data['resource']['refUpdates'][0]['name'].sub('refs/heads/', '')
end
Expand All @@ -84,10 +92,12 @@ def deleted?
@data['deleted']
when 'gitlab'
@data['after'] == '0000000000000000000000000000000000000000'
when 'stash'
when 'bitbucket-server'
@data['changes'][0]['type'] == 'DELETE'
when 'bitbucket'
@data['push']['changes'][0]['closed']
when 'stash'
@data['refChanges'][0]['type'] == 'DELETE'
when 'tfs'
@data['resource']['refUpdates'][0]['newObjectId'] == '0000000000000000000000000000000000000000'
end
Expand Down
44 changes: 44 additions & 0 deletions spec/fixtures/bitbucket-server/create.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"eventKey":"repo:refs_changed",
"date":"2018-08-01T16:26:46-0400",
"actor":{
"name":"chet",
"emailAddress":"[email protected]",
"id":3153,
"displayName":"Chet Hosey",
"active":true,
"slug":"chet",
"type":"NORMAL"
},
"repository":{
"slug":"puppet-control",
"id":1186,
"name":"Puppet-Control",
"scmId":"git",
"state":"AVAILABLE",
"statusMessage":"Available",
"forkable":true,
"project":{
"key":"r10k",
"id":814,
"name":"puppet-r10k",
"description":"Test project for Puppet",
"public":true,
"type":"NORMAL"
},
"public":false
},
"changes":[
{
"ref":{
"id":"refs/heads/test-branch",
"displayId":"test-branch",
"type":"BRANCH"
},
"refId":"refs/heads/test-branch",
"fromHash":"0000000000000000000000000000000000000000",
"toHash":"38010648e6a6b9a99633a6e2c4c1d8e3a8b99215",
"type":"ADD"
}
]
}
44 changes: 44 additions & 0 deletions spec/fixtures/bitbucket-server/delete.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"eventKey":"repo:refs_changed",
"date":"2018-08-01T16:28:18-0400",
"actor":{
"name":"chet",
"emailAddress":"[email protected]",
"id":3153,
"displayName":"Chet Hosey",
"active":true,
"slug":"chet",
"type":"NORMAL"
},
"repository":{
"slug":"puppet-control",
"id":1186,
"name":"Puppet-Control",
"scmId":"git",
"state":"AVAILABLE",
"statusMessage":"Available",
"forkable":true,
"project":{
"key":"r10k",
"id":814,
"name":"puppet-r10k",
"description":"Test project for Puppet",
"public":true,
"type":"NORMAL"
},
"public":false
},
"changes":[
{
"ref":{
"id":"refs/heads/test-branch",
"displayId":"test-branch",
"type":"BRANCH"
},
"refId":"refs/heads/test-branch",
"fromHash":"38010648e6a6b9a99633a6e2c4c1d8e3a8b99215",
"toHash":"0000000000000000000000000000000000000000",
"type":"DELETE"
}
]
}
4 changes: 4 additions & 0 deletions spec/fixtures/bitbucket-server/update-headers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"HTTP_X_REQUEST_ID": "b072fe2e-ff88-4e03-881d-2f9a4d6688a0",
"HTTP_X_EVENT_KEY": "repo:refs_changed"
}
44 changes: 44 additions & 0 deletions spec/fixtures/bitbucket-server/update.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"eventKey":"repo:refs_changed",
"date":"2018-08-01T16:19:56-0400",
"actor":{
"name":"chet",
"emailAddress":"[email protected]",
"id":3153,
"displayName":"Chet Hosey",
"active":true,
"slug":"chet",
"type":"NORMAL"
},
"repository":{
"slug":"r10k",
"id":1186,
"name":"puppet-r10k",
"scmId":"git",
"state":"AVAILABLE",
"statusMessage":"Available",
"forkable":true,
"project":{
"key":"r10k",
"id":814,
"name":"puppet-r10k",
"description":"Test project for Puppet",
"public":true,
"type":"NORMAL"
},
"public":false
},
"changes":[
{
"ref":{
"id":"refs/heads/feature_branch",
"displayId":"feature_branch",
"type":"BRANCH"
},
"refId":"refs/heads/feature_branch",
"fromHash":"1fc7624b85c67d1709664e476a27982d55fd020b",
"toHash":"4d2a460c01548e39d6f838a68ca1b98f25f1a650",
"type":"UPDATE"
}
]
}
45 changes: 1 addition & 44 deletions spec/fixtures/stash/create.json

Large diffs are not rendered by default.

45 changes: 1 addition & 44 deletions spec/fixtures/stash/delete.json
Original file line number Diff line number Diff line change
@@ -1,44 +1 @@
{
"eventKey":"repo:refs_changed",
"date":"2018-08-01T16:28:18-0400",
"actor":{
"name":"chet",
"emailAddress":"[email protected]",
"id":3153,
"displayName":"Chet Hosey",
"active":true,
"slug":"chet",
"type":"NORMAL"
},
"repository":{
"slug":"puppet-control",
"id":1186,
"name":"Puppet-Control",
"scmId":"git",
"state":"AVAILABLE",
"statusMessage":"Available",
"forkable":true,
"project":{
"key":"r10k",
"id":814,
"name":"puppet-r10k",
"description":"Test project for Puppet",
"public":true,
"type":"NORMAL"
},
"public":false
},
"changes":[
{
"ref":{
"id":"refs/heads/test-branch",
"displayId":"test-branch",
"type":"BRANCH"
},
"refId":"refs/heads/test-branch",
"fromHash":"38010648e6a6b9a99633a6e2c4c1d8e3a8b99215",
"toHash":"0000000000000000000000000000000000000000",
"type":"DELETE"
}
]
}
{"repository":{"slug":"puppet-r10k","id":72,"name":"puppet-r10k","scmId":"git","state":"AVAILABLE","statusMessage":"Available","forkable":true,"project":{"key":"PUP","id":81,"name":"Puppet","public":false,"type":"NORMAL"},"public":false},"refChanges":[{"refId":"refs/heads/feature_branch","fromHash":"08ea6861a4ab73facb1ca42309f295d5ceb77127","toHash":"0000000000000000000000000000000000000000","type":"DELETE"}],"changesets":{"size":0,"limit":500,"isLastPage":true,"values":[],"start":0}}
3 changes: 1 addition & 2 deletions spec/fixtures/stash/update-headers.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
{
"HTTP_X_REQUEST_ID": "b072fe2e-ff88-4e03-881d-2f9a4d6688a0",
"HTTP_X_EVENT_KEY": "repo:refs_changed"
"HTTP_X_ATLASSIAN_TOKEN": "no-check"
}
45 changes: 1 addition & 44 deletions spec/fixtures/stash/update.json
Original file line number Diff line number Diff line change
@@ -1,44 +1 @@
{
"eventKey":"repo:refs_changed",
"date":"2018-08-01T16:19:56-0400",
"actor":{
"name":"chet",
"emailAddress":"[email protected]",
"id":3153,
"displayName":"Chet Hosey",
"active":true,
"slug":"chet",
"type":"NORMAL"
},
"repository":{
"slug":"r10k",
"id":1186,
"name":"puppet-r10k",
"scmId":"git",
"state":"AVAILABLE",
"statusMessage":"Available",
"forkable":true,
"project":{
"key":"r10k",
"id":814,
"name":"puppet-r10k",
"description":"Test project for Puppet",
"public":true,
"type":"NORMAL"
},
"public":false
},
"changes":[
{
"ref":{
"id":"refs/heads/feature_branch",
"displayId":"feature_branch",
"type":"BRANCH"
},
"refId":"refs/heads/feature_branch",
"fromHash":"1fc7624b85c67d1709664e476a27982d55fd020b",
"toHash":"4d2a460c01548e39d6f838a68ca1b98f25f1a650",
"type":"UPDATE"
}
]
}
{"repository":{"slug":"puppet-r10k","id":72,"name":"puppet-r10k","scmId":"git","state":"AVAILABLE","statusMessage":"Available","forkable":true,"project":{"key":"PUP","id":81,"name":"Puppet","public":false,"type":"NORMAL"},"public":false},"refChanges":[{"refId":"refs/heads/feature_branch","fromHash":"6b1c3cca52bc27b3073084656186048b6d2f6a67","toHash":"08ea6861a4ab73facb1ca42309f295d5ceb77127","type":"UPDATE"}],"changesets":{"size":1,"limit":100,"isLastPage":true,"values":[{"fromCommit":{"id":"6b1c3cca52bc27b3073084656186048b6d2f6a67","displayId":"6b1c3cca52b"},"toCommit":{"id":"08ea6861a4ab73facb1ca42309f295d5ceb77127","displayId":"08ea6861a4a","author":{"name":"Alexander Fisher","emailAddress":"[email protected]"},"authorTimestamp":1509707506000,"message":"a test commit","parents":[{"id":"6b1c3cca52bc27b3073084656186048b6d2f6a67","displayId":"6b1c3cca52b"}]},"changes":{"size":1,"limit":100,"isLastPage":true,"values":[{"contentId":"84fe9e3cfe2673ad3e2f024d7b7a192ba4f1b7d7","fromContentId":"056e13b19e2abd6d3cec860ec32207041e431b25","path":{"components":["README.md"],"parent":"","name":"README.md","extension":"md","toString":"README.md"},"executable":false,"percentUnchanged":-1,"type":"MODIFY","nodeType":"FILE","srcExecutable":false,"links":{"self":[{"href":"https://bitbucket.example.com/projects/PUP/repos/puppet-r10k/commits/08ea6861a4ab73facb1ca42309f295d5ceb77127#README.md"}]}}],"start":0},"links":{"self":[{"href":"https://bitbucket.example.com/projects/PUP/repos/puppet-r10k/commits/08ea6861a4ab73facb1ca42309f295d5ceb77127#README.md"}]}}],"start":0}}
2 changes: 1 addition & 1 deletion spec/unit/parsers/webhook_json_parser_spec.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
require 'spec_helper'

describe Sinatra::Parsers::WebhookJsonParser do
services = %w[stash bitbucket github gitlab tfs]
services = %w[bitbucket-server bitbucket stash github gitlab tfs]
let(:result) { subject.call(payload) }
services.each do |service|
context "when payload is from #{service}" do
Expand Down