Make minor changes to TravisCI sync, faster, reliable

This commit is contained in:
Tuan Dang
2023-02-24 15:59:12 +07:00
parent 0b08e574c7
commit 53d35757ee
+36 -27
View File
@@ -1364,18 +1364,25 @@ const syncSecretsTravisCI = async ({
}, },
} }
) )
).data?.env_vars; )
.data
?.env_vars
.reduce((obj: any, secret: any) => ({
...obj,
[secret.name]: secret
}), {});
// add secrets // add secrets
for (const key of Object.keys(secrets)) { for await (const key of Object.keys(secrets)) {
const existingSecret = getSecretsRes.find((s: any) => s.name == key); if (!(key in getSecretsRes)) {
if(!existingSecret){ // case: secret does not exist in travis ci
// -> add secret
await axios.post( await axios.post(
`${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars?repository_id=${integration.appId}`, `${INTEGRATION_TRAVISCI_API_URL}/settings/env_vars?repository_id=${integration.appId}`,
{ {
env_var: { env_var: {
name: key, name: key,
value: secrets[key], value: secrets[key]
} }
}, },
{ {
@@ -1385,10 +1392,12 @@ const syncSecretsTravisCI = async ({
"Accept-Encoding": "application/json", "Accept-Encoding": "application/json",
}, },
} }
) );
}else { // update secret } else {
// case: secret exists in travis ci
// -> update/set secret
await axios.patch( 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: { env_var: {
name: key, name: key,
@@ -1402,29 +1411,29 @@ const syncSecretsTravisCI = async ({
"Accept-Encoding": "application/json", "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.setUser(null);
Sentry.captureException(err); Sentry.captureException(err);
throw new Error("Failed to sync secrets to CircleCI"); throw new Error("Failed to sync secrets to TravisCI");
} }
} }