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;
|
|
}
|
|
}
|