NAME

    Net::Async::Github - support for the https://github.com REST API with
    IO::Async

SYNOPSIS

     use IO::Async::Loop;
     use Net::Async::Github;
     my $loop = IO::Async::Loop->new;
     $loop->add(
      my $gh = Net::Async::Github->new(
       token => '...',
      )
     );
     # Give 'secret_team' pull access to all private repos
     $gh->repos(visibility => 'private')
        ->grant_team(secret_team => 'pull')
        ->await;

DESCRIPTION

    This is a basic wrapper for Github's API.

METHODS

 current_user

    Returns information about the current user.

     my $user = $gh->current_user->get;
     printf "User [%s] has %d public repos and was last updated on %s%s\n",
      $user->login, $user->public_repos, $user->updated_at->to_string

    Resolves to a Net::Async::Github::User instance.

 configure

    Accepts the following optional named parameters:

      * token - the Github API token

      * endpoints - hashref of RFC6570
      <https://tools.ietf.org/html/rfc6570>-compliant URL mappings

      * http - an HTTP client compatible with the Net::Async::HTTP API

      * mime_type - the MIME type to use as the Accept header for requests

      * page_cache_size - number of GET responses to cache. Defaults to
      1000, set to 0 to disable.

      * timeout - How long in seconds to wait before giving up on a
      request. Defaults to 60. If set to 0, then no timeout will take
      place.

     You probably just want token , defaults should be fine for the other
    settings.

    If you're creating a large number of instances, you can avoid some disk
    access overhead by passing endpoints from an existing instance to the
    constructor for a new instance.

 reopen

    Reopens the given PR.

    Expects the following named parameters:

      * owner - which user or organisation owns this PR

      * repo - which repo it's for

      * id - the pull request ID

    Resolves to the current status.

 pull_request

    Returns information about the given PR.

    Expects the following named parameters:

      * owner - which user or organisation owns this PR

      * repo - which repo it's for

      * id - the pull request ID

    Resolves to the current status.

 pull_requests

    Returns information of all PRs of given repository.

    Expects the following named parameters:

      * owner - which user or organisation owns this PR

      * repo - the repository this pull request is for

    Returns a Ryu::Source instance, this will emit a
    Net::Async::Github::PullRequest instance for each found repository.

 create_branch

    Creates a new branch.

    Takes the following named parameters:

      * owner - which organisation owns the target repository

      * repo - the repository to raise the PR against

      * branch - new branch name that will be created

      * sha - the SHA1 value for this branch

 update_ref

    Update a reference to a new commit

    Takes the following named parameters:

      * owner - which organisation owns the target repository

      * repo - the repository to raise the PR against

      * ref - ref name that we are updating.

      * sha - the SHA1 value of comment that the ref will point to

      * force - force update ref even if it is not fast-forward if it is
      true.

 create_pr

    Creates a new pull request.

    Takes the following named parameters:

      * owner - which organisation owns the target repository

      * repo - the repository to raise the PR against

      * head - head commit starting point, typically the latest commit on
      your fork's branch

      * base - base commit this PR applies changes to typically you'd want
      the target repo master

 create_commit

    Creates an empty commit. Can be used to simulate git commit
    --allow-empty or to create a merge commit from multiple heads.

    Takes the following named parameters:

      * owner - which organisation owns the target repository

      * repo - the repository to raise the PR against

      * message - The commit message

      * tree - The SHA of tree object that commit will point to

      * parents - Arrayref that include the parents of the commit

 user

    Returns information about the given user.

 users

    Iterates through all users. This is a good way to exhaust your
    5000-query ratelimiting quota.

 head

    Identifies the head version for this branch.

    Requires the following named parameters:

      * owner - which organisation or person owns the repo

      * repo - the repository name

      * branch - which branch to check

 update

 core_rate_limit

    Returns a Net::Async::Github::RateLimit::Core instance which can track
    rate limits.

 rate_limit

METHODS - Internal

    The following methods are used internally. They're not expected to be
    useful for external callers.

 api_key

 token

 endpoints

    Returns an accessor for the endpoints data. This is a hashref
    containing URI templates, used by "endpoint".

 endpoint

    Expands the selected URI via URI::Template. Each item is defined in our
     endpoints.json  file.

    Returns a URI instance.

 http

    Accessor for the HTTP client object. Will load and instantiate a
    Net::Async::HTTP instance if necessary.

    Actual HTTP implementation is not guaranteed, and the default is likely
    to change in future.

 timeout

    The parameter that will be used when create Net::Async::HTTP object. If
    it is undef, then a default value 60 seconds will be used. If it is 0,
    then Net::Async::HTTP will never timeout.

 auth_info

    Returns authentication information used in the HTTP request.

 mime_type

    Returns the MIME type used for requests. Currently defined by github in
    https://developer.github.com/v3/media/ as
    application/vnd.github.v3+json.

 base_uri

    The URI for requests. Defaults to https://api.github.com.

 http_get

    Performs an HTTP GET request.

 pending_requests

    A list of all pending requests.

 validate_branch_name

    Applies validation rules from git-check-ref-format for a branch name.

    Will raise an exception on invalid input.

 validate_owner_name

    Applies github rules for user/organisation name.

    Will raise an exception on invalid input.

 validate_repo_name

    Applies github rules for repository name.

    Will raise an exception on invalid input.

 validate_args

    Convenience method to apply validation on common parameters.

 page_cache_size

    Returns the total number of GET responses we'll cache. Default is
    probably 1000.

 page_cache

    The page cache instance, likely to be provided by Cache::LRU.

 ryu

    Our Ryu::Async instance, used for instantiating Ryu::Source instances.

AUTHOR

    Tom Molesworth <TEAM@cpan.org>, with contributions from @chylli-binary.

LICENSE

    Copyright Tom Molesworth 2014-2021. Licensed under the same terms as
    Perl itself.