mtcute/scripts/bump-version.js

86 lines
2.5 KiB
JavaScript
Raw Normal View History

2024-08-12 09:19:45 +03:00
import { appendFileSync, readdirSync, readFileSync, writeFileSync } from 'fs'
import { EOL } from 'os'
import { dirname, join } from 'path'
import { inc, rcompare } from 'semver'
import { fileURLToPath } from 'url'
const __dirname = dirname(new URL(import.meta.url).pathname)
2023-10-31 21:17:39 +03:00
function collectPackageJsons() {
2024-08-12 09:19:45 +03:00
return readdirSync(join(__dirname, '../packages'))
2023-10-31 21:17:39 +03:00
.filter((s) => !s.startsWith('.'))
.map((name) => {
try {
2024-08-12 09:19:45 +03:00
return JSON.parse(readFileSync(join(__dirname, '../packages', name, 'package.json'), 'utf-8'))
2023-10-31 21:17:39 +03:00
} catch (e) {
if (e.code !== 'ENOENT') throw e
return null
}
})
.filter(Boolean)
}
function bumpVersions(packages, kind) {
const pkgJsons = collectPackageJsons()
const maxVersion = pkgJsons
.filter((it) => it.name !== '@mtcute/tl')
.map((it) => it.version)
2024-08-12 09:19:45 +03:00
.sort(rcompare)[0]
2023-10-31 21:17:39 +03:00
2024-08-12 09:19:45 +03:00
const nextVersion = inc(maxVersion, kind)
2023-10-31 21:17:39 +03:00
console.log('[i] Bumping versions to %s', nextVersion)
for (const pkg of packages) {
if (pkg === 'tl') continue // own versioning
2023-10-31 21:17:39 +03:00
const pkgJson = pkgJsons.find((it) => it.name === `@mtcute/${pkg}`)
if (!pkgJson) {
console.error(`Package ${pkg} not found!`)
process.exit(1)
}
pkgJson.version = nextVersion
2024-08-12 09:19:45 +03:00
writeFileSync(
join(__dirname, '../packages', pkg, 'package.json'),
2023-10-31 21:17:39 +03:00
JSON.stringify(pkgJson, null, 4) + '\n',
)
}
2024-08-12 09:19:45 +03:00
const rootPkgJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'))
2023-10-31 21:17:39 +03:00
rootPkgJson.version = nextVersion
2024-08-12 09:19:45 +03:00
writeFileSync(join(__dirname, '../package.json'), JSON.stringify(rootPkgJson, null, 4) + '\n')
2023-10-31 21:17:39 +03:00
return nextVersion
}
2024-08-12 09:19:45 +03:00
if (process.argv[1] === fileURLToPath(import.meta.url)) {
2023-10-31 21:17:39 +03:00
const kind = process.argv[2]
const packages = process.argv[3]
if (!packages || !kind) {
console.log('Usage: bump-version.js <major|minor|patch> <package1,package2>')
process.exit(1)
}
const packagesList = packages.split(',')
if (packagesList.length === 0) {
console.error('No packages specified!')
process.exit(1)
}
if (kind === 'major' && packagesList.length !== collectPackageJsons().length) {
console.error('Cannot bump major version only for some packages!')
process.exit(1)
}
const ver = bumpVersions(packagesList, kind)
if (process.env.GITHUB_OUTPUT) {
2024-08-12 09:19:45 +03:00
appendFileSync(process.env.GITHUB_OUTPUT, `version=${ver}${EOL}`)
2023-10-31 21:17:39 +03:00
}
}
2024-08-12 09:19:45 +03:00
export { bumpVersions }