From 53d35757eef4575934f0467a28e0f42cf468f424 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Fri, 24 Feb 2023 15:59:12 +0700 Subject: [PATCH] Make minor changes to TravisCI sync, faster, reliable --- backend/src/integrations/sync.ts | 63 ++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/backend/src/integrations/sync.ts b/backend/src/integrations/sync.ts index 70b60dd9f..2efa285e8 100644 --- a/backend/src/integrations/sync.ts +++ b/backend/src/integrations/sync.ts @@ -1364,18 +1364,25 @@ const syncSecretsTravisCI = async ({ }, } ) - ).data?.env_vars; - + ) + .data + ?.env_vars + .reduce((obj: any, secret: any) => ({ + ...obj, + [secret.name]: secret + }), {}); + // add secrets - for (const key of Object.keys(secrets)) { - const existingSecret = getSecretsRes.find((s: any) => s.name == key); - if(!existingSecret){ + for await (const key of Object.keys(secrets)) { + if (!(key in getSecretsRes)) { + // case: secret does not exist in travis ci + // -> add secret await axios.post( `${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars?repository_id=${integration.appId}`, { env_var: { name: key, - value: secrets[key], + value: secrets[key] } }, { @@ -1385,10 +1392,12 @@ const syncSecretsTravisCI = async ({ "Accept-Encoding": "application/json", }, } - ) - }else { // update secret + ); + } else { + // case: secret exists in travis ci + // -> update/set secret await axios.patch( - `${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars/${existingSecret.id}?repository_id=${existingSecret.repository_id}`, + `${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars/${getSecretsRes[key].id}?repository_id=${getSecretsRes[key].repository_id}`, { env_var: { name: key, @@ -1402,29 +1411,29 @@ const syncSecretsTravisCI = async ({ "Accept-Encoding": "application/json", }, } - ) - } - } - - // delete secret - for (const sec of getSecretsRes) { - if (!(sec.name in secrets)){ - await axios.delete( - `${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars/${sec.id}?repository_id=${sec.repository_id}`, - { - headers: { - "Authorization": `token ${accessToken}`, - "Content-Type": "application/json", - "Accept-Encoding": "application/json", - }, - } ); } } - }catch (err) { + + for await (const key of Object.keys(getSecretsRes)) { + if (!(key in secrets)){ + // delete secret + await axios.delete( + `${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars/${getSecretsRes[key].id}?repository_id=${getSecretsRes[key].repository_id}`, + { + headers: { + "Authorization": `token ${accessToken}`, + "Content-Type": "application/json", + "Accept-Encoding": "application/json", + }, + } + ); + } + } + } catch (err) { Sentry.setUser(null); Sentry.captureException(err); - throw new Error("Failed to sync secrets to CircleCI"); + throw new Error("Failed to sync secrets to TravisCI"); } }