100 lines
2.6 KiB
JavaScript
100 lines
2.6 KiB
JavaScript
// @flow
|
|
|
|
/* eslint-disable no-console */
|
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
/* eslint-disable prefer-destructuring */
|
|
|
|
import '@babel/polyfill';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import cp from 'child_process';
|
|
import Octokit from '@octokit/rest';
|
|
import eres from 'eres';
|
|
import mime from 'mime-types';
|
|
import packageJson from '../package';
|
|
|
|
const DIST_FOLDER = path.join(__dirname, '..', './dist');
|
|
const VERSION = packageJson.version;
|
|
const GH_TOKEN = process.env.GH_TOKEN;
|
|
const OWNER = 'andrerfneves';
|
|
const PROJECT = 'zepio';
|
|
|
|
const octokit = new Octokit({ auth: GH_TOKEN });
|
|
|
|
const signBinaries = binaries => new Promise((resolve, reject) => {
|
|
const signProcess = cp.spawn(`${__dirname}/codesign.sh`, binaries);
|
|
signProcess.stdout.on('data', out => console.log('[Code Sign]', out.toString()));
|
|
signProcess.on('exit', (code) => {
|
|
if (code === 0) {
|
|
resolve(path.join(__dirname, '..', 'signatures.zip'));
|
|
} else {
|
|
reject();
|
|
}
|
|
});
|
|
});
|
|
|
|
const getFileName = (name) => {
|
|
const extension = name.substr(name.length - 3);
|
|
|
|
switch (extension) {
|
|
case 'dmg':
|
|
return `Zepio-macOS-v${VERSION}.dmg`;
|
|
case 'deb':
|
|
return `zepio-linux-v${VERSION}.deb`;
|
|
case 'exe':
|
|
return `Zepio-Windows-v${VERSION}.exe`;
|
|
case 'zip':
|
|
return `signatures-v${VERSION}.zip`;
|
|
default:
|
|
return 'Zepio';
|
|
}
|
|
};
|
|
|
|
(async () => {
|
|
console.log(`Creating release v${VERSION}`);
|
|
|
|
const [createReleaseError, createReleaseResponse] = await eres(
|
|
octokit.repos.createRelease({
|
|
owner: OWNER,
|
|
repo: PROJECT,
|
|
tag_name: `v${VERSION}`,
|
|
name: `v${VERSION}`,
|
|
}),
|
|
);
|
|
|
|
if (createReleaseError) {
|
|
console.log(createReleaseError);
|
|
return;
|
|
}
|
|
|
|
const files = await fs.readdirSync(DIST_FOLDER);
|
|
|
|
const binaries = files
|
|
.filter(name => name.endsWith('.exe') || name.endsWith('.deb') || name.endsWith('dmg'))
|
|
.map(bin => ({ path: `${DIST_FOLDER}/${bin}`, name: bin }));
|
|
|
|
const [, signaturesPath] = await eres(signBinaries(binaries.map(bin => bin.path)));
|
|
|
|
if (!signaturesPath) {
|
|
throw new Error("Error: Can't sign files, please verify the output");
|
|
}
|
|
|
|
const filesToUpload = [...binaries, { path: signaturesPath, name: 'signatures.zip' }];
|
|
|
|
await Promise.all(
|
|
filesToUpload.map(async ({ path: fPath, name }) => {
|
|
const file = fs.readFileSync(fPath);
|
|
|
|
await octokit.repos.uploadReleaseAsset({
|
|
headers: {
|
|
'content-length': file.length,
|
|
'content-type': mime.lookup(fPath),
|
|
},
|
|
url: createReleaseResponse.data.upload_url,
|
|
name: getFileName(name),
|
|
file: fs.createReadStream(fPath),
|
|
});
|
|
}),
|
|
);
|
|
})();
|