aboutsummaryrefslogtreecommitdiff
path: root/development.mdwn
blob: 3857b3a46f8635a0d5e31c2858cd063d347d5def (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
[[!meta title="Keyringer: development guidelines and workflow"]]

Index
-----

[[!toc levels=4]]

Development environment
-----------------------

The following steps needs to be run just once for each arch and distro version.

### Create the `debian/` structure

    if [ ! -d "debian" ]; then
      dh_make -p keyringer_0.1 --createorig
    fi

### Setup a sid pbuilder chroot

    DIST=sid git-pbuilder create

### Setup a sid cowbuilder chroot

    DIST=sid sudo cowbuilder --create

Environment maintenance
-----------------------

These steps should be run once in a while to ensure we have an up to date packaging environment.

### Pbuilder

    DIST=sid git-pbuilder update

### Cowbuilder

    DIST=sid sudo cowbuilder --update

Coding standards
----------------

  - Respect the existing coding style.

  - Be clear: easy audability must be one of keyringer's requirements.

Development workflow
--------------------

We use [git-flow](https://github.com/nvie/gitflow) for the development workflow.

Release workflow
----------------

Go to develop branch and start a new release

    git flow release start VERSION

Prepare the source code:

    $EDITOR keyringer # and update KEYRINGER_VERSION
    $EDITOR ChangeLog
    VERSION="`./keyringer | head -n 1 | cut -d ' ' -f 2`"

Create and upload a new release:

    make release

Update the debian branch:

    git checkout debian
    git-import-orig --upstream-vcs-tag=$VERSION ../tarballs/keyringer-$VERSION.tar.bz2
    dch -e # fine tune the changelog prepared by git-dch
    git commit -a -m "Updating debian/changelog"
    git-buildpackage --git-tag-only --git-sign-tags

Push everything:

    git push --tags

Build the package from the debian Git branch:

    git-buildpackage

Run lintian (or [add it to your pbuilder hooks](http://askubuntu.com/questions/140697/how-do-i-run-lintian-from-pbuilder-dist)):

    lintian --info --display-info --pedantic --color auto \
     ../build-area/keyringer_$VERSION*.changes

Notes:

* `git-import-orig` takes care of running `pristine-tar commit`, of merging of the tag and orig tarball into the upstream branch, and then it merges the result into the debian branch. With the above configuration, it also runs git-dch to do the bulk of the work in `debian/changelog`.
* To build a development package, checkout the debian branch, merge master, run `git-dch --auto --snapshot` and build. 

Adding or changing a subcommand
-------------------------------

When adding a new subcommand or changing subcommand behavior, ensure:

* Documentation is updated.
* Manpage is updated.
* Shell completions are updated.

Test environment
----------------

Setup:

    keyringer test init ~/code/tests/keyringer

Teardown:

    keyringer test teardown -y

Translation
-----------

Run just once:

    cd share/man
    po4a-gettextize -f text -m keyringer.1.mdwn -p keyringer.pot

References
----------

* [Using Git for Debian Packaging](http://www.eyrie.org/~eagle/notes/debian/git.html).
* [Building packages from the Git repository](http://honk.sigxcpu.org/projects/git-buildpackage/manual-html/gbp.building.html).
* [Cowbuilder](https://wiki.debian.org/cowbuilder).
* [git-pbuilder](https://wiki.debian.org/git-pbuilder).
* [PackagingWithGit - Debian Wiki](https://wiki.debian.org/PackagingWithGit).
* [Generating pristine tarballs from git repositories](http://joeyh.name/blog/entry/generating_pristine_tarballs_from_git_repositories/).
* [Debian Packaging](https://wiki.debian.org/Packaging).
* [Debian Upstream Guide](https://wiki.debian.org/UpstreamGuide).