Skip to content

Commit f226ef4

Browse files
committed
Also resolve the source code commit for IDEs in ide-service
1 parent a9a300f commit f226ef4

File tree

5 files changed

+38
-14
lines changed

5 files changed

+38
-14
lines changed

components/gitpod-protocol/src/ide-protocol.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,14 @@ export interface IDEOption {
144144
* LatestImageVersion the semantic version of the latest IDE image.
145145
*/
146146
latestImageVersion?: string;
147+
148+
/**
149+
* ImageCommit the source code commit SHA of the IDE image.
150+
*/
151+
imageCommit?: string;
152+
153+
/**
154+
* LatestImageCommit the source code commit SHA of the latest IDE image.
155+
*/
156+
latestImageCommit?: string;
147157
}

components/ide-service-api/go/config/ideconfig.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ type IDEOption struct {
6161
ImageVersion string `json:"imageVersion,omitempty"`
6262
// LatestImageVersion the semantic version of the latest IDE image.
6363
LatestImageVersion string `json:"latestImageVersion,omitempty"`
64+
// ImageCommit the source code commit SHA of the IDE image.
65+
ImageCommit string `json:"imageCommit,omitempty"`
66+
// LatestImageCommit the source code commit SHA of the latest IDE image.
67+
LatestImageCommit string `json:"latestImageCommit,omitempty"`
6468
// ImageLayers for additional ide layers and dependencies
6569
ImageLayers []string `json:"imageLayers,omitempty"`
6670
// LatestImageLayers for latest additional ide layers and dependencies

components/ide-service/pkg/ocitool/resolve.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,40 +71,44 @@ func interactiveFetchManifestOrIndex(ctx context.Context, res remotes.Resolver,
7171
return "", nil, nil
7272
}
7373

74-
func ResolveIDEVersion(ctx context.Context, ref string) (string, error) {
74+
func ResolveIDEVersion(ctx context.Context, ref string) (ManifestLabels, error) {
7575
newCtx, cancel := context.WithTimeout(ctx, time.Second*30)
7676
defer cancel()
7777
res := docker.NewResolver(docker.ResolverOptions{})
7878

7979
name, mf, err := interactiveFetchManifestOrIndex(newCtx, res, ref)
8080
if err != nil {
81-
return "", err
81+
return ManifestLabels{}, err
8282
}
8383

8484
fetcher, err := res.Fetcher(ctx, name)
8585
if err != nil {
86-
return "", err
86+
return ManifestLabels{}, err
8787
}
8888

8989
cfgin, err := fetcher.Fetch(ctx, mf.Config)
9090
if err != nil {
91-
return "", err
91+
return ManifestLabels{}, err
9292
}
9393
defer cfgin.Close()
9494

9595
var tmp ManifestJSON
9696

9797
err = json.NewDecoder(cfgin).Decode(&tmp)
9898
if err != nil {
99-
return "", nil
99+
return ManifestLabels{}, err
100100
}
101-
return tmp.Config.Labels.Version, nil
101+
102+
return tmp.Config.Labels, nil
103+
}
104+
105+
type ManifestLabels struct {
106+
Version string `json:"io.gitpod.ide.version"`
107+
Commit *string `json:"io.gitpod.ide.commit,omitempty"`
102108
}
103109

104110
type ManifestJSON struct {
105111
Config struct {
106-
Labels struct {
107-
Version string `json:"io.gitpod.ide.version"`
108-
} `json:"Labels"`
112+
Labels ManifestLabels `json:"Labels"`
109113
} `json:"config"`
110114
}

components/ide-service/pkg/ocitool/resolve_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func TestResolveIDEVersion(t *testing.T) {
4343
t.Errorf("ResolveIDEVersion() error = %v, wantErr %v", err, tt.wantErr)
4444
return
4545
}
46-
if got != tt.want {
46+
if got.Version != tt.want {
4747
t.Errorf("ResolveIDEVersion() = %v, want %v", got, tt.want)
4848
}
4949
})

components/ide-service/pkg/server/ideconfig.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,13 @@ func ParseConfig(ctx context.Context, b []byte) (*config.IDEConfig, error) {
7272
option.Image = resolved
7373
}
7474
}
75-
if resolvedVersion, err := oci_tool.ResolveIDEVersion(ctx, option.Image); err != nil {
75+
if resolvedLabels, err := oci_tool.ResolveIDEVersion(ctx, option.Image); err != nil {
7676
log.WithError(err).Error("ide config: cannot get version from image")
7777
} else {
78-
option.ImageVersion = resolvedVersion
78+
option.ImageVersion = resolvedLabels.Version
79+
if resolvedLabels.Commit != nil {
80+
option.ImageCommit = *resolvedLabels.Commit
81+
}
7982
}
8083
if option.LatestImage != "" {
8184
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) {
8487
log.WithField("ide", id).WithField("image", option.LatestImage).WithField("resolved", resolved).Info("ide config: resolved latest image digest")
8588
option.LatestImage = resolved
8689
}
87-
if resolvedVersion, err := oci_tool.ResolveIDEVersion(ctx, option.LatestImage); err != nil {
90+
if resolvedLabels, err := oci_tool.ResolveIDEVersion(ctx, option.LatestImage); err != nil {
8891
log.WithError(err).Error("ide config: cannot get version from image")
8992
} else {
90-
option.LatestImageVersion = resolvedVersion
93+
option.LatestImageVersion = resolvedLabels.Version
94+
if resolvedLabels.Commit != nil {
95+
option.LatestImageCommit = *resolvedLabels.Commit
96+
}
9197
}
9298
}
9399
cfg.IdeOptions.Options[id] = option

0 commit comments

Comments
 (0)