{"id":13463100,"url":"https://github.com/seattlerb/hoe","last_synced_at":"2025-05-14T16:02:14.076Z","repository":{"id":504174,"uuid":"131498","full_name":"seattlerb/hoe","owner":"seattlerb","description":"Hoe is a rake/rubygems helper for project Rakefiles. It helps you manage, maintain, and release your project and includes a dynamic plug-in system allowing for easy extensibility. Hoe ships with plug-ins for all your usual project tasks including rdoc generation, testing, packaging, deployment, and announcement.","archived":false,"fork":false,"pushed_at":"2025-03-25T23:01:56.000Z","size":1216,"stargazers_count":292,"open_issues_count":1,"forks_count":63,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-10T09:57:09.647Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.zenspider.com/projects/hoe.html","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seattlerb.png","metadata":{"files":{"readme":"README.rdoc","changelog":"History.rdoc","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2009-02-18T07:39:08.000Z","updated_at":"2025-04-01T13:25:50.000Z","dependencies_parsed_at":"2023-07-08T06:54:06.160Z","dependency_job_id":"8bb1b14a-e38d-49fd-a145-90ec4ec4797c","html_url":"https://github.com/seattlerb/hoe","commit_stats":{"total_commits":595,"total_committers":3,"mean_commits":"198.33333333333334","dds":"0.14117647058823535","last_synced_commit":"01bf219a390292ba896a689bf49314b0e75b7720"},"previous_names":[],"tags_count":115,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seattlerb%2Fhoe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seattlerb%2Fhoe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seattlerb%2Fhoe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seattlerb%2Fhoe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seattlerb","download_url":"https://codeload.github.com/seattlerb/hoe/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254179903,"owners_count":22027884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T13:00:45.971Z","updated_at":"2025-05-14T16:02:14.018Z","avatar_url":"https://github.com/seattlerb.png","language":"Ruby","readme":"= Hoe\n\nhome  :: http://www.zenspider.com/projects/hoe.html\ncode  :: https://github.com/seattlerb/hoe\nbugs  :: https://github.com/seattlerb/hoe/issues\nrdoc  :: http://docs.seattlerb.org/hoe/\ndoco  :: http://docs.seattlerb.org/hoe/Hoe.pdf\nclog  :: https://github.com/seattlerb/hoe/blob/master/History.rdoc\nother :: http://github.com/jbarnette/hoe-plugin-examples\n\n== DESCRIPTION:\n\nHoe is a rake/rubygems helper for project Rakefiles. It helps you\nmanage, maintain, and release your project and includes a dynamic\nplug-in system allowing for easy extensibility. Hoe ships with\nplug-ins for all your usual project tasks including rdoc generation,\ntesting, packaging, deployment, and announcement.\n\nSee class rdoc for help. Hint: `ri Hoe` or any of the plugins listed\nbelow.\n\nFor extra goodness, see: http://docs.seattlerb.org/hoe/Hoe.pdf\n\n== FEATURES/PROBLEMS:\n\n* Includes a dynamic plug-in system allowing for easy extensibility.\n* Auto-intuits changes, description, summary, and version.\n* Uses a manifest for safe and secure deployment.\n* Provides 'sow' for quick project directory creation.\n* Sow uses a simple ERB templating system allowing you to capture your\n  project patterns.\n\n== SYNOPSIS:\n\n  % sow [group] project\n\n(you can edit a project template in ~/.hoe_template after running sow\nfor the first time)\n\nor:\n\n  require 'hoe'\n\n  Hoe.spec projectname do\n    # ... project specific data ...\n  end\n\n  # ... project specific tasks ...\n\n== Deployment, the DRY way\n\nHoe focuses on keeping everything in its place in a useful form and\nintelligently extracting what it needs. As a result, there are no\nextra YAML files, config directories, ruby files, or any other\nartifacts in your release that you wouldn't already have.\n\n=== Structure Overview\n\n  project_dir/\n    History.txt\n    Manifest.txt\n    README.txt\n    Rakefile\n    bin/...\n    lib/...\n    test/...\n\n=== README.txt\n\nMost projects have a readme file of some kind that describes the\nproject. Hoe projects are no different, but we take them one step\nfurther. The readme file points the reader towards all the information\nthey need to know to get started including a description, relevant\nurls, code synopsis, license, etc. Hoe knows how to read a basic rdoc\nformatted file to pull out the description (and summary by extension),\nurls, and extra paragraphs of info you may want to provide in\nnews/blog posts.\n\n=== History.txt\n\nEvery project should have a document describing changes over time. Hoe\ncan read this file (also in rdoc) and include the latest changes in\nyour announcements.\n\n=== Manifest.txt\n\n\u003cem\u003e\u003cb\u003emanifest [noun]\u003c/b\u003e a document giving comprehensive\ndetails of a ship and its cargo and other contents, passengers, and\ncrew for the use of customs officers.\u003c/em\u003e\n\nEvery project should know what it is shipping. This is done via an\nexplicit list of everything that goes out in a release. Hoe uses this\nduring packaging so that nothing embarrassing is picked up.\n\nImagine, you're a customs inspector at the Los Angeles Port, the\nworld's largest import/export port. A large ship filled to the brim\npulls up to the pier ready for inspection. You walk up to the captain\nand his crew and ask \"what is the contents of this fine ship today\"\nand the captain answers \"oh... whatever is inside\". The mind boggles.\nThere is no way in the world that a professionally run ship would ever\nrun this way and there is no way that you should either.\n\nProfessional software releases know _exactly_ what is in them, amateur\nreleases \u003cem\u003edo not\u003c/em\u003e. \"Write better globs\" is the response I often hear.\nI consider myself and the people I work with to be rather smart people\nand if we get them wrong, chances are you will too. How many times\nhave you peered under the covers and seen .DS_Store, emacs backup~\nfiles, vim vm files and other files completely unrelated to the\npackage? I have far more times than I'd like.\n\n    \"Ultimately, the manifest represents professionalism of the\n     deployment process – making sure you know what you think you are\n     releasing. Auto-generating the manifest should be avoided – and\n     this comes from a man who loves to generate things.\"\n\n    -- dr nic\n\n=== VERSION\n\nReleases have versions and I've found it best for the version to be\npart of the code. You can use this during runtime in a multitude of\nways. Hoe finds your version and uses it automatically during\npackaging.\n\n=== Releasing in 1 easy step\n\n  % rake release VERSION=x.y.z\n\nThat really is all there is to it. Behind the scenes it:\n\n* Branches the release in our perforce server. (via hoe-seattlerb plugin)\n* Performs sanity checks to ensure the release has integrity. (hoe-seattlerb)\n* Packages into gem and tarballs.\n* Uploads the packages to rubygems.org.\n* Posts news of the release my blog.\n* Sends an announcement email. (via the hoe-seattlerb plugin gem)\n\nThat `VERSION=x.y.z` is there as a last-chance sanity check that you\nknow what you're releasing. You'd be surprised how blurry eyed/brained\nyou get at 3AM. This check helps a lot more than it should.\n\n== Plugins:\n\nHoe has a flexible plugin system that allows you to activate and\ndeactivate what tasks are available on a given project. Hoe has been\nbroken up into plugins partially to make maintenance easier but also\nto make it easier to turn off or replace code you don't want.\n\n* To activate a plugin, add the following to your Rakefile above your\n  Hoe spec:\n\n    Hoe.plugin :plugin_name\n\n* To deactivate a plugin, remove its name from the plugins array:\n\n    Hoe.plugins.delete :plugin_name\n\nAgain, this must be done before the Hoe spec, or it won't be useful.\n\n=== Plug-ins Provided:\n\n* Hoe::Clean\n* Hoe::Compiler\n* Hoe::Debug\n* Hoe::Deps\n* Hoe::Flay\n* Hoe::Flog\n* Hoe::GemPreludeSucks\n* Hoe::Gemcutter\n* Hoe::Inline\n* Hoe::Newb\n* Hoe::Package\n* Hoe::Publish\n* Hoe::Racc\n* Hoe::RCov\n* Hoe::Signing\n* Hoe::Test\n\n=== Known 3rd-Party Plugins:\n\n* hoe-bundler    - Generates a Gemfile based on a Hoe's declared dependencies.\n* hoe-debugging  - A Hoe plugin to help you debug your codes.\n* hoe-deveiate   - A collection of Rake tasks and utility functions.\n* hoe-doofus     - A Hoe plugin that helps me keep from messing up gem releases.\n* hoe-gemcutter  - Adds gemcutter release automation to Hoe.\n* hoe-geminabox  - Allows you to push your gems to geminabox\n* hoe-gemspec    - Generate a prerelease gemspec based on a Hoe spec.\n* hoe-gemspec2   - ??? submit a PR to add description\n* hoe-git        - A set of Hoe plugins for tighter Git integration.\n* hoe-heroku     - Helps you get your stuff on Heroku.\n* hoe-hg         - A Hoe plugin for Mercurial integration.\n* hoe-highline   - A Hoe plugin for building interactive Rake tasks\n* hoe-ignore     - ??? submit a PR to add description\n* hoe-manifest   - ??? submit a PR to add description\n* hoe-manualgen  - A manual-generation plugin for Hoe\n* hoe-mercurial  - A Hoe plugin for Mercurial integration.\n* hoe-reek       - Integrates the reek code smell engine into your hoe projects.\n* hoe-roodi      - Integrates the roodi code smell tool into your hoe projects.\n* hoe-rubygems   - Additional RubyGems tasks.\n* hoe-seattlerb  - Minitest, email announcements, release branching.\n* hoe-telicopter - Provides tasks used by hotelicopter.\n* hoe-travis     - Allows your gem to gain maximum benefit from \u003chttp://travis-ci.org\u003e.\n* hoe-version    - ??? submit a PR to add description\n* hoe-yard       - A Hoe plugin for generating YARD documentation.\n\n=== Writing Plugins:\n\nA plugin can be as simple as:\n\n    module Hoe::Thingy\n      attr_accessor :thingy\n\n      def initialize_thingy # optional\n        self.thingy = 42\n      end\n\n      def define_thingy_tasks\n        task :thingy do\n          puts thingy\n        end\n      end\n    end\n\nNot terribly useful, but you get the idea. This example exercises both\nplugin methods (initialize_#{plugin} and define_#{plugin}_tasks and\nadds an accessor method to the Hoe instance.\n\n=== How Plugins Work\n\nHoe plugins are made to be as simple as possible, but no simpler. They are\nmodules defined in the `Hoe` namespace and have only one required method\n(`define_#{plugin}_tasks`) and one optional method (`initialize_#{plugin}`).\nPlugins can also define their own methods and they'll be available as instance\nmethods to your hoe-spec. Plugins have 4 simple phases:\n\n==== Loading\n\nWhen Hoe is loaded the last thing it does is to ask rubygems for all of its\nplugins. Plugins are found by finding all files matching \"hoe/*.rb\" via\ninstalled gems or `$LOAD_PATH`. All found files are then loaded.\n\n==== Activation\n\nAll of the plugins that ship with hoe are activated by default. This is\nbecause they're providing the same functionality that the previous Hoe was and\nwithout them, it'd be rather useless. Other plugins should be \"opt-in\" and are\nactivated by:\n\n    Hoe::plugin :thingy\n\nPut this _above_ your hoe-spec. All it does is add `:thingy` to `Hoe.plugins`.\nYou could also deactivate a plugin by removing it from `Hoe.plugins` although\nthat shouldn't be necessary for the most part.\n\nPlease note that it is **not** a good idea to have a plugin you're writing\nactivate itself. Let developers opt-in, not opt-out. Just because someone\nneeds the `:thingy` plugin on one project doesn't mean they need them on _all_\ntheir projects.\n\n==== Initialization\n\nWhen your hoe-spec is instantiated, it extends itself all known plugin\nmodules. This adds the method bodies to the hoe-spec and allows for\nthe plugin to work as part of the spec itself. Once that is over,\nactivated plugins have their **optional** `initialize_#{plugin}`\nmethods called followed by their **optional**\n`activate_#{plugin}_deps` methods called. This lets them set needed\ninstance variables to default values and declare any gem dependencies\nneeded.. Finally, the hoe-spec block is evaluated so that project\nspecific values can override the defaults.\n\nSee \"Hoe Plugin Loading Sequence\" in hoe.rb for full details.\n\n==== Task Definition\n\nFinally, once the user's hoe-spec has been evaluated, all activated plugins\nhave their `define_#{plugin}_tasks` method called. This method must be defined\nand it is here that you'll define all your tasks.\n\n== REQUIREMENTS:\n\n* rake\n* rubygems\n\n== INSTALL:\n\n* sudo gem install hoe\n\n== LICENSE:\n\n(The MIT License)\n\nCopyright (c) Ryan Davis, seattle.rb\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","funding_links":[],"categories":["Developer Tools"],"sub_categories":["Gem Creation"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseattlerb%2Fhoe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseattlerb%2Fhoe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseattlerb%2Fhoe/lists"}