warden/retrieveSecrets.js
2025-02-26 17:30:13 +01:00

54 lines
1.5 KiB
JavaScript

import * as core from "@actions/core";
import { execSync } from "child_process";
function getSecrets() {
try {
const secretsRaw = core.getInput("secrets", { required: true });
const sessionKey = process.env.BW_SESSION;
if (!sessionKey) {
throw new Error("BW_SESSION is not set. Make sure Bitwarden is unlocked.");
}
// Secrets parsen naar een array van { id, name }
const secrets = secretsRaw
.split("\n")
.map((s) => s.trim())
.filter((s) => s.includes(">"))
.map((s) => {
const [id, name] = s.split(">").map((part) => part.trim());
return { id, name };
});
if (secrets.length === 0) {
throw new Error("No valid secrets provided.");
}
core.info(`🔍 Retrieving ${secrets.length} secrets from Bitwarden...`);
secrets.forEach(({ id, name }) => {
try {
const value = execSync(`bw get notes ${id} --session ${sessionKey}`, {
encoding: "utf-8",
}).trim();
if (value) {
core.exportVariable(name, value);
core.setSecret(value); // Verberg secret in logs
core.info(`✅ Stored secret ${id} as ${name}`);
} else {
core.warning(`⚠️ No value found for secret: ${id}`);
}
} catch (error) {
core.warning(`❌ Failed to retrieve secret: ${id} - ${error.message}`);
}
});
core.info("✅ All secrets retrieved successfully!");
} catch (error) {
core.setFailed(`❌ Error retrieving secrets: ${error.message}`);
}
}
getSecrets();