opentelemetry-js/scripts/get-version.js

56 lines
1.7 KiB
JavaScript

/**
* This extracts the first version of a non-private package in a directory if the provided path is a directory
* OR the version inside the `package.json` the provided path is a file.
*
* Usage (from project root):
* - node scripts/get-version.js [PATH TO DIRECTORY | PATH TO FILE]
* Examples:
* - node scripts/get-version.js ./experimental/packages/
* - node scripts/get-version.js ./api/package.json
*/
const fs = require('fs');
const path = require('path');
function extractVersionFromPackageJson(packageJsonPath){
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
if(packageJson.private === true || packageJson.private === 'true'){
console.warn('Skipping version from private package at', packageJsonPath);
return undefined;
}
if(packageJson.version == null){
console.warn('Version in', packageJsonPath, 'was null or undefined, skipping');
return undefined;
}
return packageJson.version;
}
function findFirstPackageVersion(basePath){
const packageDirs = fs.readdirSync(basePath);
for(const packageDir of packageDirs){
const packageJsonPath = path.join(basePath, packageDir, 'package.json');
try {
const version = extractVersionFromPackageJson(packageJsonPath)
if(version != null){
return version;
}
} catch (err) {
console.warn('Could not get package JSON', packageJsonPath, err);
}
}
throw new Error('Unable to extract version from packages in ' + basePath);
}
function determineVersion(path){
if(fs.lstatSync(path).isDirectory()) {
return findFirstPackageVersion(path);
}
return extractVersionFromPackageJson(path);
}
console.log(determineVersion(process.argv[2]));