class GitRav::CLI

Attributes

client[RW]
develop_branch_name[RW]
master_branch_name[RW]
release_branch_name[RW]
remote_repository_name[RW]
version_file_path[RW]
version_name[RW]

Public Instance Methods

prepare(version) click to toggle source
# File lib/git_rav/cli.rb, line 26
def prepare(version)
  # TODO: override exists pr
  set_variables(version)

  # TODO: it raise error when same name branch is exist
  puts("Create #{develop_branch_name} branch...")
  develop_branch_sha = client.ref(remote_repository_name, "heads/#{develop_branch_name}").object.sha
  release_branch = client.create_reference(remote_repository_name, "heads/#{release_branch_name}", develop_branch_sha)
  release_branch_ref = release_branch.ref

  puts("Version commit")
  content = client.contents(remote_repository_name, path: version_file_path, ref: release_branch_ref)
  client.update_contents(
    remote_repository_name,
    version_file_path,
    version_name,
    content.sha,
    version,
    branch: release_branch_ref
  )

  puts("Build pull request body...")
  body = build_pr_body

  puts("Create pull requests...")
  client.create_pull_request(remote_repository_name, master_branch_name, release_branch_ref, version_name, body)
  client.create_pull_request(remote_repository_name, develop_branch_name, release_branch_ref, version_name, body)

  puts("Done.")
end
release(version) click to toggle source
# File lib/git_rav/cli.rb, line 58
def release(version)
  set_variables(version)

  puts("Fetch pull requests...")
  release_branch = client.ref(remote_repository_name, "heads/#{release_branch_name}")

  puts("Tagging...")
  target_commitish = release_branch.object.sha
  client.create_release(remote_repository_name, version_name, target_commitish: target_commitish, name: version, body: version_name)

  puts("Merge pull requests...")
  pull_requests = client.pull_requests(remote_repository_name, state: 'open', head: "#{client.login}:#{release_branch_name}")
  pull_requests.each do |pull_request|
    client.merge_pull_request(remote_repository_name, pull_request.number, commit_message = version_name)
  end

  puts("Delete branches...")
  client.delete_ref(remote_repository_name, "heads/#{release_branch_name}")

  puts("Done.")
end

Private Instance Methods

build_pr_body() click to toggle source
# File lib/git_rav/cli.rb, line 99
def build_pr_body
  pull_request_titles = Open3.capture3(
    "git log origin/#{master_branch_name}..origin/#{develop_branch_name} --merges --first-parent --pretty=format:'%b'"
  ).first.chomp.split("\n")

  pull_request_titles.each { puts(pull_request_titles) }

  template_path = "#{Dir.pwd}/#{TEMPLATE_FILE_NAME}"

  file = File.read(template_path)
  ERB.new(file).result(binding)
end
set_variables(version) click to toggle source
# File lib/git_rav/cli.rb, line 82
def set_variables(version)
  @version_name = "version#{version}"
  @release_branch_name = "version-#{version}"

  # TODO: it raise error when setting file is not exist
  settings = YAML.load_file(SETTINGS_FILE_NAME)
  @master_branch_name = settings["master_branch_name"] || DEFAULT_MASTER_BRANCH_NAME
  @develop_branch_name = settings["develop_branch_name"] || DEFAULT_DEVELOP_BRANCH_NAME
  @version_file_path = settings["version_file_path"] || DEFAULT_VERSION_FILE_PATH

  access_token = Open3.capture3("git config #{TOKEN_KEY}").first.chomp
  @client = Octokit::Client.new(access_token: access_token)
  @remote_repository_name = Open3.capture3(
    "git config --get remote.origin.url"
  ).first.chomp.match(/^git@github.com:(.+)\.git$/)[1]
end