Docker-PHP/doc/gen

64 lines
2.1 KiB
PHP
Executable file

#!/usr/bin/php
<?php
chdir(__DIR__);
require_once __DIR__ . "/vendor/autoload.php";
use \GuzzleHttp\Client as Guzzle;
use \MaddHatter\MarkdownTable\Builder as TableBuilder;
$client = new Guzzle();
$images = ['gone/php', 'gone/node', 'gone/marshall', ];
$results = [];
foreach($images as $image) {
$results[$image] = [];
$url = "https://hub.docker.com/v2/repositories/{$image}/tags/";
$allLoaded = false;
while ($allLoaded == false) {
$data = $client->get($url)->getBody()->getContents();
$json = json_decode($data, true);
$results[$image] = array_merge($results[$image], $json['results']);
if ($json['next']) {
$url = $json['next'];
} else {
$allLoaded = true;
}
}
}
$tableBuilder = new TableBuilder();
$tableBuilder->headers(['Name', 'Architecture', 'Size', 'Last Updated', 'Microbadger']);
$tableBuilder->align(['L','L', 'R','R','C']);
foreach($results as $image => $variants){
foreach($variants as $variant) {
$fullImageName = $image . ":" . $variant['name'];
$megabytes = number_format($variant['full_size'] / 1024 / 1024, 2);
$sizeColour = 'green';
if($megabytes > 150){
$sizeColour = 'orange';
}
if($megabytes > 180){
$sizeColour = 'red';
}
$arches = [];
foreach($variant['images'] as $archSpecificImage){
$arches[] = $archSpecificImage['architecture'];
}
$tableBuilder->row([
$fullImageName,
strtoupper(implode(", ", $arches)),
"[![Layers](https://img.shields.io/badge/{$megabytes}MB-{$sizeColour}.svg)](https://hub.docker.com/r/{$image})",
date("Y-m-d H:i:s", strtotime($variant['last_updated'])),
"[![](https://images.microbadger.com/badges/image/{$fullImageName}.svg)](https://microbadger.com/images/{$fullImageName} \"Get your own image badge on microbadger.com\")",
]);
}
}
$readme = file_get_contents(__DIR__ ."/../README.template");
$readme = str_replace("{{TABLE}}", $tableBuilder->render(), $readme);
file_put_contents(__DIR__ . "/../README.md", $readme);