-
Notifications
You must be signed in to change notification settings - Fork 451
Expand file tree
/
Copy pathresolve-instance-keys.mjs
More file actions
51 lines (40 loc) · 1.53 KB
/
resolve-instance-keys.mjs
File metadata and controls
51 lines (40 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env node
/**
* Resolves Clerk pk/sk for a named test instance from a JSON-encoded env var
* (e.g. INTEGRATION_INSTANCE_KEYS / INTEGRATION_STAGING_INSTANCE_KEYS).
*
* Usage:
* node scripts/resolve-instance-keys.mjs <SECRET_ENV_VAR> <INSTANCE_NAME>
*
* Writes pk and sk as GitHub Actions step outputs to $GITHUB_OUTPUT and masks
* sk in the runner logs. Exits non-zero with a ::error:: annotation if the
* env var is missing, malformed, or doesn't contain the requested instance.
*/
import { appendFileSync } from 'node:fs';
const fail = msg => {
console.error(`::error::${msg}`);
process.exit(1);
};
const [, , secretVar, instanceName] = process.argv;
if (!secretVar || !instanceName) {
fail('Usage: resolve-instance-keys.mjs <SECRET_ENV_VAR> <INSTANCE_NAME>');
}
const raw = process.env[secretVar];
if (!raw) fail(`${secretVar} secret is not set`);
let parsed;
try {
parsed = JSON.parse(raw);
} catch (err) {
fail(`Failed to parse ${secretVar} as JSON: ${err.message}`);
}
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
fail(`Expected ${secretVar} to be a JSON object of instance entries`);
}
const entry = parsed[instanceName];
if (!entry) fail(`No entry '${instanceName}' found in ${secretVar}`);
const { pk, sk } = entry;
if (!pk) fail(`Entry '${instanceName}' in ${secretVar} is missing 'pk'`);
if (!sk) fail(`Entry '${instanceName}' in ${secretVar} is missing 'sk'`);
console.log(`::add-mask::${sk}`);
const out = process.env.GITHUB_OUTPUT;
if (out) appendFileSync(out, `pk=${pk}\nsk=${sk}\n`);