-
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 3905eb3
Showing
5 changed files
with
300 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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,6 +11,8 @@ relevant branch e.g. `5` will be used depending on the command-line `--branch` o | |
It will run all scripts in the `scripts/any` folder and then run all scripts in the applicable | ||
`scripts/<cms-version>` folder depending on the command-line `--branch` option that's passed in. | ||
|
||
This tool can also be used to standardise GitHub labels on all supported repositories. | ||
|
||
## GitHub Token | ||
|
||
This tool creates pull-request via the GitHub API. You need to set the `MS_GITHUB_TOKEN` environment variable in order | ||
|
@@ -22,12 +24,17 @@ then you will get a 404 error when attempting to create pull-requests. | |
|
||
Delete this token once you have finished. | ||
|
||
## Usage | ||
## Installation | ||
|
||
```bash | ||
git clone [email protected]:silverstripe/module-standardiser.git | ||
cd module-standardiser | ||
composer install | ||
``` | ||
|
||
## Usage - Standardising module files | ||
|
||
```bash | ||
MS_GITHUB_TOKEN=<token> php run.php update <options> | ||
``` | ||
|
||
|
@@ -36,7 +43,7 @@ MS_GITHUB_TOKEN=<token> php run.php update <options> | |
MS_GITHUB_TOKEN=abc123 php run.php update --cms-major=5 --branch=next-minor --dry-run --only=silverstripe-config,silverstripe-assets | ||
``` | ||
|
||
## Command line options: | ||
### Command line options: | ||
|
||
| Flag | Description | | ||
| ---- | ------------| | ||
|
@@ -51,15 +58,15 @@ MS_GITHUB_TOKEN=abc123 php run.php update --cms-major=5 --branch=next-minor --dr | |
|
||
**Note** that using `--branch=github-default` will only run scripts in the `scripts/default-branch` directory. | ||
|
||
## GitHub API secondary rate limit | ||
### GitHub API secondary rate limit | ||
|
||
You may hit a secondary GitHub rate limit because this tool may create too many pull-requests in a short space of time. | ||
To help with this the tool will always output the urls of all pull-requests updated and also the repos that were | ||
updated so you can add them to the --exclude flag on subsequent re-runs. | ||
|
||
## Adding new scripts | ||
### Adding new scripts | ||
|
||
### Where to add your script | ||
#### Where to add your script | ||
|
||
- `scripts/cms-<version>` to run on a specific cms-major | ||
- `scripts/cms-any` to run on any cms-major | ||
|
@@ -76,6 +83,28 @@ Do not use functions in `funcs_utils.php` as they are not intended to be used in | |
Scripts will be automatically wrapped in an anoymous function so you do not need to worry about variables crossing | ||
over into different scripts. | ||
|
||
## Usage - Standardising GitHub labels | ||
|
||
```bash | ||
# | ||
MS_GITHUB_TOKEN=<token> php run.php labels <options> | ||
``` | ||
|
||
**Example usage:** | ||
```bash | ||
MS_GITHUB_TOKEN=abc123 php run.php labels --dry-run --only=silverstripe-config,silverstripe-assets | ||
``` | ||
|
||
### Command line options: | ||
|
||
| Flag | Description | | ||
| ---- | ------------| | ||
| --cms-major=[version] | The major version of CMS to use (default: 5) | | ||
| --only=[modules] | Only include the specified modules (without account prefix) separated by commas e.g. `silverstripe-config,silverstripe-assets` | | ||
| --exclude=[modules] | Exclude the specified modules (without account prefix) separated by commas e.g. `silverstripe-mfa,silverstripe-totp` | | ||
| --dry-run | Do not update labels in GitHub, output to terminal only | | ||
| --no-delete | Do not delete `_data` and `modules` directories before running | | ||
|
||
## Updating the tool when a new major version of CMS is updated | ||
|
||
Update the `CURRENT_CMS_MAJOR` constant in `run.php` |
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,136 @@ | ||
<?php | ||
|
||
use Symfony\Component\Console\Input\InputInterface; | ||
use Symfony\Component\Console\Output\OutputInterface; | ||
use Symfony\Component\Console\Command\Command; | ||
|
||
|
||
// 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.