build: automate version resolution in build.zig

Removes manual git flags from CI and build scripts.
Versioning is now automatically derived from git and build.zig.zon.

With this PR, we follow https://semver.org/
Logic:

1. Read the version from build.zig.zon
2. If it doesn't have a `.pre` field (i.e. dev/alpha/beta) it will use that
3. Otherwise it will get the info from git: hash and number of commits since last `.0` version
4. Then build the version: `0.3.0-dev.1493+0896edc3`

Note that, since the latest stable version is `0.2.6`.
The convention is to use `0.3.0-dev`, as:
- `0.2.6` < `0.3.0.dev` < `0.3.0`
This commit is contained in:
Adrià Arrufat
2026-03-19 12:55:10 +09:00
parent edd0c5c83f
commit 2dbd32d120
11 changed files with 93 additions and 51 deletions

View File

@@ -59,11 +59,8 @@ fn run(allocator: Allocator, main_arena: Allocator) !void {
return std.process.cleanExit();
},
.version => {
if (lp.build_config.git_version) |version| {
std.debug.print("{s} ({s})\n", .{ version, lp.build_config.git_commit });
} else {
std.debug.print("{s}\n", .{lp.build_config.git_commit});
}
var stdout = std.fs.File.stdout().writer(&.{});
try stdout.interface.print("{s}\n", .{lp.build_config.version});
return std.process.cleanExit();
},
else => {},