From 9d1827ae26d15e7296b36e368bc9e4f67e46c7fa Mon Sep 17 00:00:00 2001
From: Matthew Baggett <matthew@baggett.me>
Date: Tue, 13 Aug 2019 17:30:40 +0200
Subject: [PATCH] Initial commit

---
 .gitignore           |   1 +
 .travis.yml          | 312 ++++++++++++++++++++++++++++
 Dockerfile           |   0
 Dockerfile.latest    |   5 +
 build.php            |  75 +++++++
 build.yml            | 301 +++++++++++++++++++++++++++
 composer.json        |  15 ++
 composer.lock        | 482 +++++++++++++++++++++++++++++++++++++++++++
 generated/.gitignore |   2 +
 9 files changed, 1193 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .travis.yml
 create mode 100644 Dockerfile
 create mode 100644 Dockerfile.latest
 create mode 100644 build.php
 create mode 100644 build.yml
 create mode 100644 composer.json
 create mode 100644 composer.lock
 create mode 100644 generated/.gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..57872d0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/vendor/
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..4d903a3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,312 @@
+language: bash
+notifications:
+    email: [matthew@baggett.me]
+before_script:
+    - '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 redis-$VERSION'
+after_script:
+    - 'docker-compose -f build.yml push redis-$VERSION'
+env:
+    - VERSION=latest
+    - VERSION=buster
+    - VERSION=alpine3.10
+    - VERSION=alpine
+    - VERSION=5.0.5-buster
+    - VERSION=5.0.5-alpine3.10
+    - VERSION=5.0.5-alpine
+    - VERSION=5.0.5-32bit-buster
+    - VERSION=5.0.5-32bit
+    - VERSION=5.0.5
+    - VERSION=5.0-buster
+    - VERSION=5.0-alpine3.10
+    - VERSION=5.0-alpine
+    - VERSION=5.0-32bit-buster
+    - VERSION=5.0-32bit
+    - VERSION=5.0
+    - VERSION=5-buster
+    - VERSION=5-alpine3.10
+    - VERSION=5-alpine
+    - VERSION=5-32bit-buster
+    - VERSION=5-32bit
+    - VERSION=5
+    - VERSION=4.0.14-buster
+    - VERSION=4.0.14-alpine3.10
+    - VERSION=4.0.14-alpine
+    - VERSION=4.0.14-32bit-buster
+    - VERSION=4.0.14-32bit
+    - VERSION=4.0.14
+    - VERSION=4.0-buster
+    - VERSION=4.0-alpine3.10
+    - VERSION=4.0-alpine
+    - VERSION=4.0-32bit-buster
+    - VERSION=4.0-32bit
+    - VERSION=4.0
+    - VERSION=4-buster
+    - VERSION=4-alpine3.10
+    - VERSION=4-alpine
+    - VERSION=4-32bit-buster
+    - VERSION=4-32bit
+    - VERSION=4
+    - VERSION=32bit-buster
+    - VERSION=32bit
+    - VERSION=stretch
+    - VERSION=5.0.5-stretch
+    - VERSION=5.0-stretch
+    - VERSION=5-stretch
+    - VERSION=4.0.14-stretch
+    - VERSION=4.0-stretch
+    - VERSION=4-stretch
+    - VERSION=5.0.5-32bit-stretch
+    - VERSION=5.0-32bit-stretch
+    - VERSION=5-32bit-stretch
+    - VERSION=4.0.14-32bit-stretch
+    - VERSION=4.0-32bit-stretch
+    - VERSION=4-32bit-stretch
+    - VERSION=32bit-stretch
+    - VERSION=alpine3.9
+    - VERSION=5.0.5-alpine3.9
+    - VERSION=5.0-alpine3.9
+    - VERSION=5-alpine3.9
+    - VERSION=4.0.14-alpine3.9
+    - VERSION=4.0-alpine3.9
+    - VERSION=4-alpine3.9
+    - VERSION=5.0.4-alpine3.9
+    - VERSION=5.0.4-alpine
+    - VERSION=5.0.4-stretch
+    - VERSION=5.0.4
+    - VERSION=5.0.4-32bit-stretch
+    - VERSION=5.0.4-32bit
+    - VERSION=4.0.13-alpine3.9
+    - VERSION=4.0.13-alpine
+    - VERSION=5.0.3-alpine3.9
+    - VERSION=5.0.3-alpine
+    - VERSION=4.0.13-stretch
+    - VERSION=4.0.13
+    - VERSION=5.0.3-stretch
+    - VERSION=5.0.3
+    - VERSION=4.0.13-32bit-stretch
+    - VERSION=4.0.13-32bit
+    - VERSION=5.0.3-32bit-stretch
+    - VERSION=5.0.3-32bit
+    - VERSION=4.0.12-stretch
+    - VERSION=4.0.12
+    - VERSION=4.0.12-alpine3.9
+    - VERSION=4.0.12-alpine
+    - VERSION=4.0.12-32bit-stretch
+    - VERSION=4.0.12-32bit
+    - VERSION=4-alpine3.8
+    - VERSION=4.0-alpine3.8
+    - VERSION=4.0.12-alpine3.8
+    - VERSION=alpine3.8
+    - VERSION=5-alpine3.8
+    - VERSION=5.0-alpine3.8
+    - VERSION=5.0.3-alpine3.8
+    - VERSION=5.0.2-alpine3.8
+    - VERSION=5.0.2-alpine
+    - VERSION=5.0.2-stretch
+    - VERSION=5.0.2
+    - VERSION=5.0.2-32bit-stretch
+    - VERSION=5.0.2-32bit
+    - VERSION=5.0.1-alpine3.8
+    - VERSION=5.0.1-alpine
+    - VERSION=4.0.11-stretch
+    - VERSION=4.0.11
+    - VERSION=5.0.1-stretch
+    - VERSION=5.0.1
+    - VERSION=4.0.11-32bit-stretch
+    - VERSION=4.0.11-32bit
+    - VERSION=5.0.1-32bit-stretch
+    - VERSION=5.0.1-32bit
+    - VERSION=5.0.0-alpine3.8
+    - VERSION=5.0.0-alpine
+    - VERSION=5.0.0-stretch
+    - VERSION=5.0.0
+    - VERSION=5.0.0-32bit-stretch
+    - VERSION=5.0.0-32bit
+    - VERSION=3-stretch
+    - VERSION=3.2-stretch
+    - VERSION=3.2.12-stretch
+    - VERSION=3
+    - VERSION=3.2
+    - VERSION=3.2.12
+    - VERSION=5.0-rc-stretch
+    - VERSION=5.0-rc6-stretch
+    - VERSION=5.0-rc
+    - VERSION=5.0-rc6
+    - VERSION=3-32bit-stretch
+    - VERSION=3.2-32bit-stretch
+    - VERSION=3.2.12-32bit-stretch
+    - VERSION=3-32bit
+    - VERSION=3.2-32bit
+    - VERSION=3.2.12-32bit
+    - VERSION=5.0-rc-32bit-stretch
+    - VERSION=5.0-rc6-32bit-stretch
+    - VERSION=5.0-rc-32bit
+    - VERSION=5.0-rc6-32bit
+    - VERSION=5.0-rc-alpine3.8
+    - VERSION=5.0-rc6-alpine3.8
+    - VERSION=5.0-rc-alpine
+    - VERSION=5.0-rc6-alpine
+    - VERSION=3-alpine3.8
+    - VERSION=3.2-alpine3.8
+    - VERSION=3.2.12-alpine3.8
+    - VERSION=3-alpine
+    - VERSION=3.2-alpine
+    - VERSION=3.2.12-alpine
+    - VERSION=4.0.11-alpine3.8
+    - VERSION=4.0.11-alpine
+    - VERSION=5.0-rc5-alpine3.8
+    - VERSION=5.0-rc5-alpine
+    - VERSION=5.0-rc5-stretch
+    - VERSION=5.0-rc5
+    - VERSION=5.0-rc5-32bit-stretch
+    - VERSION=5.0-rc5-32bit
+    - VERSION=5.0-rc4-alpine3.8
+    - VERSION=5.0-rc4-alpine
+    - VERSION=5.0-rc4
+    - VERSION=5.0-rc4-stretch
+    - VERSION=5.0-rc4-32bit-stretch
+    - VERSION=5.0-rc4-32bit
+    - VERSION=4.0.10-stretch
+    - VERSION=4.0.10
+    - VERSION=4.0.10-alpine3.8
+    - VERSION=4.0.10-alpine
+    - VERSION=5.0-rc3-stretch
+    - VERSION=5.0-rc3
+    - VERSION=4.0.10-32bit-stretch
+    - VERSION=5.0-rc3-alpine3.8
+    - VERSION=5.0-rc3-32bit-stretch
+    - VERSION=5.0-rc3-alpine
+    - VERSION=4.0.10-32bit
+    - VERSION=5.0-rc3-32bit
+    - VERSION=4.0.9
+    - VERSION=3.2.11
+    - VERSION=4.0.9-32bit
+    - VERSION=4.0.9-alpine
+    - VERSION=3.2.11-alpine
+    - VERSION=3.2.11-32bit
+    - VERSION=4.0.8-alpine
+    - VERSION=4.0.8
+    - VERSION=4.0.8-32bit
+    - VERSION=4.0.7-alpine
+    - VERSION=4.0.7
+    - VERSION=4.0.7-32bit
+    - VERSION=4.0.6-alpine
+    - VERSION=4.0.6
+    - VERSION=4.0.6-32bit
+    - VERSION=4.0.5
+    - VERSION=4.0.5-alpine
+    - VERSION=4.0.5-32bit
+    - VERSION=4.0.4-alpine
+    - VERSION=4.0.4
+    - VERSION=4.0.4-32bit
+    - VERSION=4.0.2-32bit
+    - VERSION=4.0.2
+    - VERSION=4.0.2-alpine
+    - VERSION=4.0.1-alpine
+    - VERSION=4.0.1-32bit
+    - VERSION=4.0.1
+    - VERSION=3.2.10-alpine
+    - VERSION=3.2.10-32bit
+    - VERSION=3.2.10
+    - VERSION=3.2.9-alpine
+    - VERSION=3.2.9-32bit
+    - VERSION=3.2.9
+    - VERSION=4.0.0-alpine
+    - VERSION=4.0.0-32bit
+    - VERSION=4.0.0
+    - VERSION=nanoserver
+    - VERSION=3-nanoserver
+    - VERSION=3.2-nanoserver
+    - VERSION=3.2.100-nanoserver
+    - VERSION=windowsservercore
+    - VERSION=3-windowsservercore
+    - VERSION=3.2-windowsservercore
+    - VERSION=3.2.100-windowsservercore
+    - VERSION=3.0-nanoserver
+    - VERSION=3.0.504-nanoserver
+    - VERSION=3.0-windowsservercore
+    - VERSION=3.0.504-windowsservercore
+    - VERSION=3.0-alpine
+    - VERSION=3.0.7-alpine
+    - VERSION=3.0-32bit
+    - VERSION=3.0.7-32bit
+    - VERSION=3.0
+    - VERSION=3.0.7
+    - VERSION=3.2.8-alpine
+    - VERSION=3.2.8-32bit
+    - VERSION=3.2.8
+    - VERSION=3.2.7-alpine
+    - VERSION=3.2.7-32bit
+    - VERSION=3.2.7
+    - VERSION=3.2.6-alpine
+    - VERSION=3.2.6-32bit
+    - VERSION=3.2.6
+    - VERSION=3.2.6-nanoserver
+    - VERSION=3.2.6-windowsservercore
+    - VERSION=3.0.7-nanoserver
+    - VERSION=3.0.7-windowsservercore
+    - VERSION=3.2.5-32bit
+    - VERSION=3.2.5
+    - VERSION=3.2.5-alpine
+    - VERSION=3.2.4-32bit
+    - VERSION=3.2.4
+    - VERSION=3.2.4-alpine
+    - VERSION=3.2.3-32bit
+    - VERSION=3.2.3
+    - VERSION=3.2.3-alpine
+    - VERSION=3.2.2-alpine
+    - VERSION=3.2.2-32bit
+    - VERSION=3.2.2
+    - VERSION=3.2.1-alpine
+    - VERSION=3.2.1-32bit
+    - VERSION=3.2.1
+    - VERSION=3.2.0-alpine
+    - VERSION=3.2.0-32bit
+    - VERSION=3.2.0
+    - VERSION=2-32bit
+    - VERSION=2.8-32bit
+    - VERSION=2.8.23-32bit
+    - VERSION=2
+    - VERSION=2.8
+    - VERSION=2.8.23
+    - VERSION=3.0.6-alpine
+    - VERSION=3.0.6-32bit
+    - VERSION=3.0.6
+    - VERSION=2.6-32bit
+    - VERSION=2.6.17-32bit
+    - VERSION=2.6
+    - VERSION=2.6.17
+    - VERSION=3.0.5-32bit
+    - VERSION=3.0.5
+    - VERSION=3.0.4-32bit
+    - VERSION=3.0.4
+    - VERSION=2.8.22-32bit
+    - VERSION=2.8.22
+    - VERSION=3.0.3-32bit
+    - VERSION=3.0.3
+    - VERSION=3.0.2-32bit
+    - VERSION=2.8.21-32bit
+    - VERSION=2.8.6
+    - VERSION=2.8.7
+    - VERSION=2.8.8
+    - VERSION=2.8.9
+    - VERSION=2.8.11
+    - VERSION=2.8.18
+    - VERSION=2.8.19
+    - VERSION=2.8.10
+    - VERSION=2.8.12
+    - VERSION=2.8.13
+    - VERSION=2.8.14
+    - VERSION=2.8.16
+    - VERSION=2.8.17
+    - VERSION=2.8.15
+    - VERSION=2.8.21
+    - VERSION=2.8.20
+    - VERSION=3.0.1
+    - VERSION=3.0.0
+    - VERSION=3.0.2
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..e69de29
diff --git a/Dockerfile.latest b/Dockerfile.latest
new file mode 100644
index 0000000..12d1f56
--- /dev/null
+++ b/Dockerfile.latest
@@ -0,0 +1,5 @@
+# From upstream latest
+FROM redis:latest
+# Add healthcheck
+HEALTHCHECK --interval=30s --timeout=3s \
+  CMD redis-cli PING 
\ No newline at end of file
diff --git a/build.php b/build.php
new file mode 100644
index 0000000..9ed0899
--- /dev/null
+++ b/build.php
@@ -0,0 +1,75 @@
+<?php
+
+require_once __DIR__ . "/vendor/autoload.php";
+
+use \Symfony\Component\Yaml\Yaml;
+
+$client = new \GuzzleHttp\Client();
+
+$allLoaded = false;
+$results = [];
+$url = "https://hub.docker.com/v2/repositories/library/redis/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' => [
+        '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 redis-$VERSION'
+    ],
+    'after_script' => [
+        'docker-compose -f build.yml push redis-$VERSION'
+    ],
+    'env' => [],
+];
+
+$buildYaml = [
+    'version' => (string) '2.3',
+    'services' => []
+];
+
+foreach($results as $result){
+    $dockerfileLines = [];
+    $dockerfileLines[] = "# From upstream {$result['name']}";
+    $dockerfileLines[] = "FROM redis:{$result['name']}";
+    $dockerfileLines[] = "# Add healthcheck";
+    $dockerfileLines[] = "HEALTHCHECK --interval=30s --timeout=3s \\";
+    $dockerfileLines[] = "  CMD redis-cli PING ";
+
+    $dockerfile = "generated/Dockerfile.{$result['name']}";
+    $buildYaml['services']['redis-' . $result['name']] = [
+        'build' => [
+            'context' => '.',
+            'dockerfile' => $dockerfile
+        ],
+        'image' => "benzine/redis:{$result['name']}",
+    ];
+
+    $travisYaml['env'][] = "VERSION={$result['name']}";
+
+    file_put_contents($dockerfile, implode("\n", $dockerfileLines));
+}
+
+file_put_contents("build.yml", Yaml::dump($buildYaml));
+
+file_put_contents(".travis.yml", Yaml::dump($travisYaml));
\ No newline at end of file
diff --git a/build.yml b/build.yml
new file mode 100644
index 0000000..7b85629
--- /dev/null
+++ b/build.yml
@@ -0,0 +1,301 @@
+version: '2.3'
+services:
+    redis-latest: { build: { context: ., dockerfile: generated/Dockerfile.latest }, image: 'benzine/redis:latest' }
+    redis-buster: { build: { context: ., dockerfile: generated/Dockerfile.buster }, image: 'benzine/redis:buster' }
+    redis-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.alpine3.10 }, image: 'benzine/redis:alpine3.10' }
+    redis-alpine: { build: { context: ., dockerfile: generated/Dockerfile.alpine }, image: 'benzine/redis:alpine' }
+    redis-5.0.5-buster: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-buster }, image: 'benzine/redis:5.0.5-buster' }
+    redis-5.0.5-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-alpine3.10 }, image: 'benzine/redis:5.0.5-alpine3.10' }
+    redis-5.0.5-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-alpine }, image: 'benzine/redis:5.0.5-alpine' }
+    redis-5.0.5-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-32bit-buster }, image: 'benzine/redis:5.0.5-32bit-buster' }
+    redis-5.0.5-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-32bit }, image: 'benzine/redis:5.0.5-32bit' }
+    redis-5.0.5: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5 }, image: 'benzine/redis:5.0.5' }
+    redis-5.0-buster: { build: { context: ., dockerfile: generated/Dockerfile.5.0-buster }, image: 'benzine/redis:5.0-buster' }
+    redis-5.0-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.5.0-alpine3.10 }, image: 'benzine/redis:5.0-alpine3.10' }
+    redis-5.0-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0-alpine }, image: 'benzine/redis:5.0-alpine' }
+    redis-5.0-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.5.0-32bit-buster }, image: 'benzine/redis:5.0-32bit-buster' }
+    redis-5.0-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0-32bit }, image: 'benzine/redis:5.0-32bit' }
+    redis-5.0: { build: { context: ., dockerfile: generated/Dockerfile.5.0 }, image: 'benzine/redis:5.0' }
+    redis-5-buster: { build: { context: ., dockerfile: generated/Dockerfile.5-buster }, image: 'benzine/redis:5-buster' }
+    redis-5-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.5-alpine3.10 }, image: 'benzine/redis:5-alpine3.10' }
+    redis-5-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5-alpine }, image: 'benzine/redis:5-alpine' }
+    redis-5-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.5-32bit-buster }, image: 'benzine/redis:5-32bit-buster' }
+    redis-5-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5-32bit }, image: 'benzine/redis:5-32bit' }
+    redis-5: { build: { context: ., dockerfile: generated/Dockerfile.5 }, image: 'benzine/redis:5' }
+    redis-4.0.14-buster: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-buster }, image: 'benzine/redis:4.0.14-buster' }
+    redis-4.0.14-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-alpine3.10 }, image: 'benzine/redis:4.0.14-alpine3.10' }
+    redis-4.0.14-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-alpine }, image: 'benzine/redis:4.0.14-alpine' }
+    redis-4.0.14-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-32bit-buster }, image: 'benzine/redis:4.0.14-32bit-buster' }
+    redis-4.0.14-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-32bit }, image: 'benzine/redis:4.0.14-32bit' }
+    redis-4.0.14: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14 }, image: 'benzine/redis:4.0.14' }
+    redis-4.0-buster: { build: { context: ., dockerfile: generated/Dockerfile.4.0-buster }, image: 'benzine/redis:4.0-buster' }
+    redis-4.0-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.4.0-alpine3.10 }, image: 'benzine/redis:4.0-alpine3.10' }
+    redis-4.0-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0-alpine }, image: 'benzine/redis:4.0-alpine' }
+    redis-4.0-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.4.0-32bit-buster }, image: 'benzine/redis:4.0-32bit-buster' }
+    redis-4.0-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0-32bit }, image: 'benzine/redis:4.0-32bit' }
+    redis-4.0: { build: { context: ., dockerfile: generated/Dockerfile.4.0 }, image: 'benzine/redis:4.0' }
+    redis-4-buster: { build: { context: ., dockerfile: generated/Dockerfile.4-buster }, image: 'benzine/redis:4-buster' }
+    redis-4-alpine3.10: { build: { context: ., dockerfile: generated/Dockerfile.4-alpine3.10 }, image: 'benzine/redis:4-alpine3.10' }
+    redis-4-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4-alpine }, image: 'benzine/redis:4-alpine' }
+    redis-4-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.4-32bit-buster }, image: 'benzine/redis:4-32bit-buster' }
+    redis-4-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4-32bit }, image: 'benzine/redis:4-32bit' }
+    redis-4: { build: { context: ., dockerfile: generated/Dockerfile.4 }, image: 'benzine/redis:4' }
+    redis-32bit-buster: { build: { context: ., dockerfile: generated/Dockerfile.32bit-buster }, image: 'benzine/redis:32bit-buster' }
+    redis-32bit: { build: { context: ., dockerfile: generated/Dockerfile.32bit }, image: 'benzine/redis:32bit' }
+    redis-stretch: { build: { context: ., dockerfile: generated/Dockerfile.stretch }, image: 'benzine/redis:stretch' }
+    redis-5.0.5-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-stretch }, image: 'benzine/redis:5.0.5-stretch' }
+    redis-5.0-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-stretch }, image: 'benzine/redis:5.0-stretch' }
+    redis-5-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5-stretch }, image: 'benzine/redis:5-stretch' }
+    redis-4.0.14-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-stretch }, image: 'benzine/redis:4.0.14-stretch' }
+    redis-4.0-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0-stretch }, image: 'benzine/redis:4.0-stretch' }
+    redis-4-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4-stretch }, image: 'benzine/redis:4-stretch' }
+    redis-5.0.5-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-32bit-stretch }, image: 'benzine/redis:5.0.5-32bit-stretch' }
+    redis-5.0-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-32bit-stretch }, image: 'benzine/redis:5.0-32bit-stretch' }
+    redis-5-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5-32bit-stretch }, image: 'benzine/redis:5-32bit-stretch' }
+    redis-4.0.14-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-32bit-stretch }, image: 'benzine/redis:4.0.14-32bit-stretch' }
+    redis-4.0-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0-32bit-stretch }, image: 'benzine/redis:4.0-32bit-stretch' }
+    redis-4-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4-32bit-stretch }, image: 'benzine/redis:4-32bit-stretch' }
+    redis-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.32bit-stretch }, image: 'benzine/redis:32bit-stretch' }
+    redis-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.alpine3.9 }, image: 'benzine/redis:alpine3.9' }
+    redis-5.0.5-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.5.0.5-alpine3.9 }, image: 'benzine/redis:5.0.5-alpine3.9' }
+    redis-5.0-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.5.0-alpine3.9 }, image: 'benzine/redis:5.0-alpine3.9' }
+    redis-5-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.5-alpine3.9 }, image: 'benzine/redis:5-alpine3.9' }
+    redis-4.0.14-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.4.0.14-alpine3.9 }, image: 'benzine/redis:4.0.14-alpine3.9' }
+    redis-4.0-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.4.0-alpine3.9 }, image: 'benzine/redis:4.0-alpine3.9' }
+    redis-4-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.4-alpine3.9 }, image: 'benzine/redis:4-alpine3.9' }
+    redis-5.0.4-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.5.0.4-alpine3.9 }, image: 'benzine/redis:5.0.4-alpine3.9' }
+    redis-5.0.4-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0.4-alpine }, image: 'benzine/redis:5.0.4-alpine' }
+    redis-5.0.4-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.4-stretch }, image: 'benzine/redis:5.0.4-stretch' }
+    redis-5.0.4: { build: { context: ., dockerfile: generated/Dockerfile.5.0.4 }, image: 'benzine/redis:5.0.4' }
+    redis-5.0.4-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.4-32bit-stretch }, image: 'benzine/redis:5.0.4-32bit-stretch' }
+    redis-5.0.4-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0.4-32bit }, image: 'benzine/redis:5.0.4-32bit' }
+    redis-4.0.13-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.4.0.13-alpine3.9 }, image: 'benzine/redis:4.0.13-alpine3.9' }
+    redis-4.0.13-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.13-alpine }, image: 'benzine/redis:4.0.13-alpine' }
+    redis-5.0.3-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3-alpine3.9 }, image: 'benzine/redis:5.0.3-alpine3.9' }
+    redis-5.0.3-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3-alpine }, image: 'benzine/redis:5.0.3-alpine' }
+    redis-4.0.13-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.13-stretch }, image: 'benzine/redis:4.0.13-stretch' }
+    redis-4.0.13: { build: { context: ., dockerfile: generated/Dockerfile.4.0.13 }, image: 'benzine/redis:4.0.13' }
+    redis-5.0.3-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3-stretch }, image: 'benzine/redis:5.0.3-stretch' }
+    redis-5.0.3: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3 }, image: 'benzine/redis:5.0.3' }
+    redis-4.0.13-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.13-32bit-stretch }, image: 'benzine/redis:4.0.13-32bit-stretch' }
+    redis-4.0.13-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.13-32bit }, image: 'benzine/redis:4.0.13-32bit' }
+    redis-5.0.3-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3-32bit-stretch }, image: 'benzine/redis:5.0.3-32bit-stretch' }
+    redis-5.0.3-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3-32bit }, image: 'benzine/redis:5.0.3-32bit' }
+    redis-4.0.12-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12-stretch }, image: 'benzine/redis:4.0.12-stretch' }
+    redis-4.0.12: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12 }, image: 'benzine/redis:4.0.12' }
+    redis-4.0.12-alpine3.9: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12-alpine3.9 }, image: 'benzine/redis:4.0.12-alpine3.9' }
+    redis-4.0.12-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12-alpine }, image: 'benzine/redis:4.0.12-alpine' }
+    redis-4.0.12-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12-32bit-stretch }, image: 'benzine/redis:4.0.12-32bit-stretch' }
+    redis-4.0.12-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12-32bit }, image: 'benzine/redis:4.0.12-32bit' }
+    redis-4-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.4-alpine3.8 }, image: 'benzine/redis:4-alpine3.8' }
+    redis-4.0-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.4.0-alpine3.8 }, image: 'benzine/redis:4.0-alpine3.8' }
+    redis-4.0.12-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.4.0.12-alpine3.8 }, image: 'benzine/redis:4.0.12-alpine3.8' }
+    redis-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.alpine3.8 }, image: 'benzine/redis:alpine3.8' }
+    redis-5-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5-alpine3.8 }, image: 'benzine/redis:5-alpine3.8' }
+    redis-5.0-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0-alpine3.8 }, image: 'benzine/redis:5.0-alpine3.8' }
+    redis-5.0.3-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0.3-alpine3.8 }, image: 'benzine/redis:5.0.3-alpine3.8' }
+    redis-5.0.2-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0.2-alpine3.8 }, image: 'benzine/redis:5.0.2-alpine3.8' }
+    redis-5.0.2-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0.2-alpine }, image: 'benzine/redis:5.0.2-alpine' }
+    redis-5.0.2-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.2-stretch }, image: 'benzine/redis:5.0.2-stretch' }
+    redis-5.0.2: { build: { context: ., dockerfile: generated/Dockerfile.5.0.2 }, image: 'benzine/redis:5.0.2' }
+    redis-5.0.2-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.2-32bit-stretch }, image: 'benzine/redis:5.0.2-32bit-stretch' }
+    redis-5.0.2-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0.2-32bit }, image: 'benzine/redis:5.0.2-32bit' }
+    redis-5.0.1-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0.1-alpine3.8 }, image: 'benzine/redis:5.0.1-alpine3.8' }
+    redis-5.0.1-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0.1-alpine }, image: 'benzine/redis:5.0.1-alpine' }
+    redis-4.0.11-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.11-stretch }, image: 'benzine/redis:4.0.11-stretch' }
+    redis-4.0.11: { build: { context: ., dockerfile: generated/Dockerfile.4.0.11 }, image: 'benzine/redis:4.0.11' }
+    redis-5.0.1-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.1-stretch }, image: 'benzine/redis:5.0.1-stretch' }
+    redis-5.0.1: { build: { context: ., dockerfile: generated/Dockerfile.5.0.1 }, image: 'benzine/redis:5.0.1' }
+    redis-4.0.11-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.11-32bit-stretch }, image: 'benzine/redis:4.0.11-32bit-stretch' }
+    redis-4.0.11-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.11-32bit }, image: 'benzine/redis:4.0.11-32bit' }
+    redis-5.0.1-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.1-32bit-stretch }, image: 'benzine/redis:5.0.1-32bit-stretch' }
+    redis-5.0.1-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0.1-32bit }, image: 'benzine/redis:5.0.1-32bit' }
+    redis-5.0.0-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0.0-alpine3.8 }, image: 'benzine/redis:5.0.0-alpine3.8' }
+    redis-5.0.0-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0.0-alpine }, image: 'benzine/redis:5.0.0-alpine' }
+    redis-5.0.0-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.0-stretch }, image: 'benzine/redis:5.0.0-stretch' }
+    redis-5.0.0: { build: { context: ., dockerfile: generated/Dockerfile.5.0.0 }, image: 'benzine/redis:5.0.0' }
+    redis-5.0.0-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0.0-32bit-stretch }, image: 'benzine/redis:5.0.0-32bit-stretch' }
+    redis-5.0.0-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0.0-32bit }, image: 'benzine/redis:5.0.0-32bit' }
+    redis-3-stretch: { build: { context: ., dockerfile: generated/Dockerfile.3-stretch }, image: 'benzine/redis:3-stretch' }
+    redis-3.2-stretch: { build: { context: ., dockerfile: generated/Dockerfile.3.2-stretch }, image: 'benzine/redis:3.2-stretch' }
+    redis-3.2.12-stretch: { build: { context: ., dockerfile: generated/Dockerfile.3.2.12-stretch }, image: 'benzine/redis:3.2.12-stretch' }
+    redis-3: { build: { context: ., dockerfile: generated/Dockerfile.3 }, image: 'benzine/redis:3' }
+    redis-3.2: { build: { context: ., dockerfile: generated/Dockerfile.3.2 }, image: 'benzine/redis:3.2' }
+    redis-3.2.12: { build: { context: ., dockerfile: generated/Dockerfile.3.2.12 }, image: 'benzine/redis:3.2.12' }
+    redis-5.0-rc-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc-stretch }, image: 'benzine/redis:5.0-rc-stretch' }
+    redis-5.0-rc6-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc6-stretch }, image: 'benzine/redis:5.0-rc6-stretch' }
+    redis-5.0-rc: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc }, image: 'benzine/redis:5.0-rc' }
+    redis-5.0-rc6: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc6 }, image: 'benzine/redis:5.0-rc6' }
+    redis-3-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.3-32bit-stretch }, image: 'benzine/redis:3-32bit-stretch' }
+    redis-3.2-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.3.2-32bit-stretch }, image: 'benzine/redis:3.2-32bit-stretch' }
+    redis-3.2.12-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.3.2.12-32bit-stretch }, image: 'benzine/redis:3.2.12-32bit-stretch' }
+    redis-3-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3-32bit }, image: 'benzine/redis:3-32bit' }
+    redis-3.2-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2-32bit }, image: 'benzine/redis:3.2-32bit' }
+    redis-3.2.12-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.12-32bit }, image: 'benzine/redis:3.2.12-32bit' }
+    redis-5.0-rc-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc-32bit-stretch }, image: 'benzine/redis:5.0-rc-32bit-stretch' }
+    redis-5.0-rc6-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc6-32bit-stretch }, image: 'benzine/redis:5.0-rc6-32bit-stretch' }
+    redis-5.0-rc-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc-32bit }, image: 'benzine/redis:5.0-rc-32bit' }
+    redis-5.0-rc6-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc6-32bit }, image: 'benzine/redis:5.0-rc6-32bit' }
+    redis-5.0-rc-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc-alpine3.8 }, image: 'benzine/redis:5.0-rc-alpine3.8' }
+    redis-5.0-rc6-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc6-alpine3.8 }, image: 'benzine/redis:5.0-rc6-alpine3.8' }
+    redis-5.0-rc-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc-alpine }, image: 'benzine/redis:5.0-rc-alpine' }
+    redis-5.0-rc6-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc6-alpine }, image: 'benzine/redis:5.0-rc6-alpine' }
+    redis-3-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.3-alpine3.8 }, image: 'benzine/redis:3-alpine3.8' }
+    redis-3.2-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.3.2-alpine3.8 }, image: 'benzine/redis:3.2-alpine3.8' }
+    redis-3.2.12-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.3.2.12-alpine3.8 }, image: 'benzine/redis:3.2.12-alpine3.8' }
+    redis-3-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3-alpine }, image: 'benzine/redis:3-alpine' }
+    redis-3.2-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2-alpine }, image: 'benzine/redis:3.2-alpine' }
+    redis-3.2.12-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.12-alpine }, image: 'benzine/redis:3.2.12-alpine' }
+    redis-4.0.11-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.4.0.11-alpine3.8 }, image: 'benzine/redis:4.0.11-alpine3.8' }
+    redis-4.0.11-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.11-alpine }, image: 'benzine/redis:4.0.11-alpine' }
+    redis-5.0-rc5-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc5-alpine3.8 }, image: 'benzine/redis:5.0-rc5-alpine3.8' }
+    redis-5.0-rc5-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc5-alpine }, image: 'benzine/redis:5.0-rc5-alpine' }
+    redis-5.0-rc5-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc5-stretch }, image: 'benzine/redis:5.0-rc5-stretch' }
+    redis-5.0-rc5: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc5 }, image: 'benzine/redis:5.0-rc5' }
+    redis-5.0-rc5-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc5-32bit-stretch }, image: 'benzine/redis:5.0-rc5-32bit-stretch' }
+    redis-5.0-rc5-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc5-32bit }, image: 'benzine/redis:5.0-rc5-32bit' }
+    redis-5.0-rc4-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc4-alpine3.8 }, image: 'benzine/redis:5.0-rc4-alpine3.8' }
+    redis-5.0-rc4-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc4-alpine }, image: 'benzine/redis:5.0-rc4-alpine' }
+    redis-5.0-rc4: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc4 }, image: 'benzine/redis:5.0-rc4' }
+    redis-5.0-rc4-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc4-stretch }, image: 'benzine/redis:5.0-rc4-stretch' }
+    redis-5.0-rc4-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc4-32bit-stretch }, image: 'benzine/redis:5.0-rc4-32bit-stretch' }
+    redis-5.0-rc4-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc4-32bit }, image: 'benzine/redis:5.0-rc4-32bit' }
+    redis-4.0.10-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.10-stretch }, image: 'benzine/redis:4.0.10-stretch' }
+    redis-4.0.10: { build: { context: ., dockerfile: generated/Dockerfile.4.0.10 }, image: 'benzine/redis:4.0.10' }
+    redis-4.0.10-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.4.0.10-alpine3.8 }, image: 'benzine/redis:4.0.10-alpine3.8' }
+    redis-4.0.10-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.10-alpine }, image: 'benzine/redis:4.0.10-alpine' }
+    redis-5.0-rc3-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc3-stretch }, image: 'benzine/redis:5.0-rc3-stretch' }
+    redis-5.0-rc3: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc3 }, image: 'benzine/redis:5.0-rc3' }
+    redis-4.0.10-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.4.0.10-32bit-stretch }, image: 'benzine/redis:4.0.10-32bit-stretch' }
+    redis-5.0-rc3-alpine3.8: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc3-alpine3.8 }, image: 'benzine/redis:5.0-rc3-alpine3.8' }
+    redis-5.0-rc3-32bit-stretch: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc3-32bit-stretch }, image: 'benzine/redis:5.0-rc3-32bit-stretch' }
+    redis-5.0-rc3-alpine: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc3-alpine }, image: 'benzine/redis:5.0-rc3-alpine' }
+    redis-4.0.10-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.10-32bit }, image: 'benzine/redis:4.0.10-32bit' }
+    redis-5.0-rc3-32bit: { build: { context: ., dockerfile: generated/Dockerfile.5.0-rc3-32bit }, image: 'benzine/redis:5.0-rc3-32bit' }
+    redis-4.0.9: { build: { context: ., dockerfile: generated/Dockerfile.4.0.9 }, image: 'benzine/redis:4.0.9' }
+    redis-3.2.11: { build: { context: ., dockerfile: generated/Dockerfile.3.2.11 }, image: 'benzine/redis:3.2.11' }
+    redis-4.0.9-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.9-32bit }, image: 'benzine/redis:4.0.9-32bit' }
+    redis-4.0.9-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.9-alpine }, image: 'benzine/redis:4.0.9-alpine' }
+    redis-3.2.11-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.11-alpine }, image: 'benzine/redis:3.2.11-alpine' }
+    redis-3.2.11-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.11-32bit }, image: 'benzine/redis:3.2.11-32bit' }
+    redis-4.0.8-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.8-alpine }, image: 'benzine/redis:4.0.8-alpine' }
+    redis-4.0.8: { build: { context: ., dockerfile: generated/Dockerfile.4.0.8 }, image: 'benzine/redis:4.0.8' }
+    redis-4.0.8-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.8-32bit }, image: 'benzine/redis:4.0.8-32bit' }
+    redis-4.0.7-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.7-alpine }, image: 'benzine/redis:4.0.7-alpine' }
+    redis-4.0.7: { build: { context: ., dockerfile: generated/Dockerfile.4.0.7 }, image: 'benzine/redis:4.0.7' }
+    redis-4.0.7-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.7-32bit }, image: 'benzine/redis:4.0.7-32bit' }
+    redis-4.0.6-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.6-alpine }, image: 'benzine/redis:4.0.6-alpine' }
+    redis-4.0.6: { build: { context: ., dockerfile: generated/Dockerfile.4.0.6 }, image: 'benzine/redis:4.0.6' }
+    redis-4.0.6-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.6-32bit }, image: 'benzine/redis:4.0.6-32bit' }
+    redis-4.0.5: { build: { context: ., dockerfile: generated/Dockerfile.4.0.5 }, image: 'benzine/redis:4.0.5' }
+    redis-4.0.5-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.5-alpine }, image: 'benzine/redis:4.0.5-alpine' }
+    redis-4.0.5-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.5-32bit }, image: 'benzine/redis:4.0.5-32bit' }
+    redis-4.0.4-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.4-alpine }, image: 'benzine/redis:4.0.4-alpine' }
+    redis-4.0.4: { build: { context: ., dockerfile: generated/Dockerfile.4.0.4 }, image: 'benzine/redis:4.0.4' }
+    redis-4.0.4-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.4-32bit }, image: 'benzine/redis:4.0.4-32bit' }
+    redis-4.0.2-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.2-32bit }, image: 'benzine/redis:4.0.2-32bit' }
+    redis-4.0.2: { build: { context: ., dockerfile: generated/Dockerfile.4.0.2 }, image: 'benzine/redis:4.0.2' }
+    redis-4.0.2-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.2-alpine }, image: 'benzine/redis:4.0.2-alpine' }
+    redis-4.0.1-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.1-alpine }, image: 'benzine/redis:4.0.1-alpine' }
+    redis-4.0.1-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.1-32bit }, image: 'benzine/redis:4.0.1-32bit' }
+    redis-4.0.1: { build: { context: ., dockerfile: generated/Dockerfile.4.0.1 }, image: 'benzine/redis:4.0.1' }
+    redis-3.2.10-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.10-alpine }, image: 'benzine/redis:3.2.10-alpine' }
+    redis-3.2.10-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.10-32bit }, image: 'benzine/redis:3.2.10-32bit' }
+    redis-3.2.10: { build: { context: ., dockerfile: generated/Dockerfile.3.2.10 }, image: 'benzine/redis:3.2.10' }
+    redis-3.2.9-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.9-alpine }, image: 'benzine/redis:3.2.9-alpine' }
+    redis-3.2.9-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.9-32bit }, image: 'benzine/redis:3.2.9-32bit' }
+    redis-3.2.9: { build: { context: ., dockerfile: generated/Dockerfile.3.2.9 }, image: 'benzine/redis:3.2.9' }
+    redis-4.0.0-alpine: { build: { context: ., dockerfile: generated/Dockerfile.4.0.0-alpine }, image: 'benzine/redis:4.0.0-alpine' }
+    redis-4.0.0-32bit: { build: { context: ., dockerfile: generated/Dockerfile.4.0.0-32bit }, image: 'benzine/redis:4.0.0-32bit' }
+    redis-4.0.0: { build: { context: ., dockerfile: generated/Dockerfile.4.0.0 }, image: 'benzine/redis:4.0.0' }
+    redis-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.nanoserver }, image: 'benzine/redis:nanoserver' }
+    redis-3-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3-nanoserver }, image: 'benzine/redis:3-nanoserver' }
+    redis-3.2-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3.2-nanoserver }, image: 'benzine/redis:3.2-nanoserver' }
+    redis-3.2.100-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3.2.100-nanoserver }, image: 'benzine/redis:3.2.100-nanoserver' }
+    redis-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.windowsservercore }, image: 'benzine/redis:windowsservercore' }
+    redis-3-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3-windowsservercore }, image: 'benzine/redis:3-windowsservercore' }
+    redis-3.2-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3.2-windowsservercore }, image: 'benzine/redis:3.2-windowsservercore' }
+    redis-3.2.100-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3.2.100-windowsservercore }, image: 'benzine/redis:3.2.100-windowsservercore' }
+    redis-3.0-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3.0-nanoserver }, image: 'benzine/redis:3.0-nanoserver' }
+    redis-3.0.504-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3.0.504-nanoserver }, image: 'benzine/redis:3.0.504-nanoserver' }
+    redis-3.0-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3.0-windowsservercore }, image: 'benzine/redis:3.0-windowsservercore' }
+    redis-3.0.504-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3.0.504-windowsservercore }, image: 'benzine/redis:3.0.504-windowsservercore' }
+    redis-3.0-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.0-alpine }, image: 'benzine/redis:3.0-alpine' }
+    redis-3.0.7-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.0.7-alpine }, image: 'benzine/redis:3.0.7-alpine' }
+    redis-3.0-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0-32bit }, image: 'benzine/redis:3.0-32bit' }
+    redis-3.0.7-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0.7-32bit }, image: 'benzine/redis:3.0.7-32bit' }
+    redis-3.0: { build: { context: ., dockerfile: generated/Dockerfile.3.0 }, image: 'benzine/redis:3.0' }
+    redis-3.0.7: { build: { context: ., dockerfile: generated/Dockerfile.3.0.7 }, image: 'benzine/redis:3.0.7' }
+    redis-3.2.8-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.8-alpine }, image: 'benzine/redis:3.2.8-alpine' }
+    redis-3.2.8-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.8-32bit }, image: 'benzine/redis:3.2.8-32bit' }
+    redis-3.2.8: { build: { context: ., dockerfile: generated/Dockerfile.3.2.8 }, image: 'benzine/redis:3.2.8' }
+    redis-3.2.7-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.7-alpine }, image: 'benzine/redis:3.2.7-alpine' }
+    redis-3.2.7-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.7-32bit }, image: 'benzine/redis:3.2.7-32bit' }
+    redis-3.2.7: { build: { context: ., dockerfile: generated/Dockerfile.3.2.7 }, image: 'benzine/redis:3.2.7' }
+    redis-3.2.6-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.6-alpine }, image: 'benzine/redis:3.2.6-alpine' }
+    redis-3.2.6-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.6-32bit }, image: 'benzine/redis:3.2.6-32bit' }
+    redis-3.2.6: { build: { context: ., dockerfile: generated/Dockerfile.3.2.6 }, image: 'benzine/redis:3.2.6' }
+    redis-3.2.6-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3.2.6-nanoserver }, image: 'benzine/redis:3.2.6-nanoserver' }
+    redis-3.2.6-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3.2.6-windowsservercore }, image: 'benzine/redis:3.2.6-windowsservercore' }
+    redis-3.0.7-nanoserver: { build: { context: ., dockerfile: generated/Dockerfile.3.0.7-nanoserver }, image: 'benzine/redis:3.0.7-nanoserver' }
+    redis-3.0.7-windowsservercore: { build: { context: ., dockerfile: generated/Dockerfile.3.0.7-windowsservercore }, image: 'benzine/redis:3.0.7-windowsservercore' }
+    redis-3.2.5-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.5-32bit }, image: 'benzine/redis:3.2.5-32bit' }
+    redis-3.2.5: { build: { context: ., dockerfile: generated/Dockerfile.3.2.5 }, image: 'benzine/redis:3.2.5' }
+    redis-3.2.5-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.5-alpine }, image: 'benzine/redis:3.2.5-alpine' }
+    redis-3.2.4-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.4-32bit }, image: 'benzine/redis:3.2.4-32bit' }
+    redis-3.2.4: { build: { context: ., dockerfile: generated/Dockerfile.3.2.4 }, image: 'benzine/redis:3.2.4' }
+    redis-3.2.4-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.4-alpine }, image: 'benzine/redis:3.2.4-alpine' }
+    redis-3.2.3-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.3-32bit }, image: 'benzine/redis:3.2.3-32bit' }
+    redis-3.2.3: { build: { context: ., dockerfile: generated/Dockerfile.3.2.3 }, image: 'benzine/redis:3.2.3' }
+    redis-3.2.3-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.3-alpine }, image: 'benzine/redis:3.2.3-alpine' }
+    redis-3.2.2-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.2-alpine }, image: 'benzine/redis:3.2.2-alpine' }
+    redis-3.2.2-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.2-32bit }, image: 'benzine/redis:3.2.2-32bit' }
+    redis-3.2.2: { build: { context: ., dockerfile: generated/Dockerfile.3.2.2 }, image: 'benzine/redis:3.2.2' }
+    redis-3.2.1-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.1-alpine }, image: 'benzine/redis:3.2.1-alpine' }
+    redis-3.2.1-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.1-32bit }, image: 'benzine/redis:3.2.1-32bit' }
+    redis-3.2.1: { build: { context: ., dockerfile: generated/Dockerfile.3.2.1 }, image: 'benzine/redis:3.2.1' }
+    redis-3.2.0-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.2.0-alpine }, image: 'benzine/redis:3.2.0-alpine' }
+    redis-3.2.0-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.2.0-32bit }, image: 'benzine/redis:3.2.0-32bit' }
+    redis-3.2.0: { build: { context: ., dockerfile: generated/Dockerfile.3.2.0 }, image: 'benzine/redis:3.2.0' }
+    redis-2-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2-32bit }, image: 'benzine/redis:2-32bit' }
+    redis-2.8-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2.8-32bit }, image: 'benzine/redis:2.8-32bit' }
+    redis-2.8.23-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2.8.23-32bit }, image: 'benzine/redis:2.8.23-32bit' }
+    redis-2: { build: { context: ., dockerfile: generated/Dockerfile.2 }, image: 'benzine/redis:2' }
+    redis-2.8: { build: { context: ., dockerfile: generated/Dockerfile.2.8 }, image: 'benzine/redis:2.8' }
+    redis-2.8.23: { build: { context: ., dockerfile: generated/Dockerfile.2.8.23 }, image: 'benzine/redis:2.8.23' }
+    redis-3.0.6-alpine: { build: { context: ., dockerfile: generated/Dockerfile.3.0.6-alpine }, image: 'benzine/redis:3.0.6-alpine' }
+    redis-3.0.6-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0.6-32bit }, image: 'benzine/redis:3.0.6-32bit' }
+    redis-3.0.6: { build: { context: ., dockerfile: generated/Dockerfile.3.0.6 }, image: 'benzine/redis:3.0.6' }
+    redis-2.6-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2.6-32bit }, image: 'benzine/redis:2.6-32bit' }
+    redis-2.6.17-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2.6.17-32bit }, image: 'benzine/redis:2.6.17-32bit' }
+    redis-2.6: { build: { context: ., dockerfile: generated/Dockerfile.2.6 }, image: 'benzine/redis:2.6' }
+    redis-2.6.17: { build: { context: ., dockerfile: generated/Dockerfile.2.6.17 }, image: 'benzine/redis:2.6.17' }
+    redis-3.0.5-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0.5-32bit }, image: 'benzine/redis:3.0.5-32bit' }
+    redis-3.0.5: { build: { context: ., dockerfile: generated/Dockerfile.3.0.5 }, image: 'benzine/redis:3.0.5' }
+    redis-3.0.4-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0.4-32bit }, image: 'benzine/redis:3.0.4-32bit' }
+    redis-3.0.4: { build: { context: ., dockerfile: generated/Dockerfile.3.0.4 }, image: 'benzine/redis:3.0.4' }
+    redis-2.8.22-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2.8.22-32bit }, image: 'benzine/redis:2.8.22-32bit' }
+    redis-2.8.22: { build: { context: ., dockerfile: generated/Dockerfile.2.8.22 }, image: 'benzine/redis:2.8.22' }
+    redis-3.0.3-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0.3-32bit }, image: 'benzine/redis:3.0.3-32bit' }
+    redis-3.0.3: { build: { context: ., dockerfile: generated/Dockerfile.3.0.3 }, image: 'benzine/redis:3.0.3' }
+    redis-3.0.2-32bit: { build: { context: ., dockerfile: generated/Dockerfile.3.0.2-32bit }, image: 'benzine/redis:3.0.2-32bit' }
+    redis-2.8.21-32bit: { build: { context: ., dockerfile: generated/Dockerfile.2.8.21-32bit }, image: 'benzine/redis:2.8.21-32bit' }
+    redis-2.8.6: { build: { context: ., dockerfile: generated/Dockerfile.2.8.6 }, image: 'benzine/redis:2.8.6' }
+    redis-2.8.7: { build: { context: ., dockerfile: generated/Dockerfile.2.8.7 }, image: 'benzine/redis:2.8.7' }
+    redis-2.8.8: { build: { context: ., dockerfile: generated/Dockerfile.2.8.8 }, image: 'benzine/redis:2.8.8' }
+    redis-2.8.9: { build: { context: ., dockerfile: generated/Dockerfile.2.8.9 }, image: 'benzine/redis:2.8.9' }
+    redis-2.8.11: { build: { context: ., dockerfile: generated/Dockerfile.2.8.11 }, image: 'benzine/redis:2.8.11' }
+    redis-2.8.18: { build: { context: ., dockerfile: generated/Dockerfile.2.8.18 }, image: 'benzine/redis:2.8.18' }
+    redis-2.8.19: { build: { context: ., dockerfile: generated/Dockerfile.2.8.19 }, image: 'benzine/redis:2.8.19' }
+    redis-2.8.10: { build: { context: ., dockerfile: generated/Dockerfile.2.8.10 }, image: 'benzine/redis:2.8.10' }
+    redis-2.8.12: { build: { context: ., dockerfile: generated/Dockerfile.2.8.12 }, image: 'benzine/redis:2.8.12' }
+    redis-2.8.13: { build: { context: ., dockerfile: generated/Dockerfile.2.8.13 }, image: 'benzine/redis:2.8.13' }
+    redis-2.8.14: { build: { context: ., dockerfile: generated/Dockerfile.2.8.14 }, image: 'benzine/redis:2.8.14' }
+    redis-2.8.16: { build: { context: ., dockerfile: generated/Dockerfile.2.8.16 }, image: 'benzine/redis:2.8.16' }
+    redis-2.8.17: { build: { context: ., dockerfile: generated/Dockerfile.2.8.17 }, image: 'benzine/redis:2.8.17' }
+    redis-2.8.15: { build: { context: ., dockerfile: generated/Dockerfile.2.8.15 }, image: 'benzine/redis:2.8.15' }
+    redis-2.8.21: { build: { context: ., dockerfile: generated/Dockerfile.2.8.21 }, image: 'benzine/redis:2.8.21' }
+    redis-2.8.20: { build: { context: ., dockerfile: generated/Dockerfile.2.8.20 }, image: 'benzine/redis:2.8.20' }
+    redis-3.0.1: { build: { context: ., dockerfile: generated/Dockerfile.3.0.1 }, image: 'benzine/redis:3.0.1' }
+    redis-3.0.0: { build: { context: ., dockerfile: generated/Dockerfile.3.0.0 }, image: 'benzine/redis:3.0.0' }
+    redis-3.0.2: { build: { context: ., dockerfile: generated/Dockerfile.3.0.2 }, image: 'benzine/redis:3.0.2' }
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..57d87f1
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,15 @@
+{
+    "name": "benzine/redis-tag-tracker",
+    "type": "project",
+    "authors": [
+        {
+            "name": "Matthew Baggett",
+            "email": "matthew@baggett.me"
+        }
+    ],
+    "require": {
+        "guzzlehttp/guzzle": "^6.3",
+        "kint-php/kint": "^3.2",
+        "symfony/yaml": "^4.3"
+    }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..7ea4661
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,482 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "50244b6dc018593ac12b02fe76686b47",
+    "packages": [
+        {
+            "name": "guzzlehttp/guzzle",
+            "version": "6.3.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/promises": "^1.0",
+                "guzzlehttp/psr7": "^1.4",
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+                "psr/log": "^1.0"
+            },
+            "suggest": {
+                "psr/log": "Required for using the Log middleware"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.3-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions_include.php"
+                ],
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "time": "2018-04-22T15:46:56+00:00"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "v1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2016-12-20T10:07:11+00:00"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "1.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/http-message": "~1.0",
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-zlib": "*",
+                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+            },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "PSR-7 message implementation that also provides common utility methods",
+            "keywords": [
+                "http",
+                "message",
+                "psr-7",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
+            ],
+            "time": "2019-07-01T23:21:34+00:00"
+        },
+        {
+            "name": "kint-php/kint",
+            "version": "3.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/kint-php/kint.git",
+                "reference": "c332db9529fdce74ae6a347f97a1e7395e76ced8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/kint-php/kint/zipball/c332db9529fdce74ae6a347f97a1e7395e76ced8",
+                "reference": "c332db9529fdce74ae6a347f97a1e7395e76ced8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.6"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.0",
+                "phpunit/phpunit": "^4.0",
+                "seld/phar-utils": "^1.0",
+                "symfony/finder": "^2.0 || ^3.0 || ^4.0",
+                "vimeo/psalm": "^3.0"
+            },
+            "suggest": {
+                "ext-ctype": "Simple data type tests",
+                "ext-iconv": "Provides fallback detection for ambiguous legacy string encodings such as the Windows and ISO 8859 code pages",
+                "ext-mbstring": "Provides string encoding detection",
+                "kint-php/kint-js": "Provides a simplified dump to console.log()",
+                "kint-php/kint-twig": "Provides d() and s() functions in twig templates",
+                "symfony/polyfill-ctype": "Replacement for ext-ctype if missing",
+                "symfony/polyfill-iconv": "Replacement for ext-iconv if missing",
+                "symfony/polyfill-mbstring": "Replacement for ext-mbstring if missing"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "init.php"
+                ],
+                "psr-4": {
+                    "Kint\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Rokas Šleinius",
+                    "homepage": "https://github.com/raveren"
+                },
+                {
+                    "name": "Jonathan Vollebregt",
+                    "homepage": "https://github.com/jnvsor"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/kint-php/kint/graphs/contributors"
+                }
+            ],
+            "description": "Kint - debugging tool for PHP developers",
+            "homepage": "https://kint-php.github.io/kint/",
+            "keywords": [
+                "debug",
+                "kint",
+                "php"
+            ],
+            "time": "2019-05-03T16:49:16+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ralouphie/getallheaders.git",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/getallheaders.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ralph Khattar",
+                    "email": "ralph.khattar@gmail.com"
+                }
+            ],
+            "description": "A polyfill for getallheaders.",
+            "time": "2019-03-08T08:55:37+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.12.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "550ebaac289296ce228a706d0867afc34687e3f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
+                "reference": "550ebaac289296ce228a706d0867afc34687e3f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.12-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "time": "2019-08-06T08:03:45+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v4.3.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/34d29c2acd1ad65688f58452fd48a46bd996d5a6",
+                "reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "~3.4|~4.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2019-07-24T14:47:54+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": []
+}
diff --git a/generated/.gitignore b/generated/.gitignore
new file mode 100644
index 0000000..209aa18
--- /dev/null
+++ b/generated/.gitignore
@@ -0,0 +1,2 @@
+Dockerfile.*
+docker-compose.yml
\ No newline at end of file