diff --git a/gitpod-web/package.json b/gitpod-web/package.json index 0147342..398e0e1 100644 --- a/gitpod-web/package.json +++ b/gitpod-web/package.json @@ -83,11 +83,6 @@ "title": "%reportIssue%", "enablement": "gitpod.inWorkspace == true" }, - { - "command": "gitpod.showReleaseNotes", - "title": "%showReleaseNotes%", - "enablement": "gitpod.inWorkspace == true" - }, { "command": "gitpod.upgradeSubscription", "title": "%upgradeSubscription%", @@ -276,10 +271,6 @@ { "command": "gitpod.reportIssue", "group": "z_about2@40" - }, - { - "command": "gitpod.showReleaseNotes", - "group": "z_about2@50" } ], "extension/context": [ @@ -454,11 +445,6 @@ "group": "remote_00_gitpod_navigation@130", "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" }, - { - "command": "gitpod.showReleaseNotes", - "group": "remote_00_gitpod_navigation@140", - "when": "gitpod.inWorkspace == true" - }, { "command": "gitpod.openInStable", "group": "remote_00_gitpod_navigation@900", @@ -591,12 +577,6 @@ "type": "boolean", "description": "Control whether to prompt to open in VS Code Desktop on page load.", "default": false - }, - "gitpod.showReleaseNotes": { - "type": "boolean", - "description": "Show the Gitpod Changelog whenever a new one comes out.", - "default": true, - "scope": "application" } } }, diff --git a/gitpod-web/package.nls.json b/gitpod-web/package.nls.json index 0c365ba..31860f5 100644 --- a/gitpod-web/package.nls.json +++ b/gitpod-web/package.nls.json @@ -20,7 +20,6 @@ "openTwitter": "Gitpod: Follow us on Twitter", "reportIssue": "Gitpod: Report Issue", "stopWorkspace": "Gitpod: Stop Workspace", - "showReleaseNotes": "Gitpod: Show Release Notes", "upgradeSubscription": "Gitpod: Upgrade Subscription", "extendTimeout": "Gitpod: Extend Workspace Timeout (180m)", "configureTimeout": "Gitpod: Configure Workspace Timeout", diff --git a/gitpod-web/src/extension.ts b/gitpod-web/src/extension.ts index 8e7ae1b..6191701 100644 --- a/gitpod-web/src/extension.ts +++ b/gitpod-web/src/extension.ts @@ -7,7 +7,6 @@ import { PortsStatus, PortVisibility } from '@gitpod/supervisor-api-grpc/lib/sta import type * as keytarType from 'keytar'; import fetch from 'node-fetch'; import * as vscode from 'vscode'; -import { ReleaseNotes } from './releaseNotes'; import { registerWelcomeWalkthroughContribution, WELCOME_WALKTROUGH_KEY } from './welcomeWalktrough'; import { GitpodPortViewProvider } from './portViewProvider'; import { registerExtensionManagement } from './extensionManagement'; @@ -21,7 +20,7 @@ export async function activate(context: vscode.ExtensionContext) { gitpodContext.logger.info(`Gitpod Web ${context.extension.packageJSON.commit || context.extension.packageJSON.version}`); - context.globalState.setKeysForSync([WELCOME_WALKTROUGH_KEY, ReleaseNotes.RELEASE_NOTES_LAST_READ_KEY]); + context.globalState.setKeysForSync([WELCOME_WALKTROUGH_KEY]); registerCommands(gitpodContext); registerDesktop(); @@ -39,7 +38,6 @@ export async function activate(context: vscode.ExtensionContext) { registerIpcHookCli(gitpodContext); registerExtensionManagement(gitpodContext); registerWelcomeWalkthroughContribution(gitpodContext); - context.subscriptions.push(new ReleaseNotes(context, gitpodContext.logger)); await gitpodContext.active; } diff --git a/gitpod-web/src/releaseNotes.ts b/gitpod-web/src/releaseNotes.ts deleted file mode 100644 index 06685c7..0000000 --- a/gitpod-web/src/releaseNotes.ts +++ /dev/null @@ -1,344 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Gitpod. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import fetch, { Response } from 'node-fetch'; -import * as vscode from 'vscode'; -import { load } from 'js-yaml'; -import { CacheHelper } from './util/cache'; -import { Disposable, disposeAll } from 'gitpod-shared'; -import { ILogService } from 'gitpod-shared'; - -export class ReleaseNotes extends Disposable { - public static readonly viewType = 'gitpodReleaseNotes'; - public static readonly websiteHost = 'https://www.gitpod.io'; - public static readonly RELEASE_NOTES_LAST_READ_KEY = 'gitpod.lastReadReleaseNotesId'; - - private panel: vscode.WebviewPanel | undefined; - private panelDisposables: vscode.Disposable[] = []; - private lastReadId: string | undefined; - private cacheHelper = new CacheHelper(this.context); - - constructor( - private readonly context: vscode.ExtensionContext, - private readonly logger: ILogService, - ) { - super(); - - this.lastReadId = this.context.globalState.get(ReleaseNotes.RELEASE_NOTES_LAST_READ_KEY); - - this._register(vscode.commands.registerCommand('gitpod.showReleaseNotes', () => this.createOrShow())); - - this.showIfNewRelease(this.lastReadId); - } - - private async getLastPublish() { - const url = `${ReleaseNotes.websiteHost}/changelog/latest`; - return this.cacheHelper.getOrRefresh(url, async () => { - const resp = await fetch(url); - if (!resp.ok) { - throw new Error(`Getting latest releaseId failed: ${resp.statusText}`); - } - const { releaseId } = JSON.parse(await resp.text()); - return { - value: releaseId as string, - ttl: this.getResponseCacheTime(resp), - }; - }); - } - - private getResponseCacheTime(resp: Response) { - const cacheControlHeader = resp.headers.get('Cache-Control'); - if (!cacheControlHeader) { - return undefined; - } - const match = /max-age=(\d+)/.exec(cacheControlHeader); - if (!match) { - return undefined; - } - return parseInt(match[1], 10); - } - - private async loadChangelog(releaseId: string) { - const url = `${ReleaseNotes.websiteHost}/changelog/raw-markdown?releaseId=${releaseId}`; - const md = await this.cacheHelper.getOrRefresh(url, async () => { - const resp = await fetch(url); - if (!resp.ok) { - throw new Error(`Getting raw markdown content failed: ${resp.statusText}`); - } - const md = await resp.text(); - return { - value: md, - ttl: this.getResponseCacheTime(resp), - }; - }); - if (!md) { - return; - } - - const parseInfo = (md: string) => { - if (!md.startsWith('---')) { - return; - } - const lines = md.split('\n'); - const end = lines.indexOf('---', 1); - const content = lines.slice(1, end).join('\n'); - return load(content) as { title: string; date: string; image: string; alt: string; excerpt: string }; - }; - const info = parseInfo(md); - - const content = md - .replace(/^---.*?---/gms, '') - .replace(/