From 9bce351665560c8c4ca516a569c2cbc4ee2a96a9 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Fri, 25 Oct 2019 07:14:45 -0700 Subject: [PATCH 1/5] Fix tests by using API Key for CI --- src/features/UpdatePowerShell.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts index ab7caf5a40..22967f35e0 100644 --- a/src/features/UpdatePowerShell.ts +++ b/src/features/UpdatePowerShell.ts @@ -2,7 +2,7 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import fetch from "node-fetch"; +import fetch, { RequestInit } from "node-fetch"; import * as semver from "semver"; import { MessageItem, window } from "vscode"; import { LanguageClient } from "vscode-languageclient"; @@ -16,15 +16,25 @@ const PowerShellGitHubPrereleasesUrl = export class GitHubReleaseInformation { public static async FetchLatestRelease(preview: boolean): Promise { + const requestConfig: RequestInit = {}; + + // For CI. This prevents GitHub from rate limiting us. + if (process.env.PS_TEST_GITHUB_API_USERNAME && process.env.PS_TEST_GITHUB_API_PAT) { + const authHeaderValue = Buffer.from(`${process.env.PS_TEST_GITHUB_API_USERNAME}:${process.env.PS_TEST_GITHUB_API_PAT}`).toString("base64"); + requestConfig.headers = { + Authorization: `Basic ${authHeaderValue}`, + }; + } + // Fetch the latest PowerShell releases from GitHub. let releaseJson: any; if (preview) { // This gets all releases and the first one is the latest prerelease if // there is a prerelease version. - releaseJson = (await fetch(PowerShellGitHubPrereleasesUrl) + releaseJson = (await fetch(PowerShellGitHubPrereleasesUrl, requestConfig) .then((res) => res.json())).find((release: any) => release.prerelease); } else { - releaseJson = await fetch(PowerShellGitHubReleasesUrl) + releaseJson = await fetch(PowerShellGitHubReleasesUrl, requestConfig) .then((res) => res.json()); } From 0e84c642257d1eddf1055a5921a1b34395c90d07 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Fri, 25 Oct 2019 07:26:40 -0700 Subject: [PATCH 2/5] new lines so codacy is happy --- src/features/UpdatePowerShell.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts index 22967f35e0..87c0a0faf9 100644 --- a/src/features/UpdatePowerShell.ts +++ b/src/features/UpdatePowerShell.ts @@ -20,7 +20,9 @@ export class GitHubReleaseInformation { // For CI. This prevents GitHub from rate limiting us. if (process.env.PS_TEST_GITHUB_API_USERNAME && process.env.PS_TEST_GITHUB_API_PAT) { - const authHeaderValue = Buffer.from(`${process.env.PS_TEST_GITHUB_API_USERNAME}:${process.env.PS_TEST_GITHUB_API_PAT}`).toString("base64"); + const authHeaderValue = Buffer + .from(`${process.env.PS_TEST_GITHUB_API_USERNAME}:${process.env.PS_TEST_GITHUB_API_PAT}`) + .toString("base64"); requestConfig.headers = { Authorization: `Basic ${authHeaderValue}`, }; From 956b60d95f25a9a7020fe89549ba1fd49c2dece1 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Fri, 25 Oct 2019 18:35:02 -0700 Subject: [PATCH 3/5] better logging of errors --- src/features/UpdatePowerShell.ts | 21 +++++++++++++++++---- src/session.ts | 3 ++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts index 87c0a0faf9..9bc3a4d048 100644 --- a/src/features/UpdatePowerShell.ts +++ b/src/features/UpdatePowerShell.ts @@ -33,11 +33,24 @@ export class GitHubReleaseInformation { if (preview) { // This gets all releases and the first one is the latest prerelease if // there is a prerelease version. - releaseJson = (await fetch(PowerShellGitHubPrereleasesUrl, requestConfig) - .then((res) => res.json())).find((release: any) => release.prerelease); + const response = await fetch(PowerShellGitHubPrereleasesUrl, requestConfig); + + if (!response.ok) { + const json = await response.json(); + throw json.message || json || "response was not ok."; + } + + releaseJson = (await response.json()).find((release: any) => release.prerelease); } else { - releaseJson = await fetch(PowerShellGitHubReleasesUrl, requestConfig) - .then((res) => res.json()); + // Get the latest stable release. + const response = await fetch(PowerShellGitHubReleasesUrl, requestConfig); + + if (!response.ok) { + const json = await response.json(); + throw json.message || json || "response was not ok."; + } + + releaseJson = await response.json(); } return new GitHubReleaseInformation( diff --git a/src/session.ts b/src/session.ts index 78e0482a1c..4e81e0f9df 100644 --- a/src/session.ts +++ b/src/session.ts @@ -591,8 +591,9 @@ export class SessionManager implements Middleware { localVersion, this.versionDetails.architecture, release); - } catch { + } catch(e) { // best effort. This probably failed to fetch the data from GitHub. + this.log.writeWarning(e.message); } }); From d787448525f5379caffd16554c71058d65bda1d6 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Fri, 25 Oct 2019 18:39:45 -0700 Subject: [PATCH 4/5] tslint --- src/session.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/session.ts b/src/session.ts index 4e81e0f9df..6de4882965 100644 --- a/src/session.ts +++ b/src/session.ts @@ -591,7 +591,7 @@ export class SessionManager implements Middleware { localVersion, this.versionDetails.architecture, release); - } catch(e) { + } catch (e) { // best effort. This probably failed to fetch the data from GitHub. this.log.writeWarning(e.message); } From fcfbad1651fc2cc668e46361930b6bff0967c116 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Fri, 25 Oct 2019 19:41:56 -0700 Subject: [PATCH 5/5] refactor to more concise code --- src/features/UpdatePowerShell.ts | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts index 9bc3a4d048..5252e11f65 100644 --- a/src/features/UpdatePowerShell.ts +++ b/src/features/UpdatePowerShell.ts @@ -29,30 +29,20 @@ export class GitHubReleaseInformation { } // Fetch the latest PowerShell releases from GitHub. - let releaseJson: any; - if (preview) { - // This gets all releases and the first one is the latest prerelease if - // there is a prerelease version. - const response = await fetch(PowerShellGitHubPrereleasesUrl, requestConfig); - - if (!response.ok) { - const json = await response.json(); - throw json.message || json || "response was not ok."; - } - - releaseJson = (await response.json()).find((release: any) => release.prerelease); - } else { - // Get the latest stable release. - const response = await fetch(PowerShellGitHubReleasesUrl, requestConfig); + const response = await fetch( + preview ? PowerShellGitHubPrereleasesUrl : PowerShellGitHubReleasesUrl, + requestConfig); - if (!response.ok) { - const json = await response.json(); - throw json.message || json || "response was not ok."; - } - - releaseJson = await response.json(); + if (!response.ok) { + const json = await response.json(); + throw json.message || json || "response was not ok."; } + // For preview, we grab all the releases and then grab the first prerelease. + const releaseJson = preview + ? (await response.json()).find((release: any) => release.prerelease) + : await response.json(); + return new GitHubReleaseInformation( releaseJson.tag_name, releaseJson.assets); }