NAME

Dist::Zilla::PluginBundle::HARTZELL - My standard dzil config.

VERSION

version 0.011

SYNOPSIS

# in dist.ini
[@HARTZELL]

DESCRIPTION

This, a Dist::Zilla PluginBundle that builds things the way that I do, is a work in progress.

I left my standard PluginBundle behind when I left my previous job and I've discovered that I've fallen behind the state of the art. This is my attempt to catch back up. After browsing the bevy of bundles on CPAN I decided to model mine on DAGOLDEN's (I like his use of ConfigSlicer and various config options). As it stands now it's nearly a copy of his work but as my personal preferences assert themselves I expect it to diverge. For now I have a lot of github and Meta info stuff to catch up on.

In its default form it is roughly equivalent to the following dist.ini:

  ; version provider
  [Git::NextVersion]  ; get version from last release tag
  version_regexp = ^release-(.+)$

  ; choose files to include
  [Git::GatherDir]         ; everything from git ls-files
  exclude_filename = README.pod   ; skip this generated file
  exclude_filename = META.json    ; skip this generated file

  [PruneCruft]        ; default stuff to skip
  [ManifestSkip]      ; if -f MANIFEST.SKIP, skip those, too

  ; file modifications
  [PkgVersion]        ; add $VERSION = ... to all files
  [PodWeaver]         ; generate Pod
  config_plugin = @HARTZELL

  ; generated files
  [ReadmeFromPod]     ; from Pod (runs after PodWeaver)
  [License]           ; boilerplate license
  [ReadmeAnyFromPod]  ; create README.md in repo directory
  type = pod          ; this makes github happy....
  filename = README.pod
  location = root

  ; t tests
  [Test::Compile]     ; make sure .pm files all compile
  fake_home = 1       ; fakes $ENV{HOME} just in case

  ; xt tests
  [Test::PodSpelling] ; xt/author/pod-spell.t
  [Test::Perl::Critic]; xt/author/critic.t
  [MetaTests]         ; xt/release/meta-yaml.t
  [PodSyntaxTests]    ; xt/release/pod-syntax.t
  [PodCoverageTests]  ; xt/release/pod-coverage.t
  [Test::Portability] ; xt/release/portability.t (of file name)
  [Test::Version]     ; xt/release/test-version.t

  ; metadata
  [MinimumPerl]       ; determine minimum perl version
  [AutoPrereqs]       ; find prereqs from code
  skip = ^t::lib
  [MetaNoIndex]       ; sets 'no_index' in META
  directory = t
  directory = xt
  directory = examples
  directory = corpus
  package = DB        ; just in case

  [MetaProvides::Package] ; add 'provides' to META files
  meta_noindex = 1        ; respect prior no_index directives

  [AutoMetaResources] ; set META resources
  bugtracker.github  = user:hartzell
  repository.github  = user:hartzell
  homepage           = https://metacpan.org/release/%{dist}

  [MetaYAML]          ; generate META.yml (v1.4)
  [MetaJSON]          ; generate META.json (v2)

  ; build system
  [ExecDir]           ; include 'bin/*' as executables
  [ShareDir]          ; include 'share/' for File::ShareDir
  [Module::Build]     ; create Build.PL
  [CPANFile]          ; build a cpanfile

  ; copy META.json back to repo dis
  [CopyFilesFromBuild]
  copy = cpanfile

  ; manifest (after all generated files)
  [Manifest]          ; create MANIFEST

  ; before release
  [Git::Check]        ; ensure all files checked in
  allow_dirty = dist.ini
  allow_dirty = Changes
  allow_dirty = README.pod
  allow_dirty = cpanfile

  [CheckMetaResources]     ; ensure META has 'resources' data
  [CheckPrereqsIndexed]    ; ensure prereqs are on CPAN
  [CheckChangesHasContent] ; ensure Changes has been updated
  [CheckExtraTests]   ; ensure xt/ tests pass
  [TestRelease]       ; ensure t/ tests pass
  [ConfirmRelease]    ; prompt before uploading

  ; releaser
  [UploadToCPAN]      ; uploads to CPAN

  ; after release
  [Git::Commit / Commit_Dirty_Files] ; commit Changes (as released)
  allow_dirty = dist.ini
  allow_dirty = Changes
  allow_dirty = README.pod

  [Git::Tag]          ; tag repo with custom tag
  tag_format = release-%v

  ; NextRelease acts *during* pre-release to write $VERSION and
  ; timestamp to Changes and  *after* release to add a new {{$NEXT}}
  ; section, so to act at the right time after release, it must actually
  ; come after Commit_Dirty_Files but before Commit_Changes in the
  ; dist.ini.  It will still act during pre-release as usual

  [NextRelease]

  [Git::Commit / Commit_Changes] ; commit Changes (for new dev)
  commit_msg = bump Changes

  [Git::Push]         ; push repo to remote
  push_to = origin

Usage

To use this PluginBundle, just add it to your dist.ini. See the "ATTRIBUTES" section for user configurable options.

This PluginBundle supports ConfigSlicer, so you can pass in options to individual plugins directly if necessary.

[@HARTZELL]
ExecDir.dir = scripts ; overrides ExecDir's dir option

ATTRIBUTES

stopwords

Moose ArrayRef attribute that keeps track of a list of stopwords for various spelling tasks. Defaults to an empty list, controlled by 'stopwords' lines in the dist.ini. There can be multiple stopwords lines in the dist.ini file.

Do this:

stopwords = one two three
stopwords = some more words

to build up your own list of stopwords.

fake_release

Moose boolean attribute, when set to true the bundle swaps the FakeRelease plugin in place of the UploadToCPAN plugin. Mostly useful for testing a dist.ini without risking a real release. Defaults to false, controlled by the value of the 'fake_release' dist.ini option.

Do this:

fake_release = 1

to do a fake release.

no_critic

Moose boolean attribute, when set to true it disables the Perl::Critic tests. Defaults to false, controlled by the value of the 'no_critic' dist.ini option.

Do this:

no_critic = 1

to do disable critic testing.

no_spellcheck

Moose boolean attribute, when set to true it disables the Test::PodSpelling tests. Defaults to false, controlled by the value of the 'no_spellcheck' dist.ini option.

Do this:

no_spellcheck = 1

to do disable spell checking.

is_task

Moose boolean attribute, when set to true it loads TaskWeaver instead of PodWeaver. Defaults to false, controlled by the value of the 'is_task' dist.ini option.

Do this:

is_task = 1

to build a Task:: distribution.

use_autoprereqs

Moose boolean attribute, when set to true it loads the AutoPrereqs plugin. Defaults to true, controlled by the value of the 'use_autoprereqs' dist.ini option.

Do this:

use_autoprereqs = 0

to do disable AutoPrereqs.

tag_format

Moose Str attribute, defines the format used by Git::Tag. Defaults to 'release-%v', controlled by the value of the 'tag_format' dist.ini option.

Do this:

tag_format = my-release-%v

to set it to something other than the default.

version_regexp

Moose Str attribute, defines the regexp that Git::NextVersion uses to figure out the current version. Defaults to '^release-(.+)$' and is controlled by the value of the 'version_regexp' dist.ini option.

Do this:

version_regexp = ^my-release-(.+)$

to set it to something other than the default.

weaver_config

Moose Str attribute, controls the name of the PodWeaver configuration. Defaults to '@HARTZELL', controlled by the value of the 'weaver_config' dist.ini option.

Do this:

weaver_config = @DAGOLDEN

to e.g. use Pod::Weaver::PluginBundle::DAGOLDEN.

git_remote

Moose Str attribute, controls the name of the git remote. Defaults to 'origin', controlled by the value of the 'git_remote' dist.ini option.

Do this:

git_remote = 'something_else'

to use something other than the default.

METHODS

mvp_multivalue_args

Returns the list of the dist.ini options that can take multiple values. Currently returns qw/stopwords/.

configure

Does the heavy lifting, adds the plugins, etc....

COMMON PATTERNS

nothing much to see here for now....

[@HARTZELL]
fakerelease = 1

SEE ALSO

AUTHORS

  • George Hartzell <hartzell@cpan.org>

  • David Golden <dagolden@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by George Hartzell.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.