Skip to content

Commit 2b97427

Browse files
fix: Fix merging ConfigMap and workspace file extensions
Signed-off-by: Roman Nikitenko <rnikiten@redhat.com>
1 parent 5d1c2f6 commit 2b97427

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

launcher/src/editor-configurations.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**********************************************************************
2-
* Copyright (c) 2024 Red Hat, Inc.
2+
* Copyright (c) 2024-2025 Red Hat, Inc.
33
*
44
* This program and the accompanying materials are made
55
* available under the terms of the Eclipse Public License 2.0
@@ -91,16 +91,29 @@ export class EditorConfigurations {
9191
private async configureExtensions(configmap: k8s.V1ConfigMap): Promise<void> {
9292
const configmapContent = configmap.data![EditorConfigs.Extensions];
9393
if (!configmapContent) {
94+
console.log(` > Configmap does not contain ${EditorConfigs.Extensions}. Skip this step.`);
9495
return;
9596
}
9697

9798
console.log(' > Configure workspace extensions...');
9899

99100
try {
100-
const extensionsFromConfigmap = parseJSON(configmapContent, {
101+
const parsedConfigmapContent = parseJSON(configmapContent, {
101102
errorMessage: 'Configmap content is not valid.',
102103
});
103104

105+
const configMapExtensions = parsedConfigmapContent?.recommendations;
106+
if (!Array.isArray(configMapExtensions) || configMapExtensions.length < 1) {
107+
console.log(
108+
` > ${EditorConfigs.Extensions} section of Configmap does not contain recomendations. Skip this step.`
109+
);
110+
return;
111+
} else {
112+
console.log(
113+
` > ${EditorConfigs.Extensions} section of Configmap contains ${configMapExtensions.length} extensions.`
114+
);
115+
}
116+
104117
if (!this.workspaceFilePath) {
105118
console.log(' > Missing workspace file. Skip this step.');
106119
return;
@@ -118,10 +131,12 @@ export class EditorConfigurations {
118131
errorMessage: 'Workspace file is not valid.',
119132
});
120133

121-
workspaceConfigData['extensions'] = {
122-
...(workspaceConfigData['extensions'] || {}),
123-
...extensionsFromConfigmap,
124-
};
134+
const workspaceFileExtensions = workspaceConfigData?.extensions?.recommendations || [];
135+
console.log(` > Workspace file contains ${workspaceFileExtensions.length} extensions.`);
136+
137+
const combinedExtensions = Array.from(new Set([...configMapExtensions, ...workspaceFileExtensions]));
138+
workspaceConfigData.extensions = workspaceConfigData.extensions ?? {};
139+
workspaceConfigData.extensions.recommendations = combinedExtensions;
125140

126141
const json = JSON.stringify(workspaceConfigData, null, '\t');
127142
await fs.writeFile(this.workspaceFilePath, json);

0 commit comments

Comments
 (0)