diff --git a/funcs_utils.php b/funcs_utils.php index 8d406ed..7ebbac3 100644 --- a/funcs_utils.php +++ b/funcs_utils.php @@ -87,6 +87,8 @@ function extra_repositories() { $importantRepos = [ 'silverstripe/markdown-php-codesniffer', + 'silverstripe/silverstripe-standards', + 'silverstripe/.github', ]; $modules = []; // iterating to page 10 will be enough to get all the repos well into the future diff --git a/labels_command.php b/labels_command.php index 58847ba..fe616db 100644 --- a/labels_command.php +++ b/labels_command.php @@ -40,6 +40,24 @@ 'type/api-change' => 'type/api-break', ]; +// Repos that should not have labels updated because of a lack of API permissions because they are on +// non-silverstripe GitHub accounts, or because they are not applicable +// note that akismet is different from silverstripe-akismet +// installers is composer/installers +const REPOS_EXCLUDE = [ + 'akismet', + 'classproxy', + 'installers', + 'GridFiedBulkEditingTools', + 'phockito', + 'silverstripe-debugbar', + 'silverstripe-elemental-subsites', + 'silverstripe-fluent', + 'silverstripe-phockito', + 'silverstripe-proxy-db', + 'sortablegridfield', +]; + $labelsCommand = function(InputInterface $input, OutputInterface $output): int { // This is the code that is executed when running the 'labels' command @@ -61,7 +79,7 @@ foreach ([$modulesCurrentMajor, $modulesPreviousMajor] as $modulesList) { foreach ($modulesList as $module) { $repo = $module['repo']; - if (in_array($repo, $repos)) { + if (in_array($repo, $repos) || in_array($repo, REPOS_EXCLUDE)) { continue; } $modules[] = $module; @@ -93,17 +111,28 @@ // 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'); + // check if label already exists + $alreadyExists = false; + foreach ($labels as $label) { + if ($newName === $label['name']) { + $alreadyExists = true; + break; + } + } + if (!$alreadyExists) { + 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'); + } + $oldName = $name; + $name = $newName; + // Update $url replacing the $name at the end with $newName + $url = substr($url, 0, strlen($url) - strlen($oldName)) . $newName; + $labels[$key]['name'] = $newName; + $labels[$key]['url'] = $url; } - $name = $newName; - // Update $url replacing the $name at the end with $newName - $url = substr($url, 0, strlen($url) - strlen($name)) . $newName; - $labels[$key]['name'] = $newName; - $labels[$key]['url'] = $url; } // Delete label diff --git a/run.php b/run.php index df3dd80..726605a 100644 --- a/run.php +++ b/run.php @@ -24,6 +24,7 @@ $MODULE_DIR = ''; $PRS_CREATED = []; $REPOS_WITH_PRS_CREATED = []; +$REPOS_WITH_LABELS_UPDATED = []; $OUT = null; // options