aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2004-08-25-thoughts-on-rubyforge-rubygems.html
blob: 73db4ae6b07914d92924791e29c2197657c77c3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
---
date: "2004-08-25T14:44:12Z"
title: Thoughts on RubyForge/RubyGems
---

<p>
In order to post a <a href='http://rubygems.rubyforge.org/'>RubyGem</a>
at the moment, you have to create an account on <a
href='http://www.rubyforge.org/'>RubyForge</a>, then create a project,
<em>then</em> upload the gem.  <a
href='http://www.rubyforge.org/'>RubyForge</a> gives the same things
that <a href='http://www.sourceforge.net/'>SourceForge</a> does; a web
site, a <acronym title='Concurrent Versioning System'>CVS</acronym>
repository, a file area, forums, mailing lists, kitchen sink, etc.
Pros: <a href='http://www.rubyforge.org/'>RubyForge</a> is prettier,
simpler, and more stable than <a
href='http://www.sourceforge.net/'>SourceForge</a> (although I've seen
Windows 95 machines that are more stable than <a
href='http://www.sourceforge.net/'>SourceForge</a>, so that's not saying
much).  Also <a href='http://www.rubyforge.org/'>RubyForge</a> doesn't
have 8 gadzillion dead projects on it, so it's significantly faster than
<a href='http://www.sourceforge.net/'>SourceForge</a>.  Cons: No
automated interface (<acronym title='eXtensible Markup Language-Remote
Procedure Call'>XML-RPC</acronym>, <acronym title='Simple Object Access
Protocol'>SOAP</acronym>, email, smoke signals, etc... <a
href='http://www.freshmeat.net/'>Freshmeat</a> has an <a
href='http://freshmeat.net/articles/view/1048/'><acronym
title='eXtensible Markup Language-Remote Procedure
Call'>XML-RPC</acronym> interface</a>, so this isn't an unrealistic
request), no quick way of creating a minimalist project (for example, a
project that just classifies itself in the <a
href='http://rubyforge.org/softwaremap/'>Trove</a> and posts a <a
href='http://rubygems.rubyforge.org/'>gem</a>..ie, what I want to do),
and no integration with <a href='http://raa.ruby-lang.org/'><acronym
title='Ruby Application Archive'>RAA</acronym></a> or <a
href='http://www.freshmeat.net/'>Freshmeat</a>.  
</p>

<p>
I want to elaborate on the last one a bit, because that's a problem with
both <a href='http://www.rubyforge.org/'>RubyForge</a> and <a
href='http://rubygems.rubyforge.org/'>RubyGems</a>.   Let's look at the
steps I take when I release the latest version of a <a
href='http://www.ruby-lang.org/'>Ruby</a> binding:
</p>

<ol>
<li>Sanity check, make sure the thing still compiles</li>
<li>Run whatever testing script I have written, make sure I haven't broken anything crucial</li>
<li>Update the documentation (README, TODO, BUGS, etc)</li>
<li>Tag the release in <acronym title='Concurrent Versioning
System'>CVS</acronym>.  If I'm incrementing the major or minor number, then I create a new branch as well.</li>
<li>Export the specified tag to anohter directory (I've got one called releases/ on my workstation).</li>
<li>Double-check everything again to make sure things are where they should be (I catch a lot of stupid mistakes here, by the way).</li>
<li>Run <a href='http://rdoc.sf.net/'>RDoc</a> to generate the developer documentation.</li>
<li>Tar the release up.</li>
<li>Sign the tarball with <a href='http://www.gnupg.org/'>GnuPG</a> (everyone should be doing this; shame on you if you aren't).</li>
<li>Upload the tarball, signature, ChangeLog, and API documentation to <a href='/'>Pablotron</a>.</li>
<li>Update the links, version number, and possibly the blurb on the software page.</li>
<li>Post an entry to the front page briefly describing the release.</li>
<li>Update the binding's entry on <a href='http://raa.ruby-lang.org/'><acronym title='Ruby Application Archive'>RAA</acronym></a>.</li>
<li>Update the entry on <a href='http://www.freshmeat.net/'>Freshmeat</a>.</li>
<li>Post a short message to <a href='http://www.ruby-talk.org/'><code>ruby-talk</code></a>.</li>
</ol>

<p>
If I'm using creating a <a href='http://rubygems.rubyforge.org/'>gem</a>, then we have to add the following items to the list:
</p>

<ul>
<li>Update <code>gemspec</code>.</li>
<li>Create <a href='http://rubygems.rubyforge.org/'>gem</a>.</li>
<li>Upload <a href='http://rubygems.rubyforge.org/'>gem</a> (and possibly release tarball, signature, etc), to <a href='http://www.rubyforge.org/'>RubyForge</a>.</li>
<li>Update project information on <a href='http://www.rubyforge.org/'>RubyForge</a>.</li>
</ul>

<p>
Well, if there was some interaction between <a href='http://www.rubyforge.org/'>RubyForge</a>, <a href='http://raa.ruby-lang.org/'><acronym title='Ruby Application Archive'>RAA</acronym></a>, and <a href='http://www.freshmeat.net/'>Freshmeat</a>, a lot of redundant steps could be eliminated.  I'm picking on <a href='http://www.rubyforge.org/'>RubyForge</a> here because it's the new kid on the block;  <a href='http://www.freshmeat.net/'>Freshmeat</a> has been around since the dawn of time, and <a href='http://raa.ruby-lang.org/'><acronym title='Ruby Application Archive'>RAA</acronym></a> has Ruby's semi-answer to <a href='http://www.perl.com/'>Perl's</a> <a hrf='http://www.cpan.org/'><acronym title='Comprehensive Perl Archive Network'>CPAN</acronym></a> since I started using <a href='http://www.ruby-lang.org/'>Ruby</a>.  For example, let's say <a href='http://www.rubyforge.org/'>RubyForge</a> had an <acronym title='eXtensible Markup Language-Remote Procedure Call'>XML-RPC</acronym> interface, and it could communicate with <a href='http://raa.ruby-lang.org/'><acronym title='Ruby Application Archive'>RAA</acronym></a> (via some <acronym title='Remote Procedure Call'>RPC</acronym> interface) and <a href='http://www.freshmeat.net/'>Freshmeat</a>.  Now write a script that creates a <a href='http://rubygems.rubyforge.org/'>gem</a> and does the necessary updates to my personal page, then connects to <a href='http://www.rubyforge.org/'>RubyForge</a> via <acronym title='eXtensible Markup Language-Remote Procedure Call'>XML-RPC</acronym> and uploads my tarball, <a href='http://rubygems.rubyforge.org/'>gem</a>, tarball signature, and gem signature, which are then automagically propogated to both <a href='http://www.freshmeat.net/'>Freshmeat</a> and the <a href='http://raa.ruby-lang.org/'><acronym title='Ruby Application Archive'>RAA</acronym></a>.
</p>

<p>
In short, an automated update interface combined with the ability to
interact with the other existing software indices would allow me to
eliminate half of the steps on my software release checklist and make <a
href='http://www.rubyforge.org/'>RubyForge</a> incredibly useful to
developers, even if they don't need web hosting, a mailing list, or a
<acronym title='Concurrent Versioning System'>CVS</acronym> repository.
</p>