Buckets:
| import { rm } from "fs/promises" | |
| import path from "path" | |
| import { parseArgs } from "util" | |
| const root = path.resolve(import.meta.dir, "..") | |
| const file = path.join(root, "UPCOMING_CHANGELOG.md") | |
| const { values, positionals } = parseArgs({ | |
| args: Bun.argv.slice(2), | |
| options: { | |
| from: { type: "string", short: "f" }, | |
| to: { type: "string", short: "t" }, | |
| variant: { type: "string", default: "low" }, | |
| quiet: { type: "boolean", default: false }, | |
| print: { type: "boolean", default: false }, | |
| help: { type: "boolean", short: "h", default: false }, | |
| }, | |
| allowPositionals: true, | |
| }) | |
| const args = [...positionals] | |
| if (values.from) args.push("--from", values.from) | |
| if (values.to) args.push("--to", values.to) | |
| if (values.help) { | |
| console.log(` | |
| Usage: bun script/changelog.ts [options] | |
| Generates UPCOMING_CHANGELOG.md by running the opencode changelog command. | |
| Options: | |
| -f, --from <version> Starting version (default: latest non-draft GitHub release) | |
| -t, --to <ref> Ending ref (default: HEAD) | |
| --variant <name> Thinking variant for opencode run (default: low) | |
| --quiet Suppress opencode command output unless it fails | |
| --print Print the generated UPCOMING_CHANGELOG.md after success | |
| -h, --help Show this help message | |
| Examples: | |
| bun script/changelog.ts | |
| bun script/changelog.ts --from 1.0.200 | |
| bun script/changelog.ts -f 1.0.200 -t 1.0.205 | |
| `) | |
| process.exit(0) | |
| } | |
| await rm(file, { force: true }) | |
| const quiet = values.quiet | |
| const cmd = ["opencode", "run"] | |
| cmd.push("--variant", values.variant) | |
| cmd.push("--command", "changelog", "--", ...args) | |
| const proc = Bun.spawn(cmd, { | |
| cwd: root, | |
| stdin: "inherit", | |
| stdout: quiet ? "pipe" : "inherit", | |
| stderr: quiet ? "pipe" : "inherit", | |
| }) | |
| const [out, err] = quiet | |
| ? await Promise.all([new Response(proc.stdout).text(), new Response(proc.stderr).text()]) | |
| : ["", ""] | |
| const code = await proc.exited | |
| if (code === 0) { | |
| if (values.print) process.stdout.write(await Bun.file(file).text()) | |
| process.exit(0) | |
| } | |
| if (quiet) { | |
| if (out) process.stdout.write(out) | |
| if (err) process.stderr.write(err) | |
| } | |
| process.exit(code) | |
Xet Storage Details
- Size:
- 2.17 kB
- Xet hash:
- 67d76f5cc2d527270781748c8fd851f818c0406fba117991aa6f7c457620fefa
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.