{"action":"opened","number":56799,"pull_request":{"url":"https://api.github.com/repos/Microsoft/vscode/pulls/56799","id":209435514,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA5NDM1NTE0","html_url":"https://github.com/Microsoft/vscode/pull/56799","diff_url":"https://github.com/Microsoft/vscode/pull/56799.diff","patch_url":"https://github.com/Microsoft/vscode/pull/56799.patch","issue_url":"https://api.github.com/repos/Microsoft/vscode/issues/56799","number":56799,"state":"open","locked":false,"title":"Expose Git extension API","user":{"login":"joaomoreno","id":22350,"node_id":"MDQ6VXNlcjIyMzUw","avatar_url":"https://avatars3.githubusercontent.com/u/22350?v=4","gravatar_id":"","url":"https://api.github.com/users/joaomoreno","html_url":"https://github.com/joaomoreno","followers_url":"https://api.github.com/users/joaomoreno/followers","following_url":"https://api.github.com/users/joaomoreno/following{/other_user}","gists_url":"https://api.github.com/users/joaomoreno/gists{/gist_id}","starred_url":"https://api.github.com/users/joaomoreno/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joaomoreno/subscriptions","organizations_url":"https://api.github.com/users/joaomoreno/orgs","repos_url":"https://api.github.com/users/joaomoreno/repos","events_url":"https://api.github.com/users/joaomoreno/events{/privacy}","received_events_url":"https://api.github.com/users/joaomoreno/received_events","type":"User","site_admin":false},"body":"We plan on exposing some of the git extension API this month. This requires us to tread lightly; exposing an API is always an investment for the future and it requires careful planning.\r\n\r\n### Typings\r\n\r\nThere are two approaches to generating API typings that extensions can code against:\r\n\r\n- The semi-automated `monaco.d.ts` route, in which we can write tools that cherry pick the types which should be exposed by the API\r\n- The manual `vscode.d.ts` route, in which we manually maintain the typings in a file and even code internally against them.\r\n\r\nAfter a short discussion with @jrieken and @alexandrudima I'm strongly in favor of going the manual route. We shall maintain a `git.d.ts` file, which will be the full extent of the extension's API, and even include it in the extension's compilation unit, validating it continuously.\r\n\r\n### Versioning\r\n\r\nEvery API needs a versioning scheme. For VS Code, semver has served us well in the past. Even though I do not anticipate too much breakage, there will be an inevitable time in which we will have to break API. Here's the plan:\r\n\r\n- Semver is king. Breakage will be communicated by major version increments, while non-breaking features as well as bugfixes will be communicated via minor and patch increments.\r\n- In order to enforce using semver, the extension shall expose a `getAPI(version: string): API` method, in which `version` can be loosely specified, eg. `1.0.0`, `~1.0.0`, `^1.0.0`. If the extension can provide a compatible version, it will return it as an `API` type. It will throw otherwise.\r\n  - It can also optionally `console.warn` when an extension is using an outdated API.\r\n- Going forward, and given that there will be breakage, let's make it a goal to provide as many API implementation as we can, probably capping that number in a time-based approach, eg. drop it if it's too old. My intuition tells me breakage will not happen often, but it is still assuring to have this as a goal.\r\n  - The extension can also optionally expose a `versions: string[]` array containing the API versions it currently exposes.\r\n\r\n### Going forward\r\n\r\nThis week, I'll start implementing a `0.x.x` version of the extension which other extensions can start experimenting with. With this, I'm looking for comments, feature requests, issues, etc.\r\n\r\ncc @rebornix @RMacfarlane @eamodio for comments","created_at":"2018-08-20T07:39:51Z","updated_at":"2018-08-20T07:39:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":{"login":"joaomoreno","id":22350,"node_id":"MDQ6VXNlcjIyMzUw","avatar_url":"https://avatars3.githubusercontent.com/u/22350?v=4","gravatar_id":"","url":"https://api.github.com/users/joaomoreno","html_url":"https://github.com/joaomoreno","followers_url":"https://api.github.com/users/joaomoreno/followers","following_url":"https://api.github.com/users/joaomoreno/following{/other_user}","gists_url":"https://api.github.com/users/joaomoreno/gists{/gist_id}","starred_url":"https://api.github.com/users/joaomoreno/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joaomoreno/subscriptions","organizations_url":"https://api.github.com/users/joaomoreno/orgs","repos_url":"https://api.github.com/users/joaomoreno/repos","events_url":"https://api.github.com/users/joaomoreno/events{/privacy}","received_events_url":"https://api.github.com/users/joaomoreno/received_events","type":"User","site_admin":false},"assignees":[{"login":"joaomoreno","id":22350,"node_id":"MDQ6VXNlcjIyMzUw","avatar_url":"https://avatars3.githubusercontent.com/u/22350?v=4","gravatar_id":"","url":"https://api.github.com/users/joaomoreno","html_url":"https://github.com/joaomoreno","followers_url":"https://api.github.com/users/joaomoreno/followers","following_url":"https://api.github.com/users/joaomoreno/following{/other_user}","gists_url":"https://api.github.com/users/joaomoreno/gists{/gist_id}","starred_url":"https://api.github.com/users/joaomoreno/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joaomoreno/subscriptions","organizations_url":"https://api.github.com/users/joaomoreno/orgs","repos_url":"https://api.github.com/users/joaomoreno/repos","events_url":"https://api.github.com/users/joaomoreno/events{/privacy}","received_events_url":"https://api.github.com/users/joaomoreno/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":272689392,"node_id":"MDU6TGFiZWwyNzI2ODkzOTI=","url":"https://api.github.com/repos/Microsoft/vscode/labels/feature-request","name":"feature-request","color":"dcdcdc","default":false},{"id":296835379,"node_id":"MDU6TGFiZWwyOTY4MzUzNzk=","url":"https://api.github.com/repos/Microsoft/vscode/labels/git","name":"git","color":"c5def5","default":false}],"milestone":{"url":"https://api.github.com/repos/Microsoft/vscode/milestones/74","html_url":"https://github.com/Microsoft/vscode/milestone/74","labels_url":"https://api.github.com/repos/Microsoft/vscode/milestones/74/labels","id":3505354,"node_id":"MDk6TWlsZXN0b25lMzUwNTM1NA==","number":74,"title":"August 2018","description":"","creator":{"login":"isidorn","id":1926584,"node_id":"MDQ6VXNlcjE5MjY1ODQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1926584?v=4","gravatar_id":"","url":"https://api.github.com/users/isidorn","html_url":"https://github.com/isidorn","followers_url":"https://api.github.com/users/isidorn/followers","following_url":"https://api.github.com/users/isidorn/following{/other_user}","gists_url":"https://api.github.com/users/isidorn/gists{/gist_id}","starred_url":"https://api.github.com/users/isidorn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/isidorn/subscriptions","organizations_url":"https://api.github.com/users/isidorn/orgs","repos_url":"https://api.github.com/users/isidorn/repos","events_url":"https://api.github.com/users/isidorn/events{/privacy}","received_events_url":"https://api.github.com/users/isidorn/received_events","type":"User","site_admin":false},"open_issues":192,"closed_issues":212,"state":"open","created_at":"2018-07-18T09:23:10Z","updated_at":"2018-08-20T07:39:51Z","due_on":"2018-08-31T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/Microsoft/vscode/pulls/56799/commits","review_comments_url":"https://api.github.com/repos/Microsoft/vscode/pulls/56799/comments","review_comment_url":"https://api.github.com/repos/Microsoft/vscode/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/vscode/issues/56799/comments","statuses_url":"https://api.github.com/repos/Microsoft/vscode/statuses/c252511ed3dbd667fafe9953d106f98688a6b29a","head":{"label":"Microsoft:joao/git-api","ref":"joao/git-api","sha":"c252511ed3dbd667fafe9953d106f98688a6b29a","user":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":41881900,"node_id":"MDEwOlJlcG9zaXRvcnk0MTg4MTkwMA==","name":"vscode","full_name":"Microsoft/vscode","owner":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/vscode","description":"Visual Studio Code","fork":false,"url":"https://api.github.com/repos/Microsoft/vscode","forks_url":"https://api.github.com/repos/Microsoft/vscode/forks","keys_url":"https://api.github.com/repos/Microsoft/vscode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/vscode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/vscode/teams","hooks_url":"https://api.github.com/repos/Microsoft/vscode/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/vscode/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/vscode/events","assignees_url":"https://api.github.com/repos/Microsoft/vscode/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/vscode/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/vscode/tags","blobs_url":"https://api.github.com/repos/Microsoft/vscode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/vscode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/vscode/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/vscode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/vscode/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/vscode/languages","stargazers_url":"https://api.github.com/repos/Microsoft/vscode/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/vscode/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/vscode/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/vscode/subscription","commits_url":"https://api.github.com/repos/Microsoft/vscode/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/vscode/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/vscode/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/vscode/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/vscode/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/vscode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/vscode/merges","archive_url":"https://api.github.com/repos/Microsoft/vscode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/vscode/downloads","issues_url":"https://api.github.com/repos/Microsoft/vscode/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/vscode/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/vscode/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/vscode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/vscode/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/vscode/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/vscode/deployments","created_at":"2015-09-03T20:23:38Z","updated_at":"2018-08-20T07:36:34Z","pushed_at":"2018-08-20T07:22:20Z","git_url":"git://github.com/Microsoft/vscode.git","ssh_url":"git@github.com:Microsoft/vscode.git","clone_url":"https://github.com/Microsoft/vscode.git","svn_url":"https://github.com/Microsoft/vscode","homepage":"https://code.visualstudio.com","size":151148,"stargazers_count":57530,"watchers_count":57530,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7433,"mirror_url":null,"archived":false,"open_issues_count":5609,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":7433,"open_issues":5609,"watchers":57530,"default_branch":"master"}},"base":{"label":"Microsoft:master","ref":"master","sha":"bb50de5845b1dbd5e8d21a4b3ce9a1fc1d1a500b","user":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":41881900,"node_id":"MDEwOlJlcG9zaXRvcnk0MTg4MTkwMA==","name":"vscode","full_name":"Microsoft/vscode","owner":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/vscode","description":"Visual Studio Code","fork":false,"url":"https://api.github.com/repos/Microsoft/vscode","forks_url":"https://api.github.com/repos/Microsoft/vscode/forks","keys_url":"https://api.github.com/repos/Microsoft/vscode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/vscode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/vscode/teams","hooks_url":"https://api.github.com/repos/Microsoft/vscode/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/vscode/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/vscode/events","assignees_url":"https://api.github.com/repos/Microsoft/vscode/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/vscode/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/vscode/tags","blobs_url":"https://api.github.com/repos/Microsoft/vscode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/vscode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/vscode/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/vscode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/vscode/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/vscode/languages","stargazers_url":"https://api.github.com/repos/Microsoft/vscode/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/vscode/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/vscode/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/vscode/subscription","commits_url":"https://api.github.com/repos/Microsoft/vscode/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/vscode/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/vscode/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/vscode/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/vscode/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/vscode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/vscode/merges","archive_url":"https://api.github.com/repos/Microsoft/vscode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/vscode/downloads","issues_url":"https://api.github.com/repos/Microsoft/vscode/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/vscode/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/vscode/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/vscode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/vscode/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/vscode/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/vscode/deployments","created_at":"2015-09-03T20:23:38Z","updated_at":"2018-08-20T07:36:34Z","pushed_at":"2018-08-20T07:22:20Z","git_url":"git://github.com/Microsoft/vscode.git","ssh_url":"git@github.com:Microsoft/vscode.git","clone_url":"https://github.com/Microsoft/vscode.git","svn_url":"https://github.com/Microsoft/vscode","homepage":"https://code.visualstudio.com","size":151148,"stargazers_count":57530,"watchers_count":57530,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7433,"mirror_url":null,"archived":false,"open_issues_count":5609,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":7433,"open_issues":5609,"watchers":57530,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/vscode/pulls/56799"},"html":{"href":"https://github.com/Microsoft/vscode/pull/56799"},"issue":{"href":"https://api.github.com/repos/Microsoft/vscode/issues/56799"},"comments":{"href":"https://api.github.com/repos/Microsoft/vscode/issues/56799/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/vscode/pulls/56799/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/vscode/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/vscode/pulls/56799/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/vscode/statuses/c252511ed3dbd667fafe9953d106f98688a6b29a"}},"author_association":"MEMBER","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":0,"deletions":0,"changed_files":0}}
{"actor":{"display_login":"joaomoreno"}}