Dist-Zilla-Plugin-GitHub-CreateRelease
view release on metacpan or search on metacpan
lib/Dist/Zilla/Plugin/GitHub/CreateRelease.pm view on Meta::CPAN
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Dist::Zilla::Plugin::GitHub::CreateRelease - Create a GitHub Release
=head1 VERSION
version 0.0012
=head1 SYNOPSIS
In your F<dist.ini>:
[GitHub::CreateRelease]
repo = github_repo_name ; optional
repo_owner = github_owner_name ; optional
branch = main ; default = main
notes_as_code = 1 ; default = 1 (true)
notes_from = SignReleaseNotes ; default = SignReleaseNotes
notes_file = Release-VERSION ; default = Release-VERSION
github_notes = 0 ; default = 0 (false)
draft = 0 ; default = 0 (false)
hash_alg = sha256 ; default = sha256
add_checksum = 1 ; default = 1 (true)
org_id = some_id_identifier ; default = github (~/.github-identity or ~/.github)
title_template = Version RELEASE - TRIAL CPAN release ; this is the default
=head1 DESCRIPTION
This plugin will create a GitHub Release and attach a copy of the
cpan release archive to the Release.
The release notes can be generated based on the notes_from value.
This plugin should appear after any other AfterBuild plugin in your C<dist.ini> file.
If you are using SignReleaseNotes as the notes_from it should be after the
SignReleaseNotes plugin.
=head1 Required Plugins
This plugin requires that your Dist::Zilla configuration do the following:
1. Create a release
2. Tag the release in your git repository
3. Push the commits (and tags) to GitHub
There are numerous combinations of Dist::Zilla plugins that can perform those
functions.
=head1 GITHUB API AUTHENTICATION
This module uses Config::Identity::GitHub to access the GitHub API credentials.
You need to create a file in your home directory named B<.github-identity>. It
requires the following fields:
login github_username OR github_organization
token github_....
The GitHub API has a lot of options for the generation of Personal Access Tokens.
At minimum you will need a personal access token with "Write" access to "Contents".
It allows write access to Repository contents, commits, branches, downloads,
releases, and merges.
Config::Identity::GitHub supports a gpg encrypted B<.github-identity> file. It is
recommended that you implement encryption for the B<.github-identity> file. If you
have gpg configured you can encrypt the file:
# Encrypt it to ~/.github-identity.asc
gpg -ea -r you@example.com ~/.github-identity
# Cat ~/.github-identity.asc to verify it is encrypted
cat ~/.github-identity.asc
# Verify you can decrypt the file
gpg -d ~/.github-identity.asc
# Replace the clear text version (uncomment next line)
# mv ~/.github-identity.asc ~/.github-identity
=head2 PERSONAL ACCOUNT VERSUS ORGANIZATION
The B<login> specified in the B<.github-identity> file above should reference the
personal account B<OR> the organization that contains the repo.
A personal access token must have the B<Resource owner> set to the organization but
does not require special permissions on the organization. It simply needs read/write
on the code and read access on the metadata of the repository.
As specified in the B<org_id> attribute details below you can have separate identities
for each repository. The org_id tells the module where to look for the specific
identity file that contains the correct login and token.
=head1 ATTRIBUTES
=over
=item hash_alg
A string value for the B<Digest::SHA> supported hash algorithm to use for the hash of the
cpan upload file.
=item repo
A string value that specifies the name of the github repository. The module determines the
name based on the remote url but this setting can override the name that is detected.
=item repo_owner
A string value that specifies the owner (user or organization) of the github repository.
The module determines the owner based on the remote url (the same url used to detect
C<repo>) but this setting can override the owner that is detected.
If the owner cannot be determined from the remote url, the C<login> from the identity
( run in 1.084 second using v1.01-cache-2.11-cpan-007c89162af )