Help us understand the problem. What is going on with this article?

fastlaneでマイルストーンに紐付いたIssueの一覧を取得する

More than 1 year has passed since last update.

自動化を進めるにあたりザッと作ったやつをメモ。

基本的にはこちらの記事とほぼ同じ処理をlane化したものです。
github_apiのレスポンスからjsonを取り出すあたりの記述がもっさりしているのが微妙なので、もっと良い書き方あれば教えていただけると嬉しいです。

fastfile
lane :get_issues_with_milestone do |options|
    title = options[:title]
    milestone_state = options[:milestone_state]
    issue_state = options[:issue_state]

    url = YOUR_REPO # e.g. "fastlane/fastlane"
    token = YOUR_GITHUB_API_TOKEN

    # Milestoneの取得
    UI.message("Getting milestone on GitHub | Title: #{title}, State: #{milestone_state}")

    milestones_result = github_api(
      api_token: token,
      http_method: "GET",
      path: "repos/#{url}/milestones?state=#{milestone_state}"
    )

    # 指定されたタイトルに一致するものを抽出
    milestones = milestones_result[:json]
    milestone = milestones.find { |m| m['title'] == title }

    # 一致しなければ終了
    if milestone.nil? then
      UI.message("No milestones")
      next
    end

    milestone_number = milestone['number']

    UI.success("Milestone \##{milestone_number} found")
    UI.message(milestone)

    # 取得できたMilestoneの`number`をもとに、Issueを取得
    UI.message("Getting issues on GitHub | Milestone number: \##{milestone_number}, State: #{issue_state}")

    issues_result = github_api(
      api_token: token,
      http_method: "GET",
      path: "repos/#{url}/issues?milestone=#{milestone_number}&state=#{issue_state}"
    )

    issues = issues_result[:json]

    if issues.nil? then
      UI.message("No issues")
      next
    end

    UI.success("Issues found")
    UI.message(issues)
  end

実行結果は以下のようになります。

$ bundle exec fastlane get_issues_with_milestone milestone_title:0.0.1 milestone_state:all issue_state:all
[✔] 🚀 

[11:58:25]: --- Step: default_platform ---

[11:58:25]: Driving the lane 'ios get_issue_with_milestone' 🚀
[11:58:25]: Getting milestone on GitHub | Title: 0.0.1, State: all

[11:58:25]: --- Step: github_api ---

[11:58:25]: Milestone #1 found
[11:58:25]: {"url"=>"https://api.github.com/repos/some/repo/milestones/1", …}
[11:58:25]: Getting issues on GitHub | Milestone number: #1, State: all

[11:58:25]: --- Step: github_api ---

[11:58:26]: Issues found
[11:58:26]: [{"url"=>"https://api.github.com/repos/some/repo/issues/1", …}]

自分たちのチームでは、Release作成時に上記の方法でIssueを取得し、descriptionを自動で生成するようにしています。

ただ、Release作成の処理内にMilestoneおよびIssueの取得処理も含めると、laneの記述が長くなりがちです。
そのため、これらの処理は個別のCustom actionとして定義しておき、Release作成用laneはこれらを呼び出すようにして利用しています。

Gist

gaussbeam
通りすがりのiOSアプリ開発者
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away