import type { ExecutorContext } from '@nrwl/devkit'; import { exec } from 'child_process'; import { promisify } from 'util'; import { join } from 'path'; export interface ExecutorOptions {} const UI_BUILD_PATH = join('dist', 'libs', 'ui'); async function getPublishedVersion() { const { stdout, stderr } = await promisify(exec)( `npm view @perimeter_81/ui version` ); if (stderr) throw stderr; return stdout; } async function getCurrentVersion() { const { stdout, stderr } = await promisify(exec)( `node -pe "require('./${UI_BUILD_PATH}/package.json')['version']"` ); if (stderr) throw stderr; return stdout; } export default async function publishUIExecutor( options: ExecutorOptions, context: ExecutorContext ): Promise<{ success: boolean }> { console.info(`Publishing UI library to NPM...`); console.info(`Options: ${JSON.stringify(options, null, 2)}`); let success = false; try { const currVer = await getCurrentVersion(); const { stdout, stderr } = await promisify(exec)( `npm publish ${UI_BUILD_PATH}` ); console.log('stdout', stdout); console.error('stderr', stderr); const publishedVer = await getPublishedVersion(); success = publishedVer === currVer; } catch (error) { success = false; console.error(error); } finally { console.log('success', success); return { success }; } }