Laravel.io
<?php namespace BusyRoomsCMS\Service\Jobs;

use Symfony\Component\Process\Process;
use Illuminate\Support\Facades\Artisan;
use BusyRoomsCMS\Interfaces\Classes\JobsClient;

class InstallVouchershop
{
    public function fire($job, $data)
    {
        $process = new Process('cd plugins/busyroomscms && git clone [email protected]:busyroomscms/vouchershop-plugin.git vouchershop');
        $process->mustRun();

        shell_exec('composer update);

        Artisan::call('october:up');
        Artisan::call('october:mirror', ['destination' => 'public/']);
        Artisan::call('plugin:remove', ['name' => 'October.Demo', '--force' => true]);

        $apiClient = new JobsClient();
        $apiClient->updateJob($data['job_id'], 'done');

        $job->delete();
    }

    public function failed($data)
    {
        $apiClient = new JobsClient();
        $apiClient->updateJob($data['job_id'], 'failed');
    }
}

Please note that all pasted data is publicly available.