]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
doc: show edit on github links and version warnings
authorNoah Watkins <noahwatkins@gmail.com>
Mon, 1 Oct 2018 23:54:19 +0000 (16:54 -0700)
committerNoah Watkins <nwatkins@redhat.com>
Fri, 2 Nov 2018 21:49:15 +0000 (14:49 -0700)
Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
admin/build-doc
admin/doc-requirements.txt
doc/README.md [new file with mode: 0644]
doc/_ext/ceph_releases.py [new file with mode: 0644]
doc/_ext/edit_on_github.py [new file with mode: 0644]
doc/_static/js/ceph.js [new file with mode: 0644]
doc/_templates/page.html [new file with mode: 0644]
doc/conf.py
doc/releases/releases.yml [new file with mode: 0644]
doc/releases/schedule.rst

index c8934b4daf789e6fd8e1fdd8b4ac48cb3415c35e..6e94d459d3f5d265ca8c24fa04b4c52b99093078 100755 (executable)
@@ -124,6 +124,24 @@ for target in $sphinx_targets; do
 
 done
 
+# build the releases.json. this reads in the yaml version and dumps
+# out the json representation of the same file. the resulting releases.json
+# should be served from the root of hosted site.
+$vdir/bin/python << EOF > $TOPDIR/build-doc/output/html/releases.json
+from __future__ import print_function
+import datetime
+import json
+import yaml
+
+def json_serialize(obj):
+    if isinstance(obj, datetime.date):
+        return obj.isoformat()
+
+with open("$TOPDIR/doc/releases/releases.yml", 'r') as fp:
+    releases = yaml.load(fp)
+    print(json.dumps(releases, indent=2, default=json_serialize))
+EOF
+
 #
 # Build and install JavaDocs
 #
index e79a973f8908b1bc3cf34fce70e6cd3794d225f6..25c628aed98dc74a25469c57bf52602fccb819ea 100644 (file)
@@ -1,3 +1,4 @@
 Sphinx == 1.6.3
 git+https://github.com/ceph/sphinx-ditaa.git@py3#egg=sphinx-ditaa
 git+https://github.com/michaeljones/breathe#egg=breathe
+pyyaml==3.13
diff --git a/doc/README.md b/doc/README.md
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/doc/_ext/ceph_releases.py b/doc/_ext/ceph_releases.py
new file mode 100644 (file)
index 0000000..acaa38f
--- /dev/null
@@ -0,0 +1,202 @@
+# cobbled together from:
+#   https://github.com/sphinx-contrib/documentedlist/blob/master/sphinxcontrib/documentedlist.py
+#   https://github.com/sphinx-doc/sphinx/blob/v1.6.3/sphinx/ext/graphviz.py
+#   https://github.com/thewtex/sphinx-contrib/blob/master/exceltable/sphinxcontrib/exceltable.py
+#   https://bitbucket.org/prometheus/sphinxcontrib-htsql/src/331a542c29a102eec9f8cba44797e53a49de2a49/sphinxcontrib/htsql.py?at=default&fileviewer=file-view-default
+# into the glory that follows:
+import json
+import six
+import yaml
+import sphinx
+import datetime
+from docutils.parsers.rst import Directive
+from docutils import nodes
+from sphinx.util import logging
+
+class CephReleases(Directive):
+    has_content = False
+    required_arguments = 1
+    optional_arguments = 0
+    option_spec = {}
+
+    def run(self):
+        filename = self.arguments[0]
+        document = self.state.document
+        env = document.settings.env
+        rel_filename, filename = env.relfn2path(filename)
+        env.note_dependency(filename)
+        try:
+            with open(filename, 'r') as fp:
+                releases = yaml.load(fp)
+                releases = releases["releases"]
+        except Exception as e:
+            return [document.reporter.warning(
+                "Failed to open Ceph releases file {}: {}".format(filename, e),
+                line=self.lineno)]
+
+        table = nodes.table()
+        tgroup = nodes.tgroup(cols=3)
+        table += tgroup
+
+        tgroup.extend(
+            nodes.colspec(colwidth=30, colname='c'+str(idx))
+            for idx, _ in enumerate(range(4)))
+
+        thead = nodes.thead()
+        tgroup += thead
+        row_node = nodes.row()
+        thead += row_node
+        row_node.extend(nodes.entry(h, nodes.paragraph(text=h))
+            for h in ["Version", "Initial release", "Latest", "End of life (estimated)"])
+
+        releases = six.iteritems(releases)
+        releases = sorted(releases, key=lambda t: t[0], reverse=True)
+
+        tbody = nodes.tbody()
+        tgroup += tbody
+
+        rows = []
+        for code_name, info in releases:
+            actual_eol = info.get("actual_eol", None)
+            if actual_eol and actual_eol <= datetime.datetime.now().date():
+                continue
+            trow = nodes.row()
+
+            entry = nodes.entry()
+            para = nodes.paragraph(text="`{}`_".format(code_name))
+            sphinx.util.nodes.nested_parse_with_titles(
+                    self.state, para, entry)
+            #entry += para
+            trow += entry
+
+            sorted_releases = sorted(info["releases"],
+                    key=lambda t: t["released"])
+            oldest_release = sorted_releases[0]
+            newest_release = sorted_releases[-1]
+
+            entry = nodes.entry()
+            para = nodes.paragraph(text="{}".format(
+                oldest_release["released"].strftime("%b %Y")))
+            entry += para
+            trow += entry
+
+            entry = nodes.entry()
+            if newest_release.get("skip_ref", False):
+                para = nodes.paragraph(text="{}".format(
+                    newest_release["version"]))
+            else:
+                para = nodes.paragraph(text="`{}`_".format(
+                    newest_release["version"]))
+            sphinx.util.nodes.nested_parse_with_titles(
+                    self.state, para, entry)
+            #entry += para
+            trow += entry
+
+            entry = nodes.entry()
+            para = nodes.paragraph(text="{}".format(
+                info.get("target_eol", "--")))
+            entry += para
+            trow += entry
+
+            rows.append(trow)
+
+        tbody.extend(rows)
+
+        return [table]
+
+class CephTimeline(Directive):
+    has_content = False
+    required_arguments = 12
+    optional_arguments = 0
+    option_spec = {}
+
+    def run(self):
+        filename = self.arguments[0]
+        document = self.state.document
+        env = document.settings.env
+        rel_filename, filename = env.relfn2path(filename)
+        env.note_dependency(filename)
+        try:
+            with open(filename, 'r') as fp:
+                releases = yaml.load(fp)
+        except Exception as e:
+            return [document.reporter.warning(
+                "Failed to open Ceph releases file {}: {}".format(filename, e),
+                line=self.lineno)]
+
+        display_releases = self.arguments[1:]
+
+        timeline = []
+        for code_name, info in six.iteritems(releases["releases"]):
+            if code_name in display_releases:
+                for release in info.get("releases", []):
+                    released = release["released"]
+                    timeline.append((released, code_name, release["version"],
+                        release.get("skip_ref", False)))
+
+        assert "development" not in releases["releases"]
+        if "development" in display_releases:
+            for release in releases["development"]["releases"]:
+                released = release["released"]
+                timeline.append((released, "development", release["version"],
+                    release.get("skip_ref", False)))
+
+        timeline = sorted(timeline, key=lambda t: t[0], reverse=True)
+
+        table = nodes.table()
+        tgroup = nodes.tgroup(cols=3)
+        table += tgroup
+
+        columns = ["Date"] + display_releases
+        tgroup.extend(
+            nodes.colspec(colwidth=30, colname='c'+str(idx))
+            for idx, _ in enumerate(range(len(columns))))
+
+        thead = nodes.thead()
+        tgroup += thead
+        row_node = nodes.row()
+        thead += row_node
+        for col in columns:
+            entry = nodes.entry()
+            if col.lower() in ["date", "development"]:
+                para = nodes.paragraph(text=col)
+            else:
+                para = nodes.paragraph(text="`{}`_".format(col))
+            sphinx.util.nodes.nested_parse_with_titles(
+                    self.state, para, entry)
+            row_node += entry
+
+        tbody = nodes.tbody()
+        tgroup += tbody
+
+        rows = []
+        for row_info in timeline:
+            trow = nodes.row()
+
+            entry = nodes.entry()
+            para = nodes.paragraph(text=row_info[0].strftime("%b %Y"))
+            entry += para
+            trow += entry
+
+            for release in display_releases:
+                entry = nodes.entry()
+                if row_info[1] == release:
+                    if row_info[3]: # if skip ref
+                        para = nodes.paragraph(text=row_info[2])
+                    else:
+                        para = nodes.paragraph(text="`{}`_".format(row_info[2]))
+                    sphinx.util.nodes.nested_parse_with_titles(
+                            self.state, para, entry)
+                else:
+                    para = nodes.paragraph(text="--")
+                    entry += para
+                trow += entry
+            rows.append(trow)
+
+        tbody.extend(rows)
+
+        return [table]
+
+def setup(app):
+    app.add_directive('ceph_releases', CephReleases)
+    app.add_directive('ceph_timeline', CephTimeline)
diff --git a/doc/_ext/edit_on_github.py b/doc/_ext/edit_on_github.py
new file mode 100644 (file)
index 0000000..290f4b4
--- /dev/null
@@ -0,0 +1,43 @@
+"""
+Adapted from https://gist.github.com/mgedmin/6052926
+
+Sphinx extension to add ReadTheDocs-style "Edit on GitHub" links to the
+sidebar.
+
+Loosely based on https://github.com/astropy/astropy/pull/347
+"""
+
+import os
+import warnings
+
+
+__licence__ = 'BSD (3 clause)'
+
+
+def get_github_url(app, view, path):
+    return 'https://github.com/{project}/{view}/{branch}/doc/{path}'.format(
+        project=app.config.edit_on_github_project,
+        view=view,
+        branch=app.config.edit_on_github_branch,
+        path=path)
+
+
+def html_page_context(app, pagename, templatename, context, doctree):
+    if templatename != 'page.html':
+        return
+
+    if not app.config.edit_on_github_project:
+        warnings.warn("edit_on_github_project not specified")
+        return
+
+    path = os.path.relpath(doctree.get('source'), app.builder.srcdir)
+    show_url = get_github_url(app, 'blob', path)
+    edit_url = get_github_url(app, 'edit', path)
+
+    context['show_on_github_url'] = show_url
+    context['edit_on_github_url'] = edit_url
+
+def setup(app):
+    app.add_config_value('edit_on_github_project', '', True)
+    app.add_config_value('edit_on_github_branch', 'master', True)
+    app.connect('html-page-context', html_page_context)
diff --git a/doc/_static/js/ceph.js b/doc/_static/js/ceph.js
new file mode 100644 (file)
index 0000000..61f95fb
--- /dev/null
@@ -0,0 +1,41 @@
+$(function() {
+  var releases_url = "http://docs.ceph.com/docs/master/releases.json";
+
+  function show_edit(branch, data) {
+    if (branch) {
+      if (branch === "master") {
+        $("#dev-warning").show();
+        return true;
+      }
+      if (data && data.releases && branch in data.releases) {
+        var eol = ("actual_eol" in data.releases[branch]);
+        if (eol) {
+          $("#eol-warning").show();
+        }
+        return !eol;
+      }
+    }
+    $("#dev-warning").show();
+    return false;
+  }
+
+  function get_branch() {
+    var url = window.location.href;
+    var res = url.match(/docs.ceph.com\/docs\/([a-z]+)\/?/i)
+    if (res) {
+      return res[1]
+    }
+    return null;
+  }
+
+  $.getJSON(releases_url, function(data) {
+    var branch = get_branch();
+    if (show_edit(branch, data)) {
+      // patch the edit-on-github URL for correct branch
+      var url = $("#edit-on-github").attr("href");
+      url = url.replace("master", branch);
+      $("#edit-on-github").attr("href", url);
+      $("#docubetter").show();
+    }
+  });
+});
diff --git a/doc/_templates/page.html b/doc/_templates/page.html
new file mode 100644 (file)
index 0000000..29cc57f
--- /dev/null
@@ -0,0 +1,21 @@
+{% extends "!page.html" %}
+{% block body %}
+
+<div id="dev-warning" class="admonition note" style="display:none;">
+  <p class="first admonition-title">Notice</p>
+  <p class="last">This document is for a development version of Ceph.</p>
+</div>
+
+<div id="eol-warning" class="admonition warning" style="display:none;">
+  <p class="first admonition-title">Warning</p>
+  <p class="last">This document is for an unsupported version of Ceph.</p>
+</div>
+
+{%- if edit_on_github_url %}
+  <div id="docubetter" align="right" style="display:none; padding: 15px; font-weight: bold;">
+    <a id="edit-on-github" href="{{ edit_on_github_url }}" rel="nofollow">{{ _('Edit on GitHub')}}</a>
+  </div>
+{%- endif %}
+
+  {{ super() }}
+{% endblock %}
index d684db02bda8c720fb658db31770b08b6ad14798..45c4604d1b111f64c1c191cabed95bf767190e31 100644 (file)
@@ -37,16 +37,21 @@ html_title = "Ceph Documentation"
 html_logo = 'logo.png'
 html_favicon = 'favicon.ico'
 html_show_sphinx = False
+html_static_path = ["_static"]
 html_sidebars = {
     '**': ['smarttoc.html', 'searchbox.html'],
     }
 
+sys.path.insert(0, os.path.abspath('_ext'))
+
 extensions = [
     'sphinx.ext.autodoc',
     'sphinx.ext.graphviz',
     'sphinx.ext.todo',
     'sphinxcontrib.ditaa',
     'breathe',
+    'edit_on_github',
+    'ceph_releases',
     ]
 ditaa = 'ditaa'
 todo_include_todos = True
@@ -68,6 +73,16 @@ breathe_projects_source = {
 }
 breathe_domain_by_extension = {'py': 'py', 'c': 'c', 'h': 'c', 'cc': 'cxx', 'hpp': 'cxx'}
 
+# the docs are rendered with github links pointing to master. the javascript
+# snippet in _static/ceph.js rewrites the edit links when a page is loaded, to
+# point to the correct branch.
+edit_on_github_project = 'ceph/ceph'
+edit_on_github_branch = 'master'
+
+# handles edit-on-github and old version warning display
+def setup(app):
+    app.add_javascript('js/ceph.js')
+
 # mocking ceph_module offered by ceph-mgr. `ceph_module` is required by
 # mgr.mgr_module
 class Dummy(object):
diff --git a/doc/releases/releases.yml b/doc/releases/releases.yml
new file mode 100644 (file)
index 0000000..b0d658a
--- /dev/null
@@ -0,0 +1,325 @@
+#
+# there are two sections
+#
+# releases: ... for named releases
+# developement: ... for dev releases
+#
+# by default a `version` is interpreted as a sphinx reference when rendered (see
+# schedule.rst for the existing tags such as `_13.2.2`). If a version should not
+# be treated as a reference, add `skip_ref: True` as a key/value pair sibling to
+# the `version` key.
+#
+# If a version might represent an actual number (e.g. 0.80) quote it.
+#
+releases:
+  mimic:
+    releases:
+      - version: 13.2.2
+        released: 2018-09-01
+      - version: 13.2.1
+        released: 2018-07-01
+      - version: 13.2.0
+        released: 2018-06-01
+  
+  luminous:
+    releases:
+      - version: 12.2.8
+        released: 2018-09-01
+      - version: 12.2.7
+        released: 2018-07-01
+      - version: 12.2.6
+        released: 2018-07-01
+      - version: 12.2.5
+        released: 2018-04-01
+      - version: 12.2.4
+        released: 2018-02-01
+      - version: 12.2.3
+        released: 2018-02-01
+      - version: 12.2.2
+        released: 2017-12-01
+      - version: 12.2.1
+        released: 2017-09-01
+      - version: 12.2.0
+        released: 2017-08-01
+  
+  kraken:
+    target_eol: 2017-08-01
+    actual_eol: 2017-08-01
+    releases:
+      - version: 11.2.1
+        released: 2017-08-01
+      - version: 11.2.0
+        released: 2017-01-01
+
+  jewel:
+    target_eol: 2018-06-01
+    actual_eol: 2018-07-01
+    releases:
+      - version: 10.2.11
+        released: 2018-07-11
+      - version: 10.2.10
+        released: 2017-10-01
+      - version: 10.2.9
+        released: 2017-07-01
+      - version: 10.2.8
+        released: 2017-07-01
+      - version: 10.2.7
+        released: 2017-04-01
+      - version: 10.2.6
+        released: 2017-03-01
+      - version: 10.2.5
+        released: 2016-12-01
+      - version: 10.2.4
+        released: 2016-12-01
+      - version: 10.2.3
+        released: 2016-09-01
+      - version: 10.2.2
+        released: 2016-06-01
+      - version: 10.2.1
+        released: 2016-05-01
+      - version: 10.2.0
+        released: 2016-04-01
+
+  infernalis:
+    actual_eol: 2016-04-01
+    releases:
+      - version: 9.2.1
+        released: 2016-02-01
+      - version: 9.2.0
+        released: 2015-11-01
+
+  hammer:
+    target_eol: 2017-05-01
+    actual_eol: 2017-08-01
+    releases:
+      - version: 0.94.10
+        released: 2017-02-01
+      - version: 0.94.9
+        released: 2016-08-01
+      - version: 0.94.8
+        released: 2016-08-01
+      - version: 0.94.7
+        released: 2016-05-01
+      - version: 0.94.6
+        released: 2016-02-01
+      - version: 0.94.5
+        released: 2015-10-01
+      - version: 0.94.4
+        released: 2015-10-01
+      - version: 0.94.3
+        released: 2015-08-01
+      - version: 0.94.2
+        released: 2015-06-01
+      - version: 0.94.1
+        released: 2015-04-01
+      - version: '0.94'
+        released: 2015-04-01
+
+  giant:
+    actual_eol: 2015-04-01
+    releases:
+      - version: 0.87.2
+        released: 2015-04-01
+      - version: 0.87.1
+        released: 2015-02-01
+      - version: '0.87'
+        released: 2014-10-01
+
+  firefly:
+    target_eol: 2016-01-01
+    actual_eol: 2016-04-01
+    releases:
+      - version: 0.80.11
+        released: 2015-11-01
+      - version: 0.80.10
+        released: 2015-07-01
+      - version: 0.80.9
+        released: 2015-03-01
+      - version: 0.80.8
+        released: 2015-01-01
+      - version: 0.80.7
+        released: 2014-10-01
+      - version: 0.80.6
+        released: 2014-10-01
+      - version: 0.80.5
+        released: 2014-07-01
+      - version: 0.80.4
+        released: 2014-07-01
+      - version: 0.80.3
+        released: 2014-07-01
+      - version: 0.80.2
+        released: 2014-07-01
+      - version: 0.80.1
+        released: 2014-05-01
+      - version: '0.80'
+        released: 2014-05-01
+
+  emperor:
+    actual_eol: 2014-05-01
+    releases:
+      - version: 0.72.2
+        released: 2013-12-01
+      - version: 0.72.1
+        released: 2013-11-01
+      - version: '0.72'
+        released: 2013-11-01
+
+  dumpling:
+    target_eol: 2015-03-01
+    actual_eol: 2015-05-01
+    releases:
+      - version: 0.67.11
+        released: 2014-09-01
+      - version: 0.67.10
+        released: 2014-08-01
+      - version: 0.67.9
+        released: 2014-05-01
+      - version: 0.67.8
+        released: 2014-05-01
+      - version: 0.67.7
+        released: 2014-02-01
+      - version: 0.67.6
+        released: 2014-02-01
+      - version: 0.67.5
+        released: 2013-12-01
+      - version: 0.67.4
+        released: 2013-10-01
+      - version: 0.67.3
+        released: 2013-09-01
+      - version: 0.67.2
+        released: 2013-08-01
+      - version: 0.67.1
+        released: 2013-08-01
+      - version: '0.67'
+        released: 2013-08-01
+
+development:
+  releases:
+    - version: 13.1.0
+      released: 2018-05-01
+      skip_ref: true
+    - version: 13.0.2
+      released: 2018-04-01
+      skip_ref: true
+    - version: 13.0.1
+      released: 2018-02-01
+      skip_ref: true
+    - version: 13.0.0
+      released: 2017-08-01
+      skip_ref: true
+    - version: 12.1.4
+      released: 2017-08-01
+      skip_ref: true
+    - version: 12.1.3
+      released: 2017-08-01
+      skip_ref: true
+    - version: 12.1.2
+      released: 2017-08-01
+      skip_ref: true
+    - version: 12.1.1
+      released: 2017-07-01
+      skip_ref: true
+    - version: 12.1.0
+      released: 2017-06-01
+      skip_ref: true
+    - version: 12.0.3
+      released: 2017-05-01
+      skip_ref: true
+    - version: 12.0.2
+      released: 2017-04-01
+      skip_ref: true
+    - version: 12.0.1
+      released: 2017-03-01
+      skip_ref: true
+    - version: 12.0.0
+      released: 2017-02-01
+      skip_ref: true
+    - version: 11.1.1
+      released: 2017-01-01
+      skip_ref: true
+    - version: 11.1.0
+      released: 2016-12-01
+      skip_ref: true
+    - version: 11.0.2
+      released: 2016-10-01
+    - version: 11.0.1
+      released: 2016-10-01
+      skip_ref: true
+    - version: 11.0.0
+      released: 2016-06-01
+      skip_ref: true
+    - version: 10.1.2
+      released: 2016-04-01
+    - version: 10.1.1
+      released: 2016-04-01
+    - version: 10.1.0
+      released: 2016-03-01
+    - version: 10.0.5
+      released: 2016-03-01
+    - version: 10.0.4
+      released: 2016-03-01
+      skip_ref: true
+    - version: 10.0.3
+      released: 2016-02-01
+    - version: 10.0.2
+      released: 2016-01-01
+    - version: 10.0.1
+      released: 2015-12-01
+    - version: 10.0.0
+      released: 2015-11-01
+    - version: 9.1.0
+      released: 2015-10-01
+    - version: 9.0.3
+      released: 2015-08-01
+    - version: 9.0.2
+      released: 2015-07-01
+    - version: 9.0.1
+      released: 2015-06-01
+    - version: 9.0.0
+      released: 2015-05-01
+    - version: '0.93'
+      released: 2015-02-01
+    - version: '0.92'
+      released: 2015-02-01
+    - version: '0.91'
+      released: 2015-01-01
+    - version: '0.90'
+      released: 2014-12-01
+    - version: '0.89'
+      released: 2014-12-01
+    - version: '0.88'
+      released: 2014-11-01
+    - version: '0.86'
+      released: 2014-10-01
+    - version: '0.85'
+      released: 2014-09-01
+    - version: '0.84'
+      released: 2014-08-01
+    - version: '0.83'
+      released: 2014-07-01
+    - version: '0.82'
+      released: 2014-06-01
+    - version: '0.81'
+      released: 2014-06-01
+    - version: '0.79'
+      released: 2014-04-01
+    - version: '0.78'
+      released: 2014-03-01
+    - version: '0.77'
+      released: 2014-02-01
+    - version: '0.76'
+      released: 2014-01-01
+    - version: '0.75'
+      released: 2014-01-01
+    - version: '0.74'
+      released: 2013-12-01
+    - version: '0.73'
+      released: 2013-12-01
+    - version: '0.71'
+      released: 2013-10-01
+    - version: '0.70'
+      released: 2013-10-01
+    - version: '0.69'
+      released: 2013-09-01
+    - version: '0.68'
+      released: 2013-09-01
index a1a4bf82417142d2e3e7e73ba4f526184c4a928a..ac141a9cf7d92de69ddc1dd065b525a16e57ae05 100644 (file)
 Ceph Releases
 =============
 
+Current
+-------
+
+.. ceph_releases:: releases.yml
+
 Timeline
 --------
 
-+----------------------+----------+-------------+-----------+----------+---------------+-----------+----------+------------+------------+-------------+
-|                      | `Mimic`_ | `Luminous`_ | `Kraken`_ | `Jewel`_ | `Infernalis`_ | `Hammer`_ | `Giant`_ | `Firefly`_ | `Emperor`_ | `Dumpling`_ |
-|                      |          |             | EOL       | EOL      | EOL           | EOL       | EOL      | EOL        | EOL        | EOL         |
-+----------------------+----------+-------------+-----------+----------+---------------+-----------+----------+------------+------------+-------------+
-| First release        | June     | August      | January   | April    | November      | April     | October  | May        | November   | August      |
-|                      | 2018     | 2017        | 2017      | 2016     | 2015          | 2015      | 2014     | 2014       | 2013       | 2013        |
-+----------------------+----------+-------------+-----------+----------+---------------+-----------+----------+------------+------------+-------------+
-| Estimated retirement |          |             | August    | June     |               | May       |          | January    |            | March       |
-|                      |          |             | 2017      | 2018     |               | 2017      |          | 2016       |            | 2015        |
-+----------------------+----------+-------------+-----------+----------+---------------+-----------+----------+------------+------------+-------------+
-| Actual retirement    |          |             | August    | July     | April 2016    | August    | April    | April      | May        | May         |
-|                      |          |             | 2017      | 2018     |               | 2017      | 2015     | 2016       | 2014       | 2015        |
-+----------------------+----------+-------------+-----------+----------+---------------+-----------+----------+------------+------------+-------------+
-
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | Development | `Mimic`_  | `Luminous`_ | `Kraken`_ | `Jewel`_   | `Infernalis`_ | `Hammer`_ | `Giant`_   | `Firefly`_ | `Emperor`_ | `Dumpling`_ |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| September 2018 |             | `13.2.2`_ | `12.2.8`_   |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| July 2018      |             | `13.2.1`_ | `12.2.6`_   |           | `10.2.11`_ |               |           |            |            |            |             |
-|                |             |           | `12.2.7`_   |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| June 2018      |             | `13.2.0`_ |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| May 2018       | 13.1.0      |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| April 2018     | 13.0.2      |           | `12.2.5`_   |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| February 2018  | 13.0.1      |           | `12.2.3`_   |           |            |               |           |            |            |            |             |
-|                |             |           | `12.2.4`_   |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| December 2017  |             |           | `12.2.2`_   |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| October 2017   |             |           |             |           | `10.2.10`_ |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| September 2017 |             |           | `12.2.1`_   |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| August    2017 | 13.0.0      |           | `12.2.0`_   | `11.2.1`_ |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | 12.1.4      |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | 12.1.3      |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | 12.1.2      |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| July      2017 | 12.1.1      |           |             |           | `10.2.9`_  |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           | `10.2.8`_  |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| June      2017 | 12.1.0      |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| May       2017 | 12.0.3      |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| April     2017 | 12.0.2      |           |             |           | `10.2.7`_  |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| March     2017 | 12.0.1      |           |             |           | `10.2.6`_  |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| February  2017 | 12.0.0      |           |             |           |            |               |`0.94.10`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| January   2017 | 11.1.1      |           |             | `11.2.0`_ |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| December  2016 | 11.1.0      |           |             |           | `10.2.5`_  |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           | `10.2.4`_  |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| October   2016 | `11.0.2`_   |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | 11.0.1      |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| September 2016 |             |           |             |           | `10.2.3`_  |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| August    2016 |             |           |             |           |            |               | `0.94.9`_ |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               | `0.94.8`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| June      2016 | 11.0.0      |           |             |           | `10.2.2`_  |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| May       2016 |             |           |             |           | `10.2.1`_  |               | `0.94.7`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| April     2016 | `10.1.2`_   |           |             |           | `10.2.0`_  |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `10.1.1`_   |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| March     2016 | `10.1.0`_   |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `10.0.5`_   |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| February  2016 | `10.0.3`_   |           |             |           |            | `9.2.1`_      | `0.94.6`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| January   2016 | `10.0.2`_   |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| December  2015 | `10.0.1`_   |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| November  2015 | `10.0.0`_   |           |             |           |            | `9.2.0`_      |           |            | `0.80.11`_ |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| October   2015 | `9.1.0`_    |           |             |           |            |               | `0.94.5`_ |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               | `0.94.4`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| August    2015 | `9.0.3`_    |           |             |           |            |               | `0.94.3`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| July      2015 | `9.0.2`_    |           |             |           |            |               |           |            | `0.80.10`_ |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| June      2015 | `9.0.1`_    |           |             |           |            |               | `0.94.2`_ |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| May       2015 | `9.0.0`_    |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| April     2015 |             |           |             |           |            |               | `0.94.1`_ | `0.87.2`_  |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               | `0.94`_   |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| March     2015 |             |           |             |           |            |               |           |            | `0.80.9`_  |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| February  2015 | `0.93`_     |           |             |           |            |               |           | `0.87.1`_  |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.92`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| January   2015 | `0.91`_     |           |             |           |            |               |           |            | `0.80.8`_  |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| December  2014 | `0.90`_     |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.89`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| November  2014 | `0.88`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| October   2014 | `0.86`_     |           |             |           |            |               |           | `0.87`_    | `0.80.7`_  |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            | `0.80.6`_  |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| September 2014 | `0.85`_     |           |             |           |            |               |           |            |            |            | `0.67.11`_  |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| August    2014 | `0.84`_     |           |             |           |            |               |           |            |            |            | `0.67.10`_  |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| July      2014 | `0.83`_     |           |             |           |            |               |           |            | `0.80.5`_  |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            | `0.80.4`_  |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            | `0.80.3`_  |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            | `0.80.2`_  |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| June      2014 | `0.82`_     |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+------------+------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.81`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| May       2014 |             |           |             |           |            |               |           |            | `0.80.1`_  |            | `0.67.9`_   |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            | `0.80`_    |            | `0.67.8`_   |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| April     2014 | `0.79`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| March     2014 | `0.78`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| February  2014 | `0.77`_     |           |             |           |            |               |           |            |            |            | `0.67.7`_   |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            |            |            | `0.67.6`_   |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| January   2014 | `0.76`_     |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.75`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| December  2013 | `0.74`_     |           |             |           |            |               |           |            |            | `0.72.2`_  | `0.67.5`_   |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.73`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| November  2013 |             |           |             |           |            |               |           |            |            | `0.72.1`_  |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            |            | `0.72`_    |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| October   2013 | `0.71`_     |           |             |           |            |               |           |            |            |            | `0.67.4`_   |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.70`_     |           |             |           |            |               |           |            |            |            |             |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| September 2013 | `0.69`_     |           |             |           |            |               |           |            |            |            |             |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                | `0.68`_     |           |             |           |            |               |           |            |            |            | `0.67.3`_   |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-| August    2013 |             |           |             |           |            |               |           |            |            |            | `0.67.2`_   |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            |            |            | `0.67.1`_   |
-|                +-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
-|                |             |           |             |           |            |               |           |            |            |            | `0.67`_     |
-+----------------+-------------+-----------+-------------+-----------+------------+---------------+-----------+------------+------------+------------+-------------+
+.. ceph_timeline:: releases.yml development mimic luminous kraken jewel infernalis hammer giant firefly emperor dumpling
 
 .. _Mimic: ../mimic
 .. _13.2.2: ../mimic#v13-2-2-mimic