NAME
    Dist::Zilla::PluginBundle::HARTZELL - Implement hartzell's way.

VERSION
    version 0.004

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
       exclude_filename = cpanfile     ; 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 = @DEFAULT
 
       ; 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
 
       ; 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
 
       [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 '@Default', 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
    *   Dist::Zilla

    *   Dist::Zilla::Plugin::PodWeaver

    *   Dist::Zilla::Plugin::TaskWeaver

    *   Dist::Zilla::PluginBundle::ConfigSlicer

AUTHOR
    George Hartzell <hartzell@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2012 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.

