build: added script for bumping version with dependencies
This commit is contained in:
parent
967c10b25c
commit
1a60b39214
6 changed files with 153 additions and 39 deletions
|
@ -35,6 +35,7 @@
|
|||
"nyc": "^15.1.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"dotenv-flow": "^3.2.0",
|
||||
"glob": "^8.0.1"
|
||||
"glob": "^8.0.1",
|
||||
"semver": "^7.3.7"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
"dependencies": {
|
||||
"@types/node": "^15.12.1",
|
||||
"@types/events": "^3.0.0",
|
||||
"@types/long": "^4.0.2",
|
||||
"@mtcute/tl": "workspace:143.0.0",
|
||||
"@mtcute/tl-runtime": "workspace:^1.0.0",
|
||||
"big-integer": "1.6.48",
|
||||
|
@ -28,7 +29,6 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@types/ws": "^7.4.1",
|
||||
"@types/long": "^4.0.2",
|
||||
"ws": "^7.4.4"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ import {
|
|||
getCachedDocumentation,
|
||||
} from './documentation'
|
||||
import { packTlSchema } from './schema'
|
||||
import { bumpVersion } from '../../../scripts/version'
|
||||
|
||||
const README_MD_FILE = join(__dirname, '../README.md')
|
||||
const PACKAGE_JSON_FILE = join(__dirname, '../package.json')
|
||||
|
@ -144,36 +145,7 @@ async function updatePackageVersion(
|
|||
packageJson.version = versionStr
|
||||
await writeFile(PACKAGE_JSON_FILE, JSON.stringify(packageJson, null, 4))
|
||||
|
||||
console.log('Updating dependant packages...')
|
||||
|
||||
for (const dir of await readdir(PACKAGES_DIR, { withFileTypes: true })) {
|
||||
if (!dir.isDirectory()) continue
|
||||
|
||||
const pkgFile = join(PACKAGES_DIR, dir.name, 'package.json')
|
||||
|
||||
let pkg
|
||||
try {
|
||||
pkg = JSON.parse(await readFile(pkgFile, 'utf8'))
|
||||
} catch (e: any) {
|
||||
if (e.code === 'ENOENT') continue
|
||||
throw e
|
||||
}
|
||||
|
||||
if (pkg.dependencies && '@mtcute/tl' in pkg.dependencies) {
|
||||
pkg.dependencies['@mtcute/tl'] = 'workspace:' + versionStr
|
||||
}
|
||||
|
||||
if (pkg.devDependencies && '@mtcute/tl' in pkg.devDependencies) {
|
||||
pkg.devDependencies['@mtcute/tl'] = 'workspace:' + versionStr
|
||||
}
|
||||
|
||||
await writeFile(pkgFile, JSON.stringify(pkg, null, 4) + '\n')
|
||||
}
|
||||
|
||||
// because i am fucking dumb and have adhd and always forget it lol
|
||||
console.log(
|
||||
'Done! Please make sure packages compile before committing and pushing'
|
||||
)
|
||||
bumpVersion('tl', versionStr)
|
||||
}
|
||||
|
||||
async function overrideInt53(schema: TlFullSchema): Promise<void> {
|
||||
|
|
|
@ -22,6 +22,7 @@ importers:
|
|||
nyc: ^15.1.0
|
||||
prettier: ^2.6.2
|
||||
rimraf: ^3.0.2
|
||||
semver: ^7.3.7
|
||||
ts-node: ^10.7.0
|
||||
typedoc: ^0.22.15
|
||||
typescript: ^4.6.4
|
||||
|
@ -45,6 +46,7 @@ importers:
|
|||
nyc: 15.1.0
|
||||
prettier: 2.6.2
|
||||
rimraf: 3.0.2
|
||||
semver: 7.3.7
|
||||
ts-node: 10.7.0_mocf6w6juzjyi26vrxr4oqpfq4
|
||||
typedoc: 0.22.15_typescript@4.6.4
|
||||
typescript: 4.6.4
|
||||
|
@ -53,7 +55,7 @@ importers:
|
|||
specifiers:
|
||||
'@mtcute/core': workspace:^1.0.0
|
||||
'@mtcute/file-id': workspace:^1.0.0
|
||||
'@mtcute/tl': workspace:142.0.0
|
||||
'@mtcute/tl': workspace:143.0.0
|
||||
'@types/long': ^4.0.1
|
||||
'@types/node': ^15.12.1
|
||||
eager-async-pool: ^1.0.0
|
||||
|
@ -71,7 +73,7 @@ importers:
|
|||
|
||||
packages/core:
|
||||
specifiers:
|
||||
'@mtcute/tl': workspace:142.0.0
|
||||
'@mtcute/tl': workspace:143.0.0
|
||||
'@mtcute/tl-runtime': workspace:^1.0.0
|
||||
'@types/events': ^3.0.0
|
||||
'@types/long': ^4.0.2
|
||||
|
@ -85,12 +87,12 @@ importers:
|
|||
'@mtcute/tl': link:../tl
|
||||
'@mtcute/tl-runtime': link:../tl-runtime
|
||||
'@types/events': 3.0.0
|
||||
'@types/long': 4.0.2
|
||||
'@types/node': 15.14.9
|
||||
big-integer: 1.6.48
|
||||
events: 3.2.0
|
||||
long: 4.0.0
|
||||
devDependencies:
|
||||
'@types/long': 4.0.2
|
||||
'@types/ws': 7.4.7
|
||||
ws: 7.5.7
|
||||
|
||||
|
@ -107,7 +109,7 @@ importers:
|
|||
specifiers:
|
||||
'@mtcute/client': workspace:^1.0.0
|
||||
'@mtcute/core': workspace:^1.0.0
|
||||
'@mtcute/tl': workspace:142.0.0
|
||||
'@mtcute/tl': workspace:143.0.0
|
||||
events: ^3.2.0
|
||||
dependencies:
|
||||
'@mtcute/client': link:../client
|
||||
|
@ -118,7 +120,7 @@ importers:
|
|||
packages/file-id:
|
||||
specifiers:
|
||||
'@mtcute/core': workspace:^1.0.0
|
||||
'@mtcute/tl': workspace:142.0.0
|
||||
'@mtcute/tl': workspace:143.0.0
|
||||
'@mtcute/tl-runtime': workspace:^1.0.0
|
||||
'@types/long': ^4.0.1
|
||||
long: ^4.0.0
|
||||
|
@ -133,7 +135,7 @@ importers:
|
|||
packages/html-parser:
|
||||
specifiers:
|
||||
'@mtcute/client': workspace:^1.0.0
|
||||
'@mtcute/tl': workspace:142.0.0
|
||||
'@mtcute/tl': workspace:143.0.0
|
||||
'@types/long': ^4.0.1
|
||||
htmlparser2: ^6.0.1
|
||||
long: ^4.0.0
|
||||
|
@ -154,7 +156,7 @@ importers:
|
|||
packages/markdown-parser:
|
||||
specifiers:
|
||||
'@mtcute/client': workspace:^1.0.0
|
||||
'@mtcute/tl': workspace:142.0.0
|
||||
'@mtcute/tl': workspace:143.0.0
|
||||
'@types/long': ^4.0.1
|
||||
long: ^4.0.0
|
||||
dependencies:
|
||||
|
@ -426,6 +428,8 @@ packages:
|
|||
resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/types': 7.17.0
|
||||
dev: true
|
||||
|
||||
/@babel/template/7.16.7:
|
||||
|
@ -1084,6 +1088,8 @@ packages:
|
|||
ssri: 9.0.0
|
||||
tar: 6.1.11
|
||||
unique-filename: 1.1.1
|
||||
transitivePeerDependencies:
|
||||
- bluebird
|
||||
dev: false
|
||||
|
||||
/caching-transform/4.0.0:
|
||||
|
@ -2352,6 +2358,7 @@ packages:
|
|||
socks-proxy-agent: 6.2.0
|
||||
ssri: 9.0.0
|
||||
transitivePeerDependencies:
|
||||
- bluebird
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
|
@ -2572,6 +2579,7 @@ packages:
|
|||
tar: 6.1.11
|
||||
which: 2.0.2
|
||||
transitivePeerDependencies:
|
||||
- bluebird
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
|
@ -2864,6 +2872,11 @@ packages:
|
|||
|
||||
/promise-inflight/1.0.1:
|
||||
resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=}
|
||||
peerDependencies:
|
||||
bluebird: '*'
|
||||
peerDependenciesMeta:
|
||||
bluebird:
|
||||
optional: true
|
||||
dev: false
|
||||
|
||||
/promise-retry/2.0.1:
|
||||
|
|
1
scripts/version.d.ts
vendored
Normal file
1
scripts/version.d.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
export declare function bumpVersion(packageName: string, version: string): void
|
127
scripts/version.js
Normal file
127
scripts/version.js
Normal file
|
@ -0,0 +1,127 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const semver = require('semver')
|
||||
|
||||
function bumpVersion(packageName, version) {
|
||||
const packageJsons = fs
|
||||
.readdirSync(path.join(__dirname, '../packages'))
|
||||
.filter((s) => !s.startsWith('.'))
|
||||
.map((name) => {
|
||||
try {
|
||||
return JSON.parse(
|
||||
fs.readFileSync(
|
||||
path.join(__dirname, '../packages', name, 'package.json'),
|
||||
'utf-8'
|
||||
)
|
||||
)
|
||||
} catch (e) {
|
||||
if (e.code !== 'ENOENT') throw e
|
||||
return null
|
||||
}
|
||||
})
|
||||
.filter(Boolean)
|
||||
const packageJsonChanged = new Set()
|
||||
|
||||
// i am pretty fucking sure there is a better way to do this, but whatever
|
||||
// im tired as fuck and hadnt had sleep for a while
|
||||
|
||||
const newVersions = { [packageName]: version }
|
||||
let hadChanges = true
|
||||
while (hadChanges) {
|
||||
hadChanges = false
|
||||
|
||||
packageJsons.forEach((json) => {
|
||||
if (!json.name.startsWith('@mtcute/')) return
|
||||
const pkgName = json.name.slice(8)
|
||||
|
||||
function check(deps) {
|
||||
if (!deps) return
|
||||
|
||||
Object.keys(deps).forEach((depName) => {
|
||||
if (!depName.startsWith('@mtcute/')) return
|
||||
|
||||
const depVersionRange = deps[depName].replace(/^workspace:/, '')
|
||||
depName = depName.slice(8)
|
||||
|
||||
if (
|
||||
newVersions[depName] &&
|
||||
!newVersions[pkgName] &&
|
||||
!semver.satisfies(newVersions[depName], depVersionRange)
|
||||
) {
|
||||
newVersions[pkgName] = semver.inc(json.version, 'patch')
|
||||
hadChanges = true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
check(json.dependencies)
|
||||
check(json.devDependencies)
|
||||
check(json.peerDependencies)
|
||||
check(json.optionalDependencies)
|
||||
})
|
||||
}
|
||||
|
||||
Object.keys(newVersions).forEach((pkgName) => {
|
||||
packageJsonChanged.add(pkgName)
|
||||
|
||||
const version = newVersions[pkgName]
|
||||
console.log(`updated ${pkgName} to ${version}`)
|
||||
|
||||
for (const json of packageJsons) {
|
||||
if (json.name === `@mtcute/${pkgName}`) continue
|
||||
|
||||
function updateDependencies(obj) {
|
||||
if (!obj) return
|
||||
Object.keys(obj).forEach((depName) => {
|
||||
if (!depName.startsWith('@mtcute/')) return
|
||||
|
||||
const depVersionRange = obj[depName].replace(/^workspace:/, '')
|
||||
depName = depName.slice(8)
|
||||
|
||||
if (
|
||||
depName === pkgName &&
|
||||
!semver.satisfies(version, depVersionRange)
|
||||
) {
|
||||
obj[depName] = `workspace:^${version}`
|
||||
console.log(` - updated dependency ${depName} at ${json.name}`)
|
||||
packageJsonChanged.add(json.name.slice(8))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
updateDependencies(json.dependencies)
|
||||
updateDependencies(json.devDependencies)
|
||||
updateDependencies(json.peerDependencies)
|
||||
updateDependencies(json.optionalDependencies)
|
||||
}
|
||||
})
|
||||
|
||||
console.log('changed package.json in:', packageJsonChanged)
|
||||
|
||||
packageJsonChanged.forEach((name) => {
|
||||
const json = packageJsons.find((json) => json.name === `@mtcute/${name}`)
|
||||
if (!json) return
|
||||
|
||||
fs.writeFileSync(
|
||||
path.join(__dirname, '../packages', name, 'package.json'),
|
||||
JSON.stringify(json, null, 4)
|
||||
)
|
||||
})
|
||||
|
||||
console.log('Done!')
|
||||
// because i am fucking dumb and have adhd and always forget it lol
|
||||
console.log('Now run `pnpm i` and make sure everything compiles.')
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
const packageName = process.argv[2]
|
||||
const version = process.argv[3]
|
||||
if (!packageName || !version) {
|
||||
console.log('Usage: version.js <packageName> <version>')
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
bumpVersion(packageName, version)
|
||||
}
|
||||
|
||||
module.exports = { bumpVersion }
|
Loading…
Reference in a new issue