class Fastlane::Helper::ChangelogGeneratorFetcher

Public Class Methods

fetch_github_data(params, lane_context) click to toggle source
# File lib/fastlane/plugin/changelog_generator/helper/changelog_generator_fetcher.rb, line 11
def self.fetch_github_data(params, lane_context)
  Actions.verify_gem!('octokit')
  Octokit.auto_paginate = true

  labels = lane_context[SharedValues::GENERATE_CHANGELOG_GITHUB_LABELS]
  pull_requests = lane_context[SharedValues::GENERATE_CHANGELOG_GITHUB_PULL_REQUESTS]
  if labels && pull_requests
    UI.important "Skipping API call because labels & pull requests are cached"
    return labels, pull_requests
  end

  project = params[:github_project]
  base_branch = params[:base_branch]
  access_token = params[:github_api_token]

  issues_map = {}
  Octokit.issues(project, state: 'closed', access_token: access_token).each do |issue|
    issues_map[issue.number] = issue
  end

  # Fetch pull requests
  pull_requests = Octokit.pull_requests(project, state: 'closed', base: base_branch, access_token: access_token)

  # Remove pull requests not merged
  pull_requests.reject! do |pr|
    pr.merged_at.nil?
  end

  # Sort by merged_at
  pull_requests.sort_by!(&:merged_at)

  # Uniq labels
  labels = issues_map.values.map(&:labels).flatten.uniq(&:id)

  # Add labels to pull requests
  pull_requests.each do |pr|
    pr.label_ids = issues_map[pr.number].labels.map(&:id)
  end

  lane_context[SharedValues::GENERATE_CHANGELOG_GITHUB_LABELS] = labels
  lane_context[SharedValues::GENERATE_CHANGELOG_GITHUB_PULL_REQUESTS] = pull_requests

  return labels, pull_requests
end