nx/scripts/e2e-build-package-publish.ts
2023-04-25 17:57:36 -04:00

66 lines
2.0 KiB
TypeScript

import { execSync } from 'child_process';
import { remove } from 'fs-extra';
import { existsSync } from 'fs';
import { stripIndent, NX_PREFIX } from 'nx/src/utils/logger';
process.env.npm_config_registry = `http://localhost:4872`;
process.env.YARN_REGISTRY = process.env.npm_config_registry;
async function buildPackagePublishAndCleanPorts() {
if (process.env.NX_E2E_SKIP_BUILD_CLEANUP !== 'true') {
if (!process.env.CI) {
console.log(
stripIndent(`
Did you know that you can run the command with:
> NX_E2E_SKIP_BUILD_CLEANUP - saves time by reusing the previously built local packages
> CI - simulate the CI environment settings
If you change create-nx-workspace or create-nx-plugin, make sure to remove your npx cache.
Otherwise the changes won't be reflected in the tests.
If your e2e tests fail when trying to create a workspace, remove your npx cache.
\n`)
);
}
await Promise.all([
remove('./build'),
remove('/tmp/nx-e2e/nx/proj-backup'),
remove('/tmp/nx-e2e/angular/proj-backup'),
remove('./tmp/local-registry'),
]);
}
if (
process.env.NX_E2E_SKIP_BUILD_CLEANUP !== 'true' ||
!existsSync('./build')
) {
try {
await updateVersionsAndPublishPackages();
} catch (e) {
console.log(e);
process.exit(1);
}
} else {
console.log(`\n⏩ Project building skipped. Reusing the existing packages`);
}
}
async function updateVersionsAndPublishPackages() {
console.log(`\n${NX_PREFIX} 📦 Publishing packages\n`);
const isVerbose =
process.env.NX_VERBOSE_LOGGING === 'true' ||
process.argv.includes('--verbose');
const response = execSync(`pnpm nx-release major --local`, {
stdio: isVerbose ? 'inherit' : 'pipe',
encoding: 'utf8',
});
// extract published version
if (!isVerbose) {
const value = response.match(/Successfully published:\s+ - .+@(.*)/);
console.log(`${NX_PREFIX} ✅ Published local version: ${value?.[1]}\n`);
}
}
(async () => {
await buildPackagePublishAndCleanPorts();
})();