Fix edge case for many secrets on replicate folders update function

This commit is contained in:
carlosmonastyrski
2025-04-01 09:17:57 -03:00
parent 6128301622
commit 4b0e0d4de5
@@ -371,19 +371,33 @@ export const ActionBar = ({
if (secretFolderKeys.length === 0) return; if (secretFolderKeys.length === 0) return;
// Check which secrets already exist in this path // Check which secrets already exist in this path
const { secrets: existingSecrets } = await fetchDashboardProjectSecretsByKeys({ const batchSize = 50;
secretPath: normalizedPath, const secretBatches = Array.from(
environment, { length: Math.ceil(secretFolderKeys.length / batchSize) },
projectId: workspaceId, (_, i) => secretFolderKeys.slice(i * batchSize, (i + 1) * batchSize)
keys: secretFolderKeys
});
// Create a quick lookup for existing secrets
const existingSecretLookup = existingSecrets.reduce<Record<string, boolean>>(
(lookup, secret) => ({ ...lookup, [secret.secretKey]: true }),
{}
); );
const existingSecretLookup: Record<string, boolean> = {};
const processBatches = async () => {
await secretBatches.reduce(async (previous, batch) => {
await previous;
const { secrets: batchSecrets } = await fetchDashboardProjectSecretsByKeys({
secretPath: normalizedPath,
environment,
projectId: workspaceId,
keys: batch
});
batchSecrets.forEach((secret) => {
existingSecretLookup[secret.secretKey] = true;
});
}, Promise.resolve());
};
await processBatches();
// Categorize each secret as update or create // Categorize each secret as update or create
secretFolderKeys.forEach((secretKey) => { secretFolderKeys.forEach((secretKey) => {
const secretData = secrets[secretKey]; const secretData = secrets[secretKey];