DEV Community

Titas Gailius
Titas Gailius

Posted on

Introducing Terminal


Terminal

Preview

An elegant wrapper around Symfony's Process component.


Why?

I've been developing hosting related services for almost 4 years now.

To complete various tasks, I have to write PHP code that executes bash scripts almost on a daily basis. Let's say you want to set up automatic updates for WordPress or put your site to the maintenance mode.

That's where Terminal comes in handy.


Example

To activate "maintenance mode" in WordPress, you might need to execute this wp-cli command:

$ wp maintenance-mode activate
Enabling Maintenance mode...
Success: Activated Maintenance mode.

Now, with the Terminal, you can do this straight from your PHP script:

Terminal::run('wp maintenance-mode activate');

More

You can even setup timeout, retries, change the current working directory and much more:

Terminal::in(storage_path('sites/123'))
    ->timeout(120)
    ->retries(3)
    ->run('wp maintenance-mode activate');

Extending

Another cool feature of the Terminal is that you can easily define your custom commands.

Terminal::extend('maintenanceOn', function ($terminal) {
    return $terminal->run('wp maintenance-mode activate');
});

Terminal::maintenanceOn();

Testing

It gets even better.
Terminal comes with a bunch of beautiful testing utilities that help you write simple and expressive tests for your application.

Terminal::fake();

Terminal::run($command = 'wp maintenance-mode activate');

Terminal::assertExecuted($command);

Feel free to check out full documentation at https://github.com/TitasGailius/terminal

Feedback is more than welcome!

Top comments (0)