From 094ee362167677d76565d5a49120136dd94f05a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Fri, 1 Jul 2022 14:41:19 +0000 Subject: [PATCH 1/7] Add xterm as an IDE --- components/ide-proxy/static/image/ide-logo/xterm.svg | 11 +++++++++++ .../installer/pkg/components/blobserve/configmap.go | 4 ++++ .../components/ide-service/ide_config_configmap.go | 11 +++++++++++ 3 files changed, 26 insertions(+) create mode 100644 components/ide-proxy/static/image/ide-logo/xterm.svg diff --git a/components/ide-proxy/static/image/ide-logo/xterm.svg b/components/ide-proxy/static/image/ide-logo/xterm.svg new file mode 100644 index 00000000000000..0aa957e3d38239 --- /dev/null +++ b/components/ide-proxy/static/image/ide-logo/xterm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/install/installer/pkg/components/blobserve/configmap.go b/install/installer/pkg/components/blobserve/configmap.go index 96ee1615352c6c..5c2da57d119c7e 100644 --- a/install/installer/pkg/components/blobserve/configmap.go +++ b/install/installer/pkg/components/blobserve/configmap.go @@ -99,6 +99,10 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) { PrePull: []string{}, Workdir: "/.supervisor/frontend", }, + ctx.RepoName("registry.hub.docker.com", "filiptronicek/xterm-ide"): { + PrePull: []string{}, + Workdir: "/ide", + }, }, BlobSpace: blobserve_config.BlobSpace{ Location: "/mnt/cache/blobserve", diff --git a/install/installer/pkg/components/ide-service/ide_config_configmap.go b/install/installer/pkg/components/ide-service/ide_config_configmap.go index 613ab59c4e82d8..e69956098f3a3b 100644 --- a/install/installer/pkg/components/ide-service/ide_config_configmap.go +++ b/install/installer/pkg/components/ide-service/ide_config_configmap.go @@ -34,6 +34,7 @@ func ideConfigConfigmap(ctx *common.RenderContext) ([]runtime.Object, error) { webstorm := "webstorm" rider := "rider" clion := "clion" + xterm := "xterm" resolveLatestImage := func(name string, tag string, bundledLatest versions.Versioned) string { resolveLatest := true @@ -195,6 +196,16 @@ func ideConfigConfigmap(ctx *common.RenderContext) ([]runtime.Object, error) { ImageLayers: []string{jbPluginImage, jbLauncherImage}, LatestImageLayers: []string{jbPluginLatestImage, jbLauncherImage}, }, + xterm: { + OrderKey: "12", + Title: "Terminal", + Type: ide_config.IDETypeBrowser, + Logo: getIdeLogoPath("xterm"), + Tooltip: "A terminal in the browser with Xterm.js", + Label: "Insiders", + Image: ctx.ImageName("registry.hub.docker.com", "filiptronicek/xterm-ide", "latest"), + ResolveImageDigest: true, + }, }, DefaultIde: "code", DefaultDesktopIde: codeDesktop, From a9a300fd0c8bdad8fa9b06663010697b7d12a9b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Fri, 3 Mar 2023 18:03:46 +0000 Subject: [PATCH 2/7] =?UTF-8?q?Move=20the=20IDE=20to=20our=20GCP=20registr?= =?UTF-8?q?y=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/installer/pkg/components/blobserve/configmap.go | 2 +- .../pkg/components/ide-service/ide_config_configmap.go | 2 +- install/installer/pkg/components/workspace/ide/constants.go | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/install/installer/pkg/components/blobserve/configmap.go b/install/installer/pkg/components/blobserve/configmap.go index 5c2da57d119c7e..e02c21afffd73f 100644 --- a/install/installer/pkg/components/blobserve/configmap.go +++ b/install/installer/pkg/components/blobserve/configmap.go @@ -99,7 +99,7 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) { PrePull: []string{}, Workdir: "/.supervisor/frontend", }, - ctx.RepoName("registry.hub.docker.com", "filiptronicek/xterm-ide"): { + ctx.RepoName(ctx.Config.Repository, ide.XtermIDEImage): { PrePull: []string{}, Workdir: "/ide", }, diff --git a/install/installer/pkg/components/ide-service/ide_config_configmap.go b/install/installer/pkg/components/ide-service/ide_config_configmap.go index e69956098f3a3b..76d9e7aa586ad0 100644 --- a/install/installer/pkg/components/ide-service/ide_config_configmap.go +++ b/install/installer/pkg/components/ide-service/ide_config_configmap.go @@ -203,7 +203,7 @@ func ideConfigConfigmap(ctx *common.RenderContext) ([]runtime.Object, error) { Logo: getIdeLogoPath("xterm"), Tooltip: "A terminal in the browser with Xterm.js", Label: "Insiders", - Image: ctx.ImageName("registry.hub.docker.com", "filiptronicek/xterm-ide", "latest"), + Image: ctx.ImageName(ctx.Config.Repository, ide.XtermIDEImage, "latest"), ResolveImageDigest: true, }, }, diff --git a/install/installer/pkg/components/workspace/ide/constants.go b/install/installer/pkg/components/workspace/ide/constants.go index 09084155a1263c..9bdb2569ea0086 100644 --- a/install/installer/pkg/components/workspace/ide/constants.go +++ b/install/installer/pkg/components/workspace/ide/constants.go @@ -12,6 +12,7 @@ const ( CodeWebExtensionVersion = "commit-3b076b91039c47404d98c4a3198edf2982e24af7" // gitpod-web extension version comes from https://github.com/gitpod-io/gitpod-code CodeDesktopIDEImage = "ide/code-desktop" CodeDesktopInsidersIDEImage = "ide/code-desktop-insiders" + XtermIDEImage = "ide/xterm-web" IntelliJDesktopIDEImage = "ide/intellij" GoLandDesktopIdeImage = "ide/goland" PyCharmDesktopIdeImage = "ide/pycharm" From f226ef40843925d686c9726a1a891cb967b34e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Fri, 3 Mar 2023 18:31:47 +0000 Subject: [PATCH 3/7] Also resolve the source code commit for IDEs in `ide-service` --- .../gitpod-protocol/src/ide-protocol.ts | 10 +++++++++ .../ide-service-api/go/config/ideconfig.go | 4 ++++ components/ide-service/pkg/ocitool/resolve.go | 22 +++++++++++-------- .../ide-service/pkg/ocitool/resolve_test.go | 2 +- .../ide-service/pkg/server/ideconfig.go | 14 ++++++++---- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/components/gitpod-protocol/src/ide-protocol.ts b/components/gitpod-protocol/src/ide-protocol.ts index 8c8685b80e679b..9ee9cf74996e40 100644 --- a/components/gitpod-protocol/src/ide-protocol.ts +++ b/components/gitpod-protocol/src/ide-protocol.ts @@ -144,4 +144,14 @@ export interface IDEOption { * LatestImageVersion the semantic version of the latest IDE image. */ latestImageVersion?: string; + + /** + * ImageCommit the source code commit SHA of the IDE image. + */ + imageCommit?: string; + + /** + * LatestImageCommit the source code commit SHA of the latest IDE image. + */ + latestImageCommit?: string; } diff --git a/components/ide-service-api/go/config/ideconfig.go b/components/ide-service-api/go/config/ideconfig.go index 020e8234ed7d8a..1a3f69b6278e36 100644 --- a/components/ide-service-api/go/config/ideconfig.go +++ b/components/ide-service-api/go/config/ideconfig.go @@ -61,6 +61,10 @@ type IDEOption struct { ImageVersion string `json:"imageVersion,omitempty"` // LatestImageVersion the semantic version of the latest IDE image. LatestImageVersion string `json:"latestImageVersion,omitempty"` + // ImageCommit the source code commit SHA of the IDE image. + ImageCommit string `json:"imageCommit,omitempty"` + // LatestImageCommit the source code commit SHA of the latest IDE image. + LatestImageCommit string `json:"latestImageCommit,omitempty"` // ImageLayers for additional ide layers and dependencies ImageLayers []string `json:"imageLayers,omitempty"` // LatestImageLayers for latest additional ide layers and dependencies diff --git a/components/ide-service/pkg/ocitool/resolve.go b/components/ide-service/pkg/ocitool/resolve.go index c6e5a2e9fdc05f..33cb30922a340c 100644 --- a/components/ide-service/pkg/ocitool/resolve.go +++ b/components/ide-service/pkg/ocitool/resolve.go @@ -71,24 +71,24 @@ func interactiveFetchManifestOrIndex(ctx context.Context, res remotes.Resolver, return "", nil, nil } -func ResolveIDEVersion(ctx context.Context, ref string) (string, error) { +func ResolveIDEVersion(ctx context.Context, ref string) (ManifestLabels, error) { newCtx, cancel := context.WithTimeout(ctx, time.Second*30) defer cancel() res := docker.NewResolver(docker.ResolverOptions{}) name, mf, err := interactiveFetchManifestOrIndex(newCtx, res, ref) if err != nil { - return "", err + return ManifestLabels{}, err } fetcher, err := res.Fetcher(ctx, name) if err != nil { - return "", err + return ManifestLabels{}, err } cfgin, err := fetcher.Fetch(ctx, mf.Config) if err != nil { - return "", err + return ManifestLabels{}, err } defer cfgin.Close() @@ -96,15 +96,19 @@ func ResolveIDEVersion(ctx context.Context, ref string) (string, error) { err = json.NewDecoder(cfgin).Decode(&tmp) if err != nil { - return "", nil + return ManifestLabels{}, err } - return tmp.Config.Labels.Version, nil + + return tmp.Config.Labels, nil +} + +type ManifestLabels struct { + Version string `json:"io.gitpod.ide.version"` + Commit *string `json:"io.gitpod.ide.commit,omitempty"` } type ManifestJSON struct { Config struct { - Labels struct { - Version string `json:"io.gitpod.ide.version"` - } `json:"Labels"` + Labels ManifestLabels `json:"Labels"` } `json:"config"` } diff --git a/components/ide-service/pkg/ocitool/resolve_test.go b/components/ide-service/pkg/ocitool/resolve_test.go index 68a85612216d55..eb287d14d0353f 100644 --- a/components/ide-service/pkg/ocitool/resolve_test.go +++ b/components/ide-service/pkg/ocitool/resolve_test.go @@ -43,7 +43,7 @@ func TestResolveIDEVersion(t *testing.T) { t.Errorf("ResolveIDEVersion() error = %v, wantErr %v", err, tt.wantErr) return } - if got != tt.want { + if got.Version != tt.want { t.Errorf("ResolveIDEVersion() = %v, want %v", got, tt.want) } }) diff --git a/components/ide-service/pkg/server/ideconfig.go b/components/ide-service/pkg/server/ideconfig.go index 14491c203e2004..1665aeae71eed0 100644 --- a/components/ide-service/pkg/server/ideconfig.go +++ b/components/ide-service/pkg/server/ideconfig.go @@ -72,10 +72,13 @@ func ParseConfig(ctx context.Context, b []byte) (*config.IDEConfig, error) { option.Image = resolved } } - if resolvedVersion, err := oci_tool.ResolveIDEVersion(ctx, option.Image); err != nil { + if resolvedLabels, err := oci_tool.ResolveIDEVersion(ctx, option.Image); err != nil { log.WithError(err).Error("ide config: cannot get version from image") } else { - option.ImageVersion = resolvedVersion + option.ImageVersion = resolvedLabels.Version + if resolvedLabels.Commit != nil { + option.ImageCommit = *resolvedLabels.Commit + } } if option.LatestImage != "" { if resolved, err := oci_tool.Resolve(ctx, option.LatestImage); err != nil { @@ -84,10 +87,13 @@ func ParseConfig(ctx context.Context, b []byte) (*config.IDEConfig, error) { log.WithField("ide", id).WithField("image", option.LatestImage).WithField("resolved", resolved).Info("ide config: resolved latest image digest") option.LatestImage = resolved } - if resolvedVersion, err := oci_tool.ResolveIDEVersion(ctx, option.LatestImage); err != nil { + if resolvedLabels, err := oci_tool.ResolveIDEVersion(ctx, option.LatestImage); err != nil { log.WithError(err).Error("ide config: cannot get version from image") } else { - option.LatestImageVersion = resolvedVersion + option.LatestImageVersion = resolvedLabels.Version + if resolvedLabels.Commit != nil { + option.LatestImageCommit = *resolvedLabels.Commit + } } } cfg.IdeOptions.Options[id] = option From 457202b42c26dc7d07ef1f8b81803fbf2b641fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Mon, 6 Mar 2023 18:31:10 +0000 Subject: [PATCH 4/7] Add feature flag --- .../dashboard/src/components/SelectIDEComponent.tsx | 13 +++++++++++-- .../dashboard/src/contexts/FeatureFlagContext.tsx | 5 +++++ components/gitpod-protocol/src/ide-protocol.ts | 5 +++++ components/ide-service-api/go/config/ideconfig.go | 2 ++ .../components/ide-service/ide_config_configmap.go | 1 + 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/components/dashboard/src/components/SelectIDEComponent.tsx b/components/dashboard/src/components/SelectIDEComponent.tsx index 9c953de377ebfe..6a6fcec5bb2b04 100644 --- a/components/dashboard/src/components/SelectIDEComponent.tsx +++ b/components/dashboard/src/components/SelectIDEComponent.tsx @@ -5,10 +5,11 @@ */ import { IDEOption, IDEOptions } from "@gitpod/gitpod-protocol/lib/ide-protocol"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useContext, useEffect, useState } from "react"; import { getGitpodService } from "../service/service"; import { DropDown2, DropDown2Element } from "./DropDown2"; import Editor from "../icons/Editor.svg"; +import { FeatureFlagContext } from "../contexts/FeatureFlagContext"; interface SelectIDEComponentProps { selectedIdeOption?: string; @@ -17,8 +18,16 @@ interface SelectIDEComponentProps { setError?: (error?: string) => void; } +function filteredIdeOptions(ideOptions: IDEOptions, experimentalTurnedOn: boolean) { + return IDEOptions.asArray(ideOptions) + .filter((x) => !x.hidden) + .filter((x) => (x.experimental ? experimentalTurnedOn : true)); +} + export default function SelectIDEComponent(props: SelectIDEComponentProps) { const [ideOptions, setIdeOptions] = useState(); + const { experimentalIdes } = useContext(FeatureFlagContext); + useEffect(() => { getGitpodService().server.getIDEOptions().then(setIdeOptions); }, []); @@ -27,7 +36,7 @@ export default function SelectIDEComponent(props: SelectIDEComponentProps) { if (!ideOptions) { return []; } - const options = IDEOptions.asArray(ideOptions); + const options = filteredIdeOptions(ideOptions, experimentalIdes); const result: DropDown2Element[] = []; for (const ide of options.filter((ide) => `${ide.label}${ide.title}${ide.notes}${ide.id}`.toLowerCase().includes(search.toLowerCase()), diff --git a/components/dashboard/src/contexts/FeatureFlagContext.tsx b/components/dashboard/src/contexts/FeatureFlagContext.tsx index 0b304ffb1bfc12..bf9793eb8b4275 100644 --- a/components/dashboard/src/contexts/FeatureFlagContext.tsx +++ b/components/dashboard/src/contexts/FeatureFlagContext.tsx @@ -31,6 +31,7 @@ const defaultFeatureFlags = { userGitAuthProviders: false, switchToPAYG: false, newSignupFlow: false, + experimentalIdes: false, }; const FeatureFlagContext = createContext(defaultFeatureFlags); @@ -51,6 +52,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => { const [userGitAuthProviders, setUserGitAuthProviders] = useState(false); const [switchToPAYG, setSwitchToPAYG] = useState(false); const [newSignupFlow, setNewSignupFlow] = useState(false); + const [experimentalIdes, setExperimentalIdes] = useState(false); useEffect(() => { if (!user) return; @@ -71,6 +73,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => { userGitAuthProviders: { defaultValue: false, setter: setUserGitAuthProviders }, switchToPAYG: { defaultValue: false, setter: setSwitchToPAYG }, newSignupFlow: { defaultValue: false, setter: setNewSignupFlow }, + experimentalIdes: { defaultValue: false, setter: setExperimentalIdes }, }; for (const [flagName, config] of Object.entries(featureFlags)) { @@ -120,6 +123,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => { userGitAuthProviders, newSignupFlow, switchToPAYG, + experimentalIdes, }; }, [ enablePersonalAccessTokens, @@ -133,6 +137,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => { switchToPAYG, usePublicApiWorkspacesService, userGitAuthProviders, + experimentalIdes, ]); return {children}; diff --git a/components/gitpod-protocol/src/ide-protocol.ts b/components/gitpod-protocol/src/ide-protocol.ts index 9ee9cf74996e40..21a0ed0c3f2885 100644 --- a/components/gitpod-protocol/src/ide-protocol.ts +++ b/components/gitpod-protocol/src/ide-protocol.ts @@ -105,6 +105,11 @@ export interface IDEOption { */ hidden?: boolean; + /** + * If `true` this IDE option is conditionally shown in the IDE preferences + */ + experimental?: boolean; + /** * The image ref to the IDE image. */ diff --git a/components/ide-service-api/go/config/ideconfig.go b/components/ide-service-api/go/config/ideconfig.go index 1a3f69b6278e36..39071e366a28e2 100644 --- a/components/ide-service-api/go/config/ideconfig.go +++ b/components/ide-service-api/go/config/ideconfig.go @@ -44,6 +44,8 @@ type IDEOption struct { Notes []string `json:"notes,omitempty"` // Hidden this IDE option is not visible in the IDE preferences. Hidden bool `json:"hidden,omitempty"` + // Experimental this IDE option is to only be shown to some users + Experimental bool `json:"experimental,omitempty"` // Image ref to the IDE image. Image string `json:"image"` // LatestImage ref to the IDE image, this image ref always resolve to digest. diff --git a/install/installer/pkg/components/ide-service/ide_config_configmap.go b/install/installer/pkg/components/ide-service/ide_config_configmap.go index 76d9e7aa586ad0..9b36a0167879ec 100644 --- a/install/installer/pkg/components/ide-service/ide_config_configmap.go +++ b/install/installer/pkg/components/ide-service/ide_config_configmap.go @@ -205,6 +205,7 @@ func ideConfigConfigmap(ctx *common.RenderContext) ([]runtime.Object, error) { Label: "Insiders", Image: ctx.ImageName(ctx.Config.Repository, ide.XtermIDEImage, "latest"), ResolveImageDigest: true, + Experimental: true, }, }, DefaultIde: "code", From 089a0c1f9a04caa883cd8174c9879b77a582c550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Tue, 7 Mar 2023 18:57:25 +0000 Subject: [PATCH 5/7] Xterm => terminal --- .../ide-proxy/static/image/ide-logo/terminal.svg | 4 ++++ components/ide-proxy/static/image/ide-logo/xterm.svg | 11 ----------- .../components/ide-service/ide_config_configmap.go | 3 +-- 3 files changed, 5 insertions(+), 13 deletions(-) create mode 100644 components/ide-proxy/static/image/ide-logo/terminal.svg delete mode 100644 components/ide-proxy/static/image/ide-logo/xterm.svg diff --git a/components/ide-proxy/static/image/ide-logo/terminal.svg b/components/ide-proxy/static/image/ide-logo/terminal.svg new file mode 100644 index 00000000000000..7992255eefa918 --- /dev/null +++ b/components/ide-proxy/static/image/ide-logo/terminal.svg @@ -0,0 +1,4 @@ + + + diff --git a/components/ide-proxy/static/image/ide-logo/xterm.svg b/components/ide-proxy/static/image/ide-logo/xterm.svg deleted file mode 100644 index 0aa957e3d38239..00000000000000 --- a/components/ide-proxy/static/image/ide-logo/xterm.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/install/installer/pkg/components/ide-service/ide_config_configmap.go b/install/installer/pkg/components/ide-service/ide_config_configmap.go index 9b36a0167879ec..f7699173a5c18a 100644 --- a/install/installer/pkg/components/ide-service/ide_config_configmap.go +++ b/install/installer/pkg/components/ide-service/ide_config_configmap.go @@ -200,8 +200,7 @@ func ideConfigConfigmap(ctx *common.RenderContext) ([]runtime.Object, error) { OrderKey: "12", Title: "Terminal", Type: ide_config.IDETypeBrowser, - Logo: getIdeLogoPath("xterm"), - Tooltip: "A terminal in the browser with Xterm.js", + Logo: getIdeLogoPath("terminal"), Label: "Insiders", Image: ctx.ImageName(ctx.Config.Repository, ide.XtermIDEImage, "latest"), ResolveImageDigest: true, From 7e627c48eb97d60e7ce78f4510453c5f51806b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Thu, 16 Mar 2023 20:14:09 +0000 Subject: [PATCH 6/7] Revert "Also resolve the source code commit for IDEs in `ide-service`" This reverts commit 06aee00959c24469e6fae904394badd4660dd97b. --- .../gitpod-protocol/src/ide-protocol.ts | 10 --------- .../ide-service-api/go/config/ideconfig.go | 4 ---- components/ide-service/pkg/ocitool/resolve.go | 22 ++++++++----------- .../ide-service/pkg/ocitool/resolve_test.go | 2 +- .../ide-service/pkg/server/ideconfig.go | 14 ++++-------- 5 files changed, 14 insertions(+), 38 deletions(-) diff --git a/components/gitpod-protocol/src/ide-protocol.ts b/components/gitpod-protocol/src/ide-protocol.ts index 21a0ed0c3f2885..2653a6fa755213 100644 --- a/components/gitpod-protocol/src/ide-protocol.ts +++ b/components/gitpod-protocol/src/ide-protocol.ts @@ -149,14 +149,4 @@ export interface IDEOption { * LatestImageVersion the semantic version of the latest IDE image. */ latestImageVersion?: string; - - /** - * ImageCommit the source code commit SHA of the IDE image. - */ - imageCommit?: string; - - /** - * LatestImageCommit the source code commit SHA of the latest IDE image. - */ - latestImageCommit?: string; } diff --git a/components/ide-service-api/go/config/ideconfig.go b/components/ide-service-api/go/config/ideconfig.go index 39071e366a28e2..3fd91782aebd23 100644 --- a/components/ide-service-api/go/config/ideconfig.go +++ b/components/ide-service-api/go/config/ideconfig.go @@ -63,10 +63,6 @@ type IDEOption struct { ImageVersion string `json:"imageVersion,omitempty"` // LatestImageVersion the semantic version of the latest IDE image. LatestImageVersion string `json:"latestImageVersion,omitempty"` - // ImageCommit the source code commit SHA of the IDE image. - ImageCommit string `json:"imageCommit,omitempty"` - // LatestImageCommit the source code commit SHA of the latest IDE image. - LatestImageCommit string `json:"latestImageCommit,omitempty"` // ImageLayers for additional ide layers and dependencies ImageLayers []string `json:"imageLayers,omitempty"` // LatestImageLayers for latest additional ide layers and dependencies diff --git a/components/ide-service/pkg/ocitool/resolve.go b/components/ide-service/pkg/ocitool/resolve.go index 33cb30922a340c..c6e5a2e9fdc05f 100644 --- a/components/ide-service/pkg/ocitool/resolve.go +++ b/components/ide-service/pkg/ocitool/resolve.go @@ -71,24 +71,24 @@ func interactiveFetchManifestOrIndex(ctx context.Context, res remotes.Resolver, return "", nil, nil } -func ResolveIDEVersion(ctx context.Context, ref string) (ManifestLabels, error) { +func ResolveIDEVersion(ctx context.Context, ref string) (string, error) { newCtx, cancel := context.WithTimeout(ctx, time.Second*30) defer cancel() res := docker.NewResolver(docker.ResolverOptions{}) name, mf, err := interactiveFetchManifestOrIndex(newCtx, res, ref) if err != nil { - return ManifestLabels{}, err + return "", err } fetcher, err := res.Fetcher(ctx, name) if err != nil { - return ManifestLabels{}, err + return "", err } cfgin, err := fetcher.Fetch(ctx, mf.Config) if err != nil { - return ManifestLabels{}, err + return "", err } defer cfgin.Close() @@ -96,19 +96,15 @@ func ResolveIDEVersion(ctx context.Context, ref string) (ManifestLabels, error) err = json.NewDecoder(cfgin).Decode(&tmp) if err != nil { - return ManifestLabels{}, err + return "", nil } - - return tmp.Config.Labels, nil -} - -type ManifestLabels struct { - Version string `json:"io.gitpod.ide.version"` - Commit *string `json:"io.gitpod.ide.commit,omitempty"` + return tmp.Config.Labels.Version, nil } type ManifestJSON struct { Config struct { - Labels ManifestLabels `json:"Labels"` + Labels struct { + Version string `json:"io.gitpod.ide.version"` + } `json:"Labels"` } `json:"config"` } diff --git a/components/ide-service/pkg/ocitool/resolve_test.go b/components/ide-service/pkg/ocitool/resolve_test.go index eb287d14d0353f..68a85612216d55 100644 --- a/components/ide-service/pkg/ocitool/resolve_test.go +++ b/components/ide-service/pkg/ocitool/resolve_test.go @@ -43,7 +43,7 @@ func TestResolveIDEVersion(t *testing.T) { t.Errorf("ResolveIDEVersion() error = %v, wantErr %v", err, tt.wantErr) return } - if got.Version != tt.want { + if got != tt.want { t.Errorf("ResolveIDEVersion() = %v, want %v", got, tt.want) } }) diff --git a/components/ide-service/pkg/server/ideconfig.go b/components/ide-service/pkg/server/ideconfig.go index 1665aeae71eed0..14491c203e2004 100644 --- a/components/ide-service/pkg/server/ideconfig.go +++ b/components/ide-service/pkg/server/ideconfig.go @@ -72,13 +72,10 @@ func ParseConfig(ctx context.Context, b []byte) (*config.IDEConfig, error) { option.Image = resolved } } - if resolvedLabels, err := oci_tool.ResolveIDEVersion(ctx, option.Image); err != nil { + if resolvedVersion, err := oci_tool.ResolveIDEVersion(ctx, option.Image); err != nil { log.WithError(err).Error("ide config: cannot get version from image") } else { - option.ImageVersion = resolvedLabels.Version - if resolvedLabels.Commit != nil { - option.ImageCommit = *resolvedLabels.Commit - } + option.ImageVersion = resolvedVersion } if option.LatestImage != "" { if resolved, err := oci_tool.Resolve(ctx, option.LatestImage); err != nil { @@ -87,13 +84,10 @@ func ParseConfig(ctx context.Context, b []byte) (*config.IDEConfig, error) { log.WithField("ide", id).WithField("image", option.LatestImage).WithField("resolved", resolved).Info("ide config: resolved latest image digest") option.LatestImage = resolved } - if resolvedLabels, err := oci_tool.ResolveIDEVersion(ctx, option.LatestImage); err != nil { + if resolvedVersion, err := oci_tool.ResolveIDEVersion(ctx, option.LatestImage); err != nil { log.WithError(err).Error("ide config: cannot get version from image") } else { - option.LatestImageVersion = resolvedLabels.Version - if resolvedLabels.Commit != nil { - option.LatestImageCommit = *resolvedLabels.Commit - } + option.LatestImageVersion = resolvedVersion } } cfg.IdeOptions.Options[id] = option From cbd2db8ac38a12b984bd21df6d2dc12e3d261f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Thu, 23 Mar 2023 15:57:09 +0000 Subject: [PATCH 7/7] always add `