# Release procedure

**This page is WIP. The following procedure is not yet approved for use**

# Trunk

Meson operates under the principle that trunk should (in theory) be
always good enough for release. That is, all code merged in trunk must
pass all unit tests. Any broken code should either be fixed or
reverted immediately.

People who are willing to tolerate the occasional glitch should be
able to use Meson trunk for their day to day development if they so
choose.

# Major releases

Major releases are currently in the form 0.X.0, where X is an
increasing number. We aim to do a major release roughly once a month,
though the schedule is not set in stone.

Before a major release is made a stable branch will be made, and
0.X.0-rc1 release candidate will be made. A new milestone for 0.X.0
will be made, and all bugs effecting the RC will be assigned to this
milestone. Patches fixing bugs in the milestone will be picked to the
stable branch, and normal development will continue on the master
branch. Every week after after this a new release candidate will be
made until all bugs are resolved in that milestone. When all of the
bugs are fixed the 0.X.0 release will be made.

# Bugfix releases

Bugfix releases contain only minor fixes to major releases and are
designated by incrementing the last digit of the version number. The
criteria for a bug fix release is one of the following:

 - release has a major regression compared to the previous release (making
   existing projects unbuildable)
 - the release has a serious bug causing data loss or equivalent
 - other unforeseen major issue

In these cases a bug fix release can be made. It shall contain _only_
the fix for the issue (or issues) in question and other minor bug
fixes. Only changes that have already landed in trunk will be
considered for inclusion. No new functionality shall be added.

# Requesting a bug fix release

The process for requesting that a bug fix release be made goes roughly
as follows:

 - file a bug about the core issue
 - file a patch fixing it if possible
 - contact the development team and request a bug fix release (IRC is the
   preferred contact medium)

The request should contain the following information:

 - the issue in question
 - whether it has already caused problems for real projects
 - an estimate of how many people and projects will be affected

There is no need to write a long and complicated request report.
Something like the following is sufficient:

> The latest release has a regression where trying to do Foo using Bar
breaks. This breaks all projects that use both, which includes at
least [list of affected projects]. This causes problems for X amount
of people and because of this we should do a bugfix release.
