92 lines
No EOL
2.6 KiB
PHP
Executable file
92 lines
No EOL
2.6 KiB
PHP
Executable file
#!/usr/bin/php
|
|
<?php
|
|
|
|
require_once __DIR__ . "/vendor/autoload.php";
|
|
|
|
use \Symfony\Component\Yaml\Yaml;
|
|
|
|
$image = "library/mariadb";
|
|
$stumpName = explode("/", $image,2)[1];
|
|
$excludedTags = [ 'r', 'rc', 'rc-bionic' ];
|
|
|
|
$client = new \GuzzleHttp\Client();
|
|
|
|
$allLoaded = false;
|
|
$results = ['rc', 'rc-bionic'];
|
|
$url = "https://hub.docker.com/v2/repositories/{$image}/tags/";
|
|
while($allLoaded == false) {
|
|
$data = $client->get($url)->getBody()->getContents();
|
|
$json = json_decode($data, true);
|
|
|
|
$results = array_merge($results, $json['results']);
|
|
if($json['next']){
|
|
$url = $json['next'];
|
|
}else{
|
|
$allLoaded = true;
|
|
}
|
|
}
|
|
|
|
$travisYaml = [
|
|
'language' => 'bash',
|
|
'notifications' => [
|
|
'email' => [
|
|
'matthew@baggett.me',
|
|
]
|
|
],
|
|
'before_script' => [
|
|
'docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD $DOCKER_REGISTRY',
|
|
'sudo rm /usr/local/bin/docker-compose',
|
|
'curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-`uname -s`-`uname -m` > docker-compose',
|
|
'chmod +x docker-compose',
|
|
'sudo mv docker-compose /usr/local/bin',
|
|
],
|
|
'script' => [
|
|
"docker-compose -f build.yml build $stumpName-\$VERSION",
|
|
],
|
|
'after_script' => [
|
|
"docker-compose -f build.yml push $stumpName-\$VERSION",
|
|
],
|
|
'env' => [],
|
|
];
|
|
|
|
$buildYaml = [
|
|
'version' => (string) '2.3',
|
|
'services' => []
|
|
];
|
|
|
|
foreach($results as $result) {
|
|
if(!isset($result['name']))
|
|
continue;
|
|
|
|
if(in_array($result['name'], $excludedTags))
|
|
continue;
|
|
|
|
$dockerfileLines = [];
|
|
$dockerfileLines[] = "# From upstream {$stumpName}:{$result['name']}";
|
|
$dockerfileLines[] = "FROM {$stumpName}:{$result['name']}";
|
|
$dockerfileLines[] = "# Copy healthcheck file.";
|
|
$dockerfileLines[] = "COPY health.sh /usr/bin/healthcheck";
|
|
$dockerfileLines[] = "# Add healthcheck";
|
|
$dockerfileLines[] = "HEALTHCHECK --interval=30s --timeout=3s \\";
|
|
$dockerfileLines[] = " CMD /usr/bin/healthcheck ";
|
|
|
|
$dockerfile = "generated/Dockerfile.{$result['name']}";
|
|
$buildYaml['services'][$stumpName . '-' . $result['name']] = [
|
|
'build' => [
|
|
'context' => '.',
|
|
'dockerfile' => $dockerfile
|
|
],
|
|
'image' => "benzine/{$stumpName}:{$result['name']}",
|
|
];
|
|
|
|
$travisYaml['env'][] = "VERSION={$result['name']}";
|
|
|
|
file_put_contents($dockerfile, implode("\n", $dockerfileLines));
|
|
}
|
|
|
|
sort($travisYaml['env']);
|
|
$travisYaml['env'] = array_slice($travisYaml['env'],-200,200);
|
|
|
|
file_put_contents("build.yml", Yaml::dump($buildYaml));
|
|
|
|
file_put_contents(".travis.yml", Yaml::dump($travisYaml)); |