diff options
-rw-r--r-- | build.zig | 1 | ||||
-rw-r--r-- | src/__global.zig | 11 | ||||
-rw-r--r-- | src/cli.zig | 11 | ||||
-rw-r--r-- | test/cli/bun.test.ts | 27 |
4 files changed, 49 insertions, 1 deletions
@@ -218,7 +218,6 @@ pub fn build(b: *Build) !void { .argv = &.{ "git", "rev-parse", - "--short", "HEAD", }, .cwd = b.pathFromRoot("."), diff --git a/src/__global.zig b/src/__global.zig index 9a33fff37..b581639e6 100644 --- a/src/__global.zig +++ b/src/__global.zig @@ -28,6 +28,17 @@ else if (Environment.isDebug) else std.fmt.comptimePrint("{s} ({s})", .{ version_string, Environment.git_sha[0..@min(Environment.git_sha.len, 8)] }); +pub const package_json_version_with_revision = if (Environment.git_sha.len == 0) + package_json_version +else if (Environment.isDebug) + std.fmt.comptimePrint(BASE_VERSION ++ ".{d}-debug+{s}", .{ build_id, Environment.git_sha }) +else if (Environment.is_canary) + std.fmt.comptimePrint(BASE_VERSION ++ ".{d}-canary+{s}", .{ build_id, Environment.git_sha }) +else if (Environment.isTest) + std.fmt.comptimePrint(BASE_VERSION ++ ".{d}-test+{s}", .{ build_id, Environment.git_sha }) +else + std.fmt.comptimePrint(BASE_VERSION ++ ".{d}+{s}", .{ build_id, Environment.git_sha }); + pub const os_name = if (Environment.isWindows) "win32" else if (Environment.isMac) diff --git a/src/cli.zig b/src/cli.zig index 04f01053a..3400a70f4 100644 --- a/src/cli.zig +++ b/src/cli.zig @@ -148,6 +148,7 @@ pub const Arguments = struct { clap.parseParam("--main-fields <STR>... Main fields to lookup in package.json. Defaults to --target dependent") catch unreachable, clap.parseParam("--no-summary Don't print a summary (when generating .bun)") catch unreachable, clap.parseParam("-v, --version Print version and exit") catch unreachable, + clap.parseParam("--revision Print version with revision and exit") catch unreachable, clap.parseParam("--tsconfig-override <STR> Load tsconfig from path instead of cwd/tsconfig.json") catch unreachable, clap.parseParam("-d, --define <STR>... Substitute K:V while parsing, e.g. --define process.env.NODE_ENV:\"development\". Values are parsed as JSON.") catch unreachable, clap.parseParam("-e, --external <STR>... Exclude module from transpilation (can use * wildcards). ex: -e react") catch unreachable, @@ -234,6 +235,12 @@ pub const Arguments = struct { Global.exit(0); } + fn printRevisionAndExit() noreturn { + @setCold(true); + Output.writer().writeAll(Global.package_json_version_with_revision ++ "\n") catch {}; + Global.exit(0); + } + pub fn loadConfigPath(allocator: std.mem.Allocator, auto_loaded: bool, config_path: [:0]const u8, ctx: *Command.Context, comptime cmd: Command.Tag) !void { var config_file = std.fs.File{ .handle = std.os.openZ(config_path, std.os.O.RDONLY, 0) catch |err| { @@ -365,6 +372,10 @@ pub const Arguments = struct { printVersionAndExit(); } + if (args.flag("--revision")) { + printRevisionAndExit(); + } + var cwd: []u8 = undefined; if (args.option("--cwd")) |cwd_| { cwd = brk: { diff --git a/test/cli/bun.test.ts b/test/cli/bun.test.ts index 97ea52ecd..8bb3ca744 100644 --- a/test/cli/bun.test.ts +++ b/test/cli/bun.test.ts @@ -32,4 +32,31 @@ describe("bun", () => { }); } }); + + describe("revision", () => { + test("revision generates version numbers correctly", () => { + var { stdout, exitCode } = Bun.spawnSync({ + cmd: [bunExe(), "--version"], + env: {}, + stderr: "inherit", + }); + var version = stdout.toString().trim(); + + var { stdout, exitCode } = Bun.spawnSync({ + cmd: [bunExe(), "--revision"], + env: {}, + stderr: "inherit", + }); + var revision = stdout.toString().trim(); + + expect(exitCode).toBe(0); + expect(revision).toStartWith(version); + // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string + expect(revision).toMatch( + new RegExp( + "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + ), + ); + }); + }); }); |