14 Commits
0.0.1 ... 0.0.5

Author SHA1 Message Date
Travis Tomka
0bd195e5a9 Merge branch 'master' of github.com:droath/robo-docker-compose 2018-02-25 18:11:30 -07:00
Travis Tomka
0d799fca6c Add docker-compose exec command. 2018-02-25 18:10:48 -07:00
Travis Tomka
a5c405ec02 Merge pull request #2 from raphaelstolt/improvement-installation-documentation
Improvement installation documentation
2017-10-05 08:59:18 -06:00
Raphael Stolt
c3cc0c2e1f Let Composer figure out the latest version. 2017-10-05 02:52:35 +02:00
Raphael Stolt
65893fc1a9 Emphasise it's dev dependency character. 2017-10-05 02:51:54 +02:00
Travis Tomka
c2242c4b93 Update README with additional supported commands. 2017-03-30 20:04:44 -06:00
Travis Tomka
463daf3a2d Fix comment which was referencing the wrong command. 2017-03-30 20:02:01 -06:00
Travis Tomka
761f956826 Add docker-compose pause command. 2017-03-30 20:01:05 -06:00
Travis Tomka
01740ee9e4 Add docker-compose start command. 2017-03-30 20:00:26 -06:00
Travis Tomka
ce1360c733 Add docker-compose restart command. 2017-03-30 19:58:52 -06:00
Travis Tomka
4697d956fa Move docker services to a reusable trait. 2017-03-30 19:55:06 -06:00
Travis Tomka
e3ace8a3ea Allow executable arguments to be set for all docker-composer commands. 2017-03-15 15:39:52 -06:00
Travis Tomka
90b7786dc9 Relocated the run() method to the task base class instead of having it reflected on each task object. 2017-03-15 13:44:17 -06:00
Travis Tomka
b0c126c271 Allow setting service(s) on the docker-compose up command. 2017-03-15 13:39:45 -06:00
11 changed files with 441 additions and 32 deletions

View File

@@ -7,7 +7,7 @@ Run docker compose commands from the Robo task runner.
First, you'll need to download the robo docker compose library using composer: First, you'll need to download the robo docker compose library using composer:
```bash ```bash
composer require droath/robo-docker-compose:~0.0.1 composer require --dev droath/robo-docker-compose
``` ```
### Example ### Example
@@ -33,7 +33,11 @@ composer require droath/robo-docker-compose:~0.0.1
The following commands have been implemented: The following commands have been implemented:
- docker-compose up - docker-compose up
- docker-compose exec
- docker-compose down - docker-compose down
- docker-compose start
- docker-compose restart
- docker-compose pause
I'll be adding the rests of the docker-compose commands shortly. Or if you want I'll be adding the rests of the docker-compose commands shortly. Or if you want
to create a PR with additional commands that would be much appreciated. to create a PR with additional commands that would be much appreciated.

53
src/DockerServicesTrait.php Executable file
View File

@@ -0,0 +1,53 @@
<?php
namespace Droath\RoboDockerCompose;
/**
* Define docker services trait.
*/
trait DockerServicesTrait
{
/**
* Docker compose services.
*
* @var array
*/
protected $services = [];
/**
* Add docker composer service.
*
* @param string $service
* The docker services.
*/
public function setService($service)
{
$this->services[] = $service;
return $this;
}
/**
* Add docker composer services.
*
* @param array $services
* An array of services.
*/
public function setServices(array $services)
{
foreach ($services as $service) {
$this->setService($service);
}
return $this;
}
/**
* {@inheritdoc}
*/
public function getCommand()
{
// Append the services to the end of the command.
return parent::getCommand() . ' ' . implode(' ', $this->services);
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace Droath\RoboDockerCompose;
use Robo\Common\CommandArguments;
/**
* Define command executable arguments.
*/
trait ExecutableArguments
{
/**
* Executable arguments.
*
* @var string
*/
protected $executableArgs = '';
/**
* Add executable options.
*
* @param string $option
* The executable option name.
* @param string $value
* The executable option value.
*/
protected function execOption($option, $value = null)
{
if (isset($option)) {
if (strpos($option, '-') !== 0) {
$option = "--$option";
}
$this->executableArgs .= null == $option ? '' : ' ' . $option;
$this->executableArgs .= null == $value ? '' : ' ' . CommandArguments::escape($value);
}
return $this;
}
}

View File

@@ -2,16 +2,19 @@
namespace Droath\RoboDockerCompose\Task; namespace Droath\RoboDockerCompose\Task;
use Droath\RoboDockerCompose\ExecutableArguments;
use Robo\Common\ExecOneCommand; use Robo\Common\ExecOneCommand;
use Robo\Contract\CommandInterface;
use Robo\Exception\TaskException; use Robo\Exception\TaskException;
use Robo\Task\BaseTask; use Robo\Task\BaseTask;
/** /**
* Docker compose base class. * Docker compose base class.
*/ */
abstract class Base extends BaseTask abstract class Base extends BaseTask implements CommandInterface
{ {
use ExecOneCommand; use ExecOneCommand;
use ExecutableArguments;
/** /**
* Executable. * Executable.
@@ -35,11 +38,9 @@ abstract class Base extends BaseTask
*/ */
public function __construct($pathToDockerCompose = null) public function __construct($pathToDockerCompose = null)
{ {
$this->executable = $pathToDockerCompose; $this->executable = isset($pathToDockerCompose)
? $pathToDockerCompose
if (!$this->executable) { : $this->findExecutablePhar('docker-compose');
$this->executable = $this->findExecutablePhar('docker-compose');
}
if (!$this->executable) { if (!$this->executable) {
throw new TaskException( throw new TaskException(
@@ -49,13 +50,87 @@ abstract class Base extends BaseTask
} }
} }
/**
* Specify an alternate compose file.
*
* @param string $filename
* An alternative docker composer file
*/
public function file($filename)
{
if (!file_exists($filename)) {
throw new \InvalidArgumentException(
sprintf("File %s wasn't found on the filesystem", $filename)
);
}
$this->execOption('file', $filename);
return $this;
}
/**
* Specify multiple composer files.
*
* @param array $files
* An array of alternative composer files.
*/
public function files(array $files)
{
foreach ($files as $filename) {
$this->file($filename);
}
return $this;
}
/**
* Specify an alternate project name.
*
* @param string
* An alternative docker compose project name.
*/
public function projectName($name)
{
$this->execOption('project-name', $name);
return $this;
}
/**
* Daemon socket to connect to.
*
* @param string $hostname
* The name of the host to connect to.
*/
public function host($hostname)
{
$this->execOption('host', $hostname);
return $this;
}
/**
* {@inheritdoc}
*/
public function run()
{
$command = $this->getCommand();
$this->printTaskInfo(
'Running Docker-Compose: {command}',
['command' => $command]
);
return $this->executeCommand($command);
}
/** /**
* Get docker-compose command. * Get docker-compose command.
* *
* @return string * @return string
*/ */
protected function getCommand() public function getCommand()
{ {
return "{$this->executable} {$this->action} {$this->arguments}"; return "{$this->executable} {$this->executableArgs} {$this->action} {$this->arguments}";
} }
} }

View File

@@ -60,15 +60,4 @@ class Down extends Base
return $this; return $this;
} }
/**
* {@inheritdoc}
*/
public function run()
{
$command = $this->getCommand();
$this->printTaskInfo('Docker Down: {command}', ['command' => $command]);
return $this->executeCommand($command);
}
} }

153
src/Task/Execute.php Normal file
View File

@@ -0,0 +1,153 @@
<?php
namespace Droath\RoboDockerCompose\Task;
use Robo\Contract\CommandInterface;
/**
* Docker compose execute command.
*/
class Execute extends Base
{
/**
* Execute command.
*
* @var string
*/
protected $command;
/**
* Execute container.
*
* @var string.
*/
protected $container;
/**
* {@inheritdoc}
*/
protected $action = 'exec';
/**
* Set docker container.
*
* @param $container
* The container name.
* @return $this
*/
public function setContainer($container)
{
$this->container = $container;
return $this;
}
/**
* Set execute command.
*
* @param string|CommandInterface $command
* The command to execute.
*
* @return $this
*/
public function exec($command)
{
if ($command instanceof CommandInterface) {
$command = $command->getCommand();
}
$this->command = $command;
return $this;
}
/**
* Run command in the background.
*
* @return $this
*/
public function detachedMode()
{
$this->arg('-d');
return $this;
}
/**
* Give extended privileges to the process.
*
* @return $this
*/
public function privileged()
{
$this->option('privileged');
return $this;
}
/**
* Run the command as this user.
*
* @param $user
* The user on which to run the command under.
*
* @return $this
*/
public function user($user)
{
$this->option('user', $user);
return $this;
}
/**
* Disable pseudo-tty allocation.
*
* @return $this
*/
public function disablePseudoTty()
{
$this->arg('-T');
return $this;
}
/**
* Index of the container.
*
* @param $index
* The container index.
*
* @return $this
*/
public function index($index)
{
$this->option('index', $index);
return $this;
}
/**
* Set environment variables
*
* @param $key
* The environment key.
* @param $value
* The environment value.
*
* @return $this
*/
public function envVariable($key, $value)
{
$this->option('env', "{$key}={$value}");
return $this;
}
/**
* {@inheritdoc}
*/
public function getCommand()
{
return parent::getCommand() . "{$this->container} {$this->command}";
}
}

18
src/Task/Pause.php Executable file
View File

@@ -0,0 +1,18 @@
<?php
namespace Droath\RoboDockerCompose\Task;
use Droath\RoboDockerCompose\DockerServicesTrait;
/**
* Define docker compose pause command.
*/
class Pause extends Base
{
use DockerServicesTrait;
/**
* {@inheritdoc}
*/
protected $action = 'pause';
}

33
src/Task/Restart.php Executable file
View File

@@ -0,0 +1,33 @@
<?php
namespace Droath\RoboDockerCompose\Task;
use Droath\RoboDockerCompose\DockerServicesTrait;
/**
* Define docker compose restart command.
*/
class Restart extends Base
{
use DockerServicesTrait;
/**
* {@inheritdoc}
*/
protected $action = 'restart';
/**
* Specify a shutdown timeout in seconds.
*
* @param int $timeout
* The timeout in seconds.
*
* @return self
*/
public function timeout($timeout = 10)
{
$this->option('timeout', $timeout);
return $this;
}
}

18
src/Task/Start.php Executable file
View File

@@ -0,0 +1,18 @@
<?php
namespace Droath\RoboDockerCompose\Task;
use Droath\RoboDockerCompose\DockerServicesTrait;
/**
* Define docker compose start command.
*/
class Start extends Base
{
use DockerServicesTrait;
/**
* {@inheritdoc}
*/
protected $action = 'start';
}

14
src/Task/Up.php Normal file → Executable file
View File

@@ -2,6 +2,7 @@
namespace Droath\RoboDockerCompose\Task; namespace Droath\RoboDockerCompose\Task;
use Droath\RoboDockerCompose\DockerServicesTrait;
use Robo\Exception\TaskException; use Robo\Exception\TaskException;
/** /**
@@ -9,6 +10,8 @@ use Robo\Exception\TaskException;
*/ */
class Up extends Base class Up extends Base
{ {
use DockerServicesTrait;
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -112,17 +115,6 @@ class Up extends Base
return $this; return $this;
} }
/**
* {@inheritdoc}
*/
public function run()
{
$command = $this->getCommand();
$this->printTaskInfo('Docker Up: {command}', ['command' => $command]);
return $this->executeCommand($command);
}
/** /**
* Set command detached mode. * Set command detached mode.
*/ */

35
src/Task/loadTasks.php Normal file → Executable file
View File

@@ -16,10 +16,43 @@ trait loadTasks
} }
/** /**
* Docker compose up task. * Docker compose down task.
*/ */
protected function taskDockerComposeDown($pathToDockerCompose = null) protected function taskDockerComposeDown($pathToDockerCompose = null)
{ {
return $this->task(Down::class, $pathToDockerCompose); return $this->task(Down::class, $pathToDockerCompose);
} }
/**
* Docker compose pause task.
*/
protected function taskDockerComposePause($pathToDockerCompose = null)
{
return $this->task(Pause::class, $pathToDockerCompose);
}
/**
* Docker compose start task.
*/
protected function taskDockerComposeStart($pathToDockerCompose = null)
{
return $this->task(Start::class, $pathToDockerCompose);
}
/**
* Docker compose restart task.
*/
protected function taskDockerComposeRestart($pathToDockerCompose = null)
{
return $this->task(Restart::class, $pathToDockerCompose);
}
/**
* Docker compose execute task.
*/
protected function taskDockerComposeExecute($pathToDockerCompose = null)
{
return $this->task(Execute::class, $pathToDockerCompose);
}
} }