feat: add make_release helper script

This commit is contained in:
CJ van den Berg 2024-11-18 19:28:58 +01:00
parent 6d351080a8
commit 92b3b93a1c
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
2 changed files with 69 additions and 1 deletions

View file

@ -87,8 +87,20 @@ fn build_release(
}; };
const optimize = .ReleaseSafe; 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| { for (targets) |t| {
const target = b.resolveTargetQuery(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( build_exe(
b, b,
run_step, run_step,
@ -97,7 +109,7 @@ fn build_release(
lint_step, lint_step,
target, target,
optimize, optimize,
.{ .dest_dir = .{ .override = .{ .custom = t.zigTriple(b.allocator) catch unreachable } } }, .{ .dest_dir = .{ .override = .{ .custom = target_path } } },
tracy_enabled, tracy_enabled,
use_tree_sitter, use_tree_sitter,
strip orelse true, strip orelse true,
@ -506,3 +518,14 @@ fn gen_version_info(b: *std.Build, writer: anytype) !void {
if (diff.len > 0) if (diff.len > 0)
try writer.print("\nwith the following uncommited changes:\n\n{s}\n", .{diff}); 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 "" });
}

45
contrib/make_release Executable file
View file

@ -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