Skip to content

Commit 904b8a4

Browse files
committed
fix(trigger): re-read values before flagging secrets so a rotation is never undone
1 parent c8353c0 commit 904b8a4

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

‎apps/sim/scripts/plan-trigger-env-sync.ts‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,17 +113,28 @@ async function main() {
113113
})
114114

115115
if (!applySecretFlags || toFlag.length === 0) return
116+
// The import resubmits each value, so re-read right before each batch and skip any variable
117+
// rotated since the plan: flagging must never write back an older value.
118+
const skipped: string[] = []
116119
for (const batch of chunkArray(toFlag, IMPORT_BATCH_SIZE)) {
120+
const { variables: latest } = await request<{ variables: Record<string, string> }>(envvarsUrl)
121+
const unrotated = batch.filter((v) => latest[v.name] === v.value)
122+
skipped.push(...batch.filter((v) => latest[v.name] !== v.value).map((v) => v.name))
123+
if (unrotated.length === 0) continue
117124
await request(`${envvarsUrl}/${environment}/import`, {
118-
variables: Object.fromEntries(batch.map((v) => [v.name, current[v.name]])),
125+
variables: Object.fromEntries(unrotated.map((v) => [v.name, v.value])),
119126
override: true,
120127
isSecret: true,
121128
})
122129
}
123130
const stillPlain = await listPlainNames()
124-
const unflagged = names(toFlag.filter((v) => stillPlain.has(v.name)))
131+
const unflagged = names(toFlag.filter((v) => stillPlain.has(v.name) && !skipped.includes(v.name)))
125132
if (unflagged.length > 0) throw new Error(`Still plain after flagging: ${unflagged.join(', ')}`)
126-
logger.info('Marked unchanged variables as secrets', { environment, flagged: toFlag.length })
133+
logger.info('Marked unchanged variables as secrets', {
134+
environment,
135+
flagged: toFlag.length - skipped.length,
136+
skippedAsRotated: skipped.sort(),
137+
})
127138
}
128139

129140
main().catch((error) => {

0 commit comments

Comments
 (0)