about summary refs log tree commit diff
path: root/src/exe.zig
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2025-10-03 17:38:27 +0200
committerRobert Günzler <r@gnzler.io>2025-10-03 18:42:16 +0200
commitfa17cbf6b3486c74305eec5c93f799a4263b7317 (patch)
tree75199128b43376fc5430c9a01ee2557ec8f759a2 /src/exe.zig
parentea7deae11b488c4d4b6a15f8e6272bd7a5550866 (diff)
downloadsite-fa17cbf6b3486c74305eec5c93f799a4263b7317.tar.gz
retain source file mtime when rendering with pandoc
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'src/exe.zig')
-rw-r--r--src/exe.zig15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/exe.zig b/src/exe.zig
index bfe7370..2af8b66 100644
--- a/src/exe.zig
+++ b/src/exe.zig
@@ -24,6 +24,16 @@ pub fn run_pandoc(ctx: *Context) !void {
             .{page},
         );
 
+        // get mtime of the source document
+        const mtime = try fs.get_mtime(ctx.allocator(), source_path);
+        const mtime_str = try fs.format_mtime(ctx.allocator(), mtime, "%s");
+        defer ctx.allocator().free(mtime_str);
+
+        // make pandoc runs reproducable
+        var env_map = std.process.EnvMap.init(ctx.allocator());
+        defer env_map.deinit();
+        try env_map.put("SOURCE_DATE_EPOCH", mtime_str);
+
         try capture_stdout(ctx, &.{
             Context.params.PANDOC,
             "--from",
@@ -36,13 +46,13 @@ pub fn run_pandoc(ctx: *Context) !void {
             "--strip-comments",
             "--output=-",
             source_path,
-        }, f.writer().any());
+        }, &env_map, f.writer().any());
     }
 
     log.info("Processed {d} markdown files.", .{ctx.markdown.items.len});
 }
 
-pub fn capture_stdout(ctx: *Context, argv: []const []const u8, buf: std.io.AnyWriter) !void {
+pub fn capture_stdout(ctx: *Context, argv: []const []const u8, env_map: ?*std.process.EnvMap, buf: std.io.AnyWriter) !void {
     const command = try std.mem.join(ctx.allocator(), " ", argv);
     defer ctx.allocator().free(command);
     const label = try std.fmt.allocPrint(ctx.allocator(), "running {s}", .{command});
@@ -54,6 +64,7 @@ pub fn capture_stdout(ctx: *Context, argv: []const []const u8, buf: std.io.AnyWr
     var p = std.process.Child.init(argv, std.heap.page_allocator);
     p.stdout_behavior = .Pipe;
     p.progress_node = ctx.progress_nodes.getLast();
+    p.env_map = env_map;
 
     try p.spawn();