aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cli/upgrade_command.zig48
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);