Slack에서 Hubot을 통해 GitHub 풀릭 만들기
Hubot 스크립트
githubot을 사용하기 때문에 보관하십시오.$ npm install githubot --save
github-create-pull.coffee#
# Description:
# create pull requests in a Github repository
#
# Dependencies:
# "githubot": "0.4.x"
#
# Configuration:
# HUBOT_GITHUB_TOKEN
# HUBOT_GITHUB_API
#
# Commands:
# hubot pr <base> from <compare> [repo:<repo_name>]
#
module.exports = (robot) ->
github = require("githubot")(robot)
unless (url_api_base = process.env.HUBOT_GITHUB_API)?
url_api_base = "https://api.github.com"
_getDate = ->
theDate = new Date
yyyy = theDate.getFullYear()
mm = theDate.getMonth()+1 #January is 0!
if mm < 10
mm = "0" + mm
dd = theDate.getDate()
if dd < 10
dd = "0" + dd
yyyy + "." + mm + "." + dd
robot.respond /pr (([-_\.0-9a-zA-Z]+\/)?([-_\.a-zA-z0-9\/]+)) from (([-_\.0-9a-zA-Z]+\/)?([-_\.a-zA-z0-9\/]+))(\srepo\:([-_\.0-9a-zA-Z]+))?$/i, (msg)->
repo = msg.match[8] || "<デフォルトのリポジトリ>"
head = msg.match[4]
base = msg.match[1]
environment = msg.match[1]
url = "#{url_api_base}/repos/<自分のGitHubアカウント>/#{repo}/pulls" #GitHubAPIのURL
account_name = msg.envelope.user.name || "anonymous" #このスクリプトを呼び出した人のSlackアカウント名
channel_name = msg.envelope.room || "anonymous" #このスクリプトを呼び出したSlackのChannel
title = "#{_getDate()} #{environment} deployment by #{account_name}"
body = """
・Created By #{account_name} on #{channel_name} Channel
"""
data = {
"title": title
"body": body
"head": head
"base": base
}
github.post url, data, (pull) ->
msg.send "プルリク作ったよ! " + pull.html_url
<기본 리포지토리>와 <내 GitHub 계정>을 각각 설정합니다.
사용법
hubot pr <base> from <compare> [repo:<repo_name>]
예: hubot pr deployment/production from master repo:my-repo
<base>
와 <compare>
는 각각 브랜치명. 선택적 repo:<repo_name>
에서 리포지토리를 지정할 수 있습니다. repo:<repo_name>
를 생략하면 <기본 리포지토리>를 대상 리포지토리로 설정합니다.
기법은 GitHub에서 풀릭을 만들 때 "into <base> from <compare>
"라는 형태로 표시되므로 그렇게 되었습니다.
끝
Slack에서 풀릭을 만들면 다음과 같은 이점이 있을까~라고 생각합니다.
#
# Description:
# create pull requests in a Github repository
#
# Dependencies:
# "githubot": "0.4.x"
#
# Configuration:
# HUBOT_GITHUB_TOKEN
# HUBOT_GITHUB_API
#
# Commands:
# hubot pr <base> from <compare> [repo:<repo_name>]
#
module.exports = (robot) ->
github = require("githubot")(robot)
unless (url_api_base = process.env.HUBOT_GITHUB_API)?
url_api_base = "https://api.github.com"
_getDate = ->
theDate = new Date
yyyy = theDate.getFullYear()
mm = theDate.getMonth()+1 #January is 0!
if mm < 10
mm = "0" + mm
dd = theDate.getDate()
if dd < 10
dd = "0" + dd
yyyy + "." + mm + "." + dd
robot.respond /pr (([-_\.0-9a-zA-Z]+\/)?([-_\.a-zA-z0-9\/]+)) from (([-_\.0-9a-zA-Z]+\/)?([-_\.a-zA-z0-9\/]+))(\srepo\:([-_\.0-9a-zA-Z]+))?$/i, (msg)->
repo = msg.match[8] || "<デフォルトのリポジトリ>"
head = msg.match[4]
base = msg.match[1]
environment = msg.match[1]
url = "#{url_api_base}/repos/<自分のGitHubアカウント>/#{repo}/pulls" #GitHubAPIのURL
account_name = msg.envelope.user.name || "anonymous" #このスクリプトを呼び出した人のSlackアカウント名
channel_name = msg.envelope.room || "anonymous" #このスクリプトを呼び出したSlackのChannel
title = "#{_getDate()} #{environment} deployment by #{account_name}"
body = """
・Created By #{account_name} on #{channel_name} Channel
"""
data = {
"title": title
"body": body
"head": head
"base": base
}
github.post url, data, (pull) ->
msg.send "プルリク作ったよ! " + pull.html_url
hubot pr <base> from <compare> [repo:<repo_name>]
예: hubot pr deployment/production from master repo:my-repo
<base>
와 <compare>
는 각각 브랜치명. 선택적 repo:<repo_name>
에서 리포지토리를 지정할 수 있습니다. repo:<repo_name>
를 생략하면 <기본 리포지토리>를 대상 리포지토리로 설정합니다.기법은 GitHub에서 풀릭을 만들 때 "
into <base> from <compare>
"라는 형태로 표시되므로 그렇게 되었습니다.끝
Slack에서 풀릭을 만들면 다음과 같은 이점이 있을까~라고 생각합니다.
리포지토리나 브랜치가 고정으로 좋은 경우는 그 당 하드 코딩 해 버려, 좀 더 짧은 커멘드로 풀릭을 할 수 있도록 해도 좋을지도 모릅니다. 자신의 환경에서는 브런치가 고정이 아니기 때문에 이렇게 했습니다.
여담
테스트 환경의 분기가 변경된 경우dpぉy. 이오에서 자동으로 테스트 서버에 배포됩니다. Slack에서 풀릭 -> GitHub로 병합 -> 배포되는 흐름으로, 테스트 서버에 추가로 배포되면 dploy에서 Slack으로 알림이 날아갑니다. 편리. 배포 목적의 심플한 운용이라면 CI 돌리지 않고 dploy 당도 좋다고 생각합니다.
참고
Reference
이 문제에 관하여(Slack에서 Hubot을 통해 GitHub 풀릭 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hibiki/items/6ae8c6a8e4710e928e37텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)