Skip to content

Commit 9f0b829

Browse files
committed
[server] remove definitely-gp (#18278)
1 parent be3d71d commit 9f0b829

File tree

4 files changed

+28
-176
lines changed

4 files changed

+28
-176
lines changed

components/gitpod-protocol/go/gitpod-service.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1702,7 +1702,6 @@ type WorkspaceConfig struct {
17021702
// Where the config object originates from.
17031703
//
17041704
// repo - from the repository
1705-
// definitely-gp - from github.com/gitpod-io/definitely-gp
17061705
// derived - computed based on analyzing the repository
17071706
// default - our static catch-all default config
17081707
Origin string `json:"_origin,omitempty"`

components/gitpod-protocol/src/protocol.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -970,12 +970,11 @@ export interface WorkspaceConfig {
970970
* Where the config object originates from.
971971
*
972972
* repo - from the repository
973-
* definitly-gp - from github.com/gitpod-io/definitely-gp
974973
* derived - computed based on analyzing the repository
975974
* additional-content - config comes from additional content, usually provided through the project's configuration
976975
* default - our static catch-all default config
977976
*/
978-
_origin?: "repo" | "definitely-gp" | "derived" | "additional-content" | "default";
977+
_origin?: "repo" | "derived" | "additional-content" | "default";
979978

980979
/**
981980
* Set of automatically infered feature flags. That's not something the user can set, but

components/server/src/workspace/config-provider.ts

Lines changed: 24 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,42 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7+
import * as crypto from "crypto";
78
import { inject, injectable } from "inversify";
8-
import fetch from "node-fetch";
99
import * as path from "path";
10-
import * as crypto from "crypto";
1110

12-
import { log, LogContext } from "@gitpod/gitpod-protocol/lib/util/logging";
1311
import {
14-
User,
15-
WorkspaceConfig,
12+
AdditionalContentContext,
13+
Commit,
1614
CommitContext,
17-
Repository,
18-
ImageConfigString,
1915
ExternalImageConfigFile,
2016
ImageConfigFile,
21-
Commit,
17+
ImageConfigString,
2218
NamedWorkspaceFeatureFlag,
23-
AdditionalContentContext,
24-
WithDefaultConfig,
2519
ProjectConfig,
20+
Repository,
21+
User,
22+
WithDefaultConfig,
23+
WorkspaceConfig,
2624
} from "@gitpod/gitpod-protocol";
2725
import { GitpodFileParser } from "@gitpod/gitpod-protocol/lib/gitpod-file-parser";
26+
import { log, LogContext } from "@gitpod/gitpod-protocol/lib/util/logging";
2827

29-
import { MaybeContent } from "../repohost/file-provider";
30-
import { ConfigurationService } from "../config/configuration-service";
31-
import { HostContextProvider } from "../auth/host-context-provider";
32-
import { AuthorizationService } from "../user/authorization-service";
3328
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
29+
import { HostContextProvider } from "../auth/host-context-provider";
3430
import { Config } from "../config";
35-
import { EntitlementService } from "../billing/entitlement-service";
36-
import { TeamDB } from "@gitpod/gitpod-db/lib";
31+
import { ConfigurationService } from "../config/configuration-service";
3732

3833
const POD_PATH_WORKSPACE_BASE = "/workspace";
3934

4035
@injectable()
4136
export class ConfigProvider {
42-
static readonly DEFINITELY_GP_REPO: Repository = {
43-
host: "github.com",
44-
owner: "gitpod-io",
45-
name: "definitely-gp",
46-
cloneUrl: "https://github.com/gitpod-io/definitely-gp",
47-
};
48-
49-
@inject(GitpodFileParser) protected readonly gitpodParser: GitpodFileParser;
50-
@inject(HostContextProvider) protected readonly hostContextProvider: HostContextProvider;
51-
@inject(AuthorizationService) protected readonly authService: AuthorizationService;
52-
@inject(Config) protected readonly config: Config;
53-
@inject(ConfigurationService) protected readonly configurationService: ConfigurationService;
54-
@inject(EntitlementService) protected readonly entitlementService: EntitlementService;
55-
@inject(TeamDB) protected readonly teamDB: TeamDB;
37+
constructor(
38+
@inject(GitpodFileParser) private readonly gitpodParser: GitpodFileParser,
39+
@inject(HostContextProvider) private readonly hostContextProvider: HostContextProvider,
40+
@inject(Config) private readonly config: Config,
41+
@inject(ConfigurationService) private readonly configurationService: ConfigurationService,
42+
) {}
5643

5744
public async fetchConfig(
5845
ctx: TraceContext,
@@ -96,15 +83,10 @@ export class ConfigProvider {
9683
config.image = this.config.workspaceDefaults.workspaceImage;
9784
} else if (ImageConfigFile.is(config.image)) {
9885
const dockerfilePath = [configBasePath, config.image.file].filter((s) => !!s).join("/");
99-
let repo = commit.repository;
100-
let rev = commit.revision;
86+
const repo = commit.repository;
87+
const rev = commit.revision;
10188
const image = config.image!;
10289

103-
if (config._origin === "definitely-gp") {
104-
repo = ConfigProvider.DEFINITELY_GP_REPO;
105-
rev = "master";
106-
image.file = dockerfilePath;
107-
}
10890
if (!(AdditionalContentContext.is(commit) && commit.additionalFiles[dockerfilePath])) {
10991
config.image = <ExternalImageConfigFile>{
11092
...image,
@@ -143,7 +125,7 @@ export class ConfigProvider {
143125
}
144126
}
145127

146-
protected async fetchCustomConfig(
128+
private async fetchCustomConfig(
147129
ctx: TraceContext,
148130
user: User,
149131
commit: CommitContext,
@@ -154,7 +136,7 @@ export class ConfigProvider {
154136

155137
try {
156138
let customConfig: WorkspaceConfig | undefined;
157-
let configBasePath = "";
139+
const configBasePath = "";
158140
if (AdditionalContentContext.is(commit) && commit.additionalFiles[".gitpod.yml"]) {
159141
customConfigString = commit.additionalFiles[".gitpod.yml"];
160142
const parseResult = this.gitpodParser.parse(customConfigString);
@@ -183,21 +165,6 @@ export class ConfigProvider {
183165
customConfigString = await contextRepoConfig;
184166
let origin: WorkspaceConfig["_origin"] = "repo";
185167

186-
if (!customConfigString) {
187-
/* We haven't found a Gitpod configuration file in the context repo - check definitely-gp.
188-
*
189-
* In case we had found a config file here, we'd still be checking the definitely GP repo, just to save some time.
190-
* While all those checks will be in vain, they should not leak memory either as they'll simply
191-
* be resolved and garbage collected.
192-
*/
193-
const definitelyGpConfig = this.fetchExternalGitpodFileContent({ span }, commit.repository);
194-
const { content, basePath } = await definitelyGpConfig;
195-
customConfigString = content;
196-
// We do not only care about the config itself but also where we got it from
197-
configBasePath = basePath;
198-
origin = "definitely-gp";
199-
}
200-
201168
if (!customConfigString) {
202169
const inferredConfig = this.configurationService.guessRepositoryConfiguration(
203170
{ span },
@@ -248,7 +215,7 @@ export class ConfigProvider {
248215
};
249216
}
250217

251-
protected async fetchWorkspaceImageSourceDocker(
218+
private async fetchWorkspaceImageSourceDocker(
252219
ctx: TraceContext,
253220
repository: Repository,
254221
revisionOrTagOrBranch: string,
@@ -287,101 +254,7 @@ export class ConfigProvider {
287254
}
288255
}
289256

290-
protected async fillInDefaultLocations(
291-
cfg: WorkspaceConfig | undefined,
292-
inferredConfig: Promise<WorkspaceConfig | undefined>,
293-
): Promise<void> {
294-
if (!cfg) {
295-
// there is no config - return
296-
return;
297-
}
298-
299-
if (!cfg.checkoutLocation) {
300-
const inferredCfg = await inferredConfig;
301-
if (inferredCfg) {
302-
cfg.checkoutLocation = inferredCfg.checkoutLocation;
303-
}
304-
}
305-
if (!cfg.workspaceLocation) {
306-
const inferredCfg = await inferredConfig;
307-
if (inferredCfg) {
308-
cfg.workspaceLocation = inferredCfg.workspaceLocation;
309-
}
310-
}
311-
}
312-
313-
protected async fetchExternalGitpodFileContent(
314-
ctx: TraceContext,
315-
repository: Repository,
316-
): Promise<{ content: MaybeContent; basePath: string }> {
317-
const span = TraceContext.startSpan("fetchExternalGitpodFileContent", ctx);
318-
span.setTag("repo", `${repository.owner}/${repository.name}`);
319-
320-
if (this.config.definitelyGpDisabled) {
321-
span.finish();
322-
return {
323-
content: undefined,
324-
basePath: `${repository.name}`,
325-
};
326-
}
327-
328-
try {
329-
const ownerConfigBasePath = `${repository.name}/${repository.owner}`;
330-
const baseConfigBasePath = `${repository.name}`;
331-
332-
const possibleConfigs = [
333-
[this.fetchDefinitelyGpContent({ span }, `${ownerConfigBasePath}/.gitpod.yml`), ownerConfigBasePath],
334-
[this.fetchDefinitelyGpContent({ span }, `${ownerConfigBasePath}/.gitpod`), ownerConfigBasePath],
335-
[this.fetchDefinitelyGpContent({ span }, `${baseConfigBasePath}/.gitpod.yml`), baseConfigBasePath],
336-
[this.fetchDefinitelyGpContent({ span }, `${baseConfigBasePath}/.gitpod`), baseConfigBasePath],
337-
];
338-
for (const [configPromise, basePath] of possibleConfigs) {
339-
const ownerConfig = await configPromise;
340-
if (ownerConfig !== undefined) {
341-
return {
342-
content: ownerConfig,
343-
basePath: basePath as string,
344-
};
345-
}
346-
}
347-
return {
348-
content: undefined,
349-
basePath: baseConfigBasePath,
350-
};
351-
} catch (e) {
352-
TraceContext.setError({ span }, e);
353-
throw e;
354-
} finally {
355-
span.finish();
356-
}
357-
}
358-
359-
protected async fetchDefinitelyGpContent(ctx: TraceContext, filePath: string) {
360-
const span = TraceContext.startSpan("fetchDefinitelyGpContent", ctx);
361-
span.setTag("filePath", filePath);
362-
363-
try {
364-
const url = `https://raw.githubusercontent.com/gitpod-io/definitely-gp/master/${filePath}`;
365-
const response = await fetch(url, {
366-
timeout: 10000,
367-
method: "GET",
368-
});
369-
let content;
370-
if (response.ok) {
371-
try {
372-
content = await response.text();
373-
} catch {}
374-
}
375-
return content;
376-
} catch (e) {
377-
TraceContext.setError({ span }, e);
378-
throw e;
379-
} finally {
380-
span.finish();
381-
}
382-
}
383-
384-
protected async validateConfig(config: WorkspaceConfig, user: User): Promise<void> {
257+
private async validateConfig(config: WorkspaceConfig, user: User): Promise<void> {
385258
// Make sure the projectRoot does not leave POD_PATH_WORKSPACE_BASE as that's a common
386259
// assumption throughout the code (e.g. ws-daemon)
387260
const checkoutLocation = config.checkoutLocation;
@@ -407,7 +280,7 @@ export class ConfigProvider {
407280
}
408281
}
409282

410-
protected leavesWorkspaceBase(normalizedPath: string) {
283+
private leavesWorkspaceBase(normalizedPath: string) {
411284
const pathSegments = normalizedPath.split(path.sep);
412285
return normalizedPath.includes("..") || pathSegments.slice(0, 2).join("/") != POD_PATH_WORKSPACE_BASE;
413286
}

components/server/src/workspace/image-source-provider.ts

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ import {
1414
WorkspaceImageSourceReference,
1515
WorkspaceImageSourceDocker,
1616
ImageConfigFile,
17-
ExternalImageConfigFile,
1817
User,
1918
AdditionalContentContext,
2019
} from "@gitpod/gitpod-protocol";
2120
import { createHash } from "crypto";
2221

2322
@injectable()
2423
export class ImageSourceProvider {
25-
@inject(HostContextProvider) protected readonly hostContextProvider: HostContextProvider;
24+
constructor(@inject(HostContextProvider) private readonly hostContextProvider: HostContextProvider) {}
2625

2726
public async getImageSource(
2827
ctx: TraceContext,
@@ -36,25 +35,7 @@ export class ImageSourceProvider {
3635
let result: WorkspaceImageSource;
3736

3837
const imgcfg = config.image;
39-
if (ExternalImageConfigFile.is(imgcfg)) {
40-
// we're asked to pull the Dockerfile from a repo possibly different than the one we're opening a workspace for (e.g. definitely-gp).
41-
const repository = imgcfg.externalSource.repository;
42-
const hostContext = this.hostContextProvider.get(repository.host);
43-
if (!hostContext || !hostContext.services) {
44-
throw new Error(`Cannot fetch workspace image source for host: ${repository.host}`);
45-
}
46-
const lastDockerFileSha = await hostContext.services.fileProvider.getLastChangeRevision(
47-
repository,
48-
imgcfg.externalSource.revision,
49-
user,
50-
imgcfg.file,
51-
);
52-
result = <WorkspaceImageSourceDocker>{
53-
dockerFilePath: imgcfg.file,
54-
dockerFileSource: imgcfg.externalSource,
55-
dockerFileHash: lastDockerFileSha,
56-
};
57-
} else if (ImageConfigFile.is(imgcfg)) {
38+
if (ImageConfigFile.is(imgcfg)) {
5839
// if a dockerfile sits in the additional content we use its contents sha
5940
if (
6041
AdditionalContentContext.is(context) &&
@@ -100,7 +81,7 @@ export class ImageSourceProvider {
10081
}
10182
}
10283

103-
protected getContentSHA(contents: string): string {
84+
private getContentSHA(contents: string): string {
10485
return createHash("sha256").update(contents).digest("hex");
10586
}
10687
}

0 commit comments

Comments
 (0)