@@ -8,15 +8,19 @@ import * as vscode from 'vscode';
88import { HostHelper } from './configuration' ;
99import { GitHubServerType } from '../common/authentication' ;
1010import Logger from '../common/logger' ;
11+ import { ITelemetry } from '../common/telemetry' ;
1112import { agent } from '../env/node/net' ;
1213import { getEnterpriseUri } from '../github/utils' ;
1314
1415export class GitHubManager {
1516 private static readonly _githubDotComServers = new Set < string > ( ) . add ( 'github.com' ) . add ( 'ssh.github.com' ) ;
1617 private static readonly _gheServers = new Set < string > ( ) . add ( 'ghe.com' ) ;
1718 private static readonly _neverGitHubServers = new Set < string > ( ) . add ( 'bitbucket.org' ) . add ( 'gitlab.com' ) . add ( 'codeberg.org' ) ;
19+ private static readonly _reportedEnterpriseVersions = new Set < string > ( ) ;
1820 private _knownServers : Map < string , GitHubServerType > = new Map ( [ ...Array . from ( GitHubManager . _githubDotComServers . keys ( ) ) . map ( key => [ key , GitHubServerType . GitHubDotCom ] ) , ...Array . from ( GitHubManager . _gheServers . keys ( ) ) . map ( key => [ key , GitHubServerType . Enterprise ] ) ] as [ string , GitHubServerType ] [ ] ) ;
1921
22+ constructor ( private readonly _telemetry ?: ITelemetry ) { }
23+
2024 public static isGithubDotCom ( host : string ) : boolean {
2125 return this . _githubDotComServers . has ( host ) ;
2226 }
@@ -25,6 +29,20 @@ export class GitHubManager {
2529 return this . _neverGitHubServers . has ( host ) ;
2630 }
2731
32+ private reportEnterpriseVersion ( version : string ) : void {
33+ if ( GitHubManager . _reportedEnterpriseVersions . has ( version ) ) {
34+ return ;
35+ }
36+ GitHubManager . _reportedEnterpriseVersions . add ( version ) ;
37+ Logger . appendLine ( `GitHub Enterprise version: ${ version } ` , 'GitHubServer' ) ;
38+ /* __GDPR__
39+ "github.enterprise.version" : {
40+ "version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
41+ }
42+ */
43+ this . _telemetry ?. sendTelemetryEvent ( 'github.enterprise.version' , { version } ) ;
44+ }
45+
2846 public async isGitHub ( host : vscode . Uri ) : Promise < GitHubServerType > {
2947 if ( host === null ) {
3048 return GitHubServerType . None ;
@@ -63,6 +81,9 @@ export class GitHubManager {
6381 Logger . debug ( `All headers: ${ otherGitHubHeaders . join ( ', ' ) } ` , 'GitHubServer' ) ;
6482 const gitHubHeader = response . headers . get ( 'x-github-request-id' ) ;
6583 const gitHubEnterpriseHeader = response . headers . get ( 'x-github-enterprise-version' ) ;
84+ if ( gitHubEnterpriseHeader ) {
85+ this . reportEnterpriseVersion ( gitHubEnterpriseHeader ) ;
86+ }
6687 if ( ! gitHubHeader && ! gitHubEnterpriseHeader ) {
6788 const [ uriFallBack ] = await GitHubManager . getOptions ( host , 'HEAD' , '/status' ) ;
6889 const response = await fetch ( uriFallBack . toString ( ) ) ;
0 commit comments