22 * Copyright (C) Microsoft Corporation. All rights reserved.
33 *--------------------------------------------------------*/
44
5- import fetch from "node-fetch" ;
5+ import fetch , { RequestInit } from "node-fetch" ;
66import * as semver from "semver" ;
77import { MessageItem , window } from "vscode" ;
88import { LanguageClient } from "vscode-languageclient" ;
@@ -16,18 +16,33 @@ const PowerShellGitHubPrereleasesUrl =
1616
1717export class GitHubReleaseInformation {
1818 public static async FetchLatestRelease ( preview : boolean ) : Promise < GitHubReleaseInformation > {
19+ const requestConfig : RequestInit = { } ;
20+
21+ // For CI. This prevents GitHub from rate limiting us.
22+ if ( process . env . PS_TEST_GITHUB_API_USERNAME && process . env . PS_TEST_GITHUB_API_PAT ) {
23+ const authHeaderValue = Buffer
24+ . from ( `${ process . env . PS_TEST_GITHUB_API_USERNAME } :${ process . env . PS_TEST_GITHUB_API_PAT } ` )
25+ . toString ( "base64" ) ;
26+ requestConfig . headers = {
27+ Authorization : `Basic ${ authHeaderValue } ` ,
28+ } ;
29+ }
30+
1931 // Fetch the latest PowerShell releases from GitHub.
20- let releaseJson : any ;
21- if ( preview ) {
22- // This gets all releases and the first one is the latest prerelease if
23- // there is a prerelease version.
24- releaseJson = ( await fetch ( PowerShellGitHubPrereleasesUrl )
25- . then ( ( res ) => res . json ( ) ) ) . find ( ( release : any ) => release . prerelease ) ;
26- } else {
27- releaseJson = await fetch ( PowerShellGitHubReleasesUrl )
28- . then ( ( res ) => res . json ( ) ) ;
32+ const response = await fetch (
33+ preview ? PowerShellGitHubPrereleasesUrl : PowerShellGitHubReleasesUrl ,
34+ requestConfig ) ;
35+
36+ if ( ! response . ok ) {
37+ const json = await response . json ( ) ;
38+ throw json . message || json || "response was not ok." ;
2939 }
3040
41+ // For preview, we grab all the releases and then grab the first prerelease.
42+ const releaseJson = preview
43+ ? ( await response . json ( ) ) . find ( ( release : any ) => release . prerelease )
44+ : await response . json ( ) ;
45+
3146 return new GitHubReleaseInformation (
3247 releaseJson . tag_name , releaseJson . assets ) ;
3348 }
0 commit comments