Git Client

class git_bot_feedback.GitClient
append_step_summary(comment: str) None

Appends a given comment to the CI workflow’s summary page.

This is the least obtrusive and recommended for push events. Not all Git servers natively support this type of feedback. GitHub and Gitea are known to support this. For all other git servers, this is a non-op returning [Ok]

client_kind

The name of git server implementation is being used.

cull_pr_reviews(options: ReviewOptions) ReviewOptions

Resolve outdated PR review comments and remove duplicate/reused comments.

This should be used before [Self::post_pr_review()] to avoid posting duplicates of existing comments. The [ReviewOptions::comments] will be modified to only include comments that should be posted for the current PR review. After calling this function, the [ReviewOptions::summary] can be made to reflect the actual review being posted.

The [ReviewOptions::marker] is used to identify comments from this software. The [ReviewOptions::delete_review_comments] flag will delete outdated review comments. The [ReviewOptions::delete_review_comments] flag does not apply to review summary comments nor threads of discussion within a review. A review summary comment will only be hidden/collapsed when all comments in the corresponding review are resolved.

This function does nothing for non-PR events.

Returns a copy of the given ReviewOptions with duplicate comments removed.

event_name

Get the name of the current CI event.

This will return None if the event name is not known for the CI platform.

get_list_of_changed_files(file_filter: FileFilter, lines_changed_only: LinesChangedOnly, base_diff: str | None = None, ignore_index: bool = False) dict[str, FileDiffLines]

A way to get the list of changed files in the context of the CI event.

This method will parse diff blobs and return a list of changed files.

The default implementation uses git diff to get the list of changed files. So, the default implementation requires git installed and a non-shallow checkout.

Other implementations use the Git server’s REST API to get the list of changed files.

is_debug_enabled()

Is debug mode enabled?

Typically, A CI platform will have a way to enable debug level logs for a job or workflow. This method should be implemented to reflect the supported CI platform’s implementation.

is_pr_event()

Is the current CI event trigger a Pull Request?

This will not check if a push event’s instigating commit is part of any PR.

post_pr_review(options: ReviewOptions) None

Post a PR review based on the given options.

This is expected to be used after calling [Self::cull_pr_reviews()] to avoid posting duplicates of existing comments. Once the duplicates are filtered out, the [ReviewOptions::summary] can be made to reflect the actual review being posted.

This function does nothing for non-PR events.

post_thread_comment(options: ThreadCommentOptions) None

A way to post feedback to the Git server’s GUI.

The given [ThreadCommentOptions::comment] should be compliant with the Git server’s requirements (ie. the comment length is within acceptable limits).

set_user_agent(user_agent)

Set the user agent for the underlying HTTP request client.

By default the user agent is set to this lib’s name and version. See [USER_AGENT] for the default value.

write_file_annotations(annotations: list[FileAnnotation]) None

Sets the given annotations as file annotations.

Not all Git servers support this on their free tiers, namely GitLab.

write_output_variables(vars: list[OutputVariable]) None

Sets the given vars as output variables.

These variables are designed to be consumed by other steps in the CI workflow.