diff options
-rw-r--r-- | src/cli/upgrade_command.zig | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/src/cli/upgrade_command.zig b/src/cli/upgrade_command.zig index 912dbe921..015563bad 100644 --- a/src/cli/upgrade_command.zig +++ b/src/cli/upgrade_command.zig @@ -87,6 +87,9 @@ pub const Version = struct { pub const folder_name = "bun-" ++ triplet ++ suffix; pub const zip_filename = folder_name ++ ".zip"; + pub const profile_folder_name = "bun-" ++ triplet ++ suffix ++ "-profile"; + pub const profile_zip_filename = profile_folder_name ++ ".zip"; + const current_version: string = "bun-v" ++ Global.package_json_version; pub fn isCurrent(this: Version) bool { @@ -117,7 +120,7 @@ pub const UpgradeCheckerThread = struct { js_ast.Expr.Data.Store.deinit(); js_ast.Stmt.Data.Store.deinit(); } - var version = (try UpgradeCommand.getLatestVersion(default_allocator, env_loader, undefined, undefined, true)) orelse return; + var version = (try UpgradeCommand.getLatestVersion(default_allocator, env_loader, undefined, undefined, false, true)) orelse return; if (!version.isCurrent()) { if (version.name()) |name| { @@ -151,6 +154,7 @@ pub const UpgradeCommand = struct { env_loader: *DotEnv.Loader, refresher: *std.Progress, progress: *std.Progress.Node, + use_profile: bool, comptime silent: bool, ) !?Version { var headers_buf: string = default_github_headers; @@ -324,23 +328,26 @@ pub const UpgradeCommand = struct { if (asset.asProperty("name")) |name_| { if (name_.expr.asString(allocator)) |name| { if (comptime Environment.isDebug) { - Output.prettyln("Comparing {s} vs {s}", .{ name, Version.zip_filename }); + const filename = if (!use_profile) Version.zip_filename else Version.profile_zip_filename; + Output.prettyln("Comparing {s} vs {s}", .{ name, filename }); + Output.flush(); + } + + if (!use_profile and !strings.eqlComptime(name, Version.zip_filename)) continue; + if (use_profile and !strings.eqlComptime(name, Version.profile_zip_filename)) continue; + + version.zip_url = (asset.asProperty("browser_download_url") orelse break :get_asset).expr.asString(allocator) orelse break :get_asset; + if (comptime Environment.isDebug) { + Output.prettyln("Found Zip {s}", .{version.zip_url}); Output.flush(); } - if (strings.eqlComptime(name, Version.zip_filename)) { - version.zip_url = (asset.asProperty("browser_download_url") orelse break :get_asset).expr.asString(allocator) orelse break :get_asset; - if (comptime Environment.isDebug) { - Output.prettyln("Found Zip {s}", .{version.zip_url}); - Output.flush(); - } - if (asset.asProperty("size")) |size_| { - if (size_.expr.data == .e_number) { - version.size = @intCast(u32, @maximum(@floatToInt(i32, std.math.ceil(size_.expr.data.e_number.value)), 0)); - } + if (asset.asProperty("size")) |size_| { + if (size_.expr.data == .e_number) { + version.size = @intCast(u32, @maximum(@floatToInt(i32, std.math.ceil(size_.expr.data.e_number.value)), 0)); } - return version; } + return version; } } } @@ -361,6 +368,7 @@ pub const UpgradeCommand = struct { return null; } const exe_subpath = Version.folder_name ++ std.fs.path.sep_str ++ "bun"; + const profile_exe_subpath = Version.profile_folder_name ++ std.fs.path.sep_str ++ "bun-profile"; pub fn exec(ctx: Command.Context) !void { @setCold(true); @@ -395,11 +403,13 @@ pub const UpgradeCommand = struct { strings.containsAny(bun.span(std.os.argv), "--canary") or default_use_canary; }; + const use_profile = strings.containsAny(bun.span(std.os.argv), "--profile"); + if (!use_canary) { var refresher = std.Progress{}; var progress = refresher.start("Fetching version tags", 0); - version = (try getLatestVersion(ctx.allocator, &env_loader, &refresher, progress, false)) orelse return; + version = (try getLatestVersion(ctx.allocator, &env_loader, &refresher, progress, use_profile, false)) orelse return; progress.end(); refresher.refresh(); @@ -506,6 +516,8 @@ pub const UpgradeCommand = struct { std.os.chdirZ(tmpdir_z) catch {}; const tmpname = "bun.zip"; + const exe = + if (use_profile) profile_exe_subpath else exe_subpath; var zip_file = save_dir.createFileZ(tmpname, .{ .truncate = true }) catch |err| { Output.prettyErrorln("<r><red>error:<r> Failed to open temp file {s}", .{@errorName(err)}); @@ -563,7 +575,7 @@ pub const UpgradeCommand = struct { } { var verify_argv = [_]string{ - exe_subpath, + exe, "--version", }; @@ -631,7 +643,7 @@ pub const UpgradeCommand = struct { Global.exit(1); }; - const dest_stat = save_dir.statFile(exe_subpath) catch |err| { + const dest_stat = save_dir.statFile(exe) catch |err| { save_dir_.deleteTree(version_name) catch {}; Output.prettyErrorln("<r><red>error:<r> Failed to stat source bun {s}", .{@errorName(err)}); Global.exit(1); @@ -646,7 +658,7 @@ pub const UpgradeCommand = struct { Global.exit(1); }); - const source_hash = std.hash.Wyhash.hash(0, save_dir.readFile(exe_subpath, input_buf) catch |err| { + const source_hash = std.hash.Wyhash.hash(0, save_dir.readFile(exe, input_buf) catch |err| { save_dir_.deleteTree(version_name) catch {}; Output.prettyErrorln("<r><red>error:<r> Failed to read source bun {s}", .{@errorName(err)}); Global.exit(1); @@ -664,7 +676,7 @@ pub const UpgradeCommand = struct { } if (env_loader.map.get("BUN_DRY_RUN") == null) { - C.moveFileZ(save_dir.fd, exe_subpath, target_dir.fd, target_filename) catch |err| { + C.moveFileZ(save_dir.fd, exe, target_dir.fd, target_filename) catch |err| { save_dir_.deleteTree(version_name) catch {}; Output.prettyErrorln("<r><red>error:<r> Failed to move new version of bun due to {s}. You could try the install script instead:\n curl -L https://bun.sh/install | bash", .{@errorName(err)}); Global.exit(1); |