From 13d8b12c8dc04ae37e4199327b4378cb7b281d36 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Thu, 2 May 2024 08:48:52 +0200 Subject: [PATCH 01/18] Add the zig.index tag. --- zig/private/bzlmod/zig.bzl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 41171e14..992f73b1 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -28,8 +28,22 @@ zig_toolchain = tag_class(attrs = { ), }) +zig_index = tag_class( + attrs = { + "file": attr.label(doc = "The Zig version index JSON file.", mandatory = True), + }, + doc = """\ +Extend the set of known Zig SDK versions based on a Zig version index. + +The provided index must use a schema that is compatible with the [upstream index]. + +[upstream index]: https://ziglang.org/download/index.json +""", +) + TAG_CLASSES = { "toolchain": zig_toolchain, + "index": zig_index, } def handle_tags(module_ctx, *, known_versions): From 9b698617ab88fe958c693db5d77f961471df09ea Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Thu, 2 May 2024 08:50:35 +0200 Subject: [PATCH 02/18] Add doc string for the zig.toolchain tag --- zig/private/bzlmod/zig.bzl | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 992f73b1..b3c9d917 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -19,14 +19,21 @@ declares one as the default. _DEFAULT_NAME = "zig" -zig_toolchain = tag_class(attrs = { - "zig_version": attr.string(doc = "The Zig SDK version.", mandatory = True), - "default": attr.bool( - doc = "Make this the default Zig SDK version. Can only be used once, and only in the root module.", - mandatory = False, - default = False, - ), -}) +zig_toolchain = tag_class( + attrs = { + "zig_version": attr.string(doc = "The Zig SDK version.", mandatory = True), + "default": attr.bool( + doc = "Make this the default Zig SDK version. Can only be used once, and only in the root module.", + mandatory = False, + default = False, + ), + }, + doc = """\ +Fetch and define toolchain targets for the given Zig SDK version. + +Defaults to the latest known release version. +""", +) zig_index = tag_class( attrs = { From af5f3bc6c8de2d499588b5848667f41d15e1a807 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Thu, 2 May 2024 08:52:19 +0200 Subject: [PATCH 03/18] handle_tags --> handle_toolchain_tags --- zig/private/bzlmod/zig.bzl | 6 +++--- zig/tests/bzlmod_zig_test.bzl | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index b3c9d917..62531b34 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -53,8 +53,8 @@ TAG_CLASSES = { "index": zig_index, } -def handle_tags(module_ctx, *, known_versions): - """Handle the zig module extension tags. +def handle_toolchain_tags(module_ctx, *, known_versions): + """Handle the zig module extension's toolchain tags. Exposed as a standalone function for unit testing. @@ -111,7 +111,7 @@ def _toolchain_extension(module_ctx): zig_versions_json_path = module_ctx.path(Label("//zig/private:versions.json")) known_versions = _parse_zig_versions_json(module_ctx.read(zig_versions_json_path)) - (err, versions) = handle_tags(module_ctx, known_versions = known_versions) + (err, versions) = handle_toolchain_tags(module_ctx, known_versions = known_versions) if err != None: fail(*err) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index fd8093ff..48d276c8 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -2,7 +2,7 @@ load("@bazel_skylib//lib:partial.bzl", "partial") load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//zig/private/bzlmod:zig.bzl", "handle_tags") +load("//zig/private/bzlmod:zig.bzl", "handle_toolchain_tags") def _zig_versions_test_impl(ctx): env = unittest.begin(ctx) @@ -10,14 +10,14 @@ def _zig_versions_test_impl(ctx): asserts.equals( env, (None, ["0.1.0"]), - handle_tags(struct(modules = []), known_versions = ["0.1.0"]), + handle_toolchain_tags(struct(modules = []), known_versions = ["0.1.0"]), "should fall back to the default Zig SDK version", ) asserts.equals( env, (None, ["0.1.0"]), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = False, @@ -38,7 +38,7 @@ def _zig_versions_test_impl(ctx): asserts.equals( env, (None, ["0.4.0", "0.2.0", "0.1.0", "0.0.1"]), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = False, @@ -78,7 +78,7 @@ def _zig_versions_test_impl(ctx): asserts.equals( env, (None, ["0.1.0", "0.0.1"]), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = False, @@ -118,7 +118,7 @@ def _zig_versions_test_impl(ctx): asserts.equals( env, (None, ["0.1.0", "0.4.0", "0.2.0", "0.0.1"]), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = False, @@ -158,7 +158,7 @@ def _zig_versions_test_impl(ctx): asserts.equals( env, (None, ["0.1.0", "0.2.0", "0.0.1"]), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = False, @@ -201,7 +201,7 @@ def _zig_versions_test_impl(ctx): default = True, zig_version = "0.1.0", )], None), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = False, @@ -225,7 +225,7 @@ def _zig_versions_test_impl(ctx): default = True, zig_version = "0.2.0", )], None), - handle_tags(struct( + handle_toolchain_tags(struct( modules = [ struct( is_root = True, From 51528205d9a24ccd385c6f1b61beb84d2decf352 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Thu, 2 May 2024 08:56:06 +0200 Subject: [PATCH 04/18] refactor: handle_toolchain_tags takes module list --- zig/private/bzlmod/zig.bzl | 8 +++--- zig/tests/bzlmod_zig_test.bzl | 51 ++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 62531b34..32e0e1c5 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -53,13 +53,13 @@ TAG_CLASSES = { "index": zig_index, } -def handle_toolchain_tags(module_ctx, *, known_versions): +def handle_toolchain_tags(modules, *, known_versions): """Handle the zig module extension's toolchain tags. Exposed as a standalone function for unit testing. Args: - module_ctx: The module context object. + modules: sequence of module objects. known_versions: sequence of string, The set of known Zig versions. Returns: @@ -68,7 +68,7 @@ def handle_toolchain_tags(module_ctx, *, known_versions): default = None versions = sets.make() - for mod in module_ctx.modules: + for mod in modules: for toolchain in mod.tags.toolchain: if toolchain.default: if not mod.is_root: @@ -111,7 +111,7 @@ def _toolchain_extension(module_ctx): zig_versions_json_path = module_ctx.path(Label("//zig/private:versions.json")) known_versions = _parse_zig_versions_json(module_ctx.read(zig_versions_json_path)) - (err, versions) = handle_toolchain_tags(module_ctx, known_versions = known_versions) + (err, versions) = handle_toolchain_tags(module_ctx.modules, known_versions = known_versions) if err != None: fail(*err) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index 48d276c8..277a4605 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -10,15 +10,15 @@ def _zig_versions_test_impl(ctx): asserts.equals( env, (None, ["0.1.0"]), - handle_toolchain_tags(struct(modules = []), known_versions = ["0.1.0"]), + handle_toolchain_tags([], known_versions = ["0.1.0"]), "should fall back to the default Zig SDK version", ) asserts.equals( env, (None, ["0.1.0"]), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = False, tags = struct( @@ -31,15 +31,16 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.1.0"]), + known_versions = ["0.1.0"], + ), "should choose a single configured version", ) asserts.equals( env, (None, ["0.4.0", "0.2.0", "0.1.0", "0.0.1"]), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = False, tags = struct( @@ -71,15 +72,16 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.4.0", "0.2.0", "0.1.0", "0.0.1"]), + known_versions = ["0.4.0", "0.2.0", "0.1.0", "0.0.1"], + ), "should order versions by semver", ) asserts.equals( env, (None, ["0.1.0", "0.0.1"]), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = False, tags = struct( @@ -111,15 +113,16 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.1.0", "0.0.1"]), + known_versions = ["0.1.0", "0.0.1"], + ), "should deduplicate versions", ) asserts.equals( env, (None, ["0.1.0", "0.4.0", "0.2.0", "0.0.1"]), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = False, tags = struct( @@ -151,15 +154,16 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.4.0", "0.2.0", "0.1.0", "0.0.1"]), + known_versions = ["0.4.0", "0.2.0", "0.1.0", "0.0.1"], + ), "the default should take precedence", ) asserts.equals( env, (None, ["0.1.0", "0.2.0", "0.0.1"]), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = False, tags = struct( @@ -191,7 +195,8 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.2.0", "0.1.0", "0.0.1"]), + known_versions = ["0.2.0", "0.1.0", "0.0.1"], + ), "should not duplicate default", ) @@ -201,8 +206,8 @@ def _zig_versions_test_impl(ctx): default = True, zig_version = "0.1.0", )], None), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = False, tags = struct( @@ -215,7 +220,8 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.1.0"]), + known_versions = ["0.1.0"], + ), "only root may set default", ) @@ -225,8 +231,8 @@ def _zig_versions_test_impl(ctx): default = True, zig_version = "0.2.0", )], None), - handle_toolchain_tags(struct( - modules = [ + handle_toolchain_tags( + [ struct( is_root = True, tags = struct( @@ -243,7 +249,8 @@ def _zig_versions_test_impl(ctx): ), ), ], - ), known_versions = ["0.2.0", "0.1.0"]), + known_versions = ["0.2.0", "0.1.0"], + ), "only one default allowed", ) From 2c150bdfcffc28efe9ac7beb3fb5d36ae05027a0 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Thu, 2 May 2024 08:57:08 +0200 Subject: [PATCH 05/18] docs: update generated API docs --- docs/extensions.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/extensions.md b/docs/extensions.md index 86d95863..cd5a2b2e 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -9,6 +9,7 @@ Extensions for bzlmod.
 zig = use_extension("@rules_zig//zig:extensions.bzl", "zig")
 zig.toolchain(default, zig_version)
+zig.index(file)
 
Installs a Zig toolchain. @@ -27,6 +28,10 @@ declares one as the default. ### toolchain +Fetch and define toolchain targets for the given Zig SDK version. + +Defaults to the latest known release version. + **Attributes** | Name | Description | Type | Mandatory | Default | @@ -34,4 +39,20 @@ declares one as the default. | default | Make this the default Zig SDK version. Can only be used once, and only in the root module. | Boolean | optional | `False` | | zig_version | The Zig SDK version. | String | required | | + + +### index + +Extend the set of known Zig SDK versions based on a Zig version index. + +The provided index must use a schema that is compatible with the [upstream index]. + +[upstream index]: https://ziglang.org/download/index.json + +**Attributes** + +| Name | Description | Type | Mandatory | Default | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| file | The Zig version index JSON file. | Label | required | | + From d1a593ee5f8dbc8317de8328f9cd120901d389fc Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Fri, 3 May 2024 08:28:35 +0200 Subject: [PATCH 06/18] feat: Support user defined Zig version index files --- MODULE.bazel | 1 + zig/private/bzlmod/zig.bzl | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index b973f710..7f96131f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,6 +9,7 @@ bazel_dep(name = "bazel_skylib", version = "1.6.1") bazel_dep(name = "platforms", version = "0.0.10") zig = use_extension("//zig:extensions.bzl", "zig") +zig.index(file = "//zig/private:versions.json") use_repo(zig, "zig_toolchains") register_toolchains("@rules_zig//zig/target:all") diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 32e0e1c5..56e3da71 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -107,9 +107,26 @@ def _parse_zig_versions_json(json_string): return result +def _merge_version_specs(version_specs): + result = {} + + for spec in version_specs: + for version, platforms in spec.items(): + for platform, info in platforms.items(): + result.setdefault(version, {})[platform] = info + + return result + def _toolchain_extension(module_ctx): - zig_versions_json_path = module_ctx.path(Label("//zig/private:versions.json")) - known_versions = _parse_zig_versions_json(module_ctx.read(zig_versions_json_path)) + version_specs = [] + for mod in module_ctx.modules: + for index in mod.tags.index: + file_path = module_ctx.path(index.file) + file_content = module_ctx.read(file_path) + parsed = _parse_zig_versions_json(file_content) + version_specs.append(parsed) + + known_versions = _merge_version_specs(version_specs) (err, versions) = handle_toolchain_tags(module_ctx.modules, known_versions = known_versions) From c4e528aad6da4c71a99397f3128dc45f6a3e2db9 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Fri, 3 May 2024 08:37:22 +0200 Subject: [PATCH 07/18] Support JSON parsing error reporting --- zig/private/bzlmod/zig.bzl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 56e3da71..49e2d935 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -105,7 +105,7 @@ def _parse_zig_versions_json(json_string): sha256 = info["shasum"], ) - return result + return None, result def _merge_version_specs(version_specs): result = {} @@ -123,7 +123,11 @@ def _toolchain_extension(module_ctx): for index in mod.tags.index: file_path = module_ctx.path(index.file) file_content = module_ctx.read(file_path) - parsed = _parse_zig_versions_json(file_content) + (err, parsed) = _parse_zig_versions_json(file_content) + + if err != None: + fail(err, index) + version_specs.append(parsed) known_versions = _merge_version_specs(version_specs) From 9d86c8f78f431069291219fc5e70b7a3c1cb84b3 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Fri, 3 May 2024 08:48:15 +0200 Subject: [PATCH 08/18] Test Zig version index parsing --- zig/private/bzlmod/zig.bzl | 15 ++++++- zig/tests/bzlmod_zig_test.bzl | 83 ++++++++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 49e2d935..43143ee8 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -94,7 +94,18 @@ def handle_toolchain_tags(modules, *, known_versions): return None, versions -def _parse_zig_versions_json(json_string): +def parse_zig_versions_json(json_string): + """Parse a Zig SDK versions index in JSON format. + + Exposed as a standalone function for unit testing. + + Args: + json_string: String, The version index in JSON format. + + Returns: + (err, data), maybe an error or a + `dict[version, dict[platform, struct(url, sha256)]]`. + """ result = {} data = json.decode(json_string) @@ -123,7 +134,7 @@ def _toolchain_extension(module_ctx): for index in mod.tags.index: file_path = module_ctx.path(index.file) file_content = module_ctx.read(file_path) - (err, parsed) = _parse_zig_versions_json(file_content) + (err, parsed) = parse_zig_versions_json(file_content) if err != None: fail(err, index) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index 277a4605..d6531ce8 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -2,7 +2,87 @@ load("@bazel_skylib//lib:partial.bzl", "partial") load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//zig/private/bzlmod:zig.bzl", "handle_toolchain_tags") +load( + "//zig/private/bzlmod:zig.bzl", + "handle_toolchain_tags", + "parse_zig_versions_json", +) + +def _parse_zig_index_test_impl(ctx): + env = unittest.begin(ctx) + + content = "{}" + expected = {} + result = parse_zig_versions_json(content) + asserts.equals(env, (None, expected), result) + + content = """\ +{ + "0.12.0": { + "aarch64-linux": { + "tarball": "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + "shasum": "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63" + } + } +} +""" + expected = { + "0.12.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + sha256 = "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63", + ), + }, + } + result = parse_zig_versions_json(content) + asserts.equals(env, (None, expected), result) + + content = """\ +{ + "0.12.0": { + "aarch64-linux": { + "tarball": "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + "shasum": "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63" + } + }, + "0.11.0": { + "aarch64-linux": { + "tarball": "https://ziglang.org/download/0.11.0/zig-linux-aarch64-0.11.0.tar.xz", + "shasum": "956eb095d8ba44ac6ebd27f7c9956e47d92937c103bf754745d0a39cdaa5d4c6" + }, + "aarch64-macos": { + "tarball": "https://ziglang.org/download/0.11.0/zig-macos-aarch64-0.11.0.tar.xz", + "shasum": "c6ebf927bb13a707d74267474a9f553274e64906fd21bf1c75a20bde8cadf7b2" + } + } +} +""" + expected = { + "0.12.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + sha256 = "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63", + ), + }, + "0.11.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.11.0/zig-linux-aarch64-0.11.0.tar.xz", + sha256 = "956eb095d8ba44ac6ebd27f7c9956e47d92937c103bf754745d0a39cdaa5d4c6", + ), + "aarch64-macos": struct( + url = "https://ziglang.org/download/0.11.0/zig-macos-aarch64-0.11.0.tar.xz", + sha256 = "c6ebf927bb13a707d74267474a9f553274e64906fd21bf1c75a20bde8cadf7b2", + ), + }, + } + result = parse_zig_versions_json(content) + asserts.equals(env, (None, expected), result) + + return unittest.end(env) + +_parse_zig_index_test = unittest.make( + _parse_zig_index_test_impl, +) def _zig_versions_test_impl(ctx): env = unittest.begin(ctx) @@ -264,4 +344,5 @@ def bzlmod_zig_test_suite(name): unittest.suite( name, partial.make(_zig_versions_test, size = "small"), + partial.make(_parse_zig_index_test, size = "small"), ) From 3f3643c32589dc1f9e834f3a5ecaf2084e8397a3 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Fri, 3 May 2024 08:54:36 +0200 Subject: [PATCH 09/18] Test JSON parsing failure cases --- zig/private/bzlmod/zig.bzl | 12 +++++++++++- zig/tests/bzlmod_zig_test.bzl | 31 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 43143ee8..25df8e8a 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -108,9 +108,19 @@ def parse_zig_versions_json(json_string): """ result = {} - data = json.decode(json_string) + data = json.decode(json_string, default = None) + + if data == None: + return "Invalid JSON format in Zig SDK version index.", None + for version, platforms in data.items(): for platform, info in platforms.items(): + if not "tarball" in info: + return "Missing `tarball` field in Zig SDK version index.", None + + if not "shasum" in info: + return "Missing `shasum` field in Zig SDK version index.", None + result.setdefault(version, {})[platform] = struct( url = info["tarball"], sha256 = info["shasum"], diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index d6531ce8..a7783acf 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -78,6 +78,37 @@ def _parse_zig_index_test_impl(ctx): result = parse_zig_versions_json(content) asserts.equals(env, (None, expected), result) + content = "" + expected_err = "Invalid JSON format in Zig SDK version index." + result = parse_zig_versions_json(content) + asserts.equals(env, (expected_err, None), result) + + content = """\ +{ + "0.12.0": { + "aarch64-linux": { + "shasum": "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63" + } + } +} +""" + expected_err = "Missing `tarball` field in Zig SDK version index." + result = parse_zig_versions_json(content) + asserts.equals(env, (expected_err, None), result) + + content = """\ +{ + "0.12.0": { + "aarch64-linux": { + "tarball": "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz" + } + } +} +""" + expected_err = "Missing `shasum` field in Zig SDK version index." + result = parse_zig_versions_json(content) + asserts.equals(env, (expected_err, None), result) + return unittest.end(env) _parse_zig_index_test = unittest.make( From a9366dd79e9d6a132c5fda91a1da238bf2fac0c2 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Fri, 3 May 2024 08:59:56 +0200 Subject: [PATCH 10/18] Parse nightly version --- zig/private/bzlmod/zig.bzl | 6 ++++++ zig/tests/bzlmod_zig_test.bzl | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 25df8e8a..74a81956 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -114,7 +114,13 @@ def parse_zig_versions_json(json_string): return "Invalid JSON format in Zig SDK version index.", None for version, platforms in data.items(): + if "version" in platforms: + version = platforms["version"] + for platform, info in platforms.items(): + if type(info) != "dict": + continue + if not "tarball" in info: return "Missing `tarball` field in Zig SDK version index.", None diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index a7783acf..92a669a2 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -78,6 +78,29 @@ def _parse_zig_index_test_impl(ctx): result = parse_zig_versions_json(content) asserts.equals(env, (None, expected), result) + content = """\ +{ + "master": { + "version": "0.13.0-dev.46+3648d7df1", + "x86_64-macos": { + "tarball": "https://ziglang.org/builds/zig-macos-x86_64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "d8fb090bd69d7e191a3443520da5c52da430fbffc0de12ac87a114a6cc1f20ca", + "size": "47206948" + } + } +} +""" + expected = { + "0.13.0-dev.46+3648d7df1": { + "x86_64-macos": struct( + url = "https://ziglang.org/builds/zig-macos-x86_64-0.13.0-dev.46+3648d7df1.tar.xz", + sha256 = "d8fb090bd69d7e191a3443520da5c52da430fbffc0de12ac87a114a6cc1f20ca", + ), + }, + } + result = parse_zig_versions_json(content) + asserts.equals(env, (None, expected), result) + content = "" expected_err = "Invalid JSON format in Zig SDK version index." result = parse_zig_versions_json(content) From 19a17a2f762a48c98ad930f212d688358f148612 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 11:52:44 +0200 Subject: [PATCH 11/18] Test full index format parsing --- zig/tests/bzlmod_zig_test.bzl | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index 92a669a2..989069f3 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -101,6 +101,69 @@ def _parse_zig_index_test_impl(ctx): result = parse_zig_versions_json(content) asserts.equals(env, (None, expected), result) + content = """\ +{ + "master": { + "version": "0.13.0-dev.46+3648d7df1", + "date": "2024-04-26", + "docs": "https://ziglang.org/documentation/master/", + "stdDocs": "https://ziglang.org/documentation/master/std/", + "src": { + "tarball": "https://ziglang.org/builds/zig-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "08190cb4482be355acaecaae9d7936e4fad47180c97ca8138b97a122a313cd99", + "size": "17111524" + }, + "bootstrap": { + "tarball": "https://ziglang.org/builds/zig-bootstrap-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "78569b44dbfb8ec0cddbd1fa69ce398b973bd05c7f3b87f070cc2a0ba9c86571", + "size": "45555796" + }, + "x86_64-macos": { + "tarball": "https://ziglang.org/builds/zig-macos-x86_64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "d8fb090bd69d7e191a3443520da5c52da430fbffc0de12ac87a114a6cc1f20ca", + "size": "47206948" + } + }, + "0.12.0": { + "date": "2024-04-20", + "docs": "https://ziglang.org/documentation/0.12.0/", + "stdDocs": "https://ziglang.org/documentation/0.12.0/std/", + "notes": "https://ziglang.org/download/0.12.0/release-notes.html", + "src": { + "tarball": "https://ziglang.org/download/0.12.0/zig-0.12.0.tar.xz", + "shasum": "a6744ef84b6716f976dad923075b2f54dc4f785f200ae6c8ea07997bd9d9bd9a", + "size": "17099152" + }, + "bootstrap": { + "tarball": "https://ziglang.org/download/0.12.0/zig-bootstrap-0.12.0.tar.xz", + "shasum": "3efc643d56421fa68072af94d5512cb71c61acf1c32512f77c0b4590bff63187", + "size": "45527312" + }, + "x86_64-macos": { + "tarball": "https://ziglang.org/download/0.12.0/zig-macos-x86_64-0.12.0.tar.xz", + "shasum": "4d411bf413e7667821324da248e8589278180dbc197f4f282b7dbb599a689311", + "size": "47185720" + } + } +} +""" + expected = { + "0.13.0-dev.46+3648d7df1": { + "x86_64-macos": struct( + url = "https://ziglang.org/builds/zig-macos-x86_64-0.13.0-dev.46+3648d7df1.tar.xz", + sha256 = "d8fb090bd69d7e191a3443520da5c52da430fbffc0de12ac87a114a6cc1f20ca", + ), + }, + "0.12.0": { + "x86_64-macos": struct( + url = "https://ziglang.org/download/0.12.0/zig-macos-x86_64-0.12.0.tar.xz", + sha256 = "4d411bf413e7667821324da248e8589278180dbc197f4f282b7dbb599a689311", + ), + }, + } + result = parse_zig_versions_json(content) + asserts.equals(env, (None, expected), result) + content = "" expected_err = "Invalid JSON format in Zig SDK version index." result = parse_zig_versions_json(content) From cb54133b0cb7e5f3506eef7168a8f89ed0bab57d Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 16:46:29 +0200 Subject: [PATCH 12/18] Filter out unknown platforms --- zig/private/bzlmod/zig.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 74a81956..3c8aba56 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -118,7 +118,7 @@ def parse_zig_versions_json(json_string): version = platforms["version"] for platform, info in platforms.items(): - if type(info) != "dict": + if type(info) != "dict" or not platform in PLATFORMS: continue if not "tarball" in info: From 38139aaa73b9a4699f7f05e6ff7d663563fe6446 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 16:47:55 +0200 Subject: [PATCH 13/18] Test for bad version numbers --- zig/tests/bzlmod_zig_test.bzl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index 989069f3..2cd01cf8 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -195,6 +195,20 @@ def _parse_zig_index_test_impl(ctx): result = parse_zig_versions_json(content) asserts.equals(env, (expected_err, None), result) + content = """\ +{ + "bad-version": { + "aarch64-linux": { + "tarball": "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + "shasum": "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63" + } + } +} +""" + expected_err = "Malformed version number in Zig SDK version index." + result = parse_zig_versions_json(content) + asserts.equals(env, (expected_err, None), result) + return unittest.end(env) _parse_zig_index_test = unittest.make( From 3b1645aee8589b0877494546d5456a20a5a4a98c Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 16:56:53 +0200 Subject: [PATCH 14/18] Validate version numbers --- zig/private/bzlmod/zig.bzl | 3 +++ zig/private/common/semver.bzl | 14 ++++++++++++++ zig/tests/bzlmod_zig_test.bzl | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 3c8aba56..183d8d86 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -117,6 +117,9 @@ def parse_zig_versions_json(json_string): if "version" in platforms: version = platforms["version"] + if not semver.is_valid(version): + return "Malformed version number '{}' in Zig SDK version index.".format(version), None + for platform, info in platforms.items(): if type(info) != "dict" or not platform in PLATFORMS: continue diff --git a/zig/private/common/semver.bzl b/zig/private/common/semver.bzl index eaa49044..b035f533 100644 --- a/zig/private/common/semver.bzl +++ b/zig/private/common/semver.bzl @@ -63,6 +63,19 @@ def _grouped(versions): patch = patch, ) +def _is_valid(version): + """Validate the formatting of a semantic version.""" + if version.count(".") < 2: + return False + + v = _split(version) + + return all([ + v.major.isdigit(), + v.minor.isdigit(), + v.patch.isdigit(), + ]) + def _parse_pre_release_component(component): """Parse a pre-release component for sorting.""" num = float("+Infinity") @@ -101,4 +114,5 @@ def _sorted(versions, *, reverse = False): semver = struct( grouped = _grouped, sorted = _sorted, + is_valid = _is_valid, ) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index 2cd01cf8..3c7c40f5 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -205,7 +205,7 @@ def _parse_zig_index_test_impl(ctx): } } """ - expected_err = "Malformed version number in Zig SDK version index." + expected_err = "Malformed version number 'bad-version' in Zig SDK version index." result = parse_zig_versions_json(content) asserts.equals(env, (expected_err, None), result) From 1845d67c6c27496ee60eb7e5b565fdc8298d1aac Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 17:04:17 +0200 Subject: [PATCH 15/18] Test version spec merging --- zig/private/bzlmod/zig.bzl | 14 ++++++-- zig/tests/bzlmod_zig_test.bzl | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index 183d8d86..a74579ef 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -137,7 +137,17 @@ def parse_zig_versions_json(json_string): return None, result -def _merge_version_specs(version_specs): +def merge_version_specs(version_specs): + """Merge Zig SDK version indices. + + Exposed as a standalone function for unit testing. + + Args: + version_specs: sequence of `dict[version, dict[platform, struct(url, sha256)]]`. + + Returns: + `dict[version, dict[platform, struct(url, sha256)]]` + """ result = {} for spec in version_specs: @@ -160,7 +170,7 @@ def _toolchain_extension(module_ctx): version_specs.append(parsed) - known_versions = _merge_version_specs(version_specs) + known_versions = merge_version_specs(version_specs) (err, versions) = handle_toolchain_tags(module_ctx.modules, known_versions = known_versions) diff --git a/zig/tests/bzlmod_zig_test.bzl b/zig/tests/bzlmod_zig_test.bzl index 3c7c40f5..c89dafd2 100644 --- a/zig/tests/bzlmod_zig_test.bzl +++ b/zig/tests/bzlmod_zig_test.bzl @@ -5,6 +5,7 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") load( "//zig/private/bzlmod:zig.bzl", "handle_toolchain_tags", + "merge_version_specs", "parse_zig_versions_json", ) @@ -215,6 +216,67 @@ _parse_zig_index_test = unittest.make( _parse_zig_index_test_impl, ) +def _merge_version_specs_test_impl(ctx): + env = unittest.begin(ctx) + + asserts.equals( + env, + {}, + merge_version_specs([]), + ) + + asserts.equals( + env, + { + "0.12.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + sha256 = "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63", + ), + }, + "0.11.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.11.0/zig-linux-aarch64-0.11.0.tar.xz", + sha256 = "956eb095d8ba44ac6ebd27f7c9956e47d92937c103bf754745d0a39cdaa5d4c6", + ), + "aarch64-macos": struct( + url = "https://ziglang.org/download/0.11.0/zig-macos-aarch64-0.11.0.tar.xz", + sha256 = "c6ebf927bb13a707d74267474a9f553274e64906fd21bf1c75a20bde8cadf7b2", + ), + }, + }, + merge_version_specs([ + { + "0.12.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.12.0/zig-linux-aarch64-0.12.0.tar.xz", + sha256 = "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63", + ), + }, + "0.11.0": { + "aarch64-macos": struct( + url = "https://ziglang.org/download/0.11.0/zig-macos-aarch64-0.11.0.tar.xz", + sha256 = "c6ebf927bb13a707d74267474a9f553274e64906fd21bf1c75a20bde8cadf7b2", + ), + }, + }, + { + "0.11.0": { + "aarch64-linux": struct( + url = "https://ziglang.org/download/0.11.0/zig-linux-aarch64-0.11.0.tar.xz", + sha256 = "956eb095d8ba44ac6ebd27f7c9956e47d92937c103bf754745d0a39cdaa5d4c6", + ), + }, + }, + ]), + ) + + return unittest.end(env) + +_merge_version_specs_test = unittest.make( + _merge_version_specs_test_impl, +) + def _zig_versions_test_impl(ctx): env = unittest.begin(ctx) @@ -475,5 +537,6 @@ def bzlmod_zig_test_suite(name): unittest.suite( name, partial.make(_zig_versions_test, size = "small"), + partial.make(_merge_version_specs_test, size = "small"), partial.make(_parse_zig_index_test, size = "small"), ) From 256b6e9adf1bc36afb862f36a53f7789e0f5a54d Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 17:16:41 +0200 Subject: [PATCH 16/18] Integration test for extra versions index --- zig/tests/integration_tests/BUILD.bazel | 10 ++- .../integration_tests/workspace/MODULE.bazel | 7 +- .../workspace/extra-versions.json | 73 +++++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 zig/tests/integration_tests/workspace/extra-versions.json diff --git a/zig/tests/integration_tests/BUILD.bazel b/zig/tests/integration_tests/BUILD.bazel index 633207b3..a58b52b7 100644 --- a/zig/tests/integration_tests/BUILD.bazel +++ b/zig/tests/integration_tests/BUILD.bazel @@ -49,6 +49,10 @@ bazel_integration_tests( workspace_path = "workspace", ) +TEST_VERSIONS = TOOL_VERSIONS.keys() + [ + "0.13.0-dev.46+3648d7df1", +] + [ expand_template( name = "zig_version_test_%s_zig_source" % zig_version, @@ -58,7 +62,7 @@ bazel_integration_tests( }, template = "zig_version_test.zig.tpl", ) - for zig_version in TOOL_VERSIONS.keys() + for zig_version in TEST_VERSIONS ] write_file( @@ -68,7 +72,7 @@ write_file( "test {", ] + [ ' _ = @import("zig_version_test_%s.zig");' % zig_version - for zig_version in TOOL_VERSIONS.keys() + for zig_version in TEST_VERSIONS ] + [ "}", ], @@ -78,7 +82,7 @@ zig_test( name = "zig_version_tests_runner", srcs = [ "zig_version_test_%s.zig" % zig_version - for zig_version in TOOL_VERSIONS.keys() + for zig_version in TEST_VERSIONS ], main = "zig_version_tests_runner.zig", tags = ["manual"], diff --git a/zig/tests/integration_tests/workspace/MODULE.bazel b/zig/tests/integration_tests/workspace/MODULE.bazel index 92d97abd..85410087 100644 --- a/zig/tests/integration_tests/workspace/MODULE.bazel +++ b/zig/tests/integration_tests/workspace/MODULE.bazel @@ -7,6 +7,11 @@ local_path_override( ) zig = use_extension("@rules_zig//zig:extensions.bzl", "zig") -zig.toolchain(zig_version = "0.12.0") +zig.index(file = "extra-versions.json") +zig.toolchain(zig_version = "0.13.0-dev.46+3648d7df1") +zig.toolchain( + default = True, + zig_version = "0.12.0", +) zig.toolchain(zig_version = "0.11.0") use_repo(zig, "zig_toolchains") diff --git a/zig/tests/integration_tests/workspace/extra-versions.json b/zig/tests/integration_tests/workspace/extra-versions.json new file mode 100644 index 00000000..41460530 --- /dev/null +++ b/zig/tests/integration_tests/workspace/extra-versions.json @@ -0,0 +1,73 @@ +{ + "master": { + "version": "0.13.0-dev.46+3648d7df1", + "date": "2024-04-26", + "docs": "https://ziglang.org/documentation/master/", + "stdDocs": "https://ziglang.org/documentation/master/std/", + "src": { + "tarball": "https://ziglang.org/builds/zig-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "08190cb4482be355acaecaae9d7936e4fad47180c97ca8138b97a122a313cd99", + "size": "17111524" + }, + "bootstrap": { + "tarball": "https://ziglang.org/builds/zig-bootstrap-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "78569b44dbfb8ec0cddbd1fa69ce398b973bd05c7f3b87f070cc2a0ba9c86571", + "size": "45555796" + }, + "x86_64-macos": { + "tarball": "https://ziglang.org/builds/zig-macos-x86_64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "d8fb090bd69d7e191a3443520da5c52da430fbffc0de12ac87a114a6cc1f20ca", + "size": "47206948" + }, + "aarch64-macos": { + "tarball": "https://ziglang.org/builds/zig-macos-aarch64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "37784926f45e5aba87f72f19de704adcb30604871df0c3ef6c0d177ae84bb741", + "size": "43466292" + }, + "x86_64-linux": { + "tarball": "https://ziglang.org/builds/zig-linux-x86_64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "746e1102a6452722d382252cc6aed8728c7389ea16431bf5bc5ba0adc0f7e524", + "size": "45513200" + }, + "aarch64-linux": { + "tarball": "https://ziglang.org/builds/zig-linux-aarch64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "b18710c4b62663be0b31aac80ef6916bf6763070e5fe3201ee273f033d828a70", + "size": "41880840" + }, + "armv7a-linux": { + "tarball": "https://ziglang.org/builds/zig-linux-armv7a-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "a5f20e3cdbe8b3d88c83d6ac7a3739f18ba7d2c5f20c31c5d3a765427593be48", + "size": "42686280" + }, + "riscv64-linux": { + "tarball": "https://ziglang.org/builds/zig-linux-riscv64-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "e41ea9b6cfa9c653614ffeee77e7ae1212201dfabdb02bd70aad191232947da1", + "size": "43932784" + }, + "powerpc64le-linux": { + "tarball": "https://ziglang.org/builds/zig-linux-powerpc64le-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "611edc13d17a26a0f6ca6723bd86e0bb28270415fadfcafaebd03240ae649e0a", + "size": "45260476" + }, + "x86-linux": { + "tarball": "https://ziglang.org/builds/zig-linux-x86-0.13.0-dev.46+3648d7df1.tar.xz", + "shasum": "f078dc7cf4610149a5e444a1e3bec9d336b6d09c44310969d3111638b784a754", + "size": "50565396" + }, + "x86_64-windows": { + "tarball": "https://ziglang.org/builds/zig-windows-x86_64-0.13.0-dev.46+3648d7df1.zip", + "shasum": "7c76330891cc1283151defede948b67a568920dfde3a723a64a101c5e67d68ed", + "size": "77031600" + }, + "aarch64-windows": { + "tarball": "https://ziglang.org/builds/zig-windows-aarch64-0.13.0-dev.46+3648d7df1.zip", + "shasum": "fc8541916e36f4a767b6661c72473399bf5e32481d5ac5ab29b385992c770b34", + "size": "73556923" + }, + "x86-windows": { + "tarball": "https://ziglang.org/builds/zig-windows-x86-0.13.0-dev.46+3648d7df1.zip", + "shasum": "f32665b9763f7a862a72bc1833ca35e284ae73b5055ff57e22abad21c8e8beb5", + "size": "81538193" + } + } +} From 13466f7fe687c9b39e3d18244112af80030f527e Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 17:19:04 +0200 Subject: [PATCH 17/18] adjust test size --- zig/tests/integration_tests/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zig/tests/integration_tests/BUILD.bazel b/zig/tests/integration_tests/BUILD.bazel index a58b52b7..452a16cb 100644 --- a/zig/tests/integration_tests/BUILD.bazel +++ b/zig/tests/integration_tests/BUILD.bazel @@ -91,7 +91,7 @@ zig_test( bazel_integration_test( name = "zig_version_tests", - size = "small", + size = "medium", bazel_version = bazel_binaries.versions.current, tags = ["requires-network"] + integration_test_utils.DEFAULT_INTEGRATION_TEST_TAGS, test_runner = ":zig_version_tests_runner", From 45ff2c026f17de048a6d410280d5f0bf509e22e7 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sat, 4 May 2024 17:21:17 +0200 Subject: [PATCH 18/18] docs: specify default as latest known version We do not currently attempt to distinguish release from pre-release versions. --- docs/extensions.md | 2 +- zig/private/bzlmod/zig.bzl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/extensions.md b/docs/extensions.md index cd5a2b2e..c9b3acde 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -30,7 +30,7 @@ declares one as the default. Fetch and define toolchain targets for the given Zig SDK version. -Defaults to the latest known release version. +Defaults to the latest known version. **Attributes** diff --git a/zig/private/bzlmod/zig.bzl b/zig/private/bzlmod/zig.bzl index a74579ef..979f7a36 100644 --- a/zig/private/bzlmod/zig.bzl +++ b/zig/private/bzlmod/zig.bzl @@ -31,7 +31,7 @@ zig_toolchain = tag_class( doc = """\ Fetch and define toolchain targets for the given Zig SDK version. -Defaults to the latest known release version. +Defaults to the latest known version. """, )