Hoe::Halostatue Meta-Plugin

  • home ::
  • issues ::
  • code ::
  • changelog ::

Description

Hoe::Halostatue is a Hoe meta-plugin that provides improved support for
Markdown README files, provides features from other plugins, and enables
improved support for trusted publishing.

Examples

# In your Rakefile
Hoe.plugin :halostatue

Hoe.spec "myproj" do
  self.checklist = nil if ENV["rubygems_release_gem"] == "true"
  self.git_tag_enabled = ENV["rubygems_release_gem"] != "true"
  # ...
end

If this plugin cannot see that it is in a .git directory, hoe-git2 derived
features will be deactivated.

Features

Hoe::Halostatue automatically enables Hoe plugins
hoe-gemspec2, hoe-markdown, and
hoe-rubygems.

With version 2, the functionality of hoe-doofus and
hoe-git2 have been incorporated into Hoe::Halostatue to improve
automated release support.

Improved Metadata URL Parsing

Hoe::Halostatue provides an improved implementation for Hoe#parse_urls. The
expected format is more or less the same, but accepts any left-aligned Markdown
list (beginning with -, +, or *) and handles lists that wrap lines (such
as the changelog entry at the top of this file).

It is more strict than the default Hoe#parse_urls because it only accepts the
known aliases for the various RubyGems URI meta keys.

RubyGems URI Meta Key Alias
documentation_uri doco, docs, documentation
bug_tracker_uri bugs, issues, tickets
changelog_uri clog, changelog, changes, history
homepage_uri home, homepage
wiki_uri wiki
mailing_list_uri mail

Automated Release Support

Certain features offered by Hoe plugins supported are useful for manual
releases, but work against automated releases (see trusted publishing).

  • hoe-doofus has been replaced with an internal implementation that disables
    the display if the release checklist is unset or empty.

  • hoe-git2 has been incorporated into Hoe::Halostatue, but the pieces which
    affect release can be disabled through configuration.

In the example below, the release checklist and Git tag creation will be
disabled if $rubygems_release_gem is true.

Hoe.plugin :halostatue

Hoe.spec "myproj" do
  self.checklist = nil if ENV["rubygems_release_gem"] == "true"
  self.git_tag_enabled = ENV["rubygems_release_gem"] != "true"
  # ...
end

Release Checklist (from hoe-doofus)

The release checklist feature has been incorporated from hoe-doofus.

> A Hoe plugin that helps me (and you, maybe?) keep from messing up gem
> releases. It shows a configurable checklist when rake release is run, and
> provides a chance to abort if anything’s been forgotten.

The current checklist can be seen by running rake checklist and the checklist
may be set by using self.checklist << "new item" in your spec. If the
checklist is nil or empty, the checklist prompt will not be displayed.

Hoe.plugin :halostatue

Hoe.spec "myproj" do
  if ENV["rubygems_release_gem"] == "true"
    self.checklist = nil
  else
    checklist << "Given the release a snappy name"
  end
end

Git Integration Tasks (from hoe-git2)

Support for generating the CHANGELOG from the git commit messages has not been
incorporated into Hoe::Halostatue.

Generating the Manifest

The Manifest.txt required by Hoe can be generated with rake git:manifest.
This uses git ls-files, respecting the Hoe manifest sort order and excludes.

Tagging and Sanity Checking a Release

A release will be aborted if your Git index is dirty or there are untracked
files present. After the release is published, a Git tag will be created and
pushed to your repo remotes. Both $PRERELEASE and $PRE tags are supported,
with $PRERELEASE taking precedence over $PRE, just as with Hoe itself.

In the following example with no other configuration, a v1.0.0.beta.1 tag will
be created and pushed to the origin remote.

$ rake release VERSION=1.0.0 PRERELEASE=beta.1

The tag prefix can be with self.git_release_tag_prefix, which defaults to v.

The created tag can be pushed to different remotes with self.git_remotes,
which defaults to ["origin"].

Trusted Release

If spec.trusted_release is set to true changes will be made to the release
workflow. This flag is intended to be used only with a trusted publishing
workflow. It will bypass certain protections offered by Hoe and Hoe::Halostatue:

  • The version discovered by Hoe will be trusted as correct, removing the need
    for specifying the version.

  • The release checklist will be skipped.

Strict Warnings

Warnings can be made strict (an exception will be thrown) for tests by adding
the following to your test or spec helper file (test/minitest_helper.rb or
spec/rspec_helper.rb or similar):

require "hoe/halostatue/strict_warnings"

# Optional but recommended to avoid getting warnings outside of your code.
Hoe::Halostatue::StrictWarnings.project_root = File.expand_path("../", __dir__)

# Optional regex patterns to suppress. Suppressed messages will not be printed
# to standard error. The patterns provided will be converted to a single regex
# on assignment.
Hoe::Halostatue::StrictWarnings.suppressed = [
  /circular require considered harmful/
]

# Optional regex patterns to allow. Allowed messages will be printed to
# standard error, but will not raise an exception. The patterns provided will
# be converted to a single regex on assignment.
Hoe::Halostatue::StrictWarnings.allowed = [
  /oval require considered harmful/
]

This is based on RailsStrictWarnings.

Dependencies

Hoe and Git 2.37 or later.

Installation

$ gem install hoe-halostatue