mirror of
https://github.com/status-im/open-bounty.git
synced 2025-02-17 03:47:58 +00:00
Remove PR -> issue link if comment removed
If "Fixes: #NN" is removed from PR title/description, no longer consider it a claim for any issue.
This commit is contained in:
parent
e39d07c37f
commit
d806e38433
@ -232,6 +232,13 @@ SET
|
||||
updated = timezone('utc'::text, now()),
|
||||
commit_sha = :commit_sha;
|
||||
|
||||
|
||||
-- :name remove-pull-request! :! :n
|
||||
-- :doc remove a PR by id
|
||||
DELETE from pull_requests
|
||||
WHERE pr_id = :pr_id;
|
||||
|
||||
|
||||
-- Bounties ------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -16,3 +16,9 @@
|
||||
(jdbc/with-db-connection [con-db *db*]
|
||||
(db/save-pull-request! con-db
|
||||
(assoc pull-request :state state)))))
|
||||
|
||||
(defn remove
|
||||
[pr-id]
|
||||
(jdbc/with-db-connection [con-db *db*]
|
||||
(db/remove-pull-request! con-db
|
||||
{:pr_id pr-id})))
|
||||
|
@ -111,6 +111,44 @@
|
||||
issue-number)))
|
||||
|
||||
|
||||
(defn handle-claim
|
||||
[user-id login name avatar_url owner repo repo-id bounty-issue-number pr-id pr-number head-sha merged? event-type]
|
||||
(users/create-user user-id login name nil avatar_url)
|
||||
(let [issue (github/get-issue owner repo bounty-issue-number)
|
||||
open-or-edit? (contains? #{:opened :edited} event-type)
|
||||
close? (= :closed event-type)
|
||||
pr-data {:repo_id repo-id
|
||||
:pr_id pr-id
|
||||
:pr_number pr-number
|
||||
:user_id user-id
|
||||
:issue_number bounty-issue-number
|
||||
:issue_id (:id issue)
|
||||
:state event-type}]
|
||||
|
||||
;; TODO: in the opened case if the submitting user has no
|
||||
;; Ethereum address stored, we could post a comment to the
|
||||
;; Github PR explaining that payout is not possible if the PR is
|
||||
;; merged
|
||||
(cond
|
||||
open-or-edit? (do
|
||||
(log/info "PR with reference to bounty issue"
|
||||
bounty-issue-number "opened")
|
||||
(pull-requests/save (merge pr-data {:state :opened
|
||||
:commit_sha head-sha})))
|
||||
close? (if merged?
|
||||
(do (log/info "PR with reference to bounty issue"
|
||||
bounty-issue-number "merged")
|
||||
(pull-requests/save
|
||||
(merge pr-data {:state :merged
|
||||
:commit_sha head-sha}))
|
||||
(issues/update-commit-sha (:id issue) head-sha))
|
||||
(do (log/info "PR with reference to bounty issue"
|
||||
bounty-issue-number "closed with no merge")
|
||||
(pull-requests/save
|
||||
(merge pr-data {:state :closed
|
||||
:commit_sha head-sha})))))))
|
||||
|
||||
|
||||
(defn handle-pull-request-event
|
||||
;; when a PR is opened, only consider it as a claim if:
|
||||
;; * PR references an existing bounty-issue
|
||||
@ -127,7 +165,7 @@
|
||||
login :login
|
||||
avatar_url :avatar_url
|
||||
name :name} :user
|
||||
id :id
|
||||
pr-id :id
|
||||
merged? :merged
|
||||
{head-sha :sha} :head
|
||||
pr-number :number
|
||||
@ -135,45 +173,26 @@
|
||||
pr-title :title} :pull_request}]
|
||||
(log/debug "handle-pull-request-event" event-type owner repo repo-id login pr-body pr-title)
|
||||
(log/debug (extract-issue-number pr-body pr-title))
|
||||
(when-let [bounty-issue-number (->>
|
||||
(if-let [bounty-issue-number (->>
|
||||
(extract-issue-number pr-body pr-title)
|
||||
(first)
|
||||
(ensure-bounty-issue owner repo))]
|
||||
(log/debug "Referenced bounty issue found" repo bounty-issue-number)
|
||||
(users/create-user user-id login name nil avatar_url)
|
||||
(let [issue (github/get-issue owner repo bounty-issue-number)
|
||||
open-or-edit? (contains? #{:opened :edited} event-type)
|
||||
close? (= :closed event-type)
|
||||
pr-data {:repo_id repo-id
|
||||
:pr_id id
|
||||
:pr_number pr-number
|
||||
:user_id user-id
|
||||
:issue_number bounty-issue-number
|
||||
:issue_id (:id issue)
|
||||
:state event-type}]
|
||||
(do
|
||||
(log/debug "Referenced bounty issue found" owner repo bounty-issue-number)
|
||||
(handle-claim user-id
|
||||
login name
|
||||
avatar_url
|
||||
owner repo
|
||||
repo-id
|
||||
bounty-issue-number
|
||||
pr-id
|
||||
pr-number
|
||||
head-sha
|
||||
merged?
|
||||
event-type))
|
||||
(when (= :edited event-type)
|
||||
(pull-requests/remove pr-id))))
|
||||
|
||||
;; TODO: in the opened case if the submitting user has no
|
||||
;; Ethereum address stored, we could post a comment to the
|
||||
;; Github PR explaining that payout is not possible if the PR is
|
||||
;; merged
|
||||
(cond
|
||||
open-or-edit? (do
|
||||
(log/info "PR with reference to bounty issue"
|
||||
bounty-issue-number "opened")
|
||||
(pull-requests/save (merge pr-data {:state :opened
|
||||
:commit_sha head-sha})))
|
||||
close? (if merged?
|
||||
(do (log/info "PR with reference to bounty issue"
|
||||
bounty-issue-number "merged")
|
||||
(pull-requests/save
|
||||
(merge pr-data {:state :merged
|
||||
:commit_sha head-sha}))
|
||||
(issues/update-commit-sha (:id issue) head-sha))
|
||||
(do (log/info "PR with reference to bounty issue"
|
||||
bounty-issue-number "closed with no merge")
|
||||
(pull-requests/save
|
||||
(merge pr-data {:state :closed
|
||||
:commit_sha head-sha}))))))))
|
||||
|
||||
(defn handle-issue-edited
|
||||
[webhook-payload]
|
||||
|
Loading…
x
Reference in New Issue
Block a user