release-tracker/build.zig
2025-07-20 15:18:10 -07:00

137 lines
5.4 KiB
Zig

const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const integration = b.option(bool, "integration", "Run integration tests") orelse false;
const provider = b.option([]const u8, "provider", "Test specific provider (github, gitlab, forgejo, sourcehut)");
const test_debug = b.option(bool, "test-debug", "Enable debug output in tests") orelse false;
// Add Zeit dependency
const zeit_dep = b.dependency("zeit", .{
.target = target,
.optimize = optimize,
});
const exe = b.addExecutable(.{
.name = "release-tracker",
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("zeit", zeit_dep.module("zeit"));
b.installArtifact(exe);
const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| {
run_cmd.addArgs(args);
}
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
const unit_tests = b.addTest(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
unit_tests.root_module.addImport("zeit", zeit_dep.module("zeit"));
const test_debug_option = b.addOptions();
test_debug_option.addOption(bool, "test_debug", test_debug);
unit_tests.root_module.addOptions("build_options", test_debug_option);
const run_unit_tests = b.addRunArtifact(unit_tests);
const test_step = b.step("test", "Run unit tests");
test_step.dependOn(&run_unit_tests.step);
// Integration tests
if (integration) {
const integration_tests = b.addTest(.{
.name = "integration-tests",
.root_source_file = b.path("src/integration_tests.zig"),
.target = target,
.optimize = optimize,
});
integration_tests.root_module.addImport("zeit", zeit_dep.module("zeit"));
const integration_test_debug_option = b.addOptions();
integration_test_debug_option.addOption(bool, "test_debug", test_debug);
integration_tests.root_module.addOptions("build_options", integration_test_debug_option);
// Add filter for specific provider if specified
if (provider) |p| {
const filter = std.fmt.allocPrint(b.allocator, "{s} provider", .{p}) catch @panic("OOM");
integration_tests.filters = &[_][]const u8{filter};
}
const run_integration_tests = b.addRunArtifact(integration_tests);
test_step.dependOn(&run_integration_tests.step);
}
// Individual provider test steps
const github_step = b.step("test-github", "Test GitHub provider only");
const gitlab_step = b.step("test-gitlab", "Test GitLab provider only");
const forgejo_step = b.step("test-forgejo", "Test Forgejo provider only");
const sourcehut_step = b.step("test-sourcehut", "Test SourceHut provider only");
const github_tests = b.addTest(.{
.name = "github-tests",
.root_source_file = b.path("src/integration_tests.zig"),
.target = target,
.optimize = optimize,
.filters = &[_][]const u8{"GitHub provider"},
});
github_tests.root_module.addImport("zeit", zeit_dep.module("zeit"));
const github_test_debug_option = b.addOptions();
github_test_debug_option.addOption(bool, "test_debug", test_debug);
github_tests.root_module.addOptions("build_options", github_test_debug_option);
const gitlab_tests = b.addTest(.{
.name = "gitlab-tests",
.root_source_file = b.path("src/integration_tests.zig"),
.target = target,
.optimize = optimize,
.filters = &[_][]const u8{"GitLab provider"},
});
gitlab_tests.root_module.addImport("zeit", zeit_dep.module("zeit"));
const gitlab_test_debug_option = b.addOptions();
gitlab_test_debug_option.addOption(bool, "test_debug", test_debug);
gitlab_tests.root_module.addOptions("build_options", gitlab_test_debug_option);
const forgejo_tests = b.addTest(.{
.name = "forgejo-tests",
.root_source_file = b.path("src/integration_tests.zig"),
.target = target,
.optimize = optimize,
.filters = &[_][]const u8{"Forgejo provider"},
});
forgejo_tests.root_module.addImport("zeit", zeit_dep.module("zeit"));
const forgejo_test_debug_option = b.addOptions();
forgejo_test_debug_option.addOption(bool, "test_debug", test_debug);
forgejo_tests.root_module.addOptions("build_options", forgejo_test_debug_option);
const sourcehut_tests = b.addTest(.{
.name = "sourcehut-tests",
.root_source_file = b.path("src/integration_tests.zig"),
.target = target,
.optimize = optimize,
.filters = &[_][]const u8{"SourceHut provider"},
});
sourcehut_tests.root_module.addImport("zeit", zeit_dep.module("zeit"));
const sourcehut_test_debug_option = b.addOptions();
sourcehut_test_debug_option.addOption(bool, "test_debug", test_debug);
sourcehut_tests.root_module.addOptions("build_options", sourcehut_test_debug_option);
github_step.dependOn(&b.addRunArtifact(github_tests).step);
gitlab_step.dependOn(&b.addRunArtifact(gitlab_tests).step);
forgejo_step.dependOn(&b.addRunArtifact(forgejo_tests).step);
sourcehut_step.dependOn(&b.addRunArtifact(sourcehut_tests).step);
}