diff --git a/core/modules/update/tests/fixtures/release-history/drupal.1.0-supported.xml b/core/modules/update/tests/fixtures/release-history/drupal.1.0-supported.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b973332a6ede010d6470e71533c8db3f5e574633
--- /dev/null
+++ b/core/modules/update/tests/fixtures/release-history/drupal.1.0-supported.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file contains release history for '8.0','8.1', '9.0' and '10.0'. All
+releases except '8.0.' are supported.
+-->
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>Drupal</title>
+<short_name>drupal</short_name>
+<dc:creator>Drupal</dc:creator>
+<supported_branches>8.1.,9.0.,10.0.</supported_branches>
+<project_status>published</project_status>
+<link>http://example.com/project/drupal</link>
+  <terms>
+    <term><name>Projects</name><value>Drupal project</value></term>
+  </terms>
+<releases>
+  <release>
+    <name>Drupal 10.0.0</name>
+    <version>10.0.0</version>
+    <status>published</status>
+    <release_link>http://example.com/drupal-10-0-0-release</release_link>
+    <download_link>http://example.com/drupal-10-0-0.tar.gz</download_link>
+    <date>1584195300</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Drupal 9.0.0</name>
+    <version>9.0.0</version>
+    <status>published</status>
+    <release_link>http://example.com/drupal-9-0-0-release</release_link>
+    <download_link>http://example.com/drupal-9-0-0.tar.gz</download_link>
+    <date>1584195300</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+ <release>
+   <name>Drupal 8.1.0</name>
+   <version>8.1.0</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-1-0-release</release_link>
+   <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link>
+   <date>1584195300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.1.0-beta1</name>
+   <version>8.1.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link>
+   <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link>
+   <date>1581603300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.1.0-alpha1</name>
+   <version>8.1.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link>
+   <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link>
+   <date>1579011300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.3</name>
+   <version>8.0.3</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-3-release</release_link>
+   <download_link>http://example.com/drupal-8-0-3.tar.gz</download_link>
+   <date>1576419300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+     <term><name>Release type</name><value>Unsupported</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.2</name>
+   <version>8.0.2</version>
+   <status>unpublished</status>
+   <release_link>http://example.com/drupal-8-0-2-release</release_link>
+   <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link>
+   <date>1573827300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.1</name>
+   <version>8.0.1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link>
+   <date>1571235300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.1-beta1</name>
+   <version>8.0.1-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link>
+   <date>1568643300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.1-alpha1</name>
+   <version>8.0.1-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link>
+   <date>1566051300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.0</name>
+   <version>8.0.0</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-0-release</release_link>
+   <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link>
+   <date>1563459300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.0-beta1</name>
+   <version>8.0.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link>
+   <date>1560867300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.0-alpha1</name>
+   <version>8.0.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link>
+   <date>1558275300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+</releases>
+</project>
diff --git a/core/modules/update/tests/fixtures/release-history/drupal.1.1-unsupported.xml b/core/modules/update/tests/fixtures/release-history/drupal.1.1-unsupported.xml
new file mode 100644
index 0000000000000000000000000000000000000000..18296e9efca18ead0a6082228bc44d791415afb5
--- /dev/null
+++ b/core/modules/update/tests/fixtures/release-history/drupal.1.1-unsupported.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file contains release history for '8.0' and '8.1'. Only '8.0' is
+supported.
+-->
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>Drupal</title>
+<short_name>drupal</short_name>
+<dc:creator>Drupal</dc:creator>
+<supported_branches>8.0.</supported_branches>
+<project_status>published</project_status>
+<link>http://example.com/project/drupal</link>
+  <terms>
+   <term><name>Projects</name><value>Drupal project</value></term>
+  </terms>
+<releases>
+ <release>
+   <name>Drupal 8.1.0</name>
+   <version>8.1.0</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-1-0-release</release_link>
+   <download_link>http://example.com/drupal-8-1-0.tar.gz</download_link>
+   <date>1250424581</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.1.0-beta1</name>
+   <version>8.1.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-1-0-beta1-release</release_link>
+   <download_link>http://example.com/drupal-8-1-0-beta1.tar.gz</download_link>
+   <date>1250424581</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.1.0-alpha1</name>
+   <version>8.1.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-1-0-alpha1-release</release_link>
+   <download_link>http://example.com/drupal-8-1-0-alpha1.tar.gz</download_link>
+   <date>1250424581</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.3</name>
+   <version>8.0.3</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-3-release</release_link>
+   <download_link>http://example.com/drupal-8-0-3.tar.gz</download_link>
+   <date>1250424585</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.2</name>
+   <version>8.0.2</version>
+   <status>unpublished</status>
+   <release_link>http://example.com/drupal-8-0-2-release</release_link>
+   <download_link>http://example.com/drupal-8-0-2.tar.gz</download_link>
+   <date>1250424581</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.1</name>
+   <version>8.0.1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-1.tar.gz</download_link>
+   <date>1250424581</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.1-beta1</name>
+   <version>8.0.1-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-1-beta1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-1-beta1.tar.gz</download_link>
+   <date>1250424521</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.1-alpha1</name>
+   <version>8.0.1-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-1-alpha1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-1-alpha1.tar.gz</download_link>
+   <date>1250424521</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.0</name>
+   <version>8.0.0</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-0-release</release_link>
+   <download_link>http://example.com/drupal-8-0-0.tar.gz</download_link>
+   <date>1250424521</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.0-beta1</name>
+   <version>8.0.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-0-beta1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-0-beta1.tar.gz</download_link>
+   <date>1250424521</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Drupal 8.0.0-alpha1</name>
+   <version>8.0.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/drupal-8-0-0-alpha1-release</release_link>
+   <download_link>http://example.com/drupal-8-0-0-alpha1.tar.gz</download_link>
+   <date>1250424521</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+</releases>
+</project>
diff --git a/core/modules/update/tests/fixtures/release-history/drupal.8.1.0-unsupported.xml b/core/modules/update/tests/fixtures/release-history/drupal.8.1.0-unsupported.xml
index 9ae7e60f56d604c442d91eb8a4e4f90808f9a8bb..17eee8dcacaa0c40729d8d434b8b683495835a93 100644
--- a/core/modules/update/tests/fixtures/release-history/drupal.8.1.0-unsupported.xml
+++ b/core/modules/update/tests/fixtures/release-history/drupal.8.1.0-unsupported.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-This XML file is the exact same as the file drupal.1.xml except
+This XML file is the exact same as the file drupal.1.0.xml except
 'supported_branches' in this file does not contain the '8.0.' branch. Therefore,
 all the releases that start with '8.0.' are in an unsupported branch.
 -->
diff --git a/core/modules/update/tests/fixtures/release-history/semver_test.1.0-supported.xml b/core/modules/update/tests/fixtures/release-history/semver_test.1.0-supported.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d2c0d326d573d76be82963e74a240bd4026adaf2
--- /dev/null
+++ b/core/modules/update/tests/fixtures/release-history/semver_test.1.0-supported.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file contains release history for '8.0','8.1', '9.0' and '10.0'. All
+releases except '8.0.' are supported.
+-->
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>Semver Test</title>
+<short_name>semver_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<supported_branches>8.1.,9.0.,10.0.</supported_branches>
+<project_status>published</project_status>
+<link>http://example.com/project/semver_test</link>
+  <terms>
+   <term><name>Projects</name><value>Semver Test project</value></term>
+  </terms>
+<releases>
+  <release>
+    <name>Semver Test 10.0.0</name>
+    <version>10.0.0</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-10-0-0-release</release_link>
+    <download_link>http://example.com/semver_test-10-0-0.tar.gz</download_link>
+    <date>1584195300</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 9.0.0</name>
+    <version>9.0.0</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-9-0-0-release</release_link>
+    <download_link>http://example.com/semver_test-9-0-0.tar.gz</download_link>
+    <date>1584195300</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+ <release>
+   <name>Semver Test 8.1.0</name>
+   <version>8.1.0</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-1-0-release</release_link>
+   <download_link>http://example.com/semver_test-8-1-0.tar.gz</download_link>
+   <date>1584195300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.1.0-beta1</name>
+   <version>8.1.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-1-0-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-8-1-0-beta1.tar.gz</download_link>
+   <date>1581603300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.1.0-alpha1</name>
+   <version>8.1.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-1-0-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-8-1-0-alpha1.tar.gz</download_link>
+   <date>1579011300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.3</name>
+   <version>8.0.3</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-3-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-3.tar.gz</download_link>
+   <date>1576419300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+     <term><name>Release type</name><value>Unsupported</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.2</name>
+   <version>8.0.2</version>
+   <status>unpublished</status>
+   <release_link>http://example.com/semver_test-8-0-2-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-2.tar.gz</download_link>
+   <date>1573827300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.1</name>
+   <version>8.0.1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-1.tar.gz</download_link>
+   <date>1571235300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.1-beta1</name>
+   <version>8.0.1-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-1-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-1-beta1.tar.gz</download_link>
+   <date>1568643300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.1-alpha1</name>
+   <version>8.0.1-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-1-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-1-alpha1.tar.gz</download_link>
+   <date>1566051300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.0</name>
+   <version>8.0.0</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-0-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-0.tar.gz</download_link>
+   <date>1563459300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.0-beta1</name>
+   <version>8.0.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-0-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-0-beta1.tar.gz</download_link>
+   <date>1560867300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.0-alpha1</name>
+   <version>8.0.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-0-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-0-alpha1.tar.gz</download_link>
+   <date>1558275300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+</releases>
+</project>
diff --git a/core/modules/update/tests/fixtures/release-history/semver_test.1.1-unsupported.xml b/core/modules/update/tests/fixtures/release-history/semver_test.1.1-unsupported.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a1703238e2e2a005fe7c3e4754f8a2fcf53e115b
--- /dev/null
+++ b/core/modules/update/tests/fixtures/release-history/semver_test.1.1-unsupported.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file contains release history for '8.0' and '8.1'. Only '8.0' is
+supported.
+-->
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>Semver Test</title>
+<short_name>semver_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<supported_branches>8.0.</supported_branches>
+<project_status>published</project_status>
+<link>http://example.com/project/semver_test</link>
+  <terms>
+   <term><name>Projects</name><value>Semver Test project</value></term>
+  </terms>
+<releases>
+ <release>
+   <name>Semver Test 8.1.0</name>
+   <version>8.1.0</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-1-0-release</release_link>
+   <download_link>http://example.com/semver_test-8-1-0.tar.gz</download_link>
+   <date>1584195300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.1.0-beta1</name>
+   <version>8.1.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-1-0-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-8-1-0-beta1.tar.gz</download_link>
+   <date>1581603300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.1.0-alpha1</name>
+   <version>8.1.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-1-0-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-8-1-0-alpha1.tar.gz</download_link>
+   <date>1579011300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.3</name>
+   <version>8.0.3</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-3-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-3.tar.gz</download_link>
+   <date>1576419300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.2</name>
+   <version>8.0.2</version>
+   <status>unpublished</status>
+   <release_link>http://example.com/semver_test-8-0-2-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-2.tar.gz</download_link>
+   <date>1573827300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.1</name>
+   <version>8.0.1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-1.tar.gz</download_link>
+   <date>1571235300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.1-beta1</name>
+   <version>8.0.1-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-1-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-1-beta1.tar.gz</download_link>
+   <date>1568643300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.1-alpha1</name>
+   <version>8.0.1-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-1-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-1-alpha1.tar.gz</download_link>
+   <date>1566051300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.0</name>
+   <version>8.0.0</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-0-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-0.tar.gz</download_link>
+   <date>1563459300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.0-beta1</name>
+   <version>8.0.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-0-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-0-beta1.tar.gz</download_link>
+   <date>1560867300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 8.0.0-alpha1</name>
+   <version>8.0.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-8-0-0-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-8-0-0-alpha1.tar.gz</download_link>
+   <date>1558275300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+</releases>
+</project>
diff --git a/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-unsupported.xml b/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-unsupported.xml
index 0a2e8f3a3d78e03b269ec7833d6051d37839a61e..b2b4740ef72287e2bb637d9d4187107570624834 100644
--- a/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-unsupported.xml
+++ b/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-unsupported.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-This XML file is the exact same as the file semver_test.1.xml except
+This XML file is the exact same as the file semver_test.1.0.xml except
 'supported_branches' in this file does not contain the '8.0.' branch. Therefore,
 all the releases that start with '8.0.' are in an unsupported branch.
 -->
diff --git a/core/modules/update/tests/src/Functional/UpdateSemverTestBaselineTrait.php b/core/modules/update/tests/src/Functional/UpdateSemverTestBaselineTrait.php
index 57af2d1cc90daaeeffd2d0db209e3652d8c9ac48..407d23cee222bc21c5a24116f79a342dc40f7a1b 100644
--- a/core/modules/update/tests/src/Functional/UpdateSemverTestBaselineTrait.php
+++ b/core/modules/update/tests/src/Functional/UpdateSemverTestBaselineTrait.php
@@ -198,8 +198,12 @@ public function testRevokedRelease() {
    * value:
    * - [::$updateProject].8.1.0.xml
    *    'supported_branches' is '8.0.,8.1.'.
+   * - [::$updateProject].8.1.0-supported.xml
+   *     'supported_branches' is '8.1.,9.0.,10.0.'
    * - [::$updateProject].8.1.0-unsupported.xml
-   *    'supported_branches' is '8.1.'.
+   *    'supported_branches' is '8.0.'.
+   * - [::$updateProject].8.1.0-unsupported.xml
+   *     'supported_branches' is '8.1.'.
    * They both have an '8.0.3' release that has the 'Release type' value of
    * 'unsupported' and an '8.1.0' release that has the 'Release type' value of
    * 'supported' and is the expected update.
@@ -211,6 +215,22 @@ public function testUnsupportedRelease() {
       $this->standardTests();
       $this->confirmUnsupportedStatus('8.0.3', '8.1.0', 'Recommended version:');
     }
+
+    // Test when the newest branch is unsupported and no update is available.
+    foreach (['8.1.0', '8.1.0-beta1'] as $version) {
+      $this->setProjectInstalledVersion($version);
+      $this->refreshUpdateStatus([$this->updateProject => '1.1-unsupported']);
+      $this->standardTests();
+      $this->confirmUnsupportedStatus($version);
+    }
+
+    // Test when the newest branch is supported.
+    $this->setProjectInstalledVersion('8.0.3');
+    $this->refreshUpdateStatus([$this->updateProject => '1.0-supported']);
+    $this->standardTests();
+    $this->confirmUnsupportedStatus('8.0.3', '8.1.0', 'Recommended version:');
+    $this->assertVersionUpdateLinks('Also available', '10.0.0');
+    $this->assertVersionUpdateLinks('Also available', '9.0.0', 1);
   }
 
 }
diff --git a/core/modules/update/tests/src/Functional/UpdateTestBase.php b/core/modules/update/tests/src/Functional/UpdateTestBase.php
index fc40b5ed10f3862cc5b244f8ad140e8cda0e765d..98d36f0828c989f859c5a8c1e23cdb229418c04c 100644
--- a/core/modules/update/tests/src/Functional/UpdateTestBase.php
+++ b/core/modules/update/tests/src/Functional/UpdateTestBase.php
@@ -169,9 +169,11 @@ protected function assertSecurityUpdates($project_path_part, array $expected_sec
    *   The label for the update.
    * @param string $version
    *   The project version.
+   * @param int $index
+   *   (optional) The index of the link.
    */
-  protected function assertVersionUpdateLinks($label, $version) {
-    $update_element = $this->findUpdateElementByLabel($label);
+  protected function assertVersionUpdateLinks($label, $version, int $index = 0) {
+    $update_element = $this->findUpdateElementByLabel($label, $index);
     // In the release notes URL the periods are replaced with dashes.
     $url_version = str_replace('.', '-', $version);
 
@@ -207,21 +209,28 @@ protected function confirmRevokedStatus($revoked_version, $newer_version, $new_v
    *
    * @param string $unsupported_version
    *   The unsupported version that is currently installed.
-   * @param string $newer_version
-   *   The expected newer version to recommend.
-   * @param string $new_version_label
-   *   The expected label for the newer version (for example 'Recommended
-   *   version:' or 'Also available:').
+   * @param string|null $newer_version
+   *   (optional) The expected newer version to recommend.
+   * @param string|null $new_version_label
+   *   (optional) The expected label for the newer version. For example
+   *   'Recommended version:' or 'Also available:'.
    */
-  protected function confirmUnsupportedStatus($unsupported_version, $newer_version, $new_version_label) {
+  protected function confirmUnsupportedStatus(string $unsupported_version, string $newer_version = NULL, string $new_version_label = NULL) {
     $this->drupalGet('admin/reports/updates');
     $this->clickLink('Check manually');
     $this->checkForMetaRefresh();
     $this->assertUpdateTableTextContains('Not supported!');
     $this->assertUpdateTableTextContains($unsupported_version);
     $this->assertUpdateTableElementContains('error.svg');
-    $this->assertUpdateTableTextContains('Release not supported: Your currently installed release is now unsupported, and is no longer available for download. Uninstalling everything included in this release or upgrading is strongly recommended!');
-    $this->assertVersionUpdateLinks($new_version_label, $newer_version);
+    if ($newer_version === NULL) {
+      $this->assertUpdateTableTextContains('Release not supported: Your currently installed release is now unsupported, is no longer available for download and no update is available. Uninstalling everything included in this release is strongly recommended!');
+      $this->assertUpdateTableTextNotContains('Recommended version');
+    }
+    else {
+      $this->assertNotEmpty($newer_version);
+      $this->assertUpdateTableTextContains('Release not supported: Your currently installed release is now unsupported, and is no longer available for download. Uninstalling everything included in this release or upgrading is strongly recommended!');
+      $this->assertVersionUpdateLinks($new_version_label, $newer_version);
+    }
   }
 
   /**
@@ -279,15 +288,17 @@ protected function assertUpdateTableElementNotContains($text) {
    * @param string $label
    *   The label for the update, for example "Recommended version:" or
    *   "Latest version:".
+   * @param int $index
+   *   (optional) The index of the element.
    *
    * @return \Behat\Mink\Element\NodeElement
    *   The update element.
    */
-  protected function findUpdateElementByLabel($label) {
+  protected function findUpdateElementByLabel($label, int $index = 0) {
     $update_elements = $this->getSession()->getPage()
       ->findAll('css', $this->updateTableLocator . " .project-update__version:contains(\"$label\")");
-    $this->assertCount(1, $update_elements);
-    return $update_elements[0];
+    $this->assertGreaterThanOrEqual($index, count($update_elements));
+    return $update_elements[$index];
   }
 
 }
diff --git a/core/modules/update/update.compare.inc b/core/modules/update/update.compare.inc
index 466ca09f68030916eb4a32769b84df18e4327f7c..c9d1877c19228d4afe091b6be03ab661bde1c32a 100644
--- a/core/modules/update/update.compare.inc
+++ b/core/modules/update/update.compare.inc
@@ -310,7 +310,7 @@ function update_calculate_project_update_status(&$project_data, $available) {
     foreach ($supported_branches as $supported_branch) {
       try {
         $target_major = ExtensionVersion::createFromSupportBranch($supported_branch)->getMajorVersion();
-
+        break;
       }
       catch (UnexpectedValueException $exception) {
         continue;
@@ -356,7 +356,7 @@ function update_calculate_project_update_status(&$project_data, $available) {
 
   $recommended_version_without_extra = '';
   $recommended_release = NULL;
-
+  $release_is_supported = FALSE;
   foreach ($available['releases'] as $version => $release_info) {
     try {
       $release = ProjectRelease::createFromArray($release_info);
@@ -374,6 +374,9 @@ function update_calculate_project_update_status(&$project_data, $available) {
     catch (UnexpectedValueException $exception) {
       continue;
     }
+    // This release is supported only if it is in a supported branch and is
+    // not unsupported.
+    $release_is_supported = $is_in_supported_branch($release->getVersion()) && !$release->isUnsupported();
     // First, if this is the existing release, check a few conditions.
     if ($project_data['existing_version'] === $version) {
       if ($release->isInsecure()) {
@@ -390,23 +393,28 @@ function update_calculate_project_update_status(&$project_data, $available) {
           'data' => t('Your currently installed release has been revoked, and is no longer available for download. Uninstalling everything included in this release or upgrading is strongly recommended!'),
         ];
       }
-      elseif ($release->isUnsupported()) {
+      elseif (!$release_is_supported) {
         $project_data['status'] = UpdateManagerInterface::NOT_SUPPORTED;
         if (empty($project_data['extra'])) {
           $project_data['extra'] = [];
         }
+        if (empty($project_data['recommended']) && empty($project_data['also'])) {
+          $unsupported_message = t('Your currently installed release is now unsupported, is no longer available for download and no update is available. Uninstalling everything included in this release is strongly recommended!');
+        }
+        else {
+          $unsupported_message = t('Your currently installed release is now unsupported, and is no longer available for download. Uninstalling everything included in this release or upgrading is strongly recommended!');
+        }
         $project_data['extra'][] = [
           'class' => ['release-not-supported'],
           'label' => t('Release not supported'),
-          'data' => t('Your currently installed release is now unsupported, and is no longer available for download. Uninstalling everything included in this release or upgrading is strongly recommended!'),
+          'data' => $unsupported_message,
         ];
       }
     }
     // Other than the currently installed release, ignore unpublished, insecure,
     // or unsupported updates.
     elseif (!$release->isPublished() ||
-            !$is_in_supported_branch($release->getVersion()) ||
-            $release->isUnsupported() ||
+            !$release_is_supported ||
             $release->isInsecure()
     ) {
       continue;
@@ -464,7 +472,7 @@ function update_calculate_project_update_status(&$project_data, $available) {
     // Look for the 'recommended' version if we haven't found it yet (see
     // PHPDoc at the top of this function for the definition).
     if (!isset($project_data['recommended'])
-        && $release_major_version == $target_major) {
+        && $release_major_version == $target_major && $release_is_supported) {
       if ($recommended_version_without_extra !== $release_version_without_extra) {
         $recommended_version_without_extra = $release_version_without_extra;
         $recommended_release = $release_info;
@@ -504,7 +512,7 @@ function update_calculate_project_update_status(&$project_data, $available) {
 
   // If we were unable to find a recommended version, then make the latest
   // version the recommended version if possible.
-  if (!isset($project_data['recommended']) && isset($project_data['latest_version'])) {
+  if (!isset($project_data['recommended']) && isset($project_data['latest_version']) && $release_is_supported) {
     $project_data['recommended'] = $project_data['latest_version'];
   }