Skip to content

Commit

Permalink
doc: Further document development and release process
Browse files Browse the repository at this point in the history
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
  • Loading branch information
stewartsmith committed May 22, 2018
1 parent 3f0ddec commit ce2aab6
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 12 deletions.
6 changes: 1 addition & 5 deletions CONTRIBUTING.md
Expand Up @@ -9,13 +9,9 @@ the mailing list ( skiboot@lists.ozlabs.org - subscribe by
going to https://lists.ozlabs.org/listinfo/skiboot )

While we do use GitHub Issues, patches are accepted via the mailing list.
We use GitHub Issues and Pull Requests for tracking contributions. We
expect participants to adhere to the GitHub Community Guidelines (found
We expect participants to adhere to the GitHub Community Guidelines (found
at https://help.github.com/articles/github-community-guidelines/ ).

If you are unable or unwilling to use GitHub, we can accept contributions
via the mailing list.

All contributions should have a Developer Certificate of Origin (see below).

Development Environment
Expand Down
15 changes: 10 additions & 5 deletions doc/conf.py
Expand Up @@ -19,6 +19,7 @@
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('.'))
from recommonmark.parser import CommonMarkParser

# -- General configuration ------------------------------------------------

Expand All @@ -34,16 +35,20 @@ def setup(app):
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = []
extensions = ['sphinx.ext.intersphinx',
'sphinx.ext.githubpages']

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix of source filenames.
source_suffix = '.rst'
source_parsers = {
'.md': CommonMarkParser,
}

# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
source_suffix = ['.rst', '.md']

# The master toctree document.
master_doc = 'index'
Expand Down
14 changes: 12 additions & 2 deletions doc/index.rst
Expand Up @@ -16,20 +16,30 @@ Overview
overview
opal-spec

Development Process
===================

.. toctree::
:maxdepth: 2

process/dev-release-process
process/CONTRIBUTING.md
process/stable-skiboot-rules
process/versioning

Developer Guide and Internals
=============================

.. toctree::
:maxdepth: 2

CONTRIBUTING.md
console-log
error-logging
bmc
gcov
memory
nvlink
stable-skiboot-rules
versioning
pci
pci-slot
xscom-node-bindings
Expand Down
1 change: 1 addition & 0 deletions doc/process/CONTRIBUTING.md
110 changes: 110 additions & 0 deletions doc/process/dev-release-process.rst
@@ -0,0 +1,110 @@
.. _release-process:

Development and Release Process
===============================

Skiboot follows the release cycle of `op-build`, so that each new op-build
has a new stable skiboot. Currently, this means that we release once every
six weeks (or so). Our *goal* is to have roughly the first 4 weeks of a
6 week cycle open for merging new features, and reserving the final two
weeks for stabilisation efforts after the first -rcX release.

It is *strongly* preferred to have new features (especially new APIs and
device tree bindings) to come in *early* in the cycle.

Once the final release is cut, the :ref:`stable-rules` process takes over.

Our process has evolved, and will so into the future. It's inspired by the
Linux process, but not a slave to it. For example, there is currently not
the volume of patches to justify a next tree.

Here's how some of the recent (at time of writing) releases have gone:

============= =========
Date Release
============= =========
Oct 31st 2017 v5.9
Feb 6th 2018 v5.10-rc1
Feb 9th 2018 v5.10-rc2
Feb 15th 2018 v5.10-rc3
Feb 21st 2018 v5.10-rc4
Feb 23rd 2018 v5.10
Mar 28th 2018 v5.11-rc1
Apr 6th 2018 v5.11
============= =========

Lifecycle of a patch
--------------------

Roughly speaking, a patch has the following lifecycle:

- Design

It is best to do design work in the open, although sometimes this is hard
when upcoming unannounced hardware is involved. Often, it can be useful to
post an RFC design or patch to encourage discussion. This is especially
useful when designing new OPAL APs or device tree bindings. Never be afraid
to send a patch (or series of patches) as RFC (Request for Comment) with
whatever disclaimer you deem appropriate.

Once you have a design, sharing it is an important part of the process of
getting the applicable code upstream. Different perspectives are important
in coming to elegant solutions, as is having more than one person understand
the reasoning behind design decisions.
- Review and Test

Once you think your patch is a state suitable for merging, send it to the
mailing list for others to review and test. Using `git format-patch` and
`git send-email` is good practice to ensure your patches survive being sent
to the list. Ensure you have followed `CONTRIBUTING.md` and have your
Signed-off-by present on your patches (`git commit -s` will add this for you).

It is good practice to solicit review from an expert in the area of code
you're modifying. A reviewer will add their Reviewed-by or Acked-by tags as
replies, as will anybody testing it add Tested-by. The aim of reviewing and
testing code before we merge it is to limit any problems to the smallest
number of people possible, only merging code we are collectively confident
that will *improve* life for all users and developers.
- Merged to master

The maintainer as merged your patches to the development tree (the 'master'
git branch). Soon after this, many more people are going to be running your
code, so good review and testing helps ensure your inbox isn't flooded with
bug reports.

If your patch has also been sent to the stable tree, it's possible it also
gets merged there soonafter.
- Stable release

Once a stable release is made, it's likely that your code makes its way into
vendor's firmware releases via their test cycles.
- Bug fixes and maintenance

Bugs are a fact of life, sometimes in our own code, sometimes in others, and
sometimes in hardware. After your patch is accepted, being available for
input on possible bugs found and possible fixes is invaluable so that all
can ship high quality firmware.


On closed source branches and forks
-----------------------------------

Even though the license that skiboot is distributed under does *allow* you
to keep your changes private, we (the skiboot developers) cannot in any way
provide support on the resulting code base.

Additionally, the broader PowerPC Linux community has neither the capacity,
time, or resources to support Linux running on such closed source forks.
The kernel developers have said that patches to the kernel to support or
work around closed skiboot changes will *not* be accepted upstream.

If you keep your changes private, you are *entirely* on your own.

License
-------

Skiboot is licensed under the Apache 2.0 license (see the LICENSE file in the
source tree for the full text).

Portions (e.g. our libc, CCAN modules we use) are made available under a CC0, BSD,
or BSD-MIT license (see LICENSE files for specifics).
File renamed without changes.
File renamed without changes.
2 changes: 2 additions & 0 deletions doc/requirements.txt
@@ -0,0 +1,2 @@
sphinx
recommonmark

0 comments on commit ce2aab6

Please sign in to comment.