UNPKG

semantic-release-npm-workspaces-monorepo

Version:
43 lines (42 loc) 1.87 kB
import ScanPublishOrder from './scan-publish-order.js'; import UpdatePackages from './update-packages.js'; import { SETTINGS } from '../settings.js'; import npmWhich from 'npm-which'; import { promisify } from 'util'; import { execSync } from 'child_process'; const npmWhichPromise = promisify(npmWhich(process.cwd())); export default class PublishPackages { async scan() { this._packageScanner = new ScanPublishOrder(); await this._packageScanner.scan(); } async loopPackages() { const bin = (await npmWhichPromise(SETTINGS.semanticReleaseBin)); for (const packagePath of this._packageScanner.packagesOrderPath) { const packageUpdater = new UpdatePackages(packagePath, this._packageScanner.packageOrder); if (packageUpdater.settings.skip) { console.log(`Skipping package: ${packagePath}`); continue; } await PublishPackages._updatePackageJson(packageUpdater); await PublishPackages._publishPackage(packagePath, bin, packageUpdater.settings); await packageUpdater.restoreOriginalPackageJson(); } } static async _updatePackageJson(packageUpdater) { await packageUpdater.updateDeps(); packageUpdater.packageContent.release = { ...packageUpdater.settings.release, tagFormat: packageUpdater.settings.tagFormat.replace('${name}', packageUpdater.packageContent.name), }; await packageUpdater.savePackageJson(); } static async _publishPackage(packagePath, exec, settings = SETTINGS) { console.log(`\n\nRunning semantic release: ${packagePath}\n`); const command = [exec].concat(settings.semanticReleaseBinArgs).join(' '); execSync(command, { stdio: 'inherit', cwd: packagePath, }); } }