mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
build: remove outdated/obsolete github PR utility scripts (#45868)
Removes scripts and documentation for tools which are no longer actively used and likely do not work anyway at this point. All of our PR-related tooling has moved into the `yarn ng-dev` command. The `PR_REVIEW` markdown file is deleted since it was soley about the legacy review scripts and the PR review workflow also does not seem like the common/standard workflow Angular team members follow. PR Close #45868
This commit is contained in:
committed by
Andrew Kushnir
parent
b5834deaa0
commit
949927edda
@@ -1,154 +0,0 @@
|
||||
# PR Review
|
||||
|
||||
## Tools
|
||||
|
||||
A better way to do a code-review of a PR is to do it in your IDE.
|
||||
Here are two scripts which allow you to perform the review and create local changes which can be appended to the PR.
|
||||
|
||||
### 1. Loading PR
|
||||
|
||||
Run this command to load the changes into your local repository where your IDE is running.
|
||||
|
||||
```
|
||||
$ ./scripts/github/review-pr 24623
|
||||
```
|
||||
|
||||
This will result in output:
|
||||
|
||||
```
|
||||
Already on 'master'
|
||||
Your branch is up to date with 'origin/master'.
|
||||
Fetching pull request #24623 with 1 SHA(s) into branch range: pr/24623_base..pr/24623_top
|
||||
======================================================================================
|
||||
cef93a51b (pr/24623_top) ci: scripts to review PRs locally
|
||||
======================================================================================
|
||||
Switched to a new branch 'pr/24623'
|
||||
On branch pr/24623
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
|
||||
docs/PR_REVIEW.md
|
||||
scripts/github/push-pr
|
||||
scripts/github/review-pr
|
||||
|
||||
nothing added to commit but untracked files present (use "git add" to track)
|
||||
```
|
||||
|
||||
Note that the script created `pr/24623_top` and `pr/24623_base` branches which denote SHAs where the PR start and end.
|
||||
|
||||
```
|
||||
cef93a51b (pr/24623_top) ci: scripts to review PRs locally
|
||||
637805a0c (pr/24623_base) docs: update `lowercase` pipe example in "AngularJS to Angular" guide (#24588)
|
||||
```
|
||||
|
||||
Knowing `pr/24623_top` and `pr/24623_base` makes it convenient to refer to different SHAs in PR when rebasing or resetting.
|
||||
|
||||
### 2. Review PR
|
||||
|
||||
Because the script has reset the `HEAD` of the PR the changes show up as unstaged files.
|
||||
|
||||
```
|
||||
$ git status
|
||||
On branch pr/24623
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
|
||||
docs/PR_REVIEW.md
|
||||
scripts/github/push-pr
|
||||
scripts/github/review-pr
|
||||
|
||||
nothing added to commit but untracked files present (use "git add" to track)
|
||||
```
|
||||
|
||||
Use your IDE to review the untracked files as needed.
|
||||
A good trick is to use your IDE to stage the files which were already reviewed.
|
||||
When all files are staged the review is done.
|
||||
|
||||
### 3. Creating Edits
|
||||
|
||||
At any point you can edit any line in the repository.
|
||||
The idea is to create edits locally and push them to the PR later.
|
||||
This is useful because it is often times easier to make minor changes locally than to request the PR author to change and repush through a comment (often times the comment is larger than the change.)
|
||||
|
||||
Example of a local edit.
|
||||
```
|
||||
echo "# here is a change" >> docs/PR_REVIEW.md
|
||||
```
|
||||
|
||||
### 4. Creating a Commit From Local Edits
|
||||
|
||||
Since the HEAD has been reset to `pr/24623_base` so that changes show up in `git status` we have to reverse the reset to only see our local changes.
|
||||
To do that reset the `HEAD` to `pr/24623_top`.
|
||||
|
||||
```
|
||||
$ git reset pr/24623_top
|
||||
```
|
||||
|
||||
Doing so will remove all PR changes and only leave your local modifications which you have done.
|
||||
You can verify by running `git status` and `git diff` to see only your changes (PR changes have been removed.)
|
||||
|
||||
```
|
||||
$ git status
|
||||
On branch pr/24623
|
||||
Changes not staged for commit:
|
||||
(use "git add <file>..." to update what will be committed)
|
||||
(use "git checkout -- <file>..." to discard changes in working directory)
|
||||
|
||||
modified: docs/PR_REVIEW.md
|
||||
|
||||
no changes added to commit (use "git add" and/or "git commit -a")
|
||||
```
|
||||
```
|
||||
$ git diff
|
||||
diff --git a/docs/PR_REVIEW.md b/docs/PR_REVIEW.md
|
||||
index 184b5aeca..83517fbe0 100644
|
||||
--- a/docs/PR_REVIEW.md
|
||||
+++ b/docs/PR_REVIEW.md
|
||||
@@ -8,4 +8,4 @@ A better way to do code review of the PR is to do it in your IDE. Here are two s
|
||||
existing text
|
||||
-
|
||||
\ No newline at end of file
|
||||
+# here is a change
|
||||
```
|
||||
|
||||
Next step is to turn your local changes into a `fixup!` commit.
|
||||
Run `git commit --all --fixup HEAD` to create a `fixup!` commit.
|
||||
|
||||
NOTE: If you added new files they must be added using `git add .` or they will not be picked up by the `git commit --all` flag.
|
||||
|
||||
```
|
||||
$ git commit --all --fixup HEAD
|
||||
[pr/24623 45ae87ce4] fixup! ci: scripts to review PRs locally
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
```
|
||||
|
||||
You can verify that the `fixup!` commit with your local modifications was created.
|
||||
```
|
||||
$ git log --oneline
|
||||
45ae87ce4 (HEAD -> pr/24623) fixup! ci: scripts to review PRs locally
|
||||
cef93a51b (pr/24623_top) ci: scripts to review PRs locally
|
||||
```
|
||||
|
||||
### 5. Pushing local edits back to the PR
|
||||
|
||||
The last step is to push your local changes back into the PR.
|
||||
Use `./scripts/github/push-pr` script for that.
|
||||
|
||||
```
|
||||
$ ./scripts/github/push-pr
|
||||
Assuming PR #24623
|
||||
>>> git push git@github.com:mhevery/angular.git HEAD:review_pr_script
|
||||
Counting objects: 4, done.
|
||||
Delta compression using up to 8 threads.
|
||||
Compressing objects: 100% (4/4), done.
|
||||
Writing objects: 100% (4/4), 392 bytes | 392.00 KiB/s, done.
|
||||
Total 4 (delta 3), reused 0 (delta 0)
|
||||
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
|
||||
To github.com:mhevery/angular.git
|
||||
cef93a51b..45ae87ce4 HEAD -> review_pr_script
|
||||
```
|
||||
|
||||
NOTE: Notice that we did not have to specify the PR number since the script can guess it from the branch name.
|
||||
|
||||
If you visit https://github.com/angular/angular/pull/24623/commits you will see that your `fixup!` commit has been added to the PR.
|
||||
This greatly simplifies the work for many minor changes to the PR.
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Clippy ascii art copied from https://github.com/gbigwood/Clippo
|
||||
echo -e "
|
||||
################################################
|
||||
/ \ _________________
|
||||
| | / \\
|
||||
@ @ | It looks like |
|
||||
|| || | you are trying |
|
||||
|| || <--| to merge a PR. |
|
||||
|\_/| \_________________/
|
||||
\___/
|
||||
|
||||
A new merge script is available using `ng-dev`!
|
||||
|
||||
To merge a pr using the new tooling run:
|
||||
|
||||
$ yarn -s ng-dev pr merge <pr-number>
|
||||
|
||||
|
||||
This script has been fully deprecated as it no
|
||||
longer correctly determines branch targets due
|
||||
to how it determines the current version and
|
||||
defines patch branches.
|
||||
################################################"
|
||||
@@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const shell = require('shelljs');
|
||||
shell.config.fatal = true;
|
||||
const util = require('./utils/git_util');
|
||||
|
||||
if (require.main === module) {
|
||||
main(process.argv.splice(2)).then(
|
||||
(v) => process.exitCode,
|
||||
(e) => console.error(process.exitCode = 1, e)
|
||||
);
|
||||
}
|
||||
|
||||
async function main(args) {
|
||||
let flags = '';
|
||||
let prNumber = 0;
|
||||
let printHelp = false;
|
||||
|
||||
args.forEach((arg) => {
|
||||
if (prNumber == 0 && Number.parseInt(arg) > 0) {
|
||||
prNumber = Number.parseInt(arg);
|
||||
} else if (arg == '--help') {
|
||||
printHelp = true;
|
||||
} else if (arg == '--force-with-lease') {
|
||||
flags += ' --force-with-lease';
|
||||
} else if (arg == '--force') {
|
||||
flags += ' --force';
|
||||
} else {
|
||||
shell.echo('Unexpected argument: ', arg);
|
||||
}
|
||||
});
|
||||
|
||||
if (!prNumber) {
|
||||
const branch = util.getCurrentBranch();
|
||||
const maybePr = branch.split('/')[1];
|
||||
if (maybePr > 0) {
|
||||
shell.echo(`PR number not specified. Defaulting to #${maybePr}.`);
|
||||
prNumber = maybePr;
|
||||
}
|
||||
}
|
||||
|
||||
if (!prNumber || printHelp) {
|
||||
shell.echo(`Push the current HEAD into an existing pull request.`);
|
||||
shell.echo(``);
|
||||
shell.echo(`${process.argv[1]} [PR_NUMBER] [--force-with-lease]`);
|
||||
shell.echo(``);
|
||||
shell.echo(` --force-with-lease Continues even \if change can\'t be fast-forwarded.`);
|
||||
shell.echo(` --force Forces the push with --force.`);
|
||||
shell.echo(` [PR_NUMBER] If not present the script guesses the PR from the branch name.`);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const prInfo = await util.githubPrInfo(prNumber);
|
||||
const prPushCmd = `git push${flags} ${prInfo.repository.gitUrl} HEAD:${prInfo.branch}`;
|
||||
shell.echo(`>>> ${prPushCmd}`);
|
||||
shell.exec(prPushCmd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -u -e -o pipefail
|
||||
|
||||
PATCH_BRANCH=`git branch --list '*.x' | cut -d ' ' -f2- | sort -r | head -n1`
|
||||
# Trim whitespace
|
||||
PATCH_BRANCH=`echo $PATCH_BRANCH`
|
||||
|
||||
PUSH_BRANCHES="git push git@github.com:angular/angular.git master:master $PATCH_BRANCH:$PATCH_BRANCH"
|
||||
|
||||
echo $PUSH_BRANCHES
|
||||
$PUSH_BRANCHES
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# TODO: Remove this deprecation warning after a reasonable period.
|
||||
|
||||
echo "The rebase script has been replaced by the rebase script provided in ng-dev";
|
||||
echo "To run the rebase via ng-dev run the following command:"
|
||||
echo " $ yarn -s ng-dev pr rebase <pr-number>"
|
||||
@@ -1,66 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const shell = require('shelljs');
|
||||
shell.config.fatal = true;
|
||||
const util = require('./utils/git_util');
|
||||
|
||||
if (require.main === module) {
|
||||
main(process.argv.splice(2)).then(
|
||||
(v) => process.exitCode = v,
|
||||
(e) => console.error(process.exitCode = 1, e)
|
||||
);
|
||||
}
|
||||
|
||||
async function main(args) {
|
||||
let prNumber = 0;
|
||||
|
||||
args.forEach((arg) => {
|
||||
if (prNumber == 0 && arg > 0) {
|
||||
prNumber = arg;
|
||||
} else {
|
||||
shell.echo('Unexpected argument: ', arg);
|
||||
}
|
||||
});
|
||||
|
||||
if (prNumber === 0) {
|
||||
shell.echo('Bring github pull request onto your local repo for review and edit');
|
||||
shell.echo('');
|
||||
shell.echo(`${process.argv[1]} PR_NUMBER`);
|
||||
shell.echo('');
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (util.gitHasLocalModifications()) {
|
||||
shell.echo('Local modification detected. exiting...');
|
||||
return 1;
|
||||
}
|
||||
|
||||
let prShaCount = (await util.githubPrInfo(prNumber)).commits;
|
||||
|
||||
shell.exec(`git checkout master`);
|
||||
if (util.execNoFatal(`git rev-parse --verify --quiet pr/${prNumber}`).code == 0) {
|
||||
shell.exec(`git branch -D pr/${prNumber}`);
|
||||
}
|
||||
|
||||
shell.echo(`Fetching pull request #${prNumber} with ${prNumber} SHA(s) into branch range: pr/${prNumber}_base..pr/${prNumber}_top`);
|
||||
shell.exec(`git fetch -f git@github.com:angular/angular.git pull/${prNumber}/head:pr/${prNumber}_top`);
|
||||
|
||||
shell.exec(`git branch -f pr/${prNumber}_bottom pr/${prNumber}_top~${prShaCount - 1}`);
|
||||
shell.exec(`git branch -f pr/${prNumber}_base pr/${prNumber}_top~${prShaCount}`);
|
||||
|
||||
// Create aliases
|
||||
shell.exec(`git branch -f pr/TOP pr/${prNumber}_top`);
|
||||
shell.exec(`git branch -f pr/BASE pr/${prNumber}_base`);
|
||||
shell.exec(`git branch -f pr/BOTTOM pr/${prNumber}_bottom`);
|
||||
|
||||
shell.echo(`======================================================================================`);
|
||||
shell.exec(`git log --oneline --color pr/${prNumber}_base..pr/${prNumber}_top`);
|
||||
shell.echo(`======================================================================================`);
|
||||
|
||||
// Reset the HEAD so that we can see changed files for review
|
||||
shell.exec(`git checkout --force -b pr/${prNumber} pr/${prNumber}_top`);
|
||||
shell.exec(`git reset pr/${prNumber}_base`);
|
||||
shell.exec(`git status`);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
const https = require('https');
|
||||
const shell = require('shelljs');
|
||||
|
||||
function httpGet(server, path, headers) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = {
|
||||
hostname: server,
|
||||
port: 443,
|
||||
path: path,
|
||||
method: 'GET',
|
||||
headers: {'User-Agent': 'script', ...headers}
|
||||
};
|
||||
https
|
||||
.get(
|
||||
options,
|
||||
(res) => {
|
||||
let json = '';
|
||||
res.on('data', (chunk) => json += chunk.toString());
|
||||
res.on('end', () => resolve(json));
|
||||
})
|
||||
.on('error', (e) => reject(e));
|
||||
});
|
||||
}
|
||||
|
||||
let warnNoToken = true;
|
||||
|
||||
async function githubGet(path) {
|
||||
const token = process.env['TOKEN'];
|
||||
const headers = {};
|
||||
if (token) {
|
||||
headers.Authorization = 'token ' + token;
|
||||
} else if (warnNoToken) {
|
||||
warnNoToken = false;
|
||||
console.warn('############################################################');
|
||||
console.warn('############################################################');
|
||||
console.warn('WARNING: you should set the TOKEN variable to a github token');
|
||||
console.warn('############################################################');
|
||||
console.warn('############################################################');
|
||||
}
|
||||
|
||||
return JSON.parse(await httpGet('api.github.com', '/repos/angular/angular/' + path, headers));
|
||||
}
|
||||
|
||||
async function githubPrInfo(prNumber) {
|
||||
const pr = (await githubGet('pulls/' + prNumber));
|
||||
const label = pr.head.label.split(':');
|
||||
const user = label[0];
|
||||
const branch = label[1];
|
||||
return {
|
||||
commits: pr.commits,
|
||||
repository: {
|
||||
user: user,
|
||||
gitUrl: `git@github.com:${user}/angular.git`,
|
||||
},
|
||||
branch: branch
|
||||
};
|
||||
}
|
||||
|
||||
function gitHasLocalModifications() {
|
||||
return execNoFatal('git diff-index --quiet HEAD --').code != 0;
|
||||
}
|
||||
|
||||
function execNoFatal(cmd, options) {
|
||||
const fatal = shell.config.fatal;
|
||||
try {
|
||||
shell.config.fatal = false;
|
||||
return shell.exec(cmd, options);
|
||||
} finally {
|
||||
shell.config.fatal = fatal;
|
||||
}
|
||||
}
|
||||
|
||||
function getCurrentBranch() {
|
||||
return shell.exec('git branch', {silent: true})
|
||||
.stdout.toString()
|
||||
.split('\n') // Break into lines
|
||||
.map((v) => v.trim()) // trim
|
||||
.filter((b) => b[0] == '*') // select current branch
|
||||
.map((b) => b.split(' ')[1])[0]; // remove leading `*`
|
||||
}
|
||||
|
||||
exports.httpGet = httpGet;
|
||||
exports.githubGet = githubGet;
|
||||
exports.githubPrInfo = githubPrInfo;
|
||||
exports.gitHasLocalModifications = gitHasLocalModifications;
|
||||
exports.execNoFatal = execNoFatal;
|
||||
exports.getCurrentBranch = getCurrentBranch;
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
var msg = '';
|
||||
|
||||
if (require.main === module) {
|
||||
process.stdin.setEncoding('utf8');
|
||||
|
||||
process.stdin.on('readable', () => {
|
||||
const chunk = process.stdin.read();
|
||||
if (chunk !== null) {
|
||||
msg += chunk;
|
||||
}
|
||||
});
|
||||
|
||||
process.stdin.on('end', () => {
|
||||
var argv = process.argv.slice(2);
|
||||
console.info(rewriteMsg(msg, argv[0]));
|
||||
});
|
||||
}
|
||||
|
||||
function rewriteMsg(msg, prNo) {
|
||||
var lines = msg.split(/\n/);
|
||||
lines[0] += ' (#' + prNo + ')';
|
||||
lines.push('PR Close #' + prNo);
|
||||
return lines.join('\n');
|
||||
}
|
||||
|
||||
exports.rewriteMsg = rewriteMsg;
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
var json = '';
|
||||
|
||||
if (require.main === module) {
|
||||
process.stdin.setEncoding('utf8');
|
||||
|
||||
process.stdin.on('readable', () => {
|
||||
const chunk = process.stdin.read();
|
||||
if (chunk !== null) {
|
||||
json += chunk;
|
||||
}
|
||||
});
|
||||
|
||||
process.stdin.on('end', () => {
|
||||
var obj = JSON.parse(json);
|
||||
var argv = process.argv.slice(2);
|
||||
extractPaths(obj, argv).forEach(function(line) {
|
||||
console.info(line);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function extractPaths(obj, paths) {
|
||||
var lines = [];
|
||||
paths.forEach(function(exp) {
|
||||
var objs = obj instanceof Array ? [].concat(obj) : [obj];
|
||||
exp.split('.').forEach(function(name) {
|
||||
for (var i = 0; i < objs.length; i++) {
|
||||
var o = objs[i];
|
||||
if (o instanceof Array) {
|
||||
// Expand and do over
|
||||
objs = objs.slice(0, i).concat(o).concat(objs.slice(i + 1, objs.length));
|
||||
i--;
|
||||
} else {
|
||||
name.split('=').forEach(function(name, index) {
|
||||
if (index == 0) {
|
||||
objs[i] = o = o[name];
|
||||
} else if (name.charAt(0) == '^') {
|
||||
if (o.indexOf(name.slice(1)) !== 0) {
|
||||
objs.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
lines.push(objs.join('|'));
|
||||
});
|
||||
return lines;
|
||||
}
|
||||
|
||||
exports.extractPaths = extractPaths;
|
||||
@@ -1,49 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
var assert = require('assert');
|
||||
var extractPaths = require('./json_extract').extractPaths;
|
||||
|
||||
var SAMPLE_LABELS = [
|
||||
{
|
||||
'id': 149476251,
|
||||
'url': 'https://api.github.com/repos/angular/angular/labels/cla:%20yes',
|
||||
'name': 'cla: yes',
|
||||
'color': '009800',
|
||||
'default': false
|
||||
},
|
||||
{
|
||||
'id': 533874619,
|
||||
'url': 'https://api.github.com/repos/angular/angular/labels/comp:%20aio',
|
||||
'name': 'comp: aio',
|
||||
'color': 'c7def8',
|
||||
'default': false
|
||||
},
|
||||
{
|
||||
'id': 133556520,
|
||||
'url': 'https://api.github.com/repos/angular/angular/labels/PR%20action:%20merge',
|
||||
'name': 'PR action: merge',
|
||||
'color': '99ff66',
|
||||
'default': false
|
||||
},
|
||||
{
|
||||
'id': 655699838,
|
||||
'url': 'https://api.github.com/repos/angular/angular/labels/PR%20target:%20master%20&%20patch',
|
||||
'name': 'PR target: master & patch',
|
||||
'color': '5319e7',
|
||||
'default': false
|
||||
}
|
||||
];
|
||||
|
||||
assert.deepEqual(extractPaths({head: {label: 'value1'}}, ['head.label']), ['value1']);
|
||||
assert.deepEqual(
|
||||
extractPaths(SAMPLE_LABELS, ['name']),
|
||||
['cla: yes|comp: aio|PR action: merge|PR target: master & patch']);
|
||||
assert.deepEqual(extractPaths(SAMPLE_LABELS, ['name=^PR target:']), ['PR target: master & patch']);
|
||||
@@ -1,30 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": 149476251,
|
||||
"url": "https://api.github.com/repos/angular/angular/labels/cla:%20yes",
|
||||
"name": "cla: yes",
|
||||
"color": "009800",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"id": 533874619,
|
||||
"url": "https://api.github.com/repos/angular/angular/labels/comp:%20aio",
|
||||
"name": "comp: aio",
|
||||
"color": "c7def8",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"id": 133556520,
|
||||
"url": "https://api.github.com/repos/angular/angular/labels/PR%20action:%20merge",
|
||||
"name": "PR action: merge",
|
||||
"color": "99ff66",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"id": 655699838,
|
||||
"url": "https://api.github.com/repos/angular/angular/labels/PR%20target:%20master%20&%20patch",
|
||||
"name": "PR target: master & patch",
|
||||
"color": "5319e7",
|
||||
"default": false
|
||||
}
|
||||
]
|
||||
@@ -1,314 +0,0 @@
|
||||
{
|
||||
"url": "https://api.github.com/repos/angular/angular/pulls/18730",
|
||||
"id": 136020267,
|
||||
"html_url": "https://github.com/angular/angular/pull/18730",
|
||||
"diff_url": "https://github.com/angular/angular/pull/18730.diff",
|
||||
"patch_url": "https://github.com/angular/angular/pull/18730.patch",
|
||||
"issue_url": "https://api.github.com/repos/angular/angular/issues/18730",
|
||||
"number": 18730,
|
||||
"state": "open",
|
||||
"locked": false,
|
||||
"title": "docs(aio): typo in metadata guide",
|
||||
"user": {
|
||||
"login": "cexbrayat",
|
||||
"id": 411874,
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/411874?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/cexbrayat",
|
||||
"html_url": "https://github.com/cexbrayat",
|
||||
"followers_url": "https://api.github.com/users/cexbrayat/followers",
|
||||
"following_url": "https://api.github.com/users/cexbrayat/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/cexbrayat/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/cexbrayat/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/cexbrayat/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/cexbrayat/orgs",
|
||||
"repos_url": "https://api.github.com/users/cexbrayat/repos",
|
||||
"events_url": "https://api.github.com/users/cexbrayat/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/cexbrayat/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"body": "## PR Type\r\n\r\nSimple typo fix in aio guide\r\n\r\n<!-- Please check the one that applies to this PR using \"x\". -->\r\n```\r\n[ ] Bugfix\r\n[ ] Feature\r\n[ ] Code style update (formatting, local variables)\r\n[ ] Refactoring (no functional changes, no api changes)\r\n[ ] Build related changes\r\n[ ] CI related changes\r\n[x] Documentation content changes\r\n[ ] angular.io application / infrastructure changes\r\n[ ] Other... Please describe:\r\n```",
|
||||
"created_at": "2017-08-16T13:11:04Z",
|
||||
"updated_at": "2017-08-17T13:59:21Z",
|
||||
"closed_at": null,
|
||||
"merged_at": null,
|
||||
"merge_commit_sha": "35f8a4fdd7b37d41d8ed71c0f9978ed3e751da43",
|
||||
"assignee": null,
|
||||
"assignees": [
|
||||
|
||||
],
|
||||
"requested_reviewers": [
|
||||
|
||||
],
|
||||
"milestone": null,
|
||||
"commits_url": "https://api.github.com/repos/angular/angular/pulls/18730/commits",
|
||||
"review_comments_url": "https://api.github.com/repos/angular/angular/pulls/18730/comments",
|
||||
"review_comment_url": "https://api.github.com/repos/angular/angular/pulls/comments{/number}",
|
||||
"comments_url": "https://api.github.com/repos/angular/angular/issues/18730/comments",
|
||||
"statuses_url": "https://api.github.com/repos/angular/angular/statuses/d59a5eec6cc60e301033300957f0c959b8056650",
|
||||
"head": {
|
||||
"label": "cexbrayat:docs/metadata-guide",
|
||||
"ref": "docs/metadata-guide",
|
||||
"sha": "d59a5eec6cc60e301033300957f0c959b8056650",
|
||||
"user": {
|
||||
"login": "cexbrayat",
|
||||
"id": 411874,
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/411874?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/cexbrayat",
|
||||
"html_url": "https://github.com/cexbrayat",
|
||||
"followers_url": "https://api.github.com/users/cexbrayat/followers",
|
||||
"following_url": "https://api.github.com/users/cexbrayat/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/cexbrayat/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/cexbrayat/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/cexbrayat/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/cexbrayat/orgs",
|
||||
"repos_url": "https://api.github.com/users/cexbrayat/repos",
|
||||
"events_url": "https://api.github.com/users/cexbrayat/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/cexbrayat/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"repo": {
|
||||
"id": 25485740,
|
||||
"name": "angular",
|
||||
"full_name": "cexbrayat/angular",
|
||||
"owner": {
|
||||
"login": "cexbrayat",
|
||||
"id": 411874,
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/411874?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/cexbrayat",
|
||||
"html_url": "https://github.com/cexbrayat",
|
||||
"followers_url": "https://api.github.com/users/cexbrayat/followers",
|
||||
"following_url": "https://api.github.com/users/cexbrayat/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/cexbrayat/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/cexbrayat/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/cexbrayat/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/cexbrayat/orgs",
|
||||
"repos_url": "https://api.github.com/users/cexbrayat/repos",
|
||||
"events_url": "https://api.github.com/users/cexbrayat/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/cexbrayat/received_events",
|
||||
"type": "User",
|
||||
"site_admin": false
|
||||
},
|
||||
"private": false,
|
||||
"html_url": "https://github.com/cexbrayat/angular",
|
||||
"description": null,
|
||||
"fork": true,
|
||||
"url": "https://api.github.com/repos/cexbrayat/angular",
|
||||
"forks_url": "https://api.github.com/repos/cexbrayat/angular/forks",
|
||||
"keys_url": "https://api.github.com/repos/cexbrayat/angular/keys{/key_id}",
|
||||
"collaborators_url": "https://api.github.com/repos/cexbrayat/angular/collaborators{/collaborator}",
|
||||
"teams_url": "https://api.github.com/repos/cexbrayat/angular/teams",
|
||||
"hooks_url": "https://api.github.com/repos/cexbrayat/angular/hooks",
|
||||
"issue_events_url": "https://api.github.com/repos/cexbrayat/angular/issues/events{/number}",
|
||||
"events_url": "https://api.github.com/repos/cexbrayat/angular/events",
|
||||
"assignees_url": "https://api.github.com/repos/cexbrayat/angular/assignees{/user}",
|
||||
"branches_url": "https://api.github.com/repos/cexbrayat/angular/branches{/branch}",
|
||||
"tags_url": "https://api.github.com/repos/cexbrayat/angular/tags",
|
||||
"blobs_url": "https://api.github.com/repos/cexbrayat/angular/git/blobs{/sha}",
|
||||
"git_tags_url": "https://api.github.com/repos/cexbrayat/angular/git/tags{/sha}",
|
||||
"git_refs_url": "https://api.github.com/repos/cexbrayat/angular/git/refs{/sha}",
|
||||
"trees_url": "https://api.github.com/repos/cexbrayat/angular/git/trees{/sha}",
|
||||
"statuses_url": "https://api.github.com/repos/cexbrayat/angular/statuses/{sha}",
|
||||
"languages_url": "https://api.github.com/repos/cexbrayat/angular/languages",
|
||||
"stargazers_url": "https://api.github.com/repos/cexbrayat/angular/stargazers",
|
||||
"contributors_url": "https://api.github.com/repos/cexbrayat/angular/contributors",
|
||||
"subscribers_url": "https://api.github.com/repos/cexbrayat/angular/subscribers",
|
||||
"subscription_url": "https://api.github.com/repos/cexbrayat/angular/subscription",
|
||||
"commits_url": "https://api.github.com/repos/cexbrayat/angular/commits{/sha}",
|
||||
"git_commits_url": "https://api.github.com/repos/cexbrayat/angular/git/commits{/sha}",
|
||||
"comments_url": "https://api.github.com/repos/cexbrayat/angular/comments{/number}",
|
||||
"issue_comment_url": "https://api.github.com/repos/cexbrayat/angular/issues/comments{/number}",
|
||||
"contents_url": "https://api.github.com/repos/cexbrayat/angular/contents/{+path}",
|
||||
"compare_url": "https://api.github.com/repos/cexbrayat/angular/compare/{base}...{head}",
|
||||
"merges_url": "https://api.github.com/repos/cexbrayat/angular/merges",
|
||||
"archive_url": "https://api.github.com/repos/cexbrayat/angular/{archive_format}{/ref}",
|
||||
"downloads_url": "https://api.github.com/repos/cexbrayat/angular/downloads",
|
||||
"issues_url": "https://api.github.com/repos/cexbrayat/angular/issues{/number}",
|
||||
"pulls_url": "https://api.github.com/repos/cexbrayat/angular/pulls{/number}",
|
||||
"milestones_url": "https://api.github.com/repos/cexbrayat/angular/milestones{/number}",
|
||||
"notifications_url": "https://api.github.com/repos/cexbrayat/angular/notifications{?since,all,participating}",
|
||||
"labels_url": "https://api.github.com/repos/cexbrayat/angular/labels{/name}",
|
||||
"releases_url": "https://api.github.com/repos/cexbrayat/angular/releases{/id}",
|
||||
"deployments_url": "https://api.github.com/repos/cexbrayat/angular/deployments",
|
||||
"created_at": "2014-10-20T20:42:42Z",
|
||||
"updated_at": "2017-07-03T09:58:51Z",
|
||||
"pushed_at": "2017-08-16T13:20:57Z",
|
||||
"git_url": "git://github.com/cexbrayat/angular.git",
|
||||
"ssh_url": "git@github.com:cexbrayat/angular.git",
|
||||
"clone_url": "https://github.com/cexbrayat/angular.git",
|
||||
"svn_url": "https://github.com/cexbrayat/angular",
|
||||
"homepage": null,
|
||||
"size": 62846,
|
||||
"stargazers_count": 1,
|
||||
"watchers_count": 1,
|
||||
"language": "TypeScript",
|
||||
"has_issues": false,
|
||||
"has_projects": true,
|
||||
"has_downloads": true,
|
||||
"has_wiki": true,
|
||||
"has_pages": false,
|
||||
"forks_count": 0,
|
||||
"mirror_url": null,
|
||||
"open_issues_count": 0,
|
||||
"forks": 0,
|
||||
"open_issues": 0,
|
||||
"watchers": 1,
|
||||
"default_branch": "master"
|
||||
}
|
||||
},
|
||||
"base": {
|
||||
"label": "angular:master",
|
||||
"ref": "master",
|
||||
"sha": "32ff21c16bf1833d2da9f8e2ec8536f7a13f92de",
|
||||
"user": {
|
||||
"login": "angular",
|
||||
"id": 139426,
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/139426?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/angular",
|
||||
"html_url": "https://github.com/angular",
|
||||
"followers_url": "https://api.github.com/users/angular/followers",
|
||||
"following_url": "https://api.github.com/users/angular/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/angular/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/angular/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/angular/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/angular/orgs",
|
||||
"repos_url": "https://api.github.com/users/angular/repos",
|
||||
"events_url": "https://api.github.com/users/angular/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/angular/received_events",
|
||||
"type": "Organization",
|
||||
"site_admin": false
|
||||
},
|
||||
"repo": {
|
||||
"id": 24195339,
|
||||
"name": "angular",
|
||||
"full_name": "angular/angular",
|
||||
"owner": {
|
||||
"login": "angular",
|
||||
"id": 139426,
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/139426?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/angular",
|
||||
"html_url": "https://github.com/angular",
|
||||
"followers_url": "https://api.github.com/users/angular/followers",
|
||||
"following_url": "https://api.github.com/users/angular/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/angular/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/angular/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/angular/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/angular/orgs",
|
||||
"repos_url": "https://api.github.com/users/angular/repos",
|
||||
"events_url": "https://api.github.com/users/angular/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/angular/received_events",
|
||||
"type": "Organization",
|
||||
"site_admin": false
|
||||
},
|
||||
"private": false,
|
||||
"html_url": "https://github.com/angular/angular",
|
||||
"description": "One framework. Mobile & desktop.",
|
||||
"fork": false,
|
||||
"url": "https://api.github.com/repos/angular/angular",
|
||||
"forks_url": "https://api.github.com/repos/angular/angular/forks",
|
||||
"keys_url": "https://api.github.com/repos/angular/angular/keys{/key_id}",
|
||||
"collaborators_url": "https://api.github.com/repos/angular/angular/collaborators{/collaborator}",
|
||||
"teams_url": "https://api.github.com/repos/angular/angular/teams",
|
||||
"hooks_url": "https://api.github.com/repos/angular/angular/hooks",
|
||||
"issue_events_url": "https://api.github.com/repos/angular/angular/issues/events{/number}",
|
||||
"events_url": "https://api.github.com/repos/angular/angular/events",
|
||||
"assignees_url": "https://api.github.com/repos/angular/angular/assignees{/user}",
|
||||
"branches_url": "https://api.github.com/repos/angular/angular/branches{/branch}",
|
||||
"tags_url": "https://api.github.com/repos/angular/angular/tags",
|
||||
"blobs_url": "https://api.github.com/repos/angular/angular/git/blobs{/sha}",
|
||||
"git_tags_url": "https://api.github.com/repos/angular/angular/git/tags{/sha}",
|
||||
"git_refs_url": "https://api.github.com/repos/angular/angular/git/refs{/sha}",
|
||||
"trees_url": "https://api.github.com/repos/angular/angular/git/trees{/sha}",
|
||||
"statuses_url": "https://api.github.com/repos/angular/angular/statuses/{sha}",
|
||||
"languages_url": "https://api.github.com/repos/angular/angular/languages",
|
||||
"stargazers_url": "https://api.github.com/repos/angular/angular/stargazers",
|
||||
"contributors_url": "https://api.github.com/repos/angular/angular/contributors",
|
||||
"subscribers_url": "https://api.github.com/repos/angular/angular/subscribers",
|
||||
"subscription_url": "https://api.github.com/repos/angular/angular/subscription",
|
||||
"commits_url": "https://api.github.com/repos/angular/angular/commits{/sha}",
|
||||
"git_commits_url": "https://api.github.com/repos/angular/angular/git/commits{/sha}",
|
||||
"comments_url": "https://api.github.com/repos/angular/angular/comments{/number}",
|
||||
"issue_comment_url": "https://api.github.com/repos/angular/angular/issues/comments{/number}",
|
||||
"contents_url": "https://api.github.com/repos/angular/angular/contents/{+path}",
|
||||
"compare_url": "https://api.github.com/repos/angular/angular/compare/{base}...{head}",
|
||||
"merges_url": "https://api.github.com/repos/angular/angular/merges",
|
||||
"archive_url": "https://api.github.com/repos/angular/angular/{archive_format}{/ref}",
|
||||
"downloads_url": "https://api.github.com/repos/angular/angular/downloads",
|
||||
"issues_url": "https://api.github.com/repos/angular/angular/issues{/number}",
|
||||
"pulls_url": "https://api.github.com/repos/angular/angular/pulls{/number}",
|
||||
"milestones_url": "https://api.github.com/repos/angular/angular/milestones{/number}",
|
||||
"notifications_url": "https://api.github.com/repos/angular/angular/notifications{?since,all,participating}",
|
||||
"labels_url": "https://api.github.com/repos/angular/angular/labels{/name}",
|
||||
"releases_url": "https://api.github.com/repos/angular/angular/releases{/id}",
|
||||
"deployments_url": "https://api.github.com/repos/angular/angular/deployments",
|
||||
"created_at": "2014-09-18T16:12:01Z",
|
||||
"updated_at": "2017-08-17T16:52:26Z",
|
||||
"pushed_at": "2017-08-17T16:44:18Z",
|
||||
"git_url": "git://github.com/angular/angular.git",
|
||||
"ssh_url": "git@github.com:angular/angular.git",
|
||||
"clone_url": "https://github.com/angular/angular.git",
|
||||
"svn_url": "https://github.com/angular/angular",
|
||||
"homepage": "https://angular.io",
|
||||
"size": 64855,
|
||||
"stargazers_count": 26993,
|
||||
"watchers_count": 26993,
|
||||
"language": "TypeScript",
|
||||
"has_issues": true,
|
||||
"has_projects": true,
|
||||
"has_downloads": true,
|
||||
"has_wiki": false,
|
||||
"has_pages": false,
|
||||
"forks_count": 6796,
|
||||
"mirror_url": null,
|
||||
"open_issues_count": 1860,
|
||||
"forks": 6796,
|
||||
"open_issues": 1860,
|
||||
"watchers": 26993,
|
||||
"default_branch": "master"
|
||||
}
|
||||
},
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "https://api.github.com/repos/angular/angular/pulls/18730"
|
||||
},
|
||||
"html": {
|
||||
"href": "https://github.com/angular/angular/pull/18730"
|
||||
},
|
||||
"issue": {
|
||||
"href": "https://api.github.com/repos/angular/angular/issues/18730"
|
||||
},
|
||||
"comments": {
|
||||
"href": "https://api.github.com/repos/angular/angular/issues/18730/comments"
|
||||
},
|
||||
"review_comments": {
|
||||
"href": "https://api.github.com/repos/angular/angular/pulls/18730/comments"
|
||||
},
|
||||
"review_comment": {
|
||||
"href": "https://api.github.com/repos/angular/angular/pulls/comments{/number}"
|
||||
},
|
||||
"commits": {
|
||||
"href": "https://api.github.com/repos/angular/angular/pulls/18730/commits"
|
||||
},
|
||||
"statuses": {
|
||||
"href": "https://api.github.com/repos/angular/angular/statuses/d59a5eec6cc60e301033300957f0c959b8056650"
|
||||
}
|
||||
},
|
||||
"merged": false,
|
||||
"mergeable": true,
|
||||
"rebaseable": true,
|
||||
"mergeable_state": "clean",
|
||||
"merged_by": null,
|
||||
"comments": 0,
|
||||
"review_comments": 2,
|
||||
"maintainer_can_modify": true,
|
||||
"commits": 1,
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"changed_files": 1
|
||||
}
|
||||
Reference in New Issue
Block a user