import program from 'commander'; import execa from 'execa'; import fse from 'fs-extra'; import replaceWithPreview from './replace-with-preview'; const semverParse = require('semver/functions/parse'); program .option( '-v, --nextVersion ', 'next semantic version. Available versions: ["major", "minor", "patch", "premajor", "preminor", "prepatch", "prerelease", "or type a custom version"]', ) .option('-r, --registry ', 'target npm server registry') .option('-p, --preview', 'publishes with preview tag') .option('-sg, --skipGit', 'skips git push') .option('-sv, --skipVersionValidation', 'skips version validation'); program.parse(process.argv); (async () => { const versions = ['major', 'minor', 'patch', 'premajor', 'preminor', 'prepatch', 'prerelease']; const oldVersion = fse.readJSONSync('../lerna.version.json').version; if (!program.nextVersion) { console.error('Please provide a version with --nextVersion attribute'); process.exit(1); } const registry = program.registry || 'https://registry.npmjs.org'; try { await fse.remove('../dist/packages'); if (!program.skipVersionValidation) { await execa( 'yarn', [ 'validate-versions', '--compareVersion', program.nextVersion, '--path', '../ng-packs/packages', ], { stdout: 'inherit', cwd: '../../scripts' }, ); } if (program.preview) await replaceWithPreview(program.nextVersion); const parallel = process.env.NX_PARALLEL || '2'; await execa( 'yarn', [ 'nx', 'run-many', '--target=build', '--all', '--exclude=dev-app,schematics', '--prod', '--parallel', String(parallel), ], { stdout: 'inherit', cwd: '../' }, ); await execa('yarn', ['build:schematics'], { stdout: 'inherit' }); } catch (error) { console.error(error.stderr); console.error('\n\nAn error has occurred! Rolling back the changed package versions.'); await updateVersion(oldVersion); process.exit(1); } try { await fse.rename('../lerna.publish.json', '../lerna.json'); let tag: string; if (program.preview) tag = 'preview'; else if (semverParse(program.nextVersion).prerelease?.length) tag = 'next'; await execa( 'yarn', ['lerna', 'exec', '--', `"npm publish --registry ${registry}${tag ? ` --tag ${tag}` : ''}"`], { stdout: 'inherit', cwd: '../', }, ); await fse.rename('../lerna.json', '../lerna.publish.json'); } catch (error) { console.error(error.stderr); console.error('\n\nAn error has occurred while publishing to the NPM!'); await fse.rename('../lerna.json', '../lerna.publish.json'); process.exit(1); } try { if (!program.preview && !program.skipGit) { await execa('git', ['add', '../packages/*', '../package.json', '../lerna.version.json'], { stdout: 'inherit', }); await execa('git', ['commit', '-m', 'Upgrade ng package versions', '--no-verify'], { stdout: 'inherit', }); } } catch (error) { console.error(error.stderr); process.exit(1); } process.exit(0); })(); async function updateVersion(version: string) { await execa('yarn', ['update-version', version], { stdout: 'inherit', cwd: '../' }); await execa('yarn', ['replace-with-tilde']); }