Debian Packaging
================

We use git-buildpackage for packaging. Our repository can be found at
git.debian.org:/git/collab-maint/nginx.git.

Workflow for Unstable
=====================

We use the standard git-buildpackage workflow.

Dynamic Modules
===============

Since v1.9.11 Nginx added dynamic module support. This will sanitize the
nginx packaging flow in the long term, but there is a lot work to be done
in order to get there. We will gradually convert all modules to dynamic
as they add support for it.

Currently nginx modules need to be build together with nginx, but this
will be fixed upstream [0]. Since we already ship 3rd party modules under
debian/modules/ we will start shipping module packages (libnginx-mod) from
the same source. Once upstream implements separated building we will
split each module to a separate source.

[0] https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/

Workflow for Experimental
=========================

Nginx mainline releases (1.11.x series) are been packaged for experimental,
as they lack security support.

The workflow we use is based on the assumption that packaging work happens on
origin/master and experimental builds are a trivial patch away from that.

The direct consequense of treating experimental as a patchset for origin/master
is that the relevant branches are forced-pushed whenever we release a new
1.11.x version. In other words, **it is not safe to base your work on the
experimental branch**.

This is a brief description of our experimental branches and how we are using
them.

* experimental-base
  Force-pushed when origin/master changes.

  experimental-base tracks the changes needed for building the 1.11.x branch,
  such as new configure parameters, etc. On new 1.11.x releases, it is rebased
  on origin/master so it is always up-to-date with our latest packaging work.

* experimental
  Force-pushed on every 1.11.x release.

  This branch points to the latest 1.11.x release.
  Before release this branch is reset to experimental-base, and then merged
  with the new upstream-1.11 branch. Finally all the release specific changes
  are commited (changelog entry etc) and the build is made.

* upstream-1.11
  Pushed on every 1.11.x release.

  Before a new 1.11.x release origin/upstream is dummy merged (-s ours) into
  ustream-1.11.  This is a technicallity so we can avoid resolving conflicts
  when a new 1.10.x release happens between two experimental releases.

Older 1.11.x releases are not referenced by any branch, but they can be found
by the relevant debian/* tag.

3rd party experimental workflow
===============================

As we described, it is better not base you work on our forced-pushed
experimental branch. A better approach would be to maintain a custom-build
branch that is rebased to our latest experimental branch (basically git rebase
--onto the relevant commits should work).

