I’ll suggest
Dist::Zilla since nobody else did yet. At first look, it seems very heavyweight (based on Moose with lots of plugins) but those plugins are what let Dist::Zilla adapt to your preferred workflow for publishing a module.
I like to use #VERSION comments in my files that get replaced by whatever version is being built, default to the next version based on the last git tag, have Git be responsible for the MANIFEST, move all my POD to the __END__ of the file, automatically determine my prereqs but let me override them, and test my code for documentation coverage. You can see a minimal configuration for all of that in my module Log::Progress / dist.ini
Once everything is installed, my release process is "dzil test" then "dzil release", it prompts me for my PAUSE password, then it's published. Releasing a dev version is "V=1.11_01 dzil release" then later "V=1.12 dzil release" to get back to 2 decimal places.