-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0e8f7c3
commit 6262c49
Showing
5 changed files
with
301 additions
and
84 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
<?php | ||
|
||
use Symfony\Component\Console\Input\InputInterface; | ||
use Symfony\Component\Console\Output\OutputInterface; | ||
use Symfony\Component\Console\Command\Command; | ||
|
||
// ! IMPORTANT: Any labels on GitHub repos that are not defined in LABELS_COLORS will be deleted ! | ||
// | ||
// Do not prefix color with hash | ||
const LABELS_COLORS = [ | ||
'affects/v4' => '5319e7', | ||
'affects/v5' => '0e8a16', | ||
'complexity/low' => 'c2e0c6', | ||
'complexity/medium' => 'fef2c0', | ||
'complexity/high' => 'f9d0c4', | ||
'Epic' => '3e4b9e', | ||
'impact/low' => 'fef2c0', | ||
'impact/medium' => 'f7c6c7', | ||
'impact/high' => 'eb6420', | ||
'impact/critical' => 'e11d21', | ||
'rfc/accepted' => 'dddddd', | ||
'rfc/draft' => 'dddddd', | ||
'type/api-break' => '1d76db', | ||
'type/bug' => 'd93f0b', | ||
'type/docs' => '02d7e1', | ||
'type/enhancement' => '0e8a16', | ||
'type/userhelp' => 'c5def5', | ||
'type/UX' => '006b75', | ||
'type/other' => '975515', | ||
]; | ||
|
||
const LABELS_RENAME = [ | ||
'effort/easy' => 'complexity/low', | ||
'effort/medium' => 'complexity/medium', | ||
'effort/hard' => 'complexity/high', | ||
'change/major' => 'type/api-break', | ||
'type/api-change' => 'type/api-break', | ||
]; | ||
|
||
$labelsCommand = function(InputInterface $input, OutputInterface $output): int { | ||
// This is the code that is executed when running the 'labels' command | ||
|
||
// variables | ||
global $OUT, $REPOS_WITH_LABELS_UPDATED; | ||
$OUT = $output; | ||
|
||
// validate system is ready | ||
validate_system(); | ||
|
||
// setup directories | ||
setup_directories($input); | ||
|
||
// CMS major version to use | ||
$cmsMajor = $input->getOption('cms-major') ?: CURRENT_CMS_MAJOR; | ||
|
||
// modules | ||
$modules = filtered_modules($cmsMajor, $input); | ||
|
||
// update labels | ||
foreach ($modules as $module) { | ||
$account = $module['account']; | ||
$repo = $module['repo']; | ||
|
||
// Fetch labels | ||
$labels = github_api("https://api.github.com/repos/$account/$repo/labels"); | ||
|
||
foreach ($labels as $key => $label) { | ||
// $label is an array, for example: | ||
// 'id' => 427423377 | ||
// 'node_id' => MDU6TGFiZWw0Mjc0MjMzNzc=" | ||
// 'url' => "https://api.github.com/repos/silverstripe/silverstripe-config/labels/affects/v4" | ||
// 'name' => "affects/v4" | ||
// 'color' => "5319e7" | ||
// 'default' => false | ||
// 'description' => NULL | ||
$url = $label['url']; | ||
$name = $label['name']; // e.g. 'affects/v4' | ||
|
||
// Rename label | ||
// https://docs.github.com/en/rest/issues/labels#update-a-label | ||
if (array_key_exists($name, LABELS_RENAME)) { | ||
$newName = LABELS_RENAME[$name]; | ||
info("Updating label $name to $newName in $repo"); | ||
if ($input->getOption('dry-run')) { | ||
info('Not updating label on GitHub because --dry-run option is set'); | ||
} else { | ||
github_api($url, ['new_name' => $newName], 'PATCH'); | ||
} | ||
$name = $newName; | ||
$labels[$key]['name'] = $newName; | ||
} | ||
|
||
// Delete label | ||
// https://docs.github.com/en/rest/issues/labels#delete-a-label | ||
if (!array_key_exists($name, LABELS_COLORS)) { | ||
info("Deleting label $name from $repo"); | ||
if ($input->getOption('dry-run')) { | ||
info('Not deleting label on GitHub because --dry-run option is set'); | ||
} else { | ||
github_api($url, [], 'DELETE'); | ||
} | ||
continue; | ||
} | ||
|
||
// Update label color | ||
// https://docs.github.com/en/rest/issues/labels#update-a-label | ||
if (LABELS_COLORS[$name] !== $label['color']) { | ||
info("Updating label color $name on $repo"); | ||
if ($input->getOption('dry-run')) { | ||
info('Not updating label color on GitHub because --dry-run option is set'); | ||
} else { | ||
github_api($url, ['color' => LABELS_COLORS[$name]], 'PATCH'); | ||
} | ||
} | ||
} | ||
|
||
// Create missing labels | ||
// https://docs.github.com/en/rest/issues/labels#create-a-label | ||
foreach (LABELS_COLORS as $name => $color) { | ||
foreach ($labels as $label) { | ||
if ($name === $label['name']) { | ||
continue 2; | ||
} | ||
} | ||
info("Creating label $name on $repo"); | ||
if ($input->getOption('dry-run')) { | ||
info('Not creating label on GitHub because --dry-run option is set'); | ||
} else { | ||
$url = "https://api.github.com/repos/$account/$repo/labels"; | ||
github_api($url, ['name' => $name,'color' => $color]); | ||
} | ||
} | ||
$REPOS_WITH_LABELS_UPDATED[] = $repo; | ||
} | ||
output_repos_with_labels_updated(); | ||
return Command::SUCCESS; | ||
}; |
Oops, something went wrong.