|
| 1 | +import { $, Glob } from "bun" |
| 2 | +import { readFile, writeFile } from "fs/promises" |
| 3 | +import { semver } from "bun" |
| 4 | +import { load, dump } from "js-yaml" |
| 5 | + |
| 6 | +const branch = (await $`git rev-parse --abbrev-ref HEAD`.text()).trim(); |
| 7 | + |
| 8 | +if (branch !== "main") { |
| 9 | + console.error("Release is only allowed from main branch"); |
| 10 | + process.exit(1); |
| 11 | +} |
| 12 | + |
| 13 | +const newVersion = process.argv[2]; |
| 14 | +if (!newVersion) { |
| 15 | + console.error("Version is required"); |
| 16 | + process.exit(1); |
| 17 | +} |
| 18 | + |
| 19 | +const packagesGlob = new Glob("{**,*,.}/{*,.}/package.json"); |
| 20 | + |
| 21 | +console.info('patching all js packages to', newVersion); |
| 22 | +for await (const p of packagesGlob.scan()) { |
| 23 | + if (p.includes("node_modules")) continue; |
| 24 | + const data = JSON.parse(await readFile(p, "utf-8")); |
| 25 | + const version = data.version || "0.0.0"; |
| 26 | + const name = data.name; |
| 27 | + const diff = semver.order(newVersion, version); |
| 28 | + if (!diff) { |
| 29 | + console.log('no change for', `${name}@${version},`, "semver diff:", diff); |
| 30 | + continue |
| 31 | + } |
| 32 | + console.log(`patching ${name}@${version} -> ${name}@${newVersion}`); |
| 33 | + data.version = newVersion; |
| 34 | + await writeFile(p, JSON.stringify(data, null, 2)); |
| 35 | + await $`git add ${p}`; |
| 36 | +} |
| 37 | + |
| 38 | +console.log('patching home assistant add-ons to', newVersion); |
| 39 | +const addonsGlob = new Glob("{server}/config.{yml,yaml}"); |
| 40 | +for await (const p of addonsGlob.scan()) { |
| 41 | + const data = load(await readFile(p, "utf-8")) as any; |
| 42 | + const version = data.version || "0.0.0"; |
| 43 | + const name = data.name; |
| 44 | + const diff = semver.order(newVersion, version); |
| 45 | + if (!diff) { |
| 46 | + console.log('no change for', `${name}@${version},`, "semver diff:", diff); |
| 47 | + continue |
| 48 | + } |
| 49 | + |
| 50 | + console.log(`patching ${name}@${version} -> ${name}@${newVersion}`); |
| 51 | + data.version = newVersion; |
| 52 | + await writeFile(p, dump(data)); |
| 53 | + await $`git add ${p}`; |
| 54 | +} |
| 55 | + |
| 56 | +console.log('installing dependencies to update lock files'); |
| 57 | +await $`bun install`; |
| 58 | + |
| 59 | +console.log('committing changes'); |
| 60 | +await $`git commit -m "${newVersion}"`; |
| 61 | +await $`git tag -a ${newVersion}`; |
| 62 | +await $`git push origin main --tags`; |
0 commit comments