Alien-Build-Plugin-Download-GitHub
view release on metacpan or search on metacpan
lib/Alien/Build/Plugin/Download/GitHub.pm view on Meta::CPAN
plugin 'Download::GitHub' => (
github_user => 'PerlAlien',
github_repo => 'dontpanic',
);
};
=head1 DESCRIPTION
This plugin will download releases from GitHub. It is generally preferred over
L<Alien::Build::Plugin::Download::Git> for packages that are released on GitHub,
as it has much fewer dependencies and is more reliable.
=head1 PROPERTIES
=head2 github_user
The GitHub user or org that owns the repository. This property is required.
=head2 github_repo
The GitHub repository name. This property is required.
=head2 include_assets
[deprecated: use the asset* properties instead]
Defaulting to false, this option designates whether to include the assets of
releases in the list of candidates for download. This should be one of three
types of values:
=over 4
=item true value
The full list of assets will be included in the list of candidates.
=item false value
No assets will be included in the list of candidates.
=item regular expression
If a regular expression is provided, this will include assets that match by
name.
=back
=head2 tags_only
Boolean value for those repositories that do not upgrade their tags to releases.
There are two different endpoints. One for
L<releases|https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository>
and one for simple L<tags|https://developer.github.com/v3/repos/#list-tags>. The
default is to interrogate the former for downloads. Passing a true value for
L</"tags_only"> interrogates the latter for downloads.
=head2 version
Regular expression that can be used to extract a version from a GitHub tag. The
default ( C<qr/^v?(.*)$/> ) is reasonable for many GitHub repositories.
=head2 prefer
How to sort candidates for selection. This should be one of three types of values:
=over 4
=item code reference
This will be used as the prefer hook.
=item true value (not code reference)
Use L<Alien::Build::Plugin::Prefer::SortVersions>.
=item false value
Don't set any preference at all. The order returned from GitHub will be used if
no other prefer plugins are specified. This may be reasonable for at least some
GitHub repositories. This is the default.
=back
=head2 asset
Download from assets instead of via tag. This option is incompatible with
C<tags_only>.
=head2 asset_name
Regular expression which the asset name should match. The default is C<qr/\.tar\.gz$/>.
=head2 asset_format
The format of the asset. This is passed to L<Alien::Build::Plugin::Extract::Negotiate>
so any format supported by that is valid.
[version 0.10]
If this is set to C<none> then no extractor will be added. This allows for you to write
your own extractor code, or use a non-standard one.
=head2 asset_convert_version
This is an optional code reference which can be used to modify the version. For example,
if the release version is prefixed with a C<v> You could do this:
plugin 'Download::GitHub' => (
github_user => 'PerlAlien',
github_repo => 'dontpanic',
asset => 1,
asset_convert_version => sub {
my $version = shift;
$version =~ s/^v//;
$version;
},
);
=head1 ENVIRONMENT
=over 4
=item ALIEN_BUILD_GITHUB_TOKEN GITHUB_TOKEN GITHUB_PAT
If one of these environment variables are set, then the GitHub API Personal
Access Token (PAT) will be used when connecting to the GitHub API.
For security reasons, the PAT will be removed from the log. Some Fetch plugins
(for example the C<curl> plugin) will log HTTP requests headers so this will
make sure that your PAT is not displayed in the log.
=item ALIEN_BUILD_PLUGIN_DOWNLOAD_GITHUB_DEBUG
Setting this to a true value will send additional diagnostics to the log during
the indexing phase of the fetch.
=back
=head1 CAVEATS
This plugin does not support, and will not work if C<ALIEN_DOWNLOAD_RULE> is set to
either C<digest_and_encrypt> or C<digest>.
The GitHub API is rate limited. Once you've reach that limit, this plugin will be
inoperative for a period of time until the limits reset. When using the GitHub
API unauthenticated the limit is especially low. This is usually not a problem when
used in production where you only need to use the API once for each L<Alien>, but
it can become a problem when testing an L<Alien> that uses this plugin in CI or via
cpantesters. In this situation you can set the C<ALIEN_BUILD_GITHUB_TOKEN> environment
variable (or commonly used but unofficial C<GITHUB_TOKEN> or C<GITHUB_PAT>), and this
plugin will use that in making API requests. If you are using GitHub Actions for CI,
( run in 1.929 second using v1.01-cache-2.11-cpan-df04353d9ac )