gpg/src/main.ts

82 lines
2.3 KiB
TypeScript
Raw Normal View History

2020-05-03 14:46:05 -04:00
import * as core from '@actions/core';
2020-05-03 15:33:19 -04:00
import * as gpg from './gpg';
import * as openpgp from './openpgp';
2020-05-03 14:46:05 -04:00
import * as stateHelper from './state-helper';
2020-05-04 13:17:01 -04:00
import * as exec from '@actions/exec';
2020-05-04 14:06:27 -04:00
import os from 'os';
2020-05-03 14:46:05 -04:00
async function run(): Promise<void> {
try {
2020-05-04 14:06:27 -04:00
if (os.platform() == 'win32') {
core.setFailed('Windows platform not supported');
return;
}
2020-05-03 14:46:05 -04:00
if (!process.env.SIGNING_KEY) {
core.setFailed('Signing key required');
return;
}
2020-05-03 15:33:19 -04:00
core.info('📣 GnuPG info');
2020-05-04 13:17:01 -04:00
await exec.exec('which', ['gpg']);
2020-05-03 15:33:19 -04:00
const version = await gpg.getVersion();
const dirs = await gpg.getDirs();
2020-05-04 10:40:21 -04:00
core.info(`Version : ${version.gnupg} (libgcrypt ${version.libgcrypt})`);
core.info(`Libdir : ${dirs.libdir}`);
core.info(`Libexecdir : ${dirs.libexecdir}`);
core.info(`Datadir : ${dirs.datadir}`);
core.info(`Homedir : ${dirs.homedir}`);
2020-05-03 14:46:05 -04:00
core.info('🔮 Checking signing key...');
2020-05-03 15:33:19 -04:00
const privateKey = await openpgp.readPrivateKey(process.env.SIGNING_KEY);
core.debug(`Fingerprint : ${privateKey.fingerprint}`);
core.debug(`KeyID : ${privateKey.keyID}`);
core.debug(`UserID : ${privateKey.userID}`);
core.debug(`CreationTime : ${privateKey.creationTime}`);
2020-05-03 14:46:05 -04:00
core.info('🔑 Importing secret key...');
await gpg.importKey(process.env.SIGNING_KEY).then(stdout => {
core.debug(stdout);
});
if (process.env.PASSPHRASE) {
core.info('⚙️ Configuring GnuPG agent...');
await gpg.configureAgent(gpg.agentConfig);
core.info('📌 Getting keygrip...');
const keygrip = await gpg.getKeygrip(privateKey.fingerprint);
core.debug(`${keygrip}`);
core.info('🔓 Preset passphrase...');
await gpg.presetPassphrase(keygrip, process.env.PASSPHRASE).then(stdout => {
core.debug(stdout);
});
}
2020-05-03 14:46:05 -04:00
} catch (error) {
core.setFailed(error.message);
}
}
async function cleanup(): Promise<void> {
2020-05-03 15:22:08 -04:00
if (!process.env.SIGNING_KEY) {
core.debug('Signing key is not defined. Skipping cleanup.');
2020-05-03 14:46:05 -04:00
return;
}
try {
core.info('🚿 Removing keys...');
2020-05-03 15:33:19 -04:00
const privateKey = await openpgp.readPrivateKey(process.env.SIGNING_KEY);
await gpg.deleteKey(privateKey.fingerprint);
2020-05-03 14:46:05 -04:00
} catch (error) {
core.warning(error.message);
}
}
// Main
if (!stateHelper.IsPost) {
run();
}
// Post
else {
cleanup();
}