---
layout: news
---

<article>
  <h2>
    {{ page.title }}
    <a href="{{ page.url }}" class="permalink" title="Permalink">∞</a>
  </h2>
  <span class="post-category">
    <span class="label">
      {{ page.categories | array_to_sentence_string }}
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      {{ page.date | date_to_string }}
    </span>
    {% capture homepage %}http://people.apache.org/~{{ page.author }}{% endcapture %}
    {% capture avatar %}http://people.apache.org/~{{ page.author }}/{{ page.author }}.jpg{% endcapture %}
    {% capture discard %}
      {% for c in site.data.contributors %}
        {% if c.apacheId == page.author %}
          {% if c.homepage %}
            {% assign homepage = c.homepage %}
          {% else %}
            {% capture homepage %}https://github.com/{{ c.githubId }}{% endcapture %}
          {% endif %}
          {% if c.avatar %}
            {% assign avatar = c.avatar %}
          {% else %}
            {% capture avatar %}https://github.com/{{ c.githubId }}.png{% endcapture %}
          {% endif %}
        {% endif %}
      {% endfor %}
    {% endcapture %}{% assign discard = nil %}
    <a href="{{ homepage }}" class="post-author">
      <img src="{{ avatar }}"
           class="avatar" alt="{{ page.author }} avatar"
           width="24" height="24">
      {{ page.author }}
    </a>
  </div>
  <div class="post-content">
    {{ content }}
    {% if page.categories contains 'release' %}
    <p>See the <a href="{{ site.baseurl }}/docs/history.html#{{ page.tag }}">release notes</a>;
      <a href="{{ site.baseurl }}/downloads#source-releases">download</a> the release.</p>
    {% endif %}
  </div>
</article>
