const { exec } = require('child_process') function execCommandWithRetry(command, retries = 3) { return new Promise((resolve, reject) => { const execute = (attempt) => { exec(command, (error, stdout, stderr) => { if (error) { console.error(`Error: ${error}`) if (attempt < retries) { console.log(`Retrying... Attempt ${attempt + 1}`) execute(attempt + 1) } else { return reject(error) } } else { console.log(`stdout: ${stdout}`) console.error(`stderr: ${stderr}`) resolve() } }) } execute(0) }) } function sign({ path, name, certUrl, clientId, tenantId, clientSecret, certName, timestampServer, version, }) { return new Promise((resolve, reject) => { const command = `azuresigntool.exe sign -kvu "${certUrl}" -kvi "${clientId}" -kvt "${tenantId}" -kvs "${clientSecret}" -kvc "${certName}" -tr "${timestampServer}" -v "${path}"` execCommandWithRetry(command) .then(resolve) .catch(reject) }) } exports.default = async function (options) { const certUrl = process.env.AZURE_KEY_VAULT_URI const clientId = process.env.AZURE_CLIENT_ID const tenantId = process.env.AZURE_TENANT_ID const clientSecret = process.env.AZURE_CLIENT_SECRET const certName = process.env.AZURE_CERT_NAME const timestampServer = 'http://timestamp.globalsign.com/tsa/r6advanced1' try { await sign({ path: options.path, name: 'jan-win-x64', certUrl, clientId, tenantId, clientSecret, certName, timestampServer, version: options.version, }) } catch (error) { console.error('Failed to sign after 3 attempts:', error) process.exit(1) } }