Example: packaging leap_cli and dependencies ============================================ Upstream: https://leap.se/code/issues/6503 Determine dependencies ---------------------- First, in a *fresh* vagrant box with *sid* and *testing* in the `sources.list`: sudo apt-get install rubygems gem2deb sudo gem install leap_cli Then we get the dependencies and build all packages: dependencies=" `gem list | cut -d '(' -f 1` " Which currently gives us the following result: * activemodel * activesupport * base32 * blockenspiel * builder * capistrano * colored * command_line_reporter * gli * gpgme * highline * i18n * json * json_pure * leap_cli * mini_portile * minitest * net-scp * net-sftp * net-ssh * net-ssh-gateway * paint * tee * thread_safe * tzinfo * versionomy * ya2yaml Gem cleanup: sudo gem uninstall $dependencies Check existing dependencies: for item in $dependencies; do package=ruby-"`echo $item | sed -e 's/_/-/'`" packages="$packages $package" done apt-get install --dry-run $packages Then: * Check for non-existing packages. * Try different package names. * Update your list of existing `$packages`. In this example we have the following `$already_ported` dependencies: * capistrano * ruby-activemodel * ruby-activesupport * ruby-blockenspiel * ruby-builder * ruby-colored * ruby-gpgme * ruby-highline * ruby-i18n * ruby-json * ruby-minitest * ruby-net-scp * ruby-net-sftp * ruby-net-ssh * ruby-net-ssh-gateway * ruby-paint * ruby-thread-safe * ruby-tzinfo * ruby-versionomy That means the following `$gems` needs to be packaged: * base32 * command_line_reporter * gli * json_pure (we can just use ruby-json and ignore this dependency) * leap_cli * mini_portile * tee * ya2yaml In summary, we need to port the following `$new_packages`: * ruby-base32 * ruby-command-line-reporter * ruby-gli * ruby-mini-portile * ruby-tee * ruby-ya2yaml * ruby-leap-cli Build remaining packages ------------------------ for gem in $gems; do gem2deb $gem done Getting the source for the existing packages -------------------------------------------- for package in $already_ported; do apt-get -t jessie source --download-only $package dpkg-source -x $package*dsc done Next steps ---------- * Fix `debian/control` and other `FIXME` on each package. * Put `debian/` folder in a `debian` branch on each source. * Fix [tests](https://wiki.debian.org/Teams/Ruby/Packaging/Tests). * [Other best practices](https://wiki.debian.org/Teams/Ruby/RubyExtras/UpstreamDevelopers). * [Review the code](https://manual.sarava.org/specs/code/). * Automate building with pbuilder for `sid`. * Fix lintian warnings. * Upstream pull requests. * Backport everything to `wheezy`. Per-package tasks ----------------- * ruby-faker: * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765124 * https://github.com/rails/rails/issues/13164 * ruby-leap-cli: * net-ssh compatibility: * https://github.com/net-ssh/net-ssh/issues/145 * https://github.com/capistrano/capistrano/issues/927 * workflow: git checkout develop git archive --prefix=leap-cli-1.5.6/ --format=tar HEAD | bzip2 > ../tarballs/leap-cli-1.5.6.tar.bz2 git checkout debian git-buildpackage --git-ignore-branch