mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-25 18:02:04 +00:00
update bump.js (#6774)
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
This commit is contained in:
parent
4c8580c3ae
commit
48c840f631
@ -4,97 +4,46 @@ const repo = '@hcengineering'
|
|||||||
|
|
||||||
const packages = {}
|
const packages = {}
|
||||||
const pathes = {}
|
const pathes = {}
|
||||||
const shouldPublishPackages = new Set()
|
|
||||||
const packageDependencies = {}
|
|
||||||
const bumpedPackages = new Set()
|
|
||||||
const jsons = {}
|
const jsons = {}
|
||||||
const updatedPackages = new Set()
|
|
||||||
|
|
||||||
function fillPackages (config) {
|
function fillPackages (config) {
|
||||||
for (const package of config.projects) {
|
for (const package of config.projects) {
|
||||||
|
if (!package.name.startsWith(repo)) continue
|
||||||
|
|
||||||
packages[package.name] = {
|
packages[package.name] = {
|
||||||
version: package.version,
|
version: package.version,
|
||||||
path: package.path,
|
path: package.path
|
||||||
shouldPublish: package.shouldPublish
|
|
||||||
}
|
|
||||||
if (package.shouldPublish) {
|
|
||||||
shouldPublishPackages.add(package.name)
|
|
||||||
}
|
}
|
||||||
pathes[package.path] = package.name
|
pathes[package.path] = package.name
|
||||||
|
|
||||||
|
const file = package.path + '/package.json'
|
||||||
|
const raw = fs.readFileSync(file)
|
||||||
|
jsons[package.name] = JSON.parse(raw)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getChangedPackages (changedFiles) {
|
function bumpPackage (name, newVersion) {
|
||||||
let changedPackages = []
|
const json = jsons[name]
|
||||||
for (const changedFile of changedFiles) {
|
|
||||||
const filePath = changedFile.split('/')
|
|
||||||
const changedFileRoot = `${filePath[0]}/${filePath[1]}`
|
|
||||||
const changedPackage = pathes[changedFileRoot]
|
|
||||||
if (changedPackage !== undefined && !changedPackages.includes(changedPackage)) {
|
|
||||||
changedPackages.push(changedPackage)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return changedPackages
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildDependencyTree () {
|
json.version = newVersion
|
||||||
for (const name in packages) {
|
if (typeof json.dependencies === 'object') {
|
||||||
const package = packages[name]
|
for (const [dependency] of Object.entries(json.dependencies)) {
|
||||||
const file = package.path + '/package.json'
|
if (packages[dependency] !== undefined) {
|
||||||
const raw = fs.readFileSync(file)
|
json.dependencies[dependency] = `^${newVersion}`
|
||||||
const json = JSON.parse(raw)
|
|
||||||
jsons[name] = json
|
|
||||||
const dependencies = json.dependencies
|
|
||||||
for (const dependency in dependencies) {
|
|
||||||
if (dependency.startsWith(repo)) {
|
|
||||||
const set = packageDependencies[dependency] ?? new Set()
|
|
||||||
set.add(name)
|
|
||||||
packageDependencies[dependency] = set
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNewVersion (json) {
|
function shouldPublish (name) {
|
||||||
const version = json.version.split('.')
|
const json = jsons[name]
|
||||||
const patch = version[2]
|
return json !== undefined && json.repository !== undefined
|
||||||
const newPatch = Number(patch) + 1
|
|
||||||
return `${version[0]}.${version[1]}.${newPatch}`
|
|
||||||
}
|
|
||||||
|
|
||||||
function isNeedBump (name) {
|
|
||||||
if (shouldPublishPackages.has(name)) return true
|
|
||||||
for (const dependency in packageDependencies[name] ?? []) {
|
|
||||||
const res = isNeedBump(dependency)
|
|
||||||
if (res) return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
function bumpPackage (name, dependency, depVersion) {
|
|
||||||
let json = jsons[name]
|
|
||||||
if (!bumpedPackages.has(name) && isNeedBump(name)) {
|
|
||||||
const newVersion = getNewVersion(json)
|
|
||||||
json.version = newVersion
|
|
||||||
bumpedPackages.add(name)
|
|
||||||
updatedPackages.add(name)
|
|
||||||
}
|
|
||||||
if (dependency !== undefined && depVersion !== undefined) {
|
|
||||||
if (json.dependencies[dependency] !== `^${depVersion}`) {
|
|
||||||
json.dependencies[dependency] = `^${depVersion}`
|
|
||||||
updatedPackages.add(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (bumpedPackages.has(name)) {
|
|
||||||
for (const dep of packageDependencies[name] ?? []) {
|
|
||||||
bumpPackage(dep, name, json.version)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function publish (name) {
|
function publish (name) {
|
||||||
const package = packages[name]
|
const package = packages[name]
|
||||||
try {
|
try {
|
||||||
|
console.log('publishing', name)
|
||||||
execSync(`cd ${package.path} && npm publish && cd ../..`, { encoding: 'utf-8' })
|
execSync(`cd ${package.path} && npm publish && cd ../..`, { encoding: 'utf-8' })
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
@ -104,39 +53,37 @@ function publish (name) {
|
|||||||
function main () {
|
function main () {
|
||||||
const args = process.argv
|
const args = process.argv
|
||||||
|
|
||||||
|
const version = args[2]
|
||||||
|
if (version === undefined || version === '') {
|
||||||
|
console.log('usage: node bump.js <version>')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('bump version ...', version)
|
||||||
|
|
||||||
const config = JSON.parse(execSync('rush list -p --json', { encoding: 'utf-8' }))
|
const config = JSON.parse(execSync('rush list -p --json', { encoding: 'utf-8' }))
|
||||||
|
|
||||||
fillPackages(config)
|
fillPackages(config)
|
||||||
buildDependencyTree()
|
|
||||||
|
|
||||||
let changedPackages = []
|
const packageNames = Object.keys(packages)
|
||||||
if (args[2] === '-p') {
|
for (const packageName of packageNames) {
|
||||||
changedPackages = args[3].split(',').map((p) => `${repo}/${p}`)
|
bumpPackage(packageName, version)
|
||||||
} else if (args[2] === '-all') {
|
|
||||||
changedPackages = Object.keys(packages)
|
|
||||||
} else {
|
|
||||||
const tag = execSync(`git describe --tags --abbrev=0`, { encoding: 'utf-8' })
|
|
||||||
const diff = execSync(`git diff ${tag} --name-only --diff-filter=ACMR | sed 's| |\\ |g\'`, { encoding: 'utf-8' })
|
|
||||||
const changedFiles = diff.split('\n')
|
|
||||||
changedPackages = getChangedPackages(changedFiles)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const packageName of changedPackages) {
|
for (const packageName of packageNames) {
|
||||||
bumpPackage(packageName)
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const packageName of updatedPackages) {
|
|
||||||
const package = packages[packageName]
|
const package = packages[packageName]
|
||||||
const file = package.path + '/package.json'
|
const file = package.path + '/package.json'
|
||||||
const res = JSON.stringify(jsons[packageName], undefined, 2)
|
const res = JSON.stringify(jsons[packageName], undefined, 2)
|
||||||
fs.writeFileSync(file, res + '\n')
|
fs.writeFileSync(file, res + '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const packageName of bumpedPackages) {
|
for (const packageName of packageNames) {
|
||||||
if (shouldPublishPackages.has(packageName)) {
|
if (shouldPublish(packageName)) {
|
||||||
publish(packageName)
|
publish(packageName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('... done')
|
||||||
}
|
}
|
||||||
|
|
||||||
main ()
|
main ()
|
||||||
|
Loading…
Reference in New Issue
Block a user