build: added script for bumping version with dependencies

This commit is contained in:
teidesu 2022-06-29 22:00:34 +03:00
parent 967c10b25c
commit 1a60b39214
6 changed files with 153 additions and 39 deletions

View file

@ -35,6 +35,7 @@
"nyc": "^15.1.0", "nyc": "^15.1.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"dotenv-flow": "^3.2.0", "dotenv-flow": "^3.2.0",
"glob": "^8.0.1" "glob": "^8.0.1",
"semver": "^7.3.7"
} }
} }

View file

@ -20,6 +20,7 @@
"dependencies": { "dependencies": {
"@types/node": "^15.12.1", "@types/node": "^15.12.1",
"@types/events": "^3.0.0", "@types/events": "^3.0.0",
"@types/long": "^4.0.2",
"@mtcute/tl": "workspace:143.0.0", "@mtcute/tl": "workspace:143.0.0",
"@mtcute/tl-runtime": "workspace:^1.0.0", "@mtcute/tl-runtime": "workspace:^1.0.0",
"big-integer": "1.6.48", "big-integer": "1.6.48",
@ -28,7 +29,6 @@
}, },
"devDependencies": { "devDependencies": {
"@types/ws": "^7.4.1", "@types/ws": "^7.4.1",
"@types/long": "^4.0.2",
"ws": "^7.4.4" "ws": "^7.4.4"
} }
} }

View file

@ -28,6 +28,7 @@ import {
getCachedDocumentation, getCachedDocumentation,
} from './documentation' } from './documentation'
import { packTlSchema } from './schema' import { packTlSchema } from './schema'
import { bumpVersion } from '../../../scripts/version'
const README_MD_FILE = join(__dirname, '../README.md') const README_MD_FILE = join(__dirname, '../README.md')
const PACKAGE_JSON_FILE = join(__dirname, '../package.json') const PACKAGE_JSON_FILE = join(__dirname, '../package.json')
@ -144,36 +145,7 @@ async function updatePackageVersion(
packageJson.version = versionStr packageJson.version = versionStr
await writeFile(PACKAGE_JSON_FILE, JSON.stringify(packageJson, null, 4)) await writeFile(PACKAGE_JSON_FILE, JSON.stringify(packageJson, null, 4))
console.log('Updating dependant packages...') bumpVersion('tl', versionStr)
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'
)
} }
async function overrideInt53(schema: TlFullSchema): Promise<void> { async function overrideInt53(schema: TlFullSchema): Promise<void> {

View file

@ -22,6 +22,7 @@ importers:
nyc: ^15.1.0 nyc: ^15.1.0
prettier: ^2.6.2 prettier: ^2.6.2
rimraf: ^3.0.2 rimraf: ^3.0.2
semver: ^7.3.7
ts-node: ^10.7.0 ts-node: ^10.7.0
typedoc: ^0.22.15 typedoc: ^0.22.15
typescript: ^4.6.4 typescript: ^4.6.4
@ -45,6 +46,7 @@ importers:
nyc: 15.1.0 nyc: 15.1.0
prettier: 2.6.2 prettier: 2.6.2
rimraf: 3.0.2 rimraf: 3.0.2
semver: 7.3.7
ts-node: 10.7.0_mocf6w6juzjyi26vrxr4oqpfq4 ts-node: 10.7.0_mocf6w6juzjyi26vrxr4oqpfq4
typedoc: 0.22.15_typescript@4.6.4 typedoc: 0.22.15_typescript@4.6.4
typescript: 4.6.4 typescript: 4.6.4
@ -53,7 +55,7 @@ importers:
specifiers: specifiers:
'@mtcute/core': workspace:^1.0.0 '@mtcute/core': workspace:^1.0.0
'@mtcute/file-id': 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/long': ^4.0.1
'@types/node': ^15.12.1 '@types/node': ^15.12.1
eager-async-pool: ^1.0.0 eager-async-pool: ^1.0.0
@ -71,7 +73,7 @@ importers:
packages/core: packages/core:
specifiers: specifiers:
'@mtcute/tl': workspace:142.0.0 '@mtcute/tl': workspace:143.0.0
'@mtcute/tl-runtime': workspace:^1.0.0 '@mtcute/tl-runtime': workspace:^1.0.0
'@types/events': ^3.0.0 '@types/events': ^3.0.0
'@types/long': ^4.0.2 '@types/long': ^4.0.2
@ -85,12 +87,12 @@ importers:
'@mtcute/tl': link:../tl '@mtcute/tl': link:../tl
'@mtcute/tl-runtime': link:../tl-runtime '@mtcute/tl-runtime': link:../tl-runtime
'@types/events': 3.0.0 '@types/events': 3.0.0
'@types/long': 4.0.2
'@types/node': 15.14.9 '@types/node': 15.14.9
big-integer: 1.6.48 big-integer: 1.6.48
events: 3.2.0 events: 3.2.0
long: 4.0.0 long: 4.0.0
devDependencies: devDependencies:
'@types/long': 4.0.2
'@types/ws': 7.4.7 '@types/ws': 7.4.7
ws: 7.5.7 ws: 7.5.7
@ -107,7 +109,7 @@ importers:
specifiers: specifiers:
'@mtcute/client': workspace:^1.0.0 '@mtcute/client': workspace:^1.0.0
'@mtcute/core': 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 events: ^3.2.0
dependencies: dependencies:
'@mtcute/client': link:../client '@mtcute/client': link:../client
@ -118,7 +120,7 @@ importers:
packages/file-id: packages/file-id:
specifiers: specifiers:
'@mtcute/core': workspace:^1.0.0 '@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 '@mtcute/tl-runtime': workspace:^1.0.0
'@types/long': ^4.0.1 '@types/long': ^4.0.1
long: ^4.0.0 long: ^4.0.0
@ -133,7 +135,7 @@ importers:
packages/html-parser: packages/html-parser:
specifiers: specifiers:
'@mtcute/client': workspace:^1.0.0 '@mtcute/client': workspace:^1.0.0
'@mtcute/tl': workspace:142.0.0 '@mtcute/tl': workspace:143.0.0
'@types/long': ^4.0.1 '@types/long': ^4.0.1
htmlparser2: ^6.0.1 htmlparser2: ^6.0.1
long: ^4.0.0 long: ^4.0.0
@ -154,7 +156,7 @@ importers:
packages/markdown-parser: packages/markdown-parser:
specifiers: specifiers:
'@mtcute/client': workspace:^1.0.0 '@mtcute/client': workspace:^1.0.0
'@mtcute/tl': workspace:142.0.0 '@mtcute/tl': workspace:143.0.0
'@types/long': ^4.0.1 '@types/long': ^4.0.1
long: ^4.0.0 long: ^4.0.0
dependencies: dependencies:
@ -426,6 +428,8 @@ packages:
resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==} resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
hasBin: true hasBin: true
dependencies:
'@babel/types': 7.17.0
dev: true dev: true
/@babel/template/7.16.7: /@babel/template/7.16.7:
@ -1084,6 +1088,8 @@ packages:
ssri: 9.0.0 ssri: 9.0.0
tar: 6.1.11 tar: 6.1.11
unique-filename: 1.1.1 unique-filename: 1.1.1
transitivePeerDependencies:
- bluebird
dev: false dev: false
/caching-transform/4.0.0: /caching-transform/4.0.0:
@ -2352,6 +2358,7 @@ packages:
socks-proxy-agent: 6.2.0 socks-proxy-agent: 6.2.0
ssri: 9.0.0 ssri: 9.0.0
transitivePeerDependencies: transitivePeerDependencies:
- bluebird
- supports-color - supports-color
dev: false dev: false
@ -2572,6 +2579,7 @@ packages:
tar: 6.1.11 tar: 6.1.11
which: 2.0.2 which: 2.0.2
transitivePeerDependencies: transitivePeerDependencies:
- bluebird
- supports-color - supports-color
dev: false dev: false
@ -2864,6 +2872,11 @@ packages:
/promise-inflight/1.0.1: /promise-inflight/1.0.1:
resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=} resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=}
peerDependencies:
bluebird: '*'
peerDependenciesMeta:
bluebird:
optional: true
dev: false dev: false
/promise-retry/2.0.1: /promise-retry/2.0.1:

1
scripts/version.d.ts vendored Normal file
View file

@ -0,0 +1 @@
export declare function bumpVersion(packageName: string, version: string): void

127
scripts/version.js Normal file
View 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 }