2
2
* Copyright (C) Microsoft Corporation. All rights reserved.
3
3
*--------------------------------------------------------*/
4
4
5
- import fetch from "node-fetch" ;
5
+ import fetch , { RequestInit } from "node-fetch" ;
6
6
import * as semver from "semver" ;
7
7
import { MessageItem , window } from "vscode" ;
8
8
import { LanguageClient } from "vscode-languageclient" ;
@@ -16,18 +16,33 @@ const PowerShellGitHubPrereleasesUrl =
16
16
17
17
export class GitHubReleaseInformation {
18
18
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
+
19
31
// 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." ;
29
39
}
30
40
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
+
31
46
return new GitHubReleaseInformation (
32
47
releaseJson . tag_name , releaseJson . assets ) ;
33
48
}
0 commit comments