UNPKG

wnpm-ci

Version:

CI support scripts for npm packages

68 lines (53 loc) 2.1 kB
const fs = require('fs-extra') const path = require('path') const execa = require('execa') const waitPort = require('wait-port') const tmp = require('tmp') module.exports.aRegistryDriver = ({ port = 4873 } = {}) => { let verdaccioDir let verdaccioProcess const start = async () => { const verdaccioExecPath = path.join(__dirname, '..', '..', 'node_modules', '.bin', 'verdaccio') const verdaccioConfig = 'verdaccio.yaml' verdaccioDir = tmp.dirSync({ unsafeCleanup: true }) await fs.copyFile(path.join(__dirname, verdaccioConfig), path.join(verdaccioDir.name, verdaccioConfig)) verdaccioProcess = execa(`${verdaccioExecPath} -l localhost:${port} -c ${path.join(verdaccioDir.name, verdaccioConfig)}`, { cwd: verdaccioDir.name, shell: true }) await waitPort({ port }) } const stop = () => { verdaccioProcess && verdaccioProcess.kill() verdaccioDir && verdaccioDir.removeCallback() } const getRegistryUrl = () => { return `http://localhost:${port}` } const putPackageInRegistry = async ({ packageName, version, checksum }) => { const dir = tmp.dirSync({ unsafeCleanup: true }) const packageJson = { name: packageName, version, checksum, public: true } const npmRc = `//localhost:${port}/:_authToken=cm95IHNvbW1lciB3YXMgaGVyZQ==\n` await Promise.all([ fs.writeFile(path.join(dir.name, 'package.json'), JSON.stringify(packageJson)), fs.writeFile(path.join(dir.name, '.npmrc'), npmRc) ]) await execa(`npm publish --registry=http://localhost:${port}`, { cwd: dir.name, shell: true, stdio: 'inherit' }) dir.removeCallback() } const fetchPackage = async ({ packageName, version }) => { const dir = tmp.dirSync({ unsafeCleanup: true }) await execa(`npm pack --registry=http://localhost:${port} ${packageName}@${version}`, { cwd: dir.name, shell: true }) await execa('tar -xf *.tgz', { cwd: dir.name, shell: true }) return path.join(dir.name, 'package') } return { start, stop, getRegistryUrl, putPackageInRegistry, fetchPackage } }