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_extension;
public $release_cycle;
public $sha256_checksum; // New property
public $directory_lister;
public function __construct(string $file_path) {
@ -83,6 +84,15 @@ class Build {
$this->file_size = filesize($file_path);
$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.
//
// NOTE: Keep it last, so the rule matcher can access all possible

View File

@ -8,11 +8,11 @@ class BuildsRenderer {
$this->builds = $builds;
}
public function renderJSON() {
public function renderJSON($version = 1) {
/* Return a JSON formatted list of builds. */
$builds_json = array();
foreach ($this->builds as $build) {
$builds_json[] = array(
$build_data = array(
'url' => $this->getFileNameURL($build),
'app' => $build->app,
'version' => $build->version,
@ -29,6 +29,16 @@ class BuildsRenderer {
'file_extension' => $build->file_extension,
'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));
}

View File

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