From 92b3b93a1c64076555db4794d6aaca389bc537a5 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Mon, 18 Nov 2024 19:28:58 +0100 Subject: [PATCH] feat: add make_release helper script --- build.zig | 25 +++++++++++++++++++++++- contrib/make_release | 45 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100755 contrib/make_release diff --git a/build.zig b/build.zig index 84b135b..5cd077d 100644 --- a/build.zig +++ b/build.zig @@ -87,8 +87,20 @@ fn build_release( }; const optimize = .ReleaseSafe; + var version = std.ArrayList(u8).init(b.allocator); + defer version.deinit(); + gen_version(b, version.writer()) catch unreachable; + const write_file_step = b.addWriteFiles(); + const version_file = write_file_step.add("version", version.items); + b.getInstallStep().dependOn(&b.addInstallFile(version_file, "version").step); + for (targets) |t| { const target = b.resolveTargetQuery(t); + var triple = std.mem.splitScalar(u8, t.zigTriple(b.allocator) catch unreachable, '-'); + const arch = triple.next() orelse unreachable; + const os = triple.next() orelse unreachable; + const target_path = std.mem.join(b.allocator, "-", &[_][]const u8{ os, arch }) catch unreachable; + build_exe( b, run_step, @@ -97,7 +109,7 @@ fn build_release( lint_step, target, optimize, - .{ .dest_dir = .{ .override = .{ .custom = t.zigTriple(b.allocator) catch unreachable } } }, + .{ .dest_dir = .{ .override = .{ .custom = target_path } } }, tracy_enabled, use_tree_sitter, strip orelse true, @@ -506,3 +518,14 @@ fn gen_version_info(b: *std.Build, writer: anytype) !void { if (diff.len > 0) try writer.print("\nwith the following uncommited changes:\n\n{s}\n", .{diff}); } + +fn gen_version(b: *std.Build, writer: anytype) !void { + var code: u8 = 0; + + const describe = try b.runAllowFail(&[_][]const u8{ "git", "describe", "--always", "--tags" }, &code, .Ignore); + const diff_ = try b.runAllowFail(&[_][]const u8{ "git", "diff", "--stat", "--patch", "HEAD" }, &code, .Ignore); + const diff = std.mem.trimRight(u8, diff_, "\r\n "); + const version = std.mem.trimRight(u8, describe, "\r\n "); + + try writer.print("{s}{s}", .{ version, if (diff.len > 0) "-dirty" else "" }); +} diff --git a/contrib/make_release b/contrib/make_release new file mode 100755 index 0000000..7b35463 --- /dev/null +++ b/contrib/make_release @@ -0,0 +1,45 @@ +#!/bin/bash +set -e + +BASEDIR="$(cd "$(dirname "$0")/.." && pwd)" +APPNAME="$(basename "$BASEDIR")" + +cd "$BASEDIR" + +if [ -e "release" ]; then + echo directory \"release\" already exists + exit 1 +fi + +echo building... + +./zig build -Dpackage_release --prefix release/build + +cd release/build + +VERSION=$(/bin/cat version) +TARGETS=$(/bin/ls) + +for target in $TARGETS; do + if [ -d "$target" ]; then + cd "$target" + echo packing "$target"... + tar -czf "../../${APPNAME}-${VERSION}-${target}.tar.gz" -- * + cd .. + fi +done + +cd .. +rm -r build + +TARFILES=$(/bin/ls) + +for tarfile in $TARFILES; do + echo signing "$tarfile"... + gpg --local-user 4E6CF7234FFC4E14531074F98EB1E1BB660E3FB9 --detach-sig "$tarfile" +done + +echo "done making release $VERSION" +echo + +/bin/ls -lah