tangled
alpha
login
or
join now
rockorager.dev
/
lsr
60
fork
atom
ls but with io_uring
60
fork
atom
overview
issues
9
pulls
1
pipelines
add version info
rockorager.dev
10 months ago
328284fb
9373c6b6
verified
This commit was signed with the committer's
known signature
.
rockorager.dev
SSH Key Fingerprint:
SHA256:qn/Fjy7CpbcogGEPB14Y53hLnQleZNFY9lkQnuudFLs=
+43
-1
3 changed files
expand all
collapse all
unified
split
build.zig
build.zig.zon
src
main.zig
+37
build.zig
···
1
1
const std = @import("std");
2
2
3
3
+
/// Must be kept in sync with git tags
4
4
+
const version: std.SemanticVersion = .{ .major = 0, .minor = 0, .patch = 0 };
5
5
+
3
6
pub fn build(b: *std.Build) void {
4
7
const target = b.standardTargetOptions(.{});
5
8
const optimize = b.standardOptimizeOption(.{});
···
18
21
const zeit_mod = zeit_dep.module("zeit");
19
22
exe_mod.addImport("zeit", zeit_mod);
20
23
24
24
+
const opts = b.addOptions();
25
25
+
const version_string = genVersion(b) catch |err| {
26
26
+
std.debug.print("{}", .{err});
27
27
+
@compileError("couldn't get version");
28
28
+
};
29
29
+
opts.addOption([]const u8, "version", version_string);
30
30
+
31
31
+
exe_mod.addOptions("build_options", opts);
32
32
+
21
33
const exe = b.addExecutable(.{
22
34
.name = "lsr",
23
35
.root_module = exe_mod,
···
45
57
const test_step = b.step("test", "Run unit tests");
46
58
test_step.dependOn(&run_exe_unit_tests.step);
47
59
}
60
60
+
61
61
+
fn genVersion(b: *std.Build) ![]const u8 {
62
62
+
if (!std.process.can_spawn) {
63
63
+
std.debug.print("error: version info cannot be retrieved from git. Zig version must be provided using -Dversion-string\n", .{});
64
64
+
std.process.exit(1);
65
65
+
}
66
66
+
const version_string = b.fmt("v{d}.{d}.{d}", .{ version.major, version.minor, version.patch });
67
67
+
68
68
+
var code: u8 = undefined;
69
69
+
const git_describe_untrimmed = b.runAllowFail(&[_][]const u8{
70
70
+
"git",
71
71
+
"-C",
72
72
+
b.build_root.path orelse ".",
73
73
+
"describe",
74
74
+
"--tags",
75
75
+
"--abbrev=9",
76
76
+
}, &code, .Ignore) catch {
77
77
+
return version_string;
78
78
+
};
79
79
+
if (!std.mem.startsWith(u8, git_describe_untrimmed, version_string)) {
80
80
+
std.debug.print("error: tagged version does not match internal version\n", .{});
81
81
+
std.process.exit(1);
82
82
+
}
83
83
+
return std.mem.trim(u8, git_describe_untrimmed, " \n\r");
84
84
+
}
+1
-1
build.zig.zon
···
1
1
.{
2
2
.name = .lsr,
3
3
-
.version = "0.0.0",
3
3
+
.version = "0.1.0",
4
4
.fingerprint = 0x495d173f6002e86, // Changing this has security and trust implications.
5
5
6
6
.minimum_zig_version = "0.14.0",
+5
src/main.zig
···
2
2
const builtin = @import("builtin");
3
3
const ourio = @import("ourio");
4
4
const zeit = @import("zeit");
5
5
+
const build_options = @import("build_options");
5
6
6
7
const posix = std.posix;
7
8
···
200
201
cmd.opts.shortview = if (o) .oneline else .columns;
201
202
} else if (eql(opt, "help")) {
202
203
return stderr.writeAll(usage);
204
204
+
} else if (eql(opt, "version")) {
205
205
+
try bw.writer().print("lsr {s}", .{build_options.version});
206
206
+
try bw.flush();
207
207
+
return;
203
208
} else {
204
209
try stderr.print("Invalid opt: '{s}'", .{opt});
205
210
std.process.exit(1);