The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Dist::Zilla::PluginBundle::SILEX - Dist::Zilla configuration the way SILEX does it

VERSION

version v0.0.2

SYNOPSIS

  # in dist.ini
  [@SILEX]

  # using local git
  [@SILEX]
  silex_git = silex/myrepo

  # using github & darkpan
  [@SILEX]
  darkpan = 1

  # using local git & darkpan
  [@SILEX]
  silex_git = silex/myrepo
  darkpan = 1

DESCRIPTION

This is a Dist::Zilla PluginBundle. It is roughly equivalent to the following dist.ini:

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

  ; collect contributors list
  [ContributorsFromGit]

  ; 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
  [OurPkgVersion]     ; add $VERSION = ... to all files
  [InsertCopyright]   ; add copyright at "# COPYRIGHT"
  [PodWeaver]         ; generate Pod
  config_plugin = @SILEX ; my own plugin allows Pod::WikiDoc
  replacer = replace_with_comment
  post_code_replacer = replace_with_nothing

  ; generated files
  [License]                           ; boilerplate license
  [ReadmeFromPod]                     ; from Pod (runs after PodWeaver)
  [ReadmeAnyFromPod / MarkdownInRoot]

  ; t tests
  [Test::ReportPrereqs]   ; show prereqs in automated test output

  ; xt tests
  [Test::MinimumVersion]  ; xt/release/minimum-version.t
  max_target_perl = 5.010 ; don't use syntax/features past 5.10
  [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)
  options = test_one_dot = 0
  [Test::Version]     ; xt/release/test-version.t
  [Test::Compile]     ; xt/author/00-compile.t
  fake_home = 1       ; fakes $ENV{HOME} just in case
  xt_mode = 1         ; make sure all files compile

  ; metadata
  [AutoPrereqs]       ; find prereqs from code
  skip = ^t::lib

  [Prereqs]
  [Prereqs / Runtime_Requires]
  -phase        = runtime
  -relationship = requires
  [Prereqs / Runtime_Recommends]
  -phase        = runtime
  -relationship = recommends
  [Prereqs / Test_Requires]
  -phase        = test
  -relationship = requires
  [RemovePrereqs]
  remove = strict
  remove = warnings

  [Authority]
  authority = cpan:SILEX
  do_munging = 0

  [MinimumPerl]       ; determine minimum perl version

  [MetaNoIndex]       ; sets 'no_index' in META
  directory = t
  directory = xt
  directory = examples
  directory = corpus
  directory = public
  package = DB        ; just in case

  [GithubMeta]        ; set META resources
  remote = origin
  remote = github
  issues = 1

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

  [Prereqs::AuthorDeps]   ; add authordeps as develop/requires
  [MetaYAML]              ; generate META.yml (v1.4)
  [MetaJSON]              ; generate META.json (v2)
  [CPANFile]              ; generate cpanfile

  ; build system
  [ExecDir]           ; include 'bin/*' as executables
  [ShareDir]          ; include 'share/' for File::ShareDir
  [MakeMaker]         ; create Makefile.PL
  eumm_version = 6.17

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

  ; copy cpanfile back to repo dis
  [CopyFilesFromBuild]
  copy = cpanfile

  ; before release

  [PromptIfStale]     ; check if our build tools are out of date
  module = Dist::Zilla
  module = Dist::Zilla::PluginBundle::SILEX
  check_all_plugins = 1

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

  [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)
  commit_msg = 'release-%v%n%n%c'

  [Git::Tag]          ; tag repo with custom tag
  tag_format  = release-%v
  tag_message = 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)

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

USAGE

To use this PluginBundle, just add it to your dist.ini. You can provide the following options:

  • silex_git — silex local git

  • is_task — this indicates whether TaskWeaver or PodWeaver should be used.

    Default is 0.

  • authority — specifies the x_authority field for pause. Defaults to 'cpan:SILEX'.

  • auto_prereq — this indicates whether AutoPrereqs should be used or not. Default is 1.

  • darkpan — for private code; uses FakeRelease and fills in dummy repo/bugtracker data

  • fake_release — swaps FakeRelease for UploadToCPAN. Mostly useful for testing a dist.ini without risking a real release.

  • git_remote — where to push after release

  • github_issues — whether to use github issue tracker. Defaults is 1.

  • stopwords — add stopword for Test::PodSpelling (can be repeated)

  • tag_format — given to Git::Tag. Default is 'release-%v' to be more

    robust than just the version number when parsing versions for Git::NextVersion

  • weaver_config — specifies a Pod::Weaver bundle. Defaults to @SILEX.

  • version_regexp — given to Git::NextVersion. Default

    is '^release-(.+)$'

  • no_git — bypass all git-dependent plugins

  • no_critic — omit Test::Perl::Critic tests

  • no_spellcheck — omit Test::PodSpelling tests

  • no_coverage — omit PodCoverage tests

  • no_minimum_perl — omit Test::MinimumVersion tests

When running without git, GatherDir is used instead of Git::GatherDir, AutoVersion is used instead of Git::NextVersion, and all git check and commit operations are disabled.

This PluginBundle now supports ConfigSlicer, so you can pass in options to the plugins used like this:

  [@SILEX]
  Test::MinimumVersion.max_target_perl = 5.014
  ExecDir.dir = scripts

This PluginBundle also supports PluginRemover, so dropping a plugin is as easy as this:

  [@SILEX]
  -remove = Test::Portability

RELEASE

Release process:

  $ git checkout develop
  $ git rebase origin/develop
  $ dzil test
  $ #
  $ # ... do what you want
  $ #
  $ # now ready to release
  $ #
  $ git checkout master
  $ git rebase origin/master
  $ git merge --no-ff develop
  $ dzil release
  $ git checkout develop
  $ git merge --no-ff master
  $ #
  $ # everything is ok then push
  $ #
  $ git push origin master
  $ git push origin develop

Release with specific version:

  $ #
  $ # ... skip above
  $ #
  $ V=v0.4.55 dzil release
  $ #
  $ # ... skip below
  $ #

SEE ALSO

SUPPORT

Bugs / Feature Requests

Please report any bugs or feature requests through the issue tracker at https://github.com/silexkr/dist-zilla-pluginbundle-silex/issues. You will be notified automatically of any progress on your issue.

Source Code

This is open source software. The code repository is available for public review and contribution under the terms of the license.

https://github.com/silexkr/dist-zilla-pluginbundle-silex

  git clone https://github.com/silexkr/dist-zilla-pluginbundle-silex.git

AUTHOR

김도형 - Keedi Kim <keedi@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by SILEX.

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