app/views/templates/past_release.html.twig (239 lines of code) (raw):
{% extends 'base.html.twig' %}
{% block head_additions %}
{% set meta_description = 'Follow Firefox trains and major milestones easily!' %}
<meta name="description" content="{{ meta_description }}">
<meta property="twitter:description" content="{{ meta_description }}">
<meta property="og:url" content="https://whattrainisitnow.com/release/">
{% endblock %}
{% block header %}
{% include 'release_nav.html.twig' %}
{% endblock %}
{% if release == constant('FIREFOX_RELEASE')|number_format %}
{% set alert = 'Version shipping to users on the <b class="text-success-emphasis">Release</b> channel' %}
{% set channel = 'release' %}
{% endif %}
{% block main %}
{% if channel == 'release' %}
<div class="w-50 alert alert-primary mx-auto text-center mb-3" role="alert">{{ alert|raw }}</div>
{% endif %}
{% set table_header = 'text-secondary-emphasis fw-semibold' %}
<table class="table table-light table-fxt-clean table-sm mb-3 w-50 justify-content-center">
<tr class="table-warning">
<th class="{{ table_header }}">Release Date</th><td title="{{ release_date|format_date('full') }}">{{ release_date|format_date('long') }}</td>
</tr>
<tr>
<th class="{{ table_header }}">Release Owner</th><td>{{ release_owner }}</td>
</tr>
{% if OLDER_ESR %}
<tr>
<th class="{{ table_header }}">Corresponding ESR releases</th>
<td>{{ ESR }} <span class="text-black-50">⁘</span> {{ OLDER_ESR }} </td>
</tr>
{% else %}
<tr>
<th class="{{ table_header }}">Corresponding ESR release</th>
<td>{{ ESR }}</td>
</tr>
{% endif %}
<tr>
<th class="{{ table_header }}">Nightly cycle length</th><td>{{ nightly_cycle_length|number_format }} weeks</td>
</tr>
<tr>
<th class="{{ table_header }}">Beta cycle length</th><td>{{ beta_cycle_length|number_format }} weeks</td>
</tr>
{% if release > 57 %}
<tr>
<th class="{{ table_header }}">Bugs fixed in nightly</th>
<td>
{{ nightly_fixes.bug_fixes|length }}
</td>
</tr>
{% endif %}
{% if beta_uplifts %}
<tr>
<th class="{{ table_header }}">Uplifts in <a href="{{ beta_changelog }}">Beta</a></th><td><a href="{{ beta_uplifts_url }}">{{ beta_uplifts.total|length }}</a> ({{ beta_uplifts.backouts|length }} backout{{ beta_uplifts.backouts|length != 1 ? 's' }})</td>
</tr>
{% else %}
<tr>
<th class="{{ table_header }}">Uplifts in Beta</th><td>Data cannot be extracted from mercurial (missing HG tags)</td>
</tr>
{% endif %}
{% if rc_uplifts %}
<tr>
<th class="{{ table_header }}">Uplifts in <a href="{{ rc_changelog }}">RC</a></th><td><a href="{{ rc_uplifts_url }}">{{ rc_uplifts.total|length }}</a> ({{ rc_uplifts.backouts|length }} backout{{ rc_uplifts.backouts|length != 1 ? 's' }})</td>
</tr>
{% else %}
<tr>
<th class="{{ table_header }}">Uplifts in RC</th><td>Data cannot be extracted from mercurial (missing HG tags)</td>
</tr>
{% endif %}
<tr>
<th class="{{ table_header }}">Total number of uplifts</th><td>{{ beta_uplifts.total|length + rc_uplifts.total|length}}</td>
</tr>
<tr>
<th class="{{ table_header }}">Betas</th><td>{{ beta_count }}</td>
</tr>
<tr>
<th class="{{ table_header }}">Release Candidates</th><td>{{ rc_count }}</td>
</tr>
<tr>
<th class="{{ table_header }}">Dot releases</th><td>{{ dot_release_count }}</td>
</tr>
<tr>
<th class="{{ table_header }}">Release notes</th>
<td>
{% set link_fix = '' %}
{% if release == 125 or release == 14 %}
{% set link_fix = '.1' %}
{% endif %}
<a href="https://www.mozilla.org/en-US/firefox/{{ release|number_format(1) }}{{ link_fix }}/releasenotes/">Consumer notes</a> <span class="text-black-50">⁘</span>
<a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/{{ release }}">Developer notes</a>
</td>
</tr>
</table>
{% set rollout = release_rollout ~ '% rollout' %}
{% set hg_web_base = 'https://hg.mozilla.org/releases/mozilla-release/pushloghtml?fromchange=' %}
{% set date_pattern = 'MMMM d' %}
<table class="table table-light table-fxt-clean table-sm w-50 justify-content-center mb-3">
<tr>
<th colspan="2" class="text-center table-warning force-default-bg fw-semibold">Key Milestones</th>
</tr>
<tr>
<th class="{{ table_header }}">Nightly start</th>
<td title="{{ nightly_start_date|format_date('full') }}">{{ nightly_start_date|format_date(pattern=date_pattern) }}</td>
</tr>
<tr>
<th class="{{ table_header }}">Beta start</th>
<td title="{{ beta_start_date|format_date('full') }}">{{ beta_start_date|format_date(pattern=date_pattern) }}</td>
</tr>
<tr>
<th class="{{ table_header }}">
{{ release }}.0
<span
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-html="true">
<sup class="fw-normal fst-italic text-secondary border-bottom" title="{{ uptake }}% — adoption rate has a 24h latency">
{% if release == constant('FIREFOX_RELEASE')|number_format or release == constant('FIREFOX_RELEASE')|number_format - 1 %}
{% if uptake is not null %}
{% set uptake_msg = uptake|number_format ~ '% adoption' %}
{% else %}
{% set uptake_msg = '(adoption rate unavailable)' %}
{% endif %}
{% if dot_release_count == 0 %}
{{ uptake_msg ~ ' - ' ~ rollout }}
{% else %}
{{ uptake_msg }}
{% endif %}
{% endif %}
</sup>
</span>
</th>
{% if release == 14 or release == 125 %}
<td>Version never shipped</td>
{% else %}
<td title="{{ release_date|format_date('full') }}">{{ release_date|format_date(pattern=date_pattern) }}</td>
{% endif %}
</tr>
{% set last_android = 0 %}
{% set last_desktop = 0 %}
{% set desktop_base = 'FIREFOX_' ~ release ~ '_0_RELEASE' %}
{% if dot_release_count > 0 %}
{% for dot_release in 1..dot_release_count %}
{% set target_platform = dot_releases[release ~ '.0.' ~ dot_release]['platform'] %}
{% set dot_release_date = dot_releases[release ~ '.0.' ~ dot_release]['date']|format_date(pattern=date_pattern) %}
{% set adoption = dot_releases[release ~ '.0.' ~ dot_release]['adoption'] %}
{% set product = 'FIREFOX_' %}
{% if target_platform == 'android' %}
{% set product = 'FIREFOX-ANDROID_' %}
{% endif %}
{% if dot_release == 1 %}
{% set dot_release_link = hg_web_base ~ desktop_base ~ '&tochange=' ~ product ~ release ~ '_0_' ~ dot_release ~ '_RELEASE&full&version=2' %}
{% if target_platform == 'android' %}
{% set last_android = 1 %}
{% else %}
{% set last_desktop = 1 %}
{% set desktop_base = 'FIREFOX_' ~ release ~ '_0_' ~ last_desktop ~ '_RELEASE' %}
{% endif %}
{% endif %}
{% if dot_release > 1 %}
{% if target_platform == 'android' %}
{% set android_base = 'FIREFOX-ANDROID_' ~ release ~ '_0_' ~ last_android ~ '_RELEASE' %}
{% set base = android_base %}
{% set last_android = dot_release %}
{% else %}
{% if last_desktop == 0 %}
{% set desktop_base = 'FIREFOX_' ~ release ~ '_0_RELEASE' %}
{% else %}
{% set desktop_base = 'FIREFOX_' ~ release ~ '_0_' ~ last_desktop ~ '_RELEASE' %}
{% endif %}
{% set base = desktop_base %}
{% set last_desktop = dot_release %}
{% endif %}
{% set dot_release_link = hg_web_base ~ base ~ '&tochange=' ~ product ~ release ~ '_0_' ~ dot_release ~ '_RELEASE&full&version=2' %}
{% endif %}
<tr>
<th class="{{ table_header }}">
{% if release == 136 and dot_release == 4 %}
{# 136.0.4 was a chemspill in 137 RC week on a relbranch, our web pushlog can't output the range, point to the single patch #}
<a href="https://hg.mozilla.org/releases/mozilla-release/rev/338dbe214b58535c49370d8701d6525808233293" class="link-primary" title="Mercurial changelog">{{ release }}.0.{{ dot_release }}</a>
{% else %}
<a href="{{ dot_release_link }}" class="link-primary" title="Mercurial changelog">{{ release }}.0.{{ dot_release }}</a>
{% endif %}
{# Was this dot release a chemspill? #}
{% if release ~ '.0.' ~ dot_release in chemspills %}
<sup class="fw-semibold fst-italic text-danger-emphasis" >Chemspill
<span
data-bs-toggle="tooltip" data-bs-placement="right" data-bs-html="true"
title="<b>Chemspill</b><br>Urgent security release"
class='text-muted'>
<sup class="text-danger">?</sup>
</span>
</sup>
{% endif %}
{% if release > 125 %}
{% if dot_releases[release ~ '.0.' ~ dot_release]['platform'] == 'android' %}
<sup class="fw-normal fst-italic text-info-emphasis">Android-only</sup>
{% endif %}
{% if dot_releases[release ~ '.0.' ~ dot_release]['platform'] == 'desktop' %}
<sup class="fw-normal fst-italic text-info-emphasis">Desktop-only</sup>
{% endif %}
{% if dot_releases[release ~ '.0.' ~ dot_release]['platform'] != 'android' and dot_releases[release ~ '.0.' ~ dot_release]['adoption'] > 0 %}
<sup class="fw-normal fst-italic text-secondary border-bottom" title="{{ adoption }}% — adoption rate has a 24h latency">{{ adoption|number_format }}% adoption</sup>
{% endif %}
{% endif %}
{% if loop.last and release_rollout != -1 %}
<sup class="fw-normal fst-italic text-secondary">
{{ rollout|raw }}
</sup>
{% endif %}
</th>
<td title="{{ dot_release_date|format_date('full') }}">{{ dot_release_date }}</td>
</tr>
{% endfor %}
{% endif %}
{% set planned_dot_release_link = hg_web_base ~ desktop_base ~ '&tochange=tip&full&version=2' %}
{% if "now"|date('Y-m-d') < release_date|date_modify('+1 week')|date('Y-m-d') %}
<tr>
<th class="{{ table_header }}"><a href="{{ planned_dot_release_link }}" class="link-primary">Potential mobile {{ release }}.0.x</a></th>
<td title="">{{ release_date|date_modify('+1 week')|format_date(pattern=date_pattern) }}</td>
</tr>
{% endif %}
{% if release ~ '.0' not in no_planned_dot_releases %}
{% if "now"|date('Y-m-d') < release_date|date_modify("+" ~ ( release == 131 ? '13 days' : '2 weeks' ))|date('Y-m-d') %}
<tr>
<th class="{{ table_header }}"><a href="{{ planned_dot_release_link }}" class="link-primary">Planned {{ release }}.0.x</a></th>
<td title="">{{ release_date|date_modify('+2 weeks')|format_date(pattern=date_pattern) }}</td>
</tr>
{% endif %}
{% endif %}
</table>
{% endblock %}
{% block footer %}
{% include 'footer_UTC_warning.html.twig' %}
<script nonce="{{constant('NONCE')}}">
$(function () {
$('[data-bs-toggle="tooltip"]').tooltip()
});
</script>
{% endblock %}