octokit.rbを使ってGit Hubをいじる!

このエントリーをはてなブックマークに追加
QAのkmtです。
QAチームでは自動化のテストケースリポジトリが数多くあります。
それらに対してブランチをきったり、hookを設定したりするのにはもはや手動では無理ですよね。
そこでoctokit.rbを使っています。


octokit.rbとは?

  GitHub API v3に対応したRubyのツールです。
  ドキュメントはあるので詳しくはそちらをみていただければと思いますがいくつか紹介したいと思います。


1.トークンの発行
 最初にトークンを発行しておきましょう。


2.ブランチをきる
 指定されたOrganizationsの全privateリポジトリに対してブランチをきってみましょう。

require 'octokit'
require 'optparse'

token = '発行したアクセストークン'
endpoint = 'https://gheのURL/api/v3'
org = 'Organizationsを指定します'
master = 'heads/master'

#####check argument
args = {}
OptionParser.new do |parser|
   parser.on('-v VALUE', '--version VALUE', 'branch version'){|v| args[:version] = v}
   parser.parse!(ARGV)
end

raise OptionParser::InvalidArgument if args[:version].nil?

#####create branch
branch = 'heads/' +  args[:version]
Octokit.api_endpoint = endpoint
client = Octokit::Client.new(:access_token => token,:per_page => 1000,:auto_paginate => true)

client.org_repos(org, {:type => 'private'}).each do |repo|
    #puts "#{repo.full_name}"

    ret = client.ref(repo.full_name, master)
    client.create_ref(repo.full_name, branch, ret.object.sha)
end


2.ブランチを削除する
 指定されたOrganizationsの全privateリポジトリからブランチを削除してみましょう。

require 'octokit'
require 'optparse'

token = '発行したアクセストークン'
endpoint = 'https://gheのURL/api/v3'
org = 'Organizationsを指定します'
master = 'heads/master'

#####check argument
args = {}
OptionParser.new do |parser|
   parser.on('-v VALUE', '--version VALUE', 'branch version'){|v| args[:version] = v}
   parser.parse!(ARGV)
end

raise OptionParser::InvalidArgument if args[:version].nil?

#####delete branch
branch = args[:version]

Octokit.api_endpoint = endpoint
client = Octokit::Client.new(:access_token => token,:per_page => 1000,:auto_paginate => true)

client.org_repos(org, {:type => 'private'}).each do |repo|
    #puts "#{repo.full_name}"

    ret = client.ref(repo.full_name, master)
    begin
       client.delete_branch(repo.full_name, branch)
    ensure
        next
    end
end


3.リポジトリを作成してフックを設定する
 指定されたOrganizationsにprivateリポジトリを作成してhookも設定してみましょう。

require 'octokit'
require 'optparse'

token = '発行したアクセストークン'
endpoint = 'https://gheのURL/api/v3'
org = 'Organizationsを指定します'
master = 'heads/master'

OptionParser.new do |parser|
   parser.on('-n VALUE', '--name VALUE', 'repository name'){|v| args[:name] = v}
   parser.parse!(ARGV)
end

raise OptionParser::InvalidArgument if args[:name].nil?

Octokit.api_endpoint = endpoint
client = Octokit::Client.new(:access_token => token,:per_page => 1000,:auto_paginate => true)


####create repository
options = { :private => true, :organization => org}
name = args[:name]


client.create_repository(name, options)


####create hook
options = { :events => ['commit_comment', 'download', 'fork', 'fork_apply', 'gollum', 'issues', 'issue_comment', 'member', 'public', 'pull_request', 'pull_request_review_comment', 'push', 'watch'], :active => true}
config = { :auth_token => 'トークンを設定します', :room => 'ルーム名をいれます', :restrict_to_branch => '', :color => 'purple', :server => '', :quiet_fork => '1', :quiet_watch => '1', :quiet_comments => '1', :quiet_wiki => '1'}


4.Teamsを作成する
 Teamを作成して全privateリポジトリの閲覧権限を与えましょう。
require 'octokit'
require 'optparse'

token = '発行したアクセストークン'
endpoint = 'https://gheのURL/api/v3'
org = 'Organizationsを指定します'

#####check argument
args = {}
OptionParser.new do |parser|
   parser.on('-n VALUE', '--name VALUE', 'team name'){|v| args[:name] = v}
   parser.parse!(ARGV)
end

raise OptionParser::InvalidArgument if args[:name].nil?

#####create team
Octokit.api_endpoint = endpoint
client = Octokit::Client.new(:access_token => token,:per_page => 1000,:auto_paginate => true)

repo_names = []
options = {}
client.org_repos(org, {:type => 'private'}).each do |repo|
    repo_names.push(repo.full_name)
end

options[:name] = args[:name]
options[:repo_names] = repo_names
options[:permission] = 'push'

client.create_team(org, options)

いかがでしたか? 簡単にリポジトリの管理ができるのでぜひ使ってみてください!


次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...