Auto-resetear semanalmente una app demo en Laravel

Trabajé en un proyecto donde necesitaba presentar una demo pública del trabajo en progreso pero necesitaba resetear el demo después de una semana al re-establecer la base de datos a su estado original.

Mi solución fue simplemente una scheduled task en el método schedule de la clase App\Console\Kernel.

1namespace App\Console;
2 
3use Illuminate\Console\Scheduling\Schedule;
4use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
5 
6class Kernel extends ConsoleKernel
7{
8 /**
9 * The Artisan commands provided by your application.
10 *
11 * @var array
12 */
13 protected $commands = [
14 //
15 ];
16 
17 /**
18 * Define the application's command schedule.
19 *
20 * @param \Illuminate\Console\Scheduling\Schedule $schedule
21 * @return void
22 */
23 protected function schedule(Schedule $schedule)
24 {
25 $schedule->command('migrate:fresh --force --seed')->weekly();
26 }
27 
28 /**
29 * Register the commands for the application.
30 *
31 * @return void
32 */
33 protected function commands()
34 {
35 $this->load(__DIR__.'/Commands');
36 
37 require base_path('routes/console.php');
38 }
39}

Las opciones de frecuencia están bien documentadas en Laravel docs. Puedes cambiar la frecuencia a diario o cada hora si lo prefieres.