mirror of
https://github.com/kopia/kopia.git
synced 2026-01-26 15:28:06 -05:00
55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
const { spawnSync } = require("child_process");
|
|
exports.default = async function (configuration) {
|
|
if (process.platform !== "win32") {
|
|
return;
|
|
}
|
|
|
|
const sha1 = process.env.WINDOWS_CERT_SHA1;
|
|
if (!sha1) {
|
|
console.log('Not signing', configuration.path, ' because WINDOWS_CERT_SHA1 is not set');
|
|
return;
|
|
}
|
|
|
|
const signTool = process.env.WINDOWS_SIGN_TOOL || "signtool.exe";
|
|
|
|
console.log('signTool', signTool);
|
|
|
|
const signToolArgs = [
|
|
"sign",
|
|
"/sha1", sha1,
|
|
"/fd", configuration.hash,
|
|
"/tr", "http://timestamp.digicert.com",
|
|
];
|
|
|
|
if (configuration.isNest) {
|
|
signToolArgs.push("/as")
|
|
}
|
|
|
|
signToolArgs.push("/v");
|
|
signToolArgs.push(configuration.path);
|
|
|
|
let nextSleepTime = 1000;
|
|
|
|
for (let attempt = 0; attempt < 10; attempt++) {
|
|
console.log('Signing ', configuration.path, 'attempt', attempt);
|
|
if (attempt > 0) {
|
|
console.log('Sleping for ', nextSleepTime);
|
|
await new Promise(r => setTimeout(r, nextSleepTime));
|
|
}
|
|
nextSleepTime *= 2;
|
|
|
|
const result = spawnSync(signTool, signToolArgs, {
|
|
stdio: "inherit",
|
|
});
|
|
|
|
if (!result.error && 0 === result.status) {
|
|
console.log('Signing of', configuration.path, ' succeeded');
|
|
return;
|
|
} else {
|
|
console.log('Signing of' + configuration.path + ' failed with ' + JSON.stringify(result));
|
|
}
|
|
}
|
|
|
|
throw Exception("Failed to sign " + configuration.path);
|
|
};
|