diff --git a/npm/publish-ng.ps1 b/npm/publish-ng.ps1 index 9ba831f635..dac52b4427 100644 --- a/npm/publish-ng.ps1 +++ b/npm/publish-ng.ps1 @@ -1,6 +1,7 @@ param( [string]$Version, - [string]$Registry + [string]$Registry, + [string]$LeptonXVersion ) yarn install @@ -15,10 +16,11 @@ if (-Not $Version) { if (-Not $Registry) { $Registry = "https://registry.npmjs.org"; } + $UpdateNgPacksCommand = "yarn update-version $Version" $NgPacksPublishCommand = "npm run publish-packages -- --nextVersion $Version --skipGit --registry $Registry --skipVersionValidation" $UpdateGulpCommand = "yarn update-gulp --registry $Registry" - +$UpdateLeptonXCommand = "yarn update-lepton-x-versions -v $LeptonXVersion"; $IsPrerelease = $(node publish-utils.js --prerelease --customVersion $Version) -eq "true"; @@ -38,7 +40,9 @@ $commands = ( "cd scripts", "yarn remove-lock-files", "cd ..", - $UpdateGulpCommand + $UpdateGulpCommand, + "cd scripts", + $UpdateLeptonXCommand ) foreach ($command in $commands) { diff --git a/npm/scripts/change-package-version.ts b/npm/scripts/change-package-version.ts index 6d03716885..8a6b6fefcc 100644 --- a/npm/scripts/change-package-version.ts +++ b/npm/scripts/change-package-version.ts @@ -1,101 +1,114 @@ import glob from "glob"; import fse from "fs-extra"; -import {program} from "commander"; +import { program } from "commander"; -(function findPackageJsonFiles() { - setupCommander(); - const options = { - ignore: [ - "../../**/node_modules/**", - "../../**/dist/**", - "../../**/build/**", - "../../**/scripts/**", - "../../**/wwwroot/**" - ] - }; +export const semverRegex = + /\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?$/; - const workingDir = "../../"; - glob(`${workingDir}**/package.json`, options, (err, files) => { - if (err) throw err; +function setupCommander() { + program + .option("-n, --packageName ", "Package name") + .option( + "-v, --targetVersion ", + "Version number of the package" + ); - //Todo @masumulu28: check options value and throw error if not provided - const {packageName,targetVersion}= program.opts(); - - for (const file of files) { - readPackageJsonFile(file, packageName, targetVersion); - } - }); -})(); + program.parse(process.argv); +} function readPackageJsonFile(path, key, newVersion) { const replace = (block, key, newVersion) => { - const founded = Object.keys(block).filter(x => x === key); + const founded = Object.keys(block).filter((x) => x === key); + if (founded.length > 0) { let value = block[key]; value = value.replace(semverRegex, newVersion); - return [true, { - ...block, - [key]:value - }]; + + return [ + true, + { + ...block, + [key]: value, + }, + ]; } + return [false, block]; }; + fse.readJson(path, (err, packageObj) => { - if (err) throw err; - - const { dependencies, peerDependencies, devDependencies } = packageObj; - const results = []; - - let result = { ...packageObj }; - if (dependencies) { - const [founded, d] = replace(dependencies, key, newVersion); - results.push(founded); - result = { - ...result, dependencies: d - }; - } - if (peerDependencies) { - const [founded, p] = replace(peerDependencies, key, newVersion); - results.push(founded); - result = { - ...result, peerDependencies: p - }; - } - if (devDependencies) { - const [founded, d] = replace(devDependencies, key, newVersion); - results.push(founded); - result = { - ...result, devDependencies: d - }; - } - const anyChanges = !results.some(x => x); - if (anyChanges) { - return; - } - console.log("changed", path); - writeFile(path, result); + if (err) { + throw err; + } + + const { dependencies, peerDependencies, devDependencies } = packageObj; + const results = []; + + let result = { ...packageObj }; + if (dependencies) { + const [founded, d] = replace(dependencies, key, newVersion); + results.push(founded); + result = { + ...result, + dependencies: d, + }; + } + + if (peerDependencies) { + const [founded, p] = replace(peerDependencies, key, newVersion); + results.push(founded); + result = { + ...result, + peerDependencies: p, + }; } - ) - ; + + if (devDependencies) { + const [founded, d] = replace(devDependencies, key, newVersion); + results.push(founded); + result = { + ...result, + devDependencies: d, + }; + } + + const anyChanges = !results.some((x) => x); + if (anyChanges) { + return; + } + + console.log("changed", path); + writeFile(path, result); + }); } -export const semverRegex = - /\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?$/; function writeFile(path, result) { return fse.writeJson(path, result, { spaces: 2 }); } +(function findPackageJsonFiles() { + setupCommander(); + const options = { + ignore: [ + "../../**/node_modules/**", + "../../**/dist/**", + "../../**/build/**", + "../../**/scripts/**", + "../../**/wwwroot/**", + ], + }; + + const workingDir = "../../"; + glob(`${workingDir}**/package.json`, options, (err, files) => { + if (err) { + throw err; + } -function setupCommander() { - program - .option( - "-n, --packageName ", - "Package name" - ) - .option( - "-v, --targetVersion ", - "Version number of the package" - ); + //Todo @masumulu28: check options value and throw error if not provided + const { packageName, targetVersion } = program.opts(); - program.parse(process.argv); -} + for (const file of files) { + readPackageJsonFile(file, packageName, targetVersion); + } + }); +})(); diff --git a/npm/scripts/package.json b/npm/scripts/package.json index 2b25b8f52d..19f8db15b8 100644 --- a/npm/scripts/package.json +++ b/npm/scripts/package.json @@ -5,7 +5,8 @@ "scripts": { "remove-lock-files": "yarn && ts-node -r tsconfig-paths/register remove-lock-files.ts", "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts", - "change-package-version": "ts-node -r tsconfig-paths/register change-package-version.ts" + "change-package-version": "ts-node -r tsconfig-paths/register change-package-version.ts", + "update-lepton-x-versions": "ts-node -r tsconfig-paths/register update-lepton-x-versions.ts" }, "dependencies": { "axios": "^0.24.0", diff --git a/npm/scripts/update-lepton-x-versions.ts b/npm/scripts/update-lepton-x-versions.ts new file mode 100644 index 0000000000..7bfce7108e --- /dev/null +++ b/npm/scripts/update-lepton-x-versions.ts @@ -0,0 +1,55 @@ +import { program } from "commander"; +import childProcess from "child_process"; + +/** + * This script is used to update the version of the LeptonX (angular |mvc | blazor) npm packages. + * Depending to **change-package-version.ts** file. (Should we move this to a single script?) + * + * I'm not sure about depending "commander" package. We might need to get options from process.env directly ? + * + * Example + * -Set env + * $env:targetVersion = "1.0.0" + * -Read from nodejs + * process.env.targetVersion + * -Use as argument in commands + * const command = `yarn change-package-version -n ${packageName} -v ${process.env.targetVersion}`; + */ + +//All lepton-x-lite packages for open source (angular | mvc | blazor) UI frameworks +const LEPTON_X_PACKAGE_NAMES = [ + "@abp/ng.theme.lepton-x", + "@abp/aspnetcore.mvc.ui.theme.leptonxlite", + "@abp/aspnetcore.components.server.leptonxlitetheme", +]; + +function validteVersion(targetVersion) { + if (!targetVersion) { + console.log("\x1b[31m", "Error: lepton-x targetVersion is not defined"); + process.exit(1); + } +} + +function initCommander() { + program.option( + "-v, --targetVersion ", + "Version number of the package" + ); + + program.parse(process.argv); +} + +(() => { + initCommander(); + + const { targetVersion } = program.opts(); + + validteVersion(targetVersion); + + LEPTON_X_PACKAGE_NAMES.forEach((packageName) => { + const command = `yarn change-package-version -n ${packageName} -v ${targetVersion}`; + const result = childProcess.execSync(command).toString(); + + console.log(result); + }); +})(); diff --git a/npm/scripts/validate-versions.ts b/npm/scripts/validate-versions.ts index 4583c620e2..a5a53617d7 100644 --- a/npm/scripts/validate-versions.ts +++ b/npm/scripts/validate-versions.ts @@ -1,7 +1,7 @@ -import { program } from 'commander'; -import fse from 'fs-extra'; -import * as path from 'path'; -import { log } from './utils/log'; +import { program } from "commander"; +import fse from "fs-extra"; +import * as path from "path"; +import { log } from "./utils/log"; let excludedPackages = []; @@ -12,29 +12,31 @@ let excludedPackages = []; function initCommander() { program.requiredOption( - '-v, --compareVersion ', - 'version to compare' + "-v, --compareVersion ", + "version to compare" ); - program.requiredOption('-p, --path ', 'NPM packages folder path'); + program.requiredOption("-p, --path ", "NPM packages folder path"); program.option( - '-ep, --excludedPackages ', - 'Packages that will not be checked. Can be passed with separeted comma (like @abp/utils,@abp/core)', - '' + "-ep, --excludedPackages ", + "Packages that will not be checked. Can be passed with separeted comma (like @abp/utils,@abp/core)", + "" ); program.parse(process.argv); - excludedPackages = program.opts().excludedPackages.split(','); + excludedPackages = program.opts().excludedPackages.split(","); } async function compare() { let { compareVersion, path: packagesPath } = program.opts(); packagesPath = path.resolve(packagesPath); + const packageFolders = await fse.readdir(packagesPath); for (let i = 0; i < packageFolders.length; i++) { const folder = packageFolders[i]; const pkgJsonPath = `${packagesPath}/${folder}/package.json`; let pkgJson; + try { pkgJson = await fse.readJSON(pkgJsonPath); } catch (error) {} @@ -46,11 +48,10 @@ async function compare() { throwError(pkgJsonPath, pkgJson.name, pkgJson.version); } - const { dependencies, peerDependencies } = pkgJson; - if (dependencies) await compareDependencies(dependencies, pkgJsonPath); - // if (peerDependencies) { // TODO: update peerDependencies while updating version - // await compareDependencies(peerDependencies, pkgJsonPath); - // } + const { dependencies } = pkgJson; + if (dependencies) { + await compareDependencies(dependencies, pkgJsonPath); + } } } @@ -66,6 +67,7 @@ async function compareDependencies( const packageName = entry[0]; const version = getCleanVersionName(entry[1]); const cleanCompareVersion = getCleanVersionName(compareVersion); + if ( !excludedPackages.includes(entry[0]) && packageName.match(/@(abp|volo)/)?.length && @@ -79,11 +81,13 @@ async function compareDependencies( function throwError(filePath: string, pkg: string, version?: string) { const { compareVersion } = program.opts(); - log.error(`${filePath}: ${pkg} version is not ${compareVersion}. it is ${version}`); + log.error( + `${filePath}: ${pkg} version is not ${compareVersion}. it is ${version}` + ); process.exit(1); } function getCleanVersionName(version) { // Remove caret (^) or tilde (~) from the beginning of the version number - return version.replace(/^[\^~]+/, ''); -} \ No newline at end of file + return version.replace(/^[\^~]+/, ""); +}