mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-24 05:48:08 +08:00
Enhancement: support nested services via labels for mixed layout-only groups (#5295)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
This commit is contained in:
@@ -135,6 +135,28 @@ function pruneEmptyGroups(groups) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mergeLayoutGroupsIntoConfigured(configuredGroups, layoutGroups) {
|
||||||
|
for (const layoutGroup of layoutGroups) {
|
||||||
|
const existing = findGroupByName(configuredGroups, layoutGroup.name);
|
||||||
|
if (existing) {
|
||||||
|
if (layoutGroup.groups?.length) {
|
||||||
|
existing.groups ??= [];
|
||||||
|
for (const sub of layoutGroup.groups) {
|
||||||
|
const existingSub = findGroupByName(existing.groups, sub.name);
|
||||||
|
if (!existingSub) {
|
||||||
|
existing.groups.push(sub);
|
||||||
|
} else {
|
||||||
|
// recursive merge if needed
|
||||||
|
mergeLayoutGroupsIntoConfigured([existingSub], [sub]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
configuredGroups.push(layoutGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function servicesResponse() {
|
export async function servicesResponse() {
|
||||||
let discoveredDockerServices;
|
let discoveredDockerServices;
|
||||||
let discoveredKubernetesServices;
|
let discoveredKubernetesServices;
|
||||||
@@ -191,14 +213,10 @@ export async function servicesResponse() {
|
|||||||
const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
|
const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
|
||||||
if (definedLayouts) {
|
if (definedLayouts) {
|
||||||
// this handles cases where groups are only defined in the settings.yaml layout and not in the services.yaml
|
// this handles cases where groups are only defined in the settings.yaml layout and not in the services.yaml
|
||||||
const layoutConfiguredGroups = Object.entries(initialSettings.layout).map(([key, value]) =>
|
const layoutGroups = Object.entries(initialSettings.layout).map(([key, value]) =>
|
||||||
convertLayoutGroupToGroup(key, value),
|
convertLayoutGroupToGroup(key, value),
|
||||||
);
|
);
|
||||||
layoutConfiguredGroups.forEach((group) => {
|
mergeLayoutGroupsIntoConfigured(configuredServices, layoutGroups);
|
||||||
if (!configuredServices.find((serviceGroup) => serviceGroup.name === group.name)) {
|
|
||||||
configuredServices.push(group);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mergedGroupsNames.forEach((groupName) => {
|
mergedGroupsNames.forEach((groupName) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user