UNPKG

@interaktiv/dia-scripts

Version:

CLI toolbox with common scripts for most sort of projects at DIA

111 lines (88 loc) 2.87 kB
"use strict"; const path = require('path'); const fs = require('fs-extra'); const AdmZip = require('adm-zip'); const axios = require('axios'); const mkdirp = require('mkdirp'); const mv = require('mv'); const rimraf = require('rimraf'); const { ux } = require('cli-ux'); const logSymbols = require('log-symbols'); const { ifConfig, PMD_DIR, parseEnv, pkg, TMP_DIR } = require('../../utils'); const { success: successIcon, error: failIcon } = logSymbols; const unzipToDir = (src, dir) => new Promise((resolve, reject) => { const zip = new AdmZip(src); zip.extractAllToAsync(dir, true, error => error ? reject(error) : resolve(dir)); }); const promisfyMv = (src, dest) => new Promise((resolve, reject) => mv(src, dest, { mkdirp: true }, error => error ? reject(error) : resolve(dest))); const { config: { pmd: { version: versionFromPackage = '6.18.0' } = {} } = {} } = pkg; const pmdVersion = parseEnv('npm_package_config_pmd_version', ifConfig('pmd', versionFromPackage, '6.18.0')); const BACKUP_DIR = path.join(TMP_DIR); const DOWNLOAD_PATH = path.join(TMP_DIR, `pmd-bin-${pmdVersion}.zip`); const UNZIP_PATH = DOWNLOAD_PATH.replace(/\.zip$/, ''); const PMD_DOWNLOAD_URL = `https://github.com/pmd/pmd/releases/download/pmd_releases%2F${pmdVersion}/pmd-bin-${pmdVersion}.zip`; const cleanup = () => { rimraf.sync(DOWNLOAD_PATH); rimraf.sync(BACKUP_DIR); }; async function run() { ux.action.start(`Downloading PMD bin v${pmdVersion}`); const response = await axios.get(PMD_DOWNLOAD_URL, { responseType: 'arraybuffer' }); ux.action.stop(successIcon); ux.action.start('Installing PMD bin'); cleanup(); const hasPmdAlready = await fs.exists(PMD_DIR); if (hasPmdAlready) await promisfyMv(PMD_DIR, BACKUP_DIR); const binary = response.data; mkdirp.sync(path.dirname(DOWNLOAD_PATH)); await fs.writeFile(DOWNLOAD_PATH, binary); await unzipToDir(DOWNLOAD_PATH, TMP_DIR); await promisfyMv(UNZIP_PATH, PMD_DIR); const PMD_RULESET = path.join(BACKUP_DIR, 'ruleset.xml'); if (await fs.exists(PMD_RULESET)) { const PMD_RULESET_DEST = path.join(PMD_DIR, path.basename(PMD_RULESET)); await fs.copy(PMD_RULESET, PMD_RULESET_DEST); } cleanup(); ux.action.stop(successIcon); ux.log('\nFinished successfully'); } (async () => { try { await run(); } catch (err) { ux.action.stop(failIcon); if (err.response) { process.exitCode = err.response.status; throw new Error(err); } if (err.request) { // The request was made but no response was received // `error.request` is an instance of XMLHttpRequest in the browser and an instance of // http.ClientRequest in node.js process.exitCode = err.request.statusCode; } // Something happened in setting up the request that triggered an Error throw err; } })();