summaryrefslogtreecommitdiff
path: root/docs/packaging/custom/leap.md
blob: cd657c95de618cb9e218c1aa8d1a21e5be7fa4e2 (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# 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