Re: [PATCH] Automatically build and ship documentation
Bump!
No takers on reviewing this?
Some rework is needed with libjs-jquery recommends (which
Ruby >= 2.0 already does) etc.
--
Per
On Sat, Apr 19, 2014 at 1:02 AM, Per Andersson <avtobiff@gmail.com> wrote:
> Build documentation in debian/gem2deb_generated_docs/html, ship it in
> /usr/share/doc/$package/html.
>
> * dh_make_ruby: Create debhelper files for dirs, links, doc-base, and docs
> to install documentation automatically built by dh_ruby. Add authors
> function wrapping metadata.authors.
>
> * dh_ruby: call documentation clean and build functions from installer.
> Build documentation by calling rdoc.
>
> * installer: clean and build documentation. Introduce new attribute
> docdir and add :docdir to destdir function.
>
> * metadata: add authors attribute.
>
> * gem2deb: add DOC_DIR attribute.
>
> * Add unit and integration tests.
>
> + Add documentation sample package.
>
> NB! This does not suggest libjs-jquery, but leaves it to the user to
> install if they want fancy presentation. This is because libjs-jquery
> recommends javascript-common which in turn suggests apache | lighttpd |
> httpd, leading to a lot of things automatically installed if suggests
> was configured to install automatically.
> ---
> lib/gem2deb.rb | 2 +
> lib/gem2deb/dh_make_ruby.rb | 61 +++++++++++++++++-----
> lib/gem2deb/dh_ruby.rb | 10 +++-
> lib/gem2deb/installer.rb | 17 ++++++
> lib/gem2deb/metadata.rb | 8 +++
> test/integration/gem2deb_test.rb | 6 +++
> test/sample/documentation/CHANGELOG.rdoc | 1 +
> test/sample/documentation/debian/changelog | 5 ++
> test/sample/documentation/debian/compat | 1 +
> test/sample/documentation/debian/control | 18 +++++++
> test/sample/documentation/debian/copyright | 35 +++++++++++++
> .../documentation/debian/ruby-documentation.dirs | 1 +
> .../debian/ruby-documentation.doc-base | 10 ++++
> .../documentation/debian/ruby-documentation.docs | 3 ++
> .../documentation/debian/ruby-documentation.links | 4 ++
> test/sample/documentation/debian/rules | 15 ++++++
> test/sample/documentation/debian/source/format | 1 +
> test/sample/documentation/debian/watch | 2 +
> test/sample/documentation/documentation.gemspec | 17 ++++++
> test/sample/documentation/lib/documentation.rb | 3 ++
> .../documentation/lib/documentation/version.rb | 3 ++
> test/unit/dh_make_ruby_test.rb | 16 ++++++
> test/unit/metadata_test.rb | 16 ++++++
> 23 files changed, 240 insertions(+), 15 deletions(-)
> create mode 100644 test/sample/documentation/CHANGELOG.rdoc
> create mode 100644 test/sample/documentation/debian/changelog
> create mode 100644 test/sample/documentation/debian/compat
> create mode 100644 test/sample/documentation/debian/control
> create mode 100644 test/sample/documentation/debian/copyright
> create mode 100644 test/sample/documentation/debian/ruby-documentation.dirs
> create mode 100644 test/sample/documentation/debian/ruby-documentation.doc-base
> create mode 100644 test/sample/documentation/debian/ruby-documentation.docs
> create mode 100644 test/sample/documentation/debian/ruby-documentation.links
> create mode 100755 test/sample/documentation/debian/rules
> create mode 100644 test/sample/documentation/debian/source/format
> create mode 100644 test/sample/documentation/debian/watch
> create mode 100644 test/sample/documentation/documentation.gemspec
> create mode 100644 test/sample/documentation/lib/documentation.rb
> create mode 100644 test/sample/documentation/lib/documentation/version.rb
>
> diff --git a/lib/gem2deb.rb b/lib/gem2deb.rb
> index 5623992..4cd5909 100644
> --- a/lib/gem2deb.rb
> +++ b/lib/gem2deb.rb
> @@ -39,6 +39,8 @@ module Gem2Deb
>
> LIBDIR = File.expand_path(File.dirname(__FILE__))
>
> + DOC_DIR = 'debian/gem2deb_generated_docs/html'
> +
> def run(*argv)
> puts(_format_cmdline(argv)) if $VERBOSE
> system(*argv)
> diff --git a/lib/gem2deb/dh_make_ruby.rb b/lib/gem2deb/dh_make_ruby.rb
> index 723c752..aa134ea 100644
> --- a/lib/gem2deb/dh_make_ruby.rb
> +++ b/lib/gem2deb/dh_make_ruby.rb
> @@ -110,6 +110,16 @@ module Gem2Deb
> [source_package_name, gem_version].join('-')
> end
>
> + def authors
> + if defined? metadata.author
> + [metadata.author]
> + elsif defined? metadata.authors
> + metadata.authors
> + else
> + [""]
> + end
> + end
> +
> def homepage
> metadata.homepage
> end
> @@ -301,16 +311,43 @@ module Gem2Deb
> end
>
> def other_files
> - # docs
> - docs = ""
> - if File::directory?('doc')
> - docs += <<-EOF
> -# FIXME: doc/ dir found in source. Consider installing the docs.
> -# Examples:
> -# doc/manual.html
> -# doc/site/*
> - EOF
> + # dirs
> + File::open("debian/#{source_package_name}.dirs", 'w') do |f|
> + f.puts "usr/share/doc/#{source_package_name}/html"
> end
> +
> + # links
> + File::open("debian/#{source_package_name}.links", 'w') do |f|
> + f.puts <<-EOF
> +# Symlinking to automatically removed jquery.js.
> +# If documentation is changed, update path to docs
> +# and remove bundled jquery.js in debian/rules.
> +usr/share/javascript/jquery/jquery.js usr/share/doc/#{source_package_name}/html/js/jquery.js
> + EOF
> + end
> +
> + # doc-base
> + doc_base = <<-EOF
> +Document: #{source_package_name}
> +Title: Debian #{source_package_name} Manual
> +Author: #{authors.join(", ")}
> +Abstract: #{short_description}
> + #{long_description}
> +Section: Programming/Ruby
> +
> +Format: HTML
> +Index: /usr/share/doc/#{source_package_name}/html/index.html
> +Files: /usr/share/doc/#{source_package_name}/html/*
> + EOF
> + File::open("debian/#{source_package_name}.doc-base", 'w') do |f|
> + f.puts doc_base
> + end
> +
> + # docs
> + docs = <<-EOF
> +# install docs automatically built by gem2deb
> +#{DOC_DIR}
> + EOF
> readmes = Dir::glob('README*')
> docs += <<-EOF
> # FIXME: READMEs found
> @@ -318,10 +355,8 @@ module Gem2Deb
> readmes.each do |r|
> docs << "# #{r}\n"
> end
> - if docs != ""
> - File::open("debian/#{source_package_name}.docs", 'w') do |f|
> - f.puts docs
> - end
> + File::open("debian/#{source_package_name}.docs", 'w') do |f|
> + f.puts docs
> end
>
> # examples
> diff --git a/lib/gem2deb/dh_ruby.rb b/lib/gem2deb/dh_ruby.rb
> index 94570a9..b9c844d 100644
> --- a/lib/gem2deb/dh_ruby.rb
> +++ b/lib/gem2deb/dh_ruby.rb
> @@ -38,6 +38,7 @@ module Gem2Deb
>
> installers.each do |installer|
> installer.run_make_clean_on_extensions
> + installer.clean_documentation
> end
>
> puts " Leaving dh_ruby --clean" if @verbose
> @@ -49,8 +50,13 @@ module Gem2Deb
> end
>
> def build
> - # puts " Entering dh_ruby --build" if @verbose
> - # puts " Leaving dh_ruby --build" if @verbose
> + puts " Entering dh_ruby --build" if @verbose
> +
> + installers.each do |installer|
> + installer.build_documentation
> + end
> +
> + puts " Leaving dh_ruby --build" if @verbose
> end
>
> def test
> diff --git a/lib/gem2deb/installer.rb b/lib/gem2deb/installer.rb
> index c1bb23a..7e13e07 100644
> --- a/lib/gem2deb/installer.rb
> +++ b/lib/gem2deb/installer.rb
> @@ -25,6 +25,16 @@ module Gem2Deb
> @metadata = Gem2Deb::Metadata.new(@root)
> end
>
> + def clean_documentation
> + FileUtils::remove_dir(File::dirname(docdir), force=true)
> + end
> +
> + def build_documentation
> + run("rdoc", "--output", docdir, libdir)
> + # remove built jquery.js, .links file symlinks to file in libjs-jquery
> + FileUtils::rm_f(File.join(destdir(:docdir), "js/jquery.js"))
> + end
> +
> def install_files_and_build_extensions
> install_files(bindir, destdir(:bindir), 755) if File::directory?(bindir)
>
> @@ -136,6 +146,10 @@ module Gem2Deb
> SUPPORTED_RUBY_VERSIONS.keys
> end
>
> + def docdir
> + @docdir ||= File.join(self.root, DOC_DIR)
> + end
> +
> def bindir
> @bindir ||= File.join(self.root, 'bin')
> end
> @@ -147,6 +161,7 @@ module Gem2Deb
> # This function returns the installation path for the given
> # package and the given target, which is one of:
> # * :bindir
> + # * :docdir
> # * :libdir
> # * :archdir
> # * :prefix
> @@ -160,6 +175,8 @@ module Gem2Deb
> return dir
> when :bindir
> return File.join(dir, BIN_DIR)
> + when :docdir
> + return File.join(dir, "usr/share/doc/#{binary_package}/html")
> when :libdir
> return File.join(dir, RUBY_CODE_DIR)
> when :archdir
> diff --git a/lib/gem2deb/metadata.rb b/lib/gem2deb/metadata.rb
> index fa1f8b2..2b483e0 100644
> --- a/lib/gem2deb/metadata.rb
> +++ b/lib/gem2deb/metadata.rb
> @@ -58,6 +58,14 @@ module Gem2Deb
> @version ||= gemspec && gemspec.version.to_s || read_version_from(source_dir) || '0.1.0~FIXME'
> end
>
> + def author
> + gemspec && gemspec.author
> + end
> +
> + def authors
> + gemspec && gemspec.authors
> + end
> +
> def homepage
> gemspec && gemspec.homepage
> end
> diff --git a/test/integration/gem2deb_test.rb b/test/integration/gem2deb_test.rb
> index 3e3d47b..dfcbcf8 100644
> --- a/test/integration/gem2deb_test.rb
> +++ b/test/integration/gem2deb_test.rb
> @@ -37,6 +37,12 @@ class Gem2DebTest < Gem2DebTestCase
> end
> end
>
> + self.build_tree('test/sample/documentation') do |dir|
> + should 'contain generated documentation' do
> + assert_file_exists "#{dir}/debian/gem2deb_generated_docs/html"
> + end
> + end
> +
> self.build_tree('test/sample/examples') do |dir|
>
> should 'not compress *.rb files installed as examples' do
> diff --git a/test/sample/documentation/CHANGELOG.rdoc b/test/sample/documentation/CHANGELOG.rdoc
> new file mode 100644
> index 0000000..5bb306c
> --- /dev/null
> +++ b/test/sample/documentation/CHANGELOG.rdoc
> @@ -0,0 +1 @@
> +upstream changelog here
> diff --git a/test/sample/documentation/debian/changelog b/test/sample/documentation/debian/changelog
> new file mode 100644
> index 0000000..2fbf0c3
> --- /dev/null
> +++ b/test/sample/documentation/debian/changelog
> @@ -0,0 +1,5 @@
> +ruby-documentation (0.0.1-1) UNRELEASED; urgency=low
> +
> + * Initial release (Closes: #nnnn)
> +
> + -- Per Andersson <avtobiff@debian.org> Fri, 18 Apr 2014 22:55:36 +0200
> diff --git a/test/sample/documentation/debian/compat b/test/sample/documentation/debian/compat
> new file mode 100644
> index 0000000..7f8f011
> --- /dev/null
> +++ b/test/sample/documentation/debian/compat
> @@ -0,0 +1 @@
> +7
> diff --git a/test/sample/documentation/debian/control b/test/sample/documentation/debian/control
> new file mode 100644
> index 0000000..3f45801
> --- /dev/null
> +++ b/test/sample/documentation/debian/control
> @@ -0,0 +1,18 @@
> +Source: ruby-documentation
> +Section: ruby
> +Priority: optional
> +Maintainer: Debian Ruby Extras Maintainers <pkg-ruby-extras-maintainers@lists.alioth.debian.org>
> +Uploaders: Per Andersson <avtobiff@debian.org>
> +Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.7.5~)
> +Standards-Version: 3.9.5
> +#Vcs-Git: git://anonscm.debian.org/pkg-ruby-extras/ruby-documentation.git
> +#Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-ruby-extras/ruby-documentation.git;a=summary
> +Homepage: http://wiki.debian.org/Teams/Ruby
> +XS-Ruby-Versions: all
> +
> +Package: ruby-documentation
> +Architecture: all
> +XB-Ruby-Versions: ${ruby:Versions}
> +Depends: ${shlibs:Depends}, ${misc:Depends}, ruby | ruby-interpreter
> +Description: Documentation test
> + A simple test to check documentation generation.
> diff --git a/test/sample/documentation/debian/copyright b/test/sample/documentation/debian/copyright
> new file mode 100644
> index 0000000..91b4de8
> --- /dev/null
> +++ b/test/sample/documentation/debian/copyright
> @@ -0,0 +1,35 @@
> +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
> +Upstream-Name: documentation
> +Source: FIXME <http://example.com/>
> +
> +Files: *
> +Copyright: <years> <put author's name and email here>
> + <years> <likewise for another author>
> +License: GPL-2+ (FIXME)
> +
> +Files: debian/*
> +Copyright: 2014 Per Andersson <avtobiff@debian.org>
> +License: GPL-2+ (FIXME)
> +Comment: the Debian packaging is licensed under the same terms as the original package.
> +
> +License: GPL-2+ (FIXME)
> + This program is free software; you can redistribute it
> + and/or modify it under the terms of the GNU General Public
> + License as published by the Free Software Foundation; either
> + version 2 of the License, or (at your option) any later
> + version.
> + .
> + This program is distributed in the hope that it will be
> + useful, but WITHOUT ANY WARRANTY; without even the implied
> + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
> + PURPOSE. See the GNU General Public License for more
> + details.
> + .
> + You should have received a copy of the GNU General Public
> + License along with this package; if not, write to the Free
> + Software Foundation, Inc., 51 Franklin St, Fifth Floor,
> + Boston, MA 02110-1301 USA
> + .
> + On Debian systems, the full text of the GNU General Public
> + License version 2 can be found in the file
> + `/usr/share/common-licenses/GPL-2'.
> diff --git a/test/sample/documentation/debian/ruby-documentation.dirs b/test/sample/documentation/debian/ruby-documentation.dirs
> new file mode 100644
> index 0000000..cd667f7
> --- /dev/null
> +++ b/test/sample/documentation/debian/ruby-documentation.dirs
> @@ -0,0 +1 @@
> +usr/share/doc/ruby-documentation/html
> diff --git a/test/sample/documentation/debian/ruby-documentation.doc-base b/test/sample/documentation/debian/ruby-documentation.doc-base
> new file mode 100644
> index 0000000..da0e9de
> --- /dev/null
> +++ b/test/sample/documentation/debian/ruby-documentation.doc-base
> @@ -0,0 +1,10 @@
> +Document: ruby-documentation
> +Title: Debian ruby-documentation Manual
> +Author: Debian Ruby Team
> +Abstract: Documentation test
> + A simple test to check documentation generation.
> +Section: Programming/Ruby
> +
> +Format: HTML
> +Index: /usr/share/doc/ruby-documentation/html/index.html
> +Files: /usr/share/doc/ruby-documentation/html/*
> diff --git a/test/sample/documentation/debian/ruby-documentation.docs b/test/sample/documentation/debian/ruby-documentation.docs
> new file mode 100644
> index 0000000..b1b94d6
> --- /dev/null
> +++ b/test/sample/documentation/debian/ruby-documentation.docs
> @@ -0,0 +1,3 @@
> +# install docs automatically built by gem2deb
> +debian/gem2deb_generated_docs/html
> +# FIXME: READMEs found
> diff --git a/test/sample/documentation/debian/ruby-documentation.links b/test/sample/documentation/debian/ruby-documentation.links
> new file mode 100644
> index 0000000..0a68777
> --- /dev/null
> +++ b/test/sample/documentation/debian/ruby-documentation.links
> @@ -0,0 +1,4 @@
> +# Symlinking to automatically removed jquery.js.
> +# If documentation is changed, update path to docs
> +# and remove bundled jquery.js in debian/rules.
> +usr/share/javascript/jquery/jquery.js usr/share/doc/ruby-documentation/html/js/jquery.js
> diff --git a/test/sample/documentation/debian/rules b/test/sample/documentation/debian/rules
> new file mode 100755
> index 0000000..06981cd
> --- /dev/null
> +++ b/test/sample/documentation/debian/rules
> @@ -0,0 +1,15 @@
> +#!/usr/bin/make -f
> +#export DH_VERBOSE=1
> +#
> +# Uncomment to ignore all test failures (but the tests will run anyway)
> +#export DH_RUBY_IGNORE_TESTS=all
> +#
> +# Uncomment to ignore some test failures (but the tests will run anyway).
> +# Valid values:
> +#export DH_RUBY_IGNORE_TESTS=ruby2.0 ruby2.1 require-rubygems
> +#
> +# If you need to specify the .gemspec (eg there is more than one)
> +#export DH_RUBY_GEMSPEC=gem.gemspec
> +
> +%:
> + dh $@ --buildsystem=ruby --with ruby
> diff --git a/test/sample/documentation/debian/source/format b/test/sample/documentation/debian/source/format
> new file mode 100644
> index 0000000..163aaf8
> --- /dev/null
> +++ b/test/sample/documentation/debian/source/format
> @@ -0,0 +1 @@
> +3.0 (quilt)
> diff --git a/test/sample/documentation/debian/watch b/test/sample/documentation/debian/watch
> new file mode 100644
> index 0000000..08caa70
> --- /dev/null
> +++ b/test/sample/documentation/debian/watch
> @@ -0,0 +1,2 @@
> +version=3
> +http://pkg-ruby-extras.alioth.debian.org/cgi-bin/gemwatch/documentation .*/documentation-(.*).tar.gz
> diff --git a/test/sample/documentation/documentation.gemspec b/test/sample/documentation/documentation.gemspec
> new file mode 100644
> index 0000000..25dec1c
> --- /dev/null
> +++ b/test/sample/documentation/documentation.gemspec
> @@ -0,0 +1,17 @@
> +# -*- encoding: utf-8 -*-
> +$:.unshift 'lib'
> +require 'documentation/version'
> +
> +spec = Gem::Specification.new do |s|
> + s.name = "documentation"
> + s.version = Documentation::VERSION
> + s.author = "Debian Ruby Team"
> + s.email = "pkg-ruby-extras-maintainers@lists.alioth.debian.org"
> + s.homepage = "http://wiki.debian.org/Teams/Ruby"
> + s.platform = Gem::Platform::RUBY
> + s.summary = "Documentation test"
> + s.files = ["documentation.gemspec", "lib/documentation.rb",
> + "lib/documentation/version.rb"]
> + s.require_path = "lib"
> + s.description = "A simple test to check documentation generation."
> +end
> diff --git a/test/sample/documentation/lib/documentation.rb b/test/sample/documentation/lib/documentation.rb
> new file mode 100644
> index 0000000..569792f
> --- /dev/null
> +++ b/test/sample/documentation/lib/documentation.rb
> @@ -0,0 +1,3 @@
> +module Documentation
> + # Your code goes here
> +end
> diff --git a/test/sample/documentation/lib/documentation/version.rb b/test/sample/documentation/lib/documentation/version.rb
> new file mode 100644
> index 0000000..3f406d5
> --- /dev/null
> +++ b/test/sample/documentation/lib/documentation/version.rb
> @@ -0,0 +1,3 @@
> +module Documentation
> + VERSION = "0.0.1"
> +end
> diff --git a/test/unit/dh_make_ruby_test.rb b/test/unit/dh_make_ruby_test.rb
> index 688aeb6..ab9ddf6 100644
> --- a/test/unit/dh_make_ruby_test.rb
> +++ b/test/unit/dh_make_ruby_test.rb
> @@ -39,6 +39,10 @@ class DhMakeRubyTest < Gem2DebTestCase
> debian/compat
> debian/watch
> debian/source/format
> + debian/ruby-simplegem.dirs
> + debian/ruby-simplegem.doc-base
> + debian/ruby-simplegem.docs
> + debian/ruby-simplegem.links
> ].each do |file|
> filename = File.join(DEBIANIZED_SIMPLE_GEM, file)
> should "create #{file}" do
> @@ -92,6 +96,18 @@ class DhMakeRubyTest < Gem2DebTestCase
> should 'create debian/rules' do
> assert_file_exists File.join(TEST_SIMPLE_GIT, 'debian/rules')
> end
> + should 'create debian/ruby-simplegit.dirs' do
> + assert_file_exists File.join(TEST_SIMPLE_GIT, 'debian/ruby-simplegit.dirs')
> + end
> + should 'create debian/ruby-simplegit.doc-base' do
> + assert_file_exists File.join(TEST_SIMPLE_GIT, 'debian/ruby-simplegit.doc-base')
> + end
> + should 'create debian/ruby-simplegit.docs' do
> + assert_file_exists File.join(TEST_SIMPLE_GIT, 'debian/ruby-simplegit.docs')
> + end
> + should 'create debian/ruby-simplegit.links' do
> + assert_file_exists File.join(TEST_SIMPLE_GIT, 'debian/ruby-simplegit.links')
> + end
> end
>
> FANCY_PACKAGE_TARBALL = File.join(tmpdir, 'fancy-package-0.0.1.tar.gz')
> diff --git a/test/unit/metadata_test.rb b/test/unit/metadata_test.rb
> index cbc72f0..aeb1d63 100644
> --- a/test/unit/metadata_test.rb
> +++ b/test/unit/metadata_test.rb
> @@ -29,6 +29,12 @@ class MetaDataTest < Gem2DebTestCase
> setup do
> @metadata = Gem2Deb::Metadata.new('test/tmp')
> end
> + should 'have no author' do
> + assert_nil @metadata.author
> + end
> + should 'have no authors' do
> + assert_nil @metadata.authors
> + end
> should 'have no homepage' do
> assert_nil @metadata.homepage
> end
> @@ -74,6 +80,16 @@ class MetaDataTest < Gem2DebTestCase
> assert_equal '0.0.1', @metadata.version
> end
>
> + should 'obtain author from gemspec' do
> + @gemspec.stubs(:author).returns('Debian Ruby Team')
> + assert_equal 'Debian Ruby Team', @metadata.author
> + end
> +
> + should 'obtain authors from gemspec' do
> + @gemspec.stubs(:authors).returns(['Debian Ruby Team', 'Another Author'])
> + assert_equal ['Debian Ruby Team', 'Another Author'], @metadata.authors
> + end
> +
> should 'obtain homepage from gemspec' do
> @gemspec.stubs(:homepage).returns('http://www.debian.org/')
> assert_equal 'http://www.debian.org/', @metadata.homepage
> --
> 1.9.2
>
Reply to: