Buildbot: Move checksum to JSON #7

Merged
Bart van der Braak merged 2 commits from move-checksum-to-json into develop 2024-07-16 10:09:54 +02:00
3 changed files with 25 additions and 5 deletions
Showing only changes of commit 972dd1292e - Show all commits

View File

@ -22,6 +22,7 @@ class Build {
public $file_size; public $file_size;
public $file_extension; public $file_extension;
public $release_cycle; public $release_cycle;
public $sha256_checksum; // New property
public $directory_lister; public $directory_lister;
public function __construct(string $file_path) { public function __construct(string $file_path) {
@ -83,6 +84,15 @@ class Build {
$this->file_size = filesize($file_path); $this->file_size = filesize($file_path);
$this->file_extension = $file_extension; $this->file_extension = $file_extension;
// Check for existing .sha256 file.
$sha256_file = $file_path . '.sha256';
if (file_exists($sha256_file)) {
$this->sha256_checksum = trim(str_replace(["\r", "\n", "\t"], '', file_get_contents($sha256_file)));
} else {
// Compute SHA256 checksum.
$this->sha256_checksum = strtoupper(hash_file('sha256', $file_path));
}
// Release cycle. // Release cycle.
// //
// NOTE: Keep it last, so the rule matcher can access all possible // NOTE: Keep it last, so the rule matcher can access all possible

View File

@ -8,11 +8,11 @@ class BuildsRenderer {
$this->builds = $builds; $this->builds = $builds;
} }
public function renderJSON() { public function renderJSON($version = 1) {
/* Return a JSON formatted list of builds. */ /* Return a JSON formatted list of builds. */
$builds_json = array(); $builds_json = array();
foreach ($this->builds as $build) { foreach ($this->builds as $build) {
$builds_json[] = array( $build_data = array(
'url' => $this->getFileNameURL($build), 'url' => $this->getFileNameURL($build),
'app' => $build->app, 'app' => $build->app,
'version' => $build->version, 'version' => $build->version,
@ -29,6 +29,16 @@ class BuildsRenderer {
'file_extension' => $build->file_extension, 'file_extension' => $build->file_extension,
'release_cycle' => $build->release_cycle, 'release_cycle' => $build->release_cycle,
); );
if ($version == 2) {
// If version 2 is requested, skip any .sha256 files and add a checksum key-value entry
if (substr($build->file_name, -7) === '.sha256') {
continue;
}
$build_data['checksum'] = $build->sha256_checksum;
}
$builds_json[] = $build_data;
} }
echo(json_encode($builds_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); echo(json_encode($builds_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
} }

View File

@ -16,15 +16,15 @@ function handleNotFoundRequest() {
function renderDownloadResponseAsJSON($lister) { function renderDownloadResponseAsJSON($lister) {
header('Content-Type: application/json; charset=utf-8'); header('Content-Type: application/json; charset=utf-8');
// Require v=1 to be specified // Require v=1 to be specified
if (!isset($_GET['v']) || $_GET['v'] != '1') { if (!isset($_GET['v']) || ($_GET['v'] != '1' && $_GET['v'] != '2')) {
$data = [ 'error' => 'Missing supported format version, for example v=1']; $data = ['error' => 'Invalid version specified. Please provide a supported version using v=1 or v=2.'];
echo json_encode( $data ); echo json_encode( $data );
http_response_code(400); http_response_code(400);
return; return;
} }
$builds = $lister->getBuilds(); $builds = $lister->getBuilds();
$renderer = new BuildsRenderer($builds); $renderer = new BuildsRenderer($builds);
$renderer->renderJSON(); $renderer->renderJSON($_GET['v']);
return; return;
} }