feat: add unfreeze_on_demand to remaining 35 SDKs

Updated awk, bash, clojure, cobol, cpp, crystal, csharp, dart, dotnet,
d, elixir, erlang, fortran, fsharp, groovy, haskell, julia, kotlin,
lisp, lua, nim, objective-c, ocaml, perl, php (sync+async), powershell,
prolog, raku, r, scheme, swift, tcl, v, and zig SDKs:

- Add set_unfreeze_on_demand function (PATCH /services/:id)
- Add --unfreeze-on-demand flag for service creation
- Add --set-unfreeze-on-demand command for existing services
This commit is contained in:
russell@unturf.com 2026-01-22 17:01:19 -05:00
parent e58adcd5fe
commit 7e56327056
35 changed files with 1047 additions and 104 deletions

View file

@ -430,6 +430,9 @@ pub fn main() !u8 {
var dump_file: ?[]const u8 = null;
var resize: ?[]const u8 = null;
var vcpu: i32 = 0;
var unfreeze_on_demand = false;
var set_unfreeze_on_demand_id: ?[]const u8 = null;
var set_unfreeze_on_demand_enabled: ?[]const u8 = null;
var input_files = std.ArrayList([]const u8).init(allocator);
defer input_files.deinit();
var svc_envs = std.ArrayList([]const u8).init(allocator);
@ -489,6 +492,13 @@ pub fn main() !u8 {
} else if (mem.eql(u8, args[i], "--env-file") and i + 1 < args.len) {
i += 1;
svc_env_file = args[i];
} else if (mem.eql(u8, args[i], "--unfreeze-on-demand")) {
unfreeze_on_demand = true;
} else if (mem.eql(u8, args[i], "--set-unfreeze-on-demand") and i + 2 < args.len) {
i += 1;
set_unfreeze_on_demand_id = args[i];
i += 1;
set_unfreeze_on_demand_enabled = args[i];
} else if (mem.eql(u8, args[i], "-k") and i + 1 < args.len) {
i += 1;
allocator.free(public_key);
@ -620,6 +630,31 @@ pub fn main() !u8 {
// Calculate RAM
const ram = vcpu * 2;
std.debug.print("\n{s}Service resized to {d} vCPU, {d} GB RAM{s}\n", .{ GREEN, vcpu, ram, RESET });
} else if (set_unfreeze_on_demand_id) |svc_id| {
// Handle set-unfreeze-on-demand
const enabled = if (set_unfreeze_on_demand_enabled) |e|
mem.eql(u8, e, "true") or mem.eql(u8, e, "1")
else
false;
const enabled_str = if (enabled) "true" else "false";
const json = try std.fmt.allocPrint(allocator, "{{\"unfreeze_on_demand\":{s}}}", .{enabled_str});
defer allocator.free(json);
const path = try std.fmt.allocPrint(allocator, "/services/{s}", .{svc_id});
defer allocator.free(path);
const auth_headers = try buildAuthCmd(allocator, "PATCH", path, json, public_key, secret_key);
defer allocator.free(auth_headers);
const cmd = try std.fmt.allocPrint(allocator, "curl -s -X PATCH '{s}/services/{s}' -H 'Content-Type: application/json' {s} -d '{s}'", .{ API_BASE, svc_id, auth_headers, json });
defer allocator.free(cmd);
_ = std.c.system(cmd.ptr);
if (enabled) {
std.debug.print("\n{s}Unfreeze-on-demand enabled for service {s}{s}\n", .{ GREEN, svc_id, RESET });
} else {
std.debug.print("\n{s}Unfreeze-on-demand disabled for service {s}{s}\n", .{ GREEN, svc_id, RESET });
}
} else if (name) |n| {
var json_buf: [65536]u8 = undefined;
var json_stream = std.io.fixedBufferStream(&json_buf);
@ -666,6 +701,9 @@ pub fn main() !u8 {
}
try writer.writeAll("\"");
}
if (unfreeze_on_demand) {
try writer.writeAll(",\"unfreeze_on_demand\":true");
}
// Add input_files JSON
const input_files_json = try buildInputFilesJson(allocator, input_files);
defer allocator.free(input_files_json);