99 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Console\Commands;
 | 
						|
 | 
						|
use Carbon\Carbon;
 | 
						|
use Illuminate\Console\Command;
 | 
						|
 | 
						|
class InitChangelog extends Command
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * The name and signature of the console command.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $signature = 'changelog:init {month? : Month in YYYY-MM format (defaults to current month)}';
 | 
						|
 | 
						|
    /**
 | 
						|
     * The console command description.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $description = 'Initialize a new monthly changelog file with example structure';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Execute the console command.
 | 
						|
     */
 | 
						|
    public function handle()
 | 
						|
    {
 | 
						|
        $month = $this->argument('month') ?: Carbon::now()->format('Y-m');
 | 
						|
 | 
						|
        // Validate month format
 | 
						|
        if (! preg_match('/^\d{4}-(0[1-9]|1[0-2])$/', $month)) {
 | 
						|
            $this->error('Invalid month format. Use YYYY-MM format with valid months 01-12 (e.g., 2025-08)');
 | 
						|
 | 
						|
            return self::FAILURE;
 | 
						|
        }
 | 
						|
 | 
						|
        $changelogsDir = base_path('changelogs');
 | 
						|
        $filePath = $changelogsDir."/{$month}.json";
 | 
						|
 | 
						|
        // Create changelogs directory if it doesn't exist
 | 
						|
        if (! is_dir($changelogsDir)) {
 | 
						|
            mkdir($changelogsDir, 0755, true);
 | 
						|
            $this->info("Created changelogs directory: {$changelogsDir}");
 | 
						|
        }
 | 
						|
 | 
						|
        // Check if file already exists
 | 
						|
        if (file_exists($filePath)) {
 | 
						|
            if (! $this->confirm("File {$month}.json already exists. Overwrite?")) {
 | 
						|
                $this->info('Operation cancelled');
 | 
						|
 | 
						|
                return self::SUCCESS;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        // Parse the month for example data
 | 
						|
        $carbonMonth = Carbon::createFromFormat('Y-m', $month);
 | 
						|
        $monthName = $carbonMonth->format('F Y');
 | 
						|
        $sampleDate = $carbonMonth->addDays(14)->toISOString(); // Mid-month
 | 
						|
 | 
						|
        // Get version from config
 | 
						|
        $version = 'v'.config('constants.coolify.version');
 | 
						|
 | 
						|
        // Create example changelog structure
 | 
						|
        $exampleData = [
 | 
						|
            'entries' => [
 | 
						|
                [
 | 
						|
                    'version' => $version,
 | 
						|
                    'title' => 'Example Feature Release',
 | 
						|
                    'content' => "This is an example changelog entry for {$monthName}. Replace this with your actual release notes. Include details about new features, improvements, bug fixes, and any breaking changes.",
 | 
						|
                    'published_at' => $sampleDate,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        // Write the file
 | 
						|
        $jsonContent = json_encode($exampleData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
 | 
						|
 | 
						|
        if (file_put_contents($filePath, $jsonContent) === false) {
 | 
						|
            $this->error("Failed to create changelog file: {$filePath}");
 | 
						|
 | 
						|
            return self::FAILURE;
 | 
						|
        }
 | 
						|
 | 
						|
        $this->info("✅ Created changelog file: changelogs/{$month}.json");
 | 
						|
        $this->line("   Example entry created for {$monthName}");
 | 
						|
        $this->line('   Edit the file to add your actual changelog entries');
 | 
						|
 | 
						|
        // Show the file contents
 | 
						|
        if ($this->option('verbose')) {
 | 
						|
            $this->newLine();
 | 
						|
            $this->line('File contents:');
 | 
						|
            $this->line($jsonContent);
 | 
						|
        }
 | 
						|
 | 
						|
        return self::SUCCESS;
 | 
						|
    }
 | 
						|
}
 |