Class: GithubIntegration

Inherits:
ReporterSink show all
Defined in:
action/lib/github_integration.rb

Overview

GitHub-backed reporter sink for posting PR comments.

Defined Under Namespace

Classes: SourceCell, TrackingIssue, UpgradeHintsSection

Constant Summary collapse

COMMENT_IDENTIFIER =
"<!-- spm-version-updates-action -->"
TRACKING_ISSUE_RESOLVED_COMMENT =
"✅ All SPM dependencies are up to date as of the latest run."
::RepositoryLink

Constants inherited from ReporterSink

ReporterSink::SUCCESS_MESSAGE

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGithubIntegration

Returns a new instance of GithubIntegration.



242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'action/lib/github_integration.rb', line 242

def initialize
  super
  @github_token = ENV.fetch("GITHUB_TOKEN", nil)
  @github_repository = ENV.fetch("GITHUB_REPOSITORY", nil)
  @github_event_path = ENV.fetch("GITHUB_EVENT_PATH", nil)
  @open_tracking_issue = false
  @enrich_release_notes = true
  @tracking_issue_result = nil

  if github_token_missing?
    puts("Warning: GITHUB_TOKEN not set, comments will not be posted")
    @client = nil
    return
  end

  @client = Octokit::Client.new(access_token: @github_token)
  @pr_number = extract_pr_number

  puts("GitHub integration initialized for #{@github_repository}, PR ##{@pr_number}")
end

Instance Attribute Details

#tracking_issue_resultObject (readonly)

The issue created or updated by the last publish (see ReporterSink).



240
241
242
# File 'action/lib/github_integration.rb', line 240

def tracking_issue_result
  @tracking_issue_result
end

Instance Method Details

#clearObject



292
293
294
295
296
297
298
299
# File 'action/lib/github_integration.rb', line 292

def clear
  return tracking_issue.close(TRACKING_ISSUE_RESOLVED_COMMENT) if tracking_issue_run?

  with_comment_target {
    existing_comment = find_existing_comment
    delete_comment(existing_comment[:id]) if existing_comment
  }
end

#configure(inputs) ⇒ Object



263
264
265
266
# File 'action/lib/github_integration.rb', line 263

def configure(inputs)
  @open_tracking_issue = inputs.fetch(:open_tracking_issue, false)
  @enrich_release_notes = inputs.fetch(:enrich_release_notes, true)
end

#delete_existing_commentObject



305
306
307
# File 'action/lib/github_integration.rb', line 305

def delete_existing_comment
  clear
end

#post_comment(message) ⇒ Object



301
302
303
# File 'action/lib/github_integration.rb', line 301

def post_comment(message)
  with_comment_target { post_comment_body(build_comment_message(message)) }
end

#publish_successObject



286
287
288
289
290
# File 'action/lib/github_integration.rb', line 286

def publish_success
  return tracking_issue.close(TRACKING_ISSUE_RESOLVED_COMMENT) if tracking_issue_run?

  post_comment(SUCCESS_MESSAGE)
end

#publish_updates(payload) ⇒ Object



275
276
277
278
279
280
281
282
283
284
# File 'action/lib/github_integration.rb', line 275

def publish_updates(payload)
  return unless tracking_issue_run? || comment_target?

  message = build_comment_message(build_warnings_message(payload))
  if tracking_issue_run?
    @tracking_issue_result = tracking_issue.upsert(message)
  else
    post_comment_body(message)
  end
end

#tracking_issue_run?Boolean

Tracking-issue mode applies only on runs without a pull request context (schedule, workflow_dispatch, push) when explicitly enabled. Public so the action can publish tracking issues even when PR commenting is disabled.

Returns:

  • (Boolean)


271
272
273
# File 'action/lib/github_integration.rb', line 271

def tracking_issue_run?
  !!(@open_tracking_issue && !@pr_number && @client && @github_repository)
end