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)
いかがでしたか? 簡単にリポジトリの管理ができるのでぜひ使ってみてください!