新增时向grimoirelab推送事件
This commit is contained in:
parent
4a2a5eef93
commit
501c129610
|
@ -154,6 +154,8 @@ class IssuesController < ApplicationController
|
|||
|
||||
Rails.logger.info "[ATME] maybe to at such users: #{@atme_receivers.pluck(:login)}"
|
||||
AtmeService.call(current_user, @atme_receivers, @issue) if @atme_receivers.size > 0
|
||||
# 新增时向grimoirelab推送事件
|
||||
IssueWebhookJob.set(wait: 5.seconds).perform_later(@issue.id)
|
||||
|
||||
render json: {status: 0, message: "创建成功", id: @issue.id}
|
||||
else
|
||||
|
|
|
@ -0,0 +1,181 @@
|
|||
class IssueWebhookJob < ApplicationJob
|
||||
include ApplicationHelper
|
||||
queue_as :message
|
||||
|
||||
def perform(issue_id, user_id)
|
||||
issue = Issue.find_by(id: issue_id)
|
||||
return if issue.blank?
|
||||
project = issue.project
|
||||
user = issue.user
|
||||
domain = "#{Rails.application.config_for(:configuration)['platform_url']}"
|
||||
gitea_domain = GiteaService.gitea_config[:domain]
|
||||
ssh_url = "git@#{gitea_domain.gsub("https://","")}:#{project.owner.login}/#{project.identifier}.git"
|
||||
event_json = {
|
||||
"action": "opened",
|
||||
"number": 1,
|
||||
"issue": {
|
||||
"id": 888,
|
||||
"url": "#{domain}/api/v1/#{project.owner.login}/#{project.identifier}/issues/#{issue.id}",
|
||||
"html_url": "#{domain}/#{project.owner.login}/#{project.identifier}/issues/#{issue.id}",
|
||||
"number": 1,
|
||||
"user": {
|
||||
"id": user.id,
|
||||
"login": "#{user.login}",
|
||||
"full_name": "",
|
||||
"email": "#{user.mail}",
|
||||
"avatar_url": "#{domain}/#{url_to_avatar(user)}",
|
||||
"language": "",
|
||||
"is_admin": false,
|
||||
"last_login": "#{user.last_login_on}",
|
||||
"created": "#{user.created_on}",
|
||||
"restricted": false,
|
||||
"active": false,
|
||||
"prohibit_login": false,
|
||||
"location": "",
|
||||
"website": "",
|
||||
"description": "",
|
||||
"visibility": "public",
|
||||
"followers_count": 0,
|
||||
"following_count": 0,
|
||||
"starred_repos_count": 0,
|
||||
"username": "#{user.login}"
|
||||
},
|
||||
"original_author": "",
|
||||
"original_author_id": 0,
|
||||
"title": "#{issue.subject}",
|
||||
"body": "#{issue.description}",
|
||||
"ref": "",
|
||||
"labels": [],
|
||||
"milestone": null,
|
||||
"assignee": null,
|
||||
"assignees": null,
|
||||
"state": "open",
|
||||
"is_locked": false,
|
||||
"comments": 0,
|
||||
"created_at": "#{issue.created_on}",
|
||||
"updated_at": "#{issue.updated_on}",
|
||||
"closed_at": null,
|
||||
"due_date": null,
|
||||
"pull_request": null,
|
||||
"repository": {
|
||||
"id": 11307,
|
||||
"name": "#{project.identifier}",
|
||||
"owner": "#{project.owner.login}",
|
||||
"full_name": "#{project.owner.login}/#{project.identifier}"
|
||||
}
|
||||
},
|
||||
"repository": {
|
||||
"id": project.id,
|
||||
"owner": {
|
||||
"id": project.owner.id,
|
||||
"login": "#{project.owner.login}",
|
||||
"full_name": "",
|
||||
"email": "#{project.owner.mail}",
|
||||
"avatar_url": "#{domain}/#{url_to_avatar(project.owner)}",
|
||||
"language": "",
|
||||
"is_admin": false,
|
||||
"last_login": "#{project.owner.last_login_on}",
|
||||
"created": "#{project.owner.created_on}",
|
||||
"restricted": false,
|
||||
"active": false,
|
||||
"prohibit_login": false,
|
||||
"location": "",
|
||||
"website": "",
|
||||
"description": "",
|
||||
"visibility": "public",
|
||||
"followers_count": 0,
|
||||
"following_count": 0,
|
||||
"starred_repos_count": 0,
|
||||
"username": "#{project.owner.login}"
|
||||
},
|
||||
"name": "#{project.identifier}",
|
||||
"full_name": "#{project.owner.login}/#{project.identifier}",
|
||||
"description": "",
|
||||
"empty": false,
|
||||
"private": false,
|
||||
"fork": false,
|
||||
"template": false,
|
||||
"parent": null,
|
||||
"mirror": false,
|
||||
"size": 843,
|
||||
"html_url": "#{domain}/#{project.owner.login}/#{project.identifier}",
|
||||
"ssh_url": "#{ssh_url}",
|
||||
"clone_url": "#{domain}/#{project.owner.login}/#{project.identifier}.git",
|
||||
"original_url": "#{project.repository.mirror_url}",
|
||||
"website": "",
|
||||
"stars_count": 0,
|
||||
"forks_count": 0,
|
||||
"watchers_count": 1,
|
||||
"open_issues_count": 1,
|
||||
"open_pr_counter": 0,
|
||||
"release_counter": 0,
|
||||
"default_branch": "master",
|
||||
"archived": false,
|
||||
"created_at": "#{project.created_on}",
|
||||
"updated_at": "#{project.updated_on}",
|
||||
"permissions": {
|
||||
"admin": true,
|
||||
"push": true,
|
||||
"pull": true
|
||||
},
|
||||
"has_issues": true,
|
||||
"internal_tracker": {
|
||||
"enable_time_tracker": true,
|
||||
"allow_only_contributors_to_track_time": true,
|
||||
"enable_issue_dependencies": true
|
||||
},
|
||||
"has_wiki": true,
|
||||
"has_pull_requests": true,
|
||||
"has_projects": false,
|
||||
"ignore_whitespace_conflicts": false,
|
||||
"allow_merge_commits": true,
|
||||
"allow_rebase": true,
|
||||
"allow_rebase_explicit": true,
|
||||
"allow_squash_merge": true,
|
||||
"default_merge_style": "merge",
|
||||
"avatar_url": "",
|
||||
"internal": false,
|
||||
"mirror_interval": ""
|
||||
},
|
||||
"sender": {
|
||||
"id": user.id,
|
||||
"login": "#{user.login}",
|
||||
"full_name": "",
|
||||
"email": "#{user.mail}",
|
||||
"avatar_url": "#{domain}/#{url_to_avatar(user)}",
|
||||
"language": "",
|
||||
"is_admin": false,
|
||||
"last_login": "#{user.last_login_on}",
|
||||
"created": "#{user.created_on}",
|
||||
"restricted": false,
|
||||
"active": false,
|
||||
"prohibit_login": false,
|
||||
"location": "",
|
||||
"website": "",
|
||||
"description": "",
|
||||
"visibility": "public",
|
||||
"followers_count": 0,
|
||||
"following_count": 0,
|
||||
"starred_repos_count": 0,
|
||||
"username": "#{user.login}"
|
||||
}
|
||||
}
|
||||
|
||||
url = URI("http://117.50.185.50:80")
|
||||
http = Net::HTTP.new(url.host, url.port)
|
||||
request = Net::HTTP::Post.new(url)
|
||||
request["Content-Type"] = "application/json"
|
||||
uuid = SecureRandom.uuid
|
||||
request['X-GitHub-Delivery'] = uuid
|
||||
request['X-Gitea-Delivery'] = uuid
|
||||
request['X-Gogs-Delivery'] = uuid
|
||||
request['X-GitHub-Event'] = 'issues'
|
||||
request['X-Gitea-Event'] = 'issues'
|
||||
request['X-Gogs-Event'] = 'issues'
|
||||
request.body = JSON.dump(event_json)
|
||||
|
||||
response = http.request(request)
|
||||
Rails.logger.info "issue webhook event======#{response.read_body}"
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue