From 55ca486bc063a959a74514a70eba8eda4074e591 Mon Sep 17 00:00:00 2001 From: Matthew Hambright Date: Fri, 19 Dec 2025 14:27:37 -0600 Subject: [PATCH] fix: refactored execute into its own file and changed tests structure. --- .ci/.gitlab-ci.yml | 4 +- .devcontainer/devcontainer.json | 2 - .gitlab-ci.yml | 8 +-- .vscode/extensions.json | 2 - mise.toml | 1 + src/download.zig | 9 +++ src/execute.zig | 101 ++++++++++++++++++++++++++++++++ src/main.zig | 82 +------------------------- src/root.zig | 29 ++------- 9 files changed, 124 insertions(+), 114 deletions(-) create mode 100644 src/execute.zig diff --git a/.ci/.gitlab-ci.yml b/.ci/.gitlab-ci.yml index 496455e..da9ece6 100644 --- a/.ci/.gitlab-ci.yml +++ b/.ci/.gitlab-ci.yml @@ -9,7 +9,7 @@ flexapp_build_linux: DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://docker:2375/ services: - - name: docker:28.5.1-dind + - name: docker:29.1.3-dind alias: docker rules: - if: '$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v/' @@ -35,7 +35,7 @@ flexapp_build_windows: DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://docker:2375/ services: - - name: docker:28.5.1-dind + - name: docker:29.1.3-dind alias: docker rules: - if: '$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v/' diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2b65779..072f654 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -24,9 +24,7 @@ "mads-hartmann.bash-ide-vscode", "aaron-bond.better-comments", "ms-azuretools.vscode-docker", - "ms-python.debugpy", "ms-python.python", - "ms-python.vscode-pylance", "tamasfe.even-better-toml", "waderyan.gitblame", "PKief.material-icon-theme", diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6ea6b98..59d570e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ flexapp_testing: DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://docker:2375/ services: - - name: docker:28.5.1-dind + - name: docker:29.1.3-dind alias: docker rules: - if: $CI_COMMIT_TAG =~ /^release-.*/ @@ -33,7 +33,7 @@ flexapp_build_linux: DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://docker:2375/ services: - - name: docker:28.5.1-dind + - name: docker:29.1.3-dind alias: docker rules: - if: $CI_COMMIT_TAG =~ /^release-.*/ @@ -55,12 +55,12 @@ flexapp_build_linux: flexapp_build_windows: stage: build - image: docker:28.5.1-dind + image: docker:29.1.3-dind variables: DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://docker:2375/ services: - - name: docker:28.5.1-dind + - name: docker:29.1.3-dind alias: docker rules: - if: $CI_COMMIT_TAG =~ /^release-.*/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d235fb1..c1a2080 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,9 +7,7 @@ "waderyan.gitblame", "mads-hartmann.bash-ide-vscode", "ms-azuretools.vscode-containers", - "ms-python.debugpy", "ms-python.python", - "ms-python.vscode-pylance", "pkief.material-icon-theme", "tamasfe.even-better-toml", "yzhang.markdown-all-in-one", diff --git a/mise.toml b/mise.toml index fc17f00..661fa4d 100644 --- a/mise.toml +++ b/mise.toml @@ -3,6 +3,7 @@ [hooks] [settings] +auto_install = false activate_aggressive = true aqua.cosign = false aqua.slsa = false diff --git a/src/download.zig b/src/download.zig index e52e56b..28c1428 100644 --- a/src/download.zig +++ b/src/download.zig @@ -1,5 +1,7 @@ const std = @import("std"); const helper = @import("helper.zig"); +const testing = std.testing; + pub fn download(allocator: std.mem.Allocator, url: []const u8) ![]const u8 { std.debug.print("{s} {s}\n", .{ "Starting download for", url }); @@ -91,6 +93,13 @@ pub fn download(allocator: std.mem.Allocator, url: []const u8) ![]const u8 { return filename_final; } +test "checking failed download" { + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer arena.deinit(); + const allocator = arena.allocator(); + try testing.expect(std.mem.eql(u8, try download(allocator, "https://durrrrr.io"), "unknown.txt")); +} + test "download function" { const testing_allocator = std.testing.allocator; diff --git a/src/execute.zig b/src/execute.zig new file mode 100644 index 0000000..e9c9e2f --- /dev/null +++ b/src/execute.zig @@ -0,0 +1,101 @@ +const std = @import("std"); +const helper = @import("helper.zig"); +const testing = std.testing; +const main = @import("main.zig"); +const builtin = @import("builtin"); + +pub const ExecuteError = error{ + InstallerNotFound, + FpaPackagerNotFound, + ProcessFailed, +} || std.process.Child.RunError || std.mem.Allocator.Error || std.fs.File.OpenError; + +pub fn execute(name: []const u8, package_version: []const u8, output: []const u8, installer: []const u8, extra: anytype) ExecuteError![]const u8 { + // std.debug.print("{s}\n", .{name}); + if (!(try helper.test_file_path(installer))) { + std.debug.print("{s} not found...\n", .{installer}); + return ExecuteError.InstallerNotFound; + } + const path = "C:\\program files (x86)\\Liquidware Labs\\FlexApp Packaging Automation\\fpa-packager.exe"; + if (!(try helper.test_file_path(path))) { + std.debug.print("{s}\n", .{"fpa-packager.exe not found..."}); + return ExecuteError.FpaPackagerNotFound; + } + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer arena.deinit(); + const allocator = arena.allocator(); + + var list: std.ArrayList([]const u8) = .empty; + defer list.deinit(allocator); + + try list.append(allocator, path); + try list.append(allocator, "package"); + try list.append(allocator, "/Name"); + try list.append(allocator, name); + try list.append(allocator, "/PackageVersion"); + try list.append(allocator, package_version); + try list.append(allocator, "/Path"); + try list.append(allocator, output); + try list.append(allocator, "/Installer"); + try list.append(allocator, installer); + try list.append(allocator, "/NoSystemRestore"); + + var list2: std.ArrayList([]const u8) = .empty; + defer list2.deinit(allocator); + for (extra) |pos| { + try list2.append(allocator, pos); + } + if (list2.items.len != 0) { + try list.append(allocator, "/InstallerArgs"); + for (list2.items) |n| + try list.append(allocator, n); + } + + const result = try std.process.Child.run(.{ + .allocator = allocator, + .argv = try list.toOwnedSlice(allocator), + .max_output_bytes = 500 * 1024, + }); + defer { + allocator.free(result.stdout); + allocator.free(result.stderr); + } + switch (result.term) { + .Exited => |code| { + if (code == 0) { + std.debug.print("Output:\nSuccess Code: {}\n", .{code}); + return "Success"; + } else { + std.debug.print("Process failed with code: {}\n", .{code}); + return ExecuteError.ProcessFailed; + } + }, + .Signal => |sig| { + std.debug.print("Process terminated by signal: {}\n", .{sig}); + return ExecuteError.ProcessFailed; + }, + .Stopped => |sig| { + std.debug.print("Process stopped by signal: {}\n", .{sig}); + return ExecuteError.ProcessFailed; + }, + .Unknown => |code| { + std.debug.print("Process terminated with unknown status: {}\n", .{code}); + return ExecuteError.ProcessFailed; + }, + } +} + +test "checking failed execute installer not found" { + const result = execute("", "", "", "test", .{}); + try testing.expectError(ExecuteError.InstallerNotFound, result); +} + +test "checking failed execute fpa not found" { + if (builtin.os.tag == .windows) { + const result = execute("", "", "", "C:/Windows/System32/drivers/etc/hosts", .{}); + try testing.expectError(ExecuteError.FpaPackagerNotFound, result); + } else { + const result = execute("", "", "", "/etc/hosts", .{}); + try testing.expectError(ExecuteError.FpaPackagerNotFound, result); + } +} diff --git a/src/main.zig b/src/main.zig index b24f896..34e812e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2,6 +2,7 @@ const clap = @import("clap"); const std = @import("std"); const helper = @import("helper.zig"); const download = @import("download.zig").download; +const execute = @import("execute.zig").execute; const Version = struct { major: u16, @@ -116,87 +117,6 @@ pub fn main() !void { } } -pub const ExecuteError = error{ - InstallerNotFound, - FpaPackagerNotFound, - ProcessFailed, -} || std.process.Child.RunError || std.mem.Allocator.Error || std.fs.File.OpenError; - -pub fn execute(name: []const u8, package_version: []const u8, output: []const u8, installer: []const u8, extra: anytype) ExecuteError![]const u8 { - // std.debug.print("{s}\n", .{name}); - if (!(try helper.test_file_path(installer))) { - std.debug.print("{s} not found...\n", .{installer}); - return ExecuteError.InstallerNotFound; - } - const path = "C:\\program files (x86)\\Liquidware Labs\\FlexApp Packaging Automation\\fpa-packager.exe"; - if (!(try helper.test_file_path(path))) { - std.debug.print("{s}\n", .{"fpa-packager.exe not found..."}); - return ExecuteError.FpaPackagerNotFound; - } - var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); - defer arena.deinit(); - const allocator = arena.allocator(); - - var list: std.ArrayList([]const u8) = .empty; - defer list.deinit(allocator); - - try list.append(allocator, path); - try list.append(allocator, "package"); - try list.append(allocator, "/Name"); - try list.append(allocator, name); - try list.append(allocator, "/PackageVersion"); - try list.append(allocator, package_version); - try list.append(allocator, "/Path"); - try list.append(allocator, output); - try list.append(allocator, "/Installer"); - try list.append(allocator, installer); - try list.append(allocator, "/NoSystemRestore"); - - var list2: std.ArrayList([]const u8) = .empty; - defer list2.deinit(allocator); - for (extra) |pos| { - try list2.append(allocator, pos); - } - if (list2.items.len != 0) { - try list.append(allocator, "/InstallerArgs"); - for (list2.items) |n| - try list.append(allocator, n); - } - - const result = try std.process.Child.run(.{ - .allocator = allocator, - .argv = try list.toOwnedSlice(allocator), - .max_output_bytes = 500 * 1024, - }); - defer { - allocator.free(result.stdout); - allocator.free(result.stderr); - } - switch (result.term) { - .Exited => |code| { - if (code == 0) { - std.debug.print("Output:\nSuccess Code: {}\n", .{code}); - return "Success"; - } else { - std.debug.print("Process failed with code: {}\n", .{code}); - return ExecuteError.ProcessFailed; - } - }, - .Signal => |sig| { - std.debug.print("Process terminated by signal: {}\n", .{sig}); - return ExecuteError.ProcessFailed; - }, - .Stopped => |sig| { - std.debug.print("Process stopped by signal: {}\n", .{sig}); - return ExecuteError.ProcessFailed; - }, - .Unknown => |code| { - std.debug.print("Process terminated with unknown status: {}\n", .{code}); - return ExecuteError.ProcessFailed; - }, - } -} - fn build_package(name: []const u8, package_version: []const u8, output: []const u8, installer: []const u8, extra: anytype) !void { var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); diff --git a/src/root.zig b/src/root.zig index 8b15b96..32b1e4c 100644 --- a/src/root.zig +++ b/src/root.zig @@ -3,21 +3,19 @@ const testing = std.testing; const main = @import("main.zig"); const helper = @import("helper.zig"); const builtin = @import("builtin"); -const download = @import("download.zig").download; export fn add(a: i32, b: i32) i32 { return a + b; } -test "basic add functionality" { - try testing.expect(add(3, 7) == 10); +test { + @import("std").testing.refAllDecls(@This()); + _ = @import("./download.zig"); + _ = @import("./execute.zig"); } -test "checking failed download" { - var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); - defer arena.deinit(); - const allocator = arena.allocator(); - try testing.expect(std.mem.eql(u8, try download(allocator, "https://durrrrr.io"), "unknown.txt")); +test "basic add functionality" { + try testing.expect(add(3, 7) == 10); } test "checking replacer" { @@ -72,21 +70,6 @@ test "checking concat" { try testing.expect(std.mem.eql(u8, check, "test.txt")); } -test "checking failed execute installer not found" { - const result = main.execute("", "", "", "test", .{}); - try testing.expectError(main.ExecuteError.InstallerNotFound, result); -} - -test "checking failed execute fpa not found" { - if (builtin.os.tag == .windows) { - const result = main.execute("", "", "", "C:/Windows/System32/drivers/etc/hosts", .{}); - try testing.expectError(main.ExecuteError.FpaPackagerNotFound, result); - } else { - const result = main.execute("", "", "", "/etc/hosts", .{}); - try testing.expectError(main.ExecuteError.FpaPackagerNotFound, result); - } -} - test "replace all function" { const allocator = std.testing.allocator;