Author: Derick Rethans (derickr)
Date: 2025-04-24T13:57:13+01:00

Commit: 
https://github.com/php/web-php/commit/3632f3d75da0e7734a05dcda5bb017b3d6a13d14
Raw diff: 
https://github.com/php/web-php/commit/3632f3d75da0e7734a05dcda5bb017b3d6a13d14.diff

Merge branch 'move-qa-to-web'

Changed paths:
  A  include/release-qa.php
  A  release-candidates.php
  M  downloads.php
  M  get-involved.php


Diff:

diff --git a/downloads.php b/downloads.php
index 20c416ef6e..5468da840f 100644
--- a/downloads.php
+++ b/downloads.php
@@ -18,11 +18,12 @@
   </div>
 </div>
 
-<p class="panel"><a href="download-docs.php">Documentation download</a></p>
-<p class="panel"><a href="download-logos.php">PHP logos</a></p>
+<p class="panel"><a href="download-docs.php">Documentation Download</a></p>
+<p class="panel"><a href="download-logos.php">PHP Logos</a></p>
 
-<p class="panel"><a href="/git.php">Development sources (git)</a></p>
-<p class="panel"><a href="/releases/">Old archives</a></p>
+<p class="panel"><a href="/release-candidates.php">Release Candidates</a></p>
+<p class="panel"><a href="/git.php">Development Sources (git)</a></p>
+<p class="panel"><a href="/releases/">Old Archives</a></p>
 ';
 
 site_header("Downloads",
diff --git a/get-involved.php b/get-involved.php
index 59f96f4de2..5d1482216d 100644
--- a/get-involved.php
+++ b/get-involved.php
@@ -26,7 +26,7 @@
 <h3 class="content-title" id="ways-to-contribute">Four Best Ways to 
Contribute</h3>
 
  <ol class="content-box listed">
-  <li>Running test suites in <a href="https://qa.php.net/";>RC</a>
+  <li>Running test suites in <a href="/release-candidates.php">RC</a>
       and <a href="https://php.net/releases";>release</a> distributions of 
PHP</li>
   <li>Help finding and diagnosing failed tests, see
       the <a href="https://qa.php.net/write-test.php";>phpt 
documentation</a></li>
diff --git a/include/release-qa.php b/include/release-qa.php
new file mode 100644
index 0000000000..4fe4c18efa
--- /dev/null
+++ b/include/release-qa.php
@@ -0,0 +1,170 @@
+<?php
+
+/*
+What this file does:
+    - Generates the download links found at qa.php.net
+    - Determines which test results are emailed to news.php.net/php.qa.reports
+    - Defines $QA_RELEASES for internal and external (api.php) use, contains 
all qa related information for future PHP releases
+
+Documentation:
+    $QA_RELEASES documentation:
+        Configuration:
+        - Key is future PHP version number
+            - Example: If 5.3.6 is the latest stable release, then use 5.3.7 
because 5.3.7-dev is our qa version
+            - Typically, this is the only part needing changed
+        - active (bool):
+            - It's active and being tested here
+            - Meaning, the version will be reported to the qa.reports list, 
and be linked at qa.php.net
+            - File extensions .tar.gz and .tar.bz2 are assumed to be available
+        - release (array):
+            - type: RC, alpha, and beta are examples (case should match 
filename case)
+            - version: 0 if no such release exists, otherwise an integer of 
the rc/alpha/beta number
+            - sha256_bz2: sha256 checksum of this downloadable .tar.bz2 file
+            - sha256_gz:  sha256 checksum of this downloadable .tar.gz file
+            - sha256_xz: sha256 checksum of this downloadble .xz file
+            - date: date of release e.g., 21 May 2011
+            - baseurl: base url of where these downloads are located
+            - Multiple checksums can be available, see the $QA_CHECKSUM_TYPES 
array below
+        Other variables within $QA_RELEASES are later defined including:
+            - reported: versions that make it to the qa.reports mailing list
+            - release: all current qa releases, including paths to dl urls (w/ 
sha256 info)
+            - dev_version: dev version
+            - $QA_RELEASES is made available at qa.php.net/api.php
+
+TODO:
+    - Save all reports (on qa server) for all tests, categorize by PHP version 
(see buildtest-process.php)
+    - Consider storing rc downloads at one location, independent of release 
master
+    - Determine best way to handle rc baseurl, currently assumes 
.tar.gz/tar.bz2 will exist
+    - Determine if $QA_RELEASES is compatible with all current, and most 
future configurations
+    - Determine if $QA_RELEASES can be simplified
+    - Determine if alpha/beta options are desired
+    - Unify then create defaults for most settings
+    - Add option to allow current releases (e.g., retrieve current release 
info via daily cron, cache, check, configure ~ALLOW_CURRENT_RELEASES)
+*/
+
+
+$QA_RELEASES = [
+
+    '8.1.27' => [
+        'active'  => true,
+        'release' => [
+            'type'       => 'RC',
+            'number'     => 0,
+            'sha256_gz'  => '',
+            'sha256_bz2' => '',
+            'sha256_xz'  => '',
+            'date'       => '07 Nov 2023',
+            'baseurl'    => 'https://downloads.php.net/',
+        ],
+    ],
+
+    '8.2.27' => [
+        'active'  => true,
+        'release' => [
+            'type'       => 'RC',
+            'number'     => 0,
+            'sha256_bz2' => '',
+            'sha256_gz'  => '',
+            'sha256_xz'  => '',
+            'date'       => '05 Dec 2024',
+            'baseurl'    => 'https://downloads.php.net/',
+        ],
+    ],
+
+    '8.3.20' => [
+        'active'  => true,
+        'release' => [
+            'type'       => 'RC',
+            'number'     => 0,
+            'sha256_bz2' => '',
+            'sha256_gz'  => '',
+            'sha256_xz'  => '',
+            'date'       => '27 Mar 2025',
+            'baseurl'    => 'https://downloads.php.net/',
+        ],
+    ],
+
+    '8.4.7' => [
+        'active'  => true,
+        'release' => [
+            'type'       => 'RC',
+            'number'     => 1,
+            'sha256_bz2' => 
'acddb1da1b128f984df01347c907a64939f316d7d9bd138b49106f4179b7776f',
+            'sha256_gz'  => 
'b12d97767aeda4624ea1904c1d93303efe4ffe1ba91970a3c5774ad556918e93',
+            'sha256_xz'  => 
'6cb37632eb65ee311cb4427ad070b6ab27fdaf13e8f0103701b2b78907326c93',
+            'date'       => '24 Apr 2025',
+            'baseurl'    => 'https://downloads.php.net/~saki/',
+        ],
+    ],
+];
+
+/*** End Configuration 
*******************************************************************/
+
+// This is a list of the possible checksum values that can be supplied with a 
QA release. Any
+// new algorithm is read from the $QA_RELEASES array under the 'release' index 
for each version
+// in the form of "$algorithm_$filetype".
+//
+// For example, if SHA512 were to be supported, the following indices would 
have to be added:
+//
+// 'sha512_bz2' => 'xxx',
+// 'sha512_gz'  => 'xxx',
+// 'sha512_xz'  => 'xxx',
+$QA_CHECKSUM_TYPES = ['sha256'];
+
+// $QA_RELEASES eventually contains just about everything, also for external 
use
+// release  : These are encouraged for use (e.g., linked at qa.php.net)
+// reported : These are allowed to report @ the php.qa.reports mailing list
+
+(function(&$QA_RELEASES) use ($QA_CHECKSUM_TYPES) {
+    foreach ($QA_RELEASES as $pversion => $info) {
+
+        if (isset($info['active']) && $info['active']) {
+
+            // Allow -dev versions of all active types
+            // Example: 5.3.6-dev
+            $QA_RELEASES['reported'][] = "{$pversion}-dev";
+            $QA_RELEASES[$pversion]['dev_version'] = "{$pversion}-dev";
+
+            // Allow -dev version of upcoming qa releases (rc/alpha/beta)
+            // @todo confirm this php version format for all dev versions
+            if ((int)$info['release']['number'] > 0) {
+                $QA_RELEASES['reported'][] = 
"{$pversion}{$info['release']['type']}{$info['release']['number']}";
+                if (!empty($info['release']['baseurl'])) {
+
+                    // php.net filename format for qa releases
+                    // example: php-5.3.0RC2
+                    $fn_base = 'php-' . $pversion . $info['release']['type'] . 
$info['release']['number'];
+
+                    $QA_RELEASES[$pversion]['release']['version'] = $pversion 
. $info['release']['type'] . $info['release']['number'];
+                    foreach ([ 'bz2', 'gz', 'xz' ] as $file_type) {
+                        foreach ($QA_CHECKSUM_TYPES as $algo) {
+                            if (isset($info['release'][$algo . '_' . 
$file_type])) {
+                                
$QA_RELEASES[$pversion]['release']['files'][$file_type][$algo] = 
$info['release'][$algo . '_' . $file_type];
+                            }
+                        }
+                        if 
(!empty($QA_RELEASES[$pversion]['release']['files'][$file_type])) {
+                            
$QA_RELEASES[$pversion]['release']['files'][$file_type]['path']= 
$info['release']['baseurl'] . $fn_base . '.tar.' . $file_type;
+                        }
+                    }
+
+                    if (empty($QA_RELEASES[$pversion]['release']['files'])) {
+                        $QA_RELEASES[$pversion]['release']['enabled'] = false;
+                    }
+                }
+            } else {
+                $QA_RELEASES[$pversion]['release']['enabled'] = false;
+            }
+
+        }
+    }
+
+    // Sorted information for later use
+    // @todo need these?
+    // $QA_RELEASES['releases']   : All current versions with active qa 
releases
+    foreach ($QA_RELEASES as $pversion => $info) {
+        if (isset($info['active']) && $info['active'] && 
!empty($info['release']['number'])) {
+            $QA_RELEASES['releases'][$pversion] = $info['release'];
+        }
+    }
+
+})($QA_RELEASES);
diff --git a/release-candidates.php b/release-candidates.php
new file mode 100644
index 0000000000..d3a6c46432
--- /dev/null
+++ b/release-candidates.php
@@ -0,0 +1,75 @@
+<?php
+$_SERVER['BASE_PAGE'] = 'qa.php';
+include_once __DIR__ . '/include/prepend.inc';
+include_once __DIR__ . '/include/release-qa.php';
+
+$SITE_UPDATE = date("D M d H:i:s Y T", filectime(__FILE__));
+
+$SIDEBAR_DATA = '
+<div class="panel">
+  Test Releases
+  <div class="body">
+    The downloads on this page are not meant to be run in production. They are
+    for testing only.
+  </div>
+  <div class="body">
+    If you find a problem when running your library or application with these
+    builds, please file a report on <a
+    href="https://github.com/php/php-src/issues/";>GitHub Issues</a>.
+  </div>
+</div>
+';
+
+site_header("Release Candidates", [
+    'current' => 'downloads',
+]);
+
+?>
+<h1>Release Candidate Builds</h1>
+<p>
+This page contains links to the Release Candidate builds that the release
+managers create before each actual release. These builds are meant for the
+community to test whether no inadvertent changes have been made, and
+whether no regressions have been introduced.
+</p>
+
+<h3>Available QA Releases:</h3>
+<?php if (!empty($QA_RELEASES['releases'])) : ?>
+  <?php $plural = count($QA_RELEASES['releases']) > 1 ? 's' : ''; ?>
+
+  <?php foreach ($QA_RELEASES['releases'] as $pversion => $info) : ?>
+  <h3 class="title">
+    PHP <?php echo $info['version']; ?>
+  </h3>
+  <div class="content-box">
+
+    <ul>
+      <?php foreach ($info['files'] as $file_type => $file_info) : ?>
+        <li>
+          <a href="<?php echo $file_info['path'] ?>"><?php echo 
"php-{$info['version']}.tar.{$file_type}"; ?></a>
+          <span class="releasedate"><?php echo date('d M Y', 
strtotime($info['date'])); ?></span>
+            <?php foreach ($QA_CHECKSUM_TYPES as $algo): ?>
+              <span class="<?php echo $algo; ?>">
+              <?php if (isset($file_info[$algo]) && strlen($file_info[$algo])) 
: ?>
+                <?php echo $file_info[$algo]; ?>
+              <?php else: ?>
+                <em><small>No checksum value available</small></em>)&nbsp;
+              <?php endif; ?>
+            <?php endforeach; ?>
+          </li>
+        <?php endforeach; ?>
+      </ul>
+       <?php endforeach; ?>
+<?php else: ?>
+       <span class='lihack'>There are no QA releases available at the moment 
to test.</span>
+<?php endif; ?>
+
+<p>
+       <br/>
+       <strong>Windows users:</strong>
+       See <a href="https://windows.php.net/qa/";>here</a> for the Windows QA 
builds.
+</p>
+
+<?php
+site_footer(['sidebar' => $SIDEBAR_DATA]);
+

Reply via email to