atproto utils for zig
zat.dev
atproto
sdk
zig
1const std = @import("std");
2
3pub fn build(b: *std.Build) void {
4 const target = b.standardTargetOptions(.{});
5 const optimize = b.standardOptimizeOption(.{});
6
7 const websocket = b.dependency("websocket", .{
8 .target = target,
9 .optimize = optimize,
10 });
11
12 const mod = b.addModule("zat", .{
13 .root_source_file = b.path("src/root.zig"),
14 .target = target,
15 .optimize = optimize,
16 .link_libc = true,
17 .imports = &.{
18 .{ .name = "websocket", .module = websocket.module("websocket") },
19 },
20 });
21
22 const tests = b.addTest(.{ .root_module = mod });
23
24 // add interop test fixtures (lazy — only fetched when running tests)
25 if (b.lazyDependency("atproto-interop-tests", .{})) |interop| {
26 const interop_files = .{
27 // syntax fixtures
28 .{ "tid_syntax_valid", "syntax/tid_syntax_valid.txt" },
29 .{ "tid_syntax_invalid", "syntax/tid_syntax_invalid.txt" },
30 .{ "did_syntax_valid", "syntax/did_syntax_valid.txt" },
31 .{ "did_syntax_invalid", "syntax/did_syntax_invalid.txt" },
32 .{ "handle_syntax_valid", "syntax/handle_syntax_valid.txt" },
33 .{ "handle_syntax_invalid", "syntax/handle_syntax_invalid.txt" },
34 .{ "nsid_syntax_valid", "syntax/nsid_syntax_valid.txt" },
35 .{ "nsid_syntax_invalid", "syntax/nsid_syntax_invalid.txt" },
36 .{ "recordkey_syntax_valid", "syntax/recordkey_syntax_valid.txt" },
37 .{ "recordkey_syntax_invalid", "syntax/recordkey_syntax_invalid.txt" },
38 .{ "aturi_syntax_valid", "syntax/aturi_syntax_valid.txt" },
39 .{ "aturi_syntax_invalid", "syntax/aturi_syntax_invalid.txt" },
40 // crypto fixtures
41 .{ "signature_fixtures", "crypto/signature-fixtures.json" },
42 .{ "w3c_didkey_K256", "crypto/w3c_didkey_K256.json" },
43 .{ "w3c_didkey_P256", "crypto/w3c_didkey_P256.json" },
44 // data model fixtures
45 .{ "data_model_fixtures", "data-model/data-model-fixtures.json" },
46 // mst fixtures
47 .{ "mst_key_heights", "mst/key_heights.json" },
48 .{ "common_prefix", "mst/common_prefix.json" },
49 .{ "commit_proofs", "firehose/commit-proof-fixtures.json" },
50 };
51 inline for (interop_files) |entry| {
52 tests.root_module.addAnonymousImport(entry[0], .{
53 .root_source_file = interop.path(entry[1]),
54 });
55 }
56 }
57
58 const run_tests = b.addRunArtifact(tests);
59
60 const test_step = b.step("test", "run unit tests");
61 test_step.dependOn(&run_tests.step);
62
63 // jetstream smoke test
64 const jetstream_smoke = b.addExecutable(.{
65 .name = "jetstream-smoke",
66 .root_module = b.createModule(.{
67 .root_source_file = b.path("scripts/jetstream_smoke.zig"),
68 .target = target,
69 .optimize = optimize,
70 .link_libc = true,
71 .imports = &.{.{ .name = "zat", .module = mod }},
72 }),
73 });
74 b.installArtifact(jetstream_smoke);
75
76 const run_smoke = b.addRunArtifact(jetstream_smoke);
77 const smoke_step = b.step("smoke", "run jetstream smoke test");
78 smoke_step.dependOn(&run_smoke.step);
79
80 // firehose smoke test (CBOR + CAR + CID on live data)
81 const firehose_smoke = b.addExecutable(.{
82 .name = "firehose-smoke",
83 .root_module = b.createModule(.{
84 .root_source_file = b.path("scripts/firehose_smoke.zig"),
85 .target = target,
86 .optimize = optimize,
87 .link_libc = true,
88 .imports = &.{.{ .name = "zat", .module = mod }},
89 }),
90 });
91 b.installArtifact(firehose_smoke);
92
93 const run_firehose_smoke = b.addRunArtifact(firehose_smoke);
94 const firehose_smoke_step = b.step("firehose-smoke", "run firehose smoke test (CBOR/CAR/CID on live data)");
95 firehose_smoke_step.dependOn(&run_firehose_smoke.step);
96
97 // CBOR codec benchmarks
98 const cbor_bench = b.addExecutable(.{
99 .name = "cbor-bench",
100 .root_module = b.createModule(.{
101 .root_source_file = b.path("src/internal/repo/cbor_bench.zig"),
102 .target = target,
103 .optimize = optimize,
104 }),
105 });
106 b.installArtifact(cbor_bench);
107
108 const run_bench = b.addRunArtifact(cbor_bench);
109 const bench_step = b.step("bench", "run CBOR codec benchmarks");
110 bench_step.dependOn(&run_bench.step);
111
112 // publish-docs script (uses zat to publish docs to ATProto)
113 const publish_docs = b.addExecutable(.{
114 .name = "publish-docs",
115 .root_module = b.createModule(.{
116 .root_source_file = b.path("scripts/publish-docs.zig"),
117 .target = target,
118 .optimize = optimize,
119 .imports = &.{.{ .name = "zat", .module = mod }},
120 }),
121 });
122 b.installArtifact(publish_docs);
123}