const std = @import("std"); const builtin = @import("builtin"); const zine = @import("zine"); const minimum_build_zig_version_string = @import("build.zig.zon").minimum_zig_version; const minimum_build_zig_version = std.SemanticVersion.parse(minimum_build_zig_version_string) catch unreachable; pub fn build(b: *std.Build) !void { checkZigVersion(); // Workaround for Zine's early return bug on macOS due to lazy dependencies const zine_dep = b.dependencyFromBuildZig(zine, .{ .@"no-git-version" = true }); if (zine_dep.builder.install_tls.step.dependencies.items.len == 0) { return; } const drafts = b.option(bool, "drafts", "Build drafts") orelse false; const stylesheet_name = "altagos.css"; const compile_stylesheet = b.step("stylesheet", "Compile stylesheet from scss files"); const compile_stylesheet_cmd_out = b.run(&.{ "sass", "--no-source-map", "--no-color", "--style=compressed", "--load-path=./style", "./style/index.scss", }); const compile_stylesheet_cmd = b.addWriteFile(stylesheet_name, compile_stylesheet_cmd_out); const stylesheet = zine.BuildAsset{ .name = "stylesheet", .lp = .{ .generated = .{ .index = compile_stylesheet_cmd.generated_directory, .sub_path = stylesheet_name, } }, .install_path = stylesheet_name, .install_always = true, }; compile_stylesheet.dependOn(&compile_stylesheet_cmd.step); const website = zine.website(b, .{ .output_path = "website", .build_assets = &.{stylesheet}, .force = true, .debug = .{ .optimize = .safe }, }); website.step.dependOn(&compile_stylesheet_cmd.step); website.addPassthruArgs(); if (drafts) { website.addArg("--drafts"); } b.getInstallStep().dependOn(&website.step); const serve = b.step("serve", "Start the Zine dev server"); const run_zine = zine.serve(b, .{ .build_assets = &.{stylesheet}, .debug = .{ .optimize = .safe }, }); run_zine.step.dependOn(&compile_stylesheet_cmd.step); run_zine.addPassthruArgs(); serve.dependOn(&run_zine.step); } fn checkZigVersion() void { comptime if (builtin.zig_version.order(minimum_build_zig_version) == .lt) { const message = std.fmt.comptimePrint( \\Your Zig version does not meet the minimum build requirement: \\ required Zig version: {[minimum_version]f} (or greater) \\ actual Zig version: {[current_version]s} \\ \\Download the latest nightly of Zig (https://ziglang.org/download/) , .{ .current_version = builtin.zig_version_string, .minimum_version = minimum_build_zig_version, }); @compileError(message); }; }