From c7e8df597ff4ac16fb9605fc17d60aa30212c190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Hlad=C3=ADk?= Date: Fri, 26 Dec 2025 18:20:47 +0100 Subject: [PATCH] fix(version): version script improved --- .github/actions/cached-deps/action.yml | 6 ++++++ .gitignore | 3 ++- package.json | 2 ++ scripts/package-zig.ts | 21 +++++++++++++++++++++ src/main.zig | 2 +- src/root.zig | 19 +++++++++---------- 6 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 scripts/package-zig.ts diff --git a/.github/actions/cached-deps/action.yml b/.github/actions/cached-deps/action.yml index 2a7956d..3c97f6c 100644 --- a/.github/actions/cached-deps/action.yml +++ b/.github/actions/cached-deps/action.yml @@ -31,3 +31,9 @@ runs: yarn install --frozen-lockfile echo "cache='${{ inputs.caching }}'" >> $GITHUB_OUTPUT shell: bash + + - name: Postinstall + if: steps.cache.outputs.cache-hit == 'true' && inputs.caching == 'true' + id: postinstall + run: yarn postinstall + shell: bash diff --git a/.gitignore b/.gitignore index c959717..9fb3ddf 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ Thumbs.db # Temp files version-info.ts dist -tmp \ No newline at end of file +tmp +src/package.json \ No newline at end of file diff --git a/package.json b/package.json index ef4312e..5cafdb8 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "clean": "rimraf zig-out dist", "prepare": "husky", "copy-files": "copyfiles -u 2 zig-out/bin/version_info dist/bin && copyfiles README.md LICENSE dist", + "postinstall": "yarn script:package-zig", + "script:package-zig": "yarn tsx ./scripts/package-zig.ts", "script:package-npm": "yarn tsx ./scripts/package-npm.ts", "script:package-github": "yarn tsx ./scripts/package-github.ts", "version": "auto-changelog -p && git add CHANGELOG.md", diff --git a/scripts/package-zig.ts b/scripts/package-zig.ts new file mode 100644 index 0000000..8a23858 --- /dev/null +++ b/scripts/package-zig.ts @@ -0,0 +1,21 @@ +import { writeFileSync, ensureDirSync } from 'fs-extra'; +import { join, resolve } from 'path'; + +const pkg = require(resolve(__dirname, '..', 'package.json')); + +pkg.scripts = undefined; +pkg.devDependencies = undefined; +pkg.packageManager = undefined; +pkg.engines = undefined; +pkg.files = undefined; +pkg.bin = { + "package-version-info": "bin/version_info" +}; + +const srcDir = join(__dirname, '..', 'src'); +ensureDirSync(srcDir); +writeFileSync(join(srcDir, 'package.json'), JSON.stringify(pkg, null, 2)); + +console.log('\x1b[34m', 'Package.json in src/ modified.', '\x1b[0m'); + + diff --git a/src/main.zig b/src/main.zig index f36caf3..20c7da1 100644 --- a/src/main.zig +++ b/src/main.zig @@ -19,7 +19,7 @@ pub fn main() !void { // Parse arguments while (args.next()) |arg| { if (std.mem.eql(u8, arg, "--version") or std.mem.eql(u8, arg, "-v")) { - try version_info.printVersion(allocator, "package.json"); + try version_info.printToolVersion(allocator); return; } else if (std.mem.eql(u8, arg, "--input") or std.mem.eql(u8, arg, "-i")) { if (args.next()) |value| { diff --git a/src/root.zig b/src/root.zig index 19132b7..454e1bd 100644 --- a/src/root.zig +++ b/src/root.zig @@ -1,6 +1,8 @@ //! By convention, root.zig is the root source file when making a library. const std = @import("std"); +const embedded_package_json = @embedFile("package.json"); + const Color = struct { pub const RESET = "\x1b[0m"; pub const BOLD = "\x1b[1m"; @@ -27,20 +29,17 @@ fn logNewLine() void { std.debug.print("\n", .{}); } -/// Prints version from package.json in a nicely formatted way -pub fn printVersion(allocator: std.mem.Allocator, package_json_path: []const u8) !void { - const file = try std.fs.cwd().openFile(package_json_path, .{}); - defer file.close(); - - const file_content = try file.readToEndAlloc(allocator, 1024 * 1024); - defer allocator.free(file_content); - - const parsed = try std.json.parseFromSlice(std.json.Value, allocator, file_content, .{}); +/// Prints the tool's version from embedded package.json +pub fn printToolVersion(allocator: std.mem.Allocator) !void { + const parsed = try std.json.parseFromSlice(std.json.Value, allocator, embedded_package_json, .{}); defer parsed.deinit(); const version = parsed.value.object.get("version").?.string; + const name = parsed.value.object.get("name").?.string; + logNewLine(); - log(Color.BRIGHT_CYAN, "📦", "Version: {s}", .{version}); + log(Color.BRIGHT_CYAN, "📦", "{s}", .{name}); + log(Color.BRIGHT_CYAN, "📌", "Version: {s}", .{version}); logNewLine(); }