public function run() { $laravel = Template::create(['name' => 'Laravel']); Template::create(['name' => 'Wordpress']); Command::create(['name' => 'Down', 'script' => 'php artisan down', 'user' => 'deploy', 'step' => Command::BEFORE_ACTIVATE, 'target_type' => 'template', 'target_id' => $laravel->id]); Command::create(['name' => 'Run Migrations', 'script' => 'php artisan migrate --force', 'user' => 'deploy', 'step' => Command::BEFORE_ACTIVATE, 'target_type' => 'template', 'target_id' => $laravel->id]); Command::create(['name' => 'Up', 'script' => 'php artisan up', 'user' => 'deploy', 'step' => Command::BEFORE_ACTIVATE, 'target_type' => 'template', 'target_id' => $laravel->id]); }
/** * Execute the command. */ public function handle() { $template = Template::findOrFail($this->template_id); foreach ($template->commands as $command) { $data = $command->toArray(); $this->project->commands()->create($data); } foreach ($template->variables as $variable) { $data = $variable->toArray(); $this->project->variables()->create($data); } foreach ($template->sharedFiles as $file) { $data = $file->toArray(); $this->project->sharedFiles()->create($data); } foreach ($template->configFiles as $file) { $data = $file->toArray(); $this->project->configFiles()->create($data); } }
/** * Run the migrations. * * @return void */ public function up() { foreach ($this->relations as $relation) { $className = "REBELinBLUE\\Deployer\\{$relation}"; $instance = new $className(); $table = $instance->getTable(); // Add the target fields to the tables Schema::table($table, function (Blueprint $table) { $table->integer('target_id')->nullable(); $table->string('target_type')->nullable(); }); if (config('database.default') !== 'sqlite') { $drop = config('database.default') === 'mysql' ? 'FOREIGN KEY' : 'CONSTRAINT'; DB::statement("ALTER TABLE {$table} DROP {$drop} {$table}_project_id_foreign"); } } // Now find the existing templates in the project template and move them to templates table $templates = []; foreach (Project::where('is_template', true)->get() as $project) { $data = $project->toArray(); unset($data['id']); $templates[$project->id] = Template::create($data); } // Now loop through the relations and set the target details foreach ($this->relations as $relation) { $className = "REBELinBLUE\\Deployer\\{$relation}"; $instance = new $className(); foreach ($instance->all() as $row) { $row->target_id = $row->project_id; $row->target_type = 'project'; if (isset($templates[$row->project_id])) { $row->target_id = $templates[$row->project_id]->id; $row->target_type = 'template'; } $row->save(); } } // Remove any deleted non templates from group 1 to group 2 $project = new Project(); $project->where('is_template', false)->where('group_id', 1)->withTrashed()->update(['group_id' => 2]); // Remove the left over fake templates and the containing group Project::where('is_template', true)->forceDelete(); Group::find(1)->forceDelete(); // Remove the unneeded project ID column foreach ($this->relations as $relation) { $className = "REBELinBLUE\\Deployer\\{$relation}"; $instance = new $className(); $table = $instance->getTable(); // You can't drop a column in SQLite if (config('database.default') !== 'sqlite') { DB::statement("ALTER TABLE {$table} DROP COLUMN project_id"); } if (config('database.default') === 'mysql') { DB::statement("ALTER TABLE {$table} MODIFY target_id INT(11) NOT NULL"); DB::statement("ALTER TABLE {$table} MODIFY target_type VARCHAR(255) NOT NULL"); } elseif (config('database.default') === 'pgsql') { DB::statement("ALTER TABLE {$table} ALTER COLUMN target_id SET NOT NULL"); DB::statement("ALTER TABLE {$table} ALTER COLUMN target_type SET NOT NULL"); } } }