aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.zig1
-rw-r--r--src/__global.zig11
-rw-r--r--src/cli.zig11
-rw-r--r--test/cli/bun.test.ts27
4 files changed, 49 insertions, 1 deletions
diff --git a/build.zig b/build.zig
index 4a20d8481..7d08b8993 100644
--- a/build.zig
+++ b/build.zig
@@ -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-]+)*))?$",
+ ),
+ );
+ });
+ });
});