Skip to content

Commit 25c8801

Browse files
authored
Merge pull request #543 from cerisier/mirrors
feat: support Zig mirrors
2 parents 378a138 + 1732daa commit 25c8801

File tree

11 files changed

+222
-3
lines changed

11 files changed

+222
-3
lines changed

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ build --workspace_status_command=$(pwd)/workspace_status.sh
1818
# To update these lines, execute
1919
# `bazel run @rules_bazel_integration_test//tools:update_deleted_packages`
2020
# docs: https://bazel.build/reference/command-line-reference#flag--deleted_packages
21-
build --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
22-
query --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
21+
build --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
22+
query --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
2323

2424
# Load any settings specific to the current user.
2525
# Place settings that should affect the integration tests into `.bazelrc.ic.user`.

docs/extensions.md

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

zig/private/bzlmod/zig.bzl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,16 @@ The provided index must use a schema that is compatible with the [upstream index
4848
""",
4949
)
5050

51+
zig_mirrors = tag_class(
52+
attrs = {
53+
"urls": attr.string_list(doc = "The mirrors base URLs.", mandatory = True),
54+
},
55+
)
56+
5157
TAG_CLASSES = {
5258
"toolchain": zig_toolchain,
5359
"index": zig_index,
60+
"mirrors": zig_mirrors,
5461
}
5562

5663
def handle_toolchain_tags(modules, *, known_versions):
@@ -158,8 +165,11 @@ def merge_version_specs(version_specs):
158165
return result
159166

160167
def _toolchain_extension(module_ctx):
168+
mirrors = []
161169
version_specs = []
162170
for mod in module_ctx.modules:
171+
for mirrors_tag in mod.tags.mirrors:
172+
mirrors.extend(mirrors_tag.urls)
163173
for index in mod.tags.index:
164174
file_path = module_ctx.path(index.file)
165175
file_content = module_ctx.read(file_path)
@@ -194,6 +204,7 @@ def _toolchain_extension(module_ctx):
194204
zig_repository(
195205
name = repo_name,
196206
url = known_versions[zig_version][platform].url,
207+
mirrors = mirrors,
197208
sha256 = known_versions[zig_version][platform].sha256,
198209
zig_version = zig_version,
199210
platform = platform,

zig/private/repo/zig_repository.bzl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ DOC = "Fetch and install a Zig toolchain."
1414

1515
ATTRS = {
1616
"url": attr.string(mandatory = True, doc = "The URL to the Zig SDK release archive."),
17+
"mirrors": attr.string_list(mandatory = True, doc = "List of URLs to Zig releases mirrors."),
1718
"sha256": attr.string(mandatory = False, doc = "The expected SHA-256 of the downloaded artifact. Provide only one of `sha256` or `integrity`."),
1819
"integrity": attr.string(mandatory = False, doc = "The expected checksum of the downloaded artifact in Subresource Integrity format. Provide only one of `sha256` or `integrity`."),
1920
"zig_version": attr.string(mandatory = True, doc = "The Zig SDK version number."),
@@ -63,6 +64,13 @@ def _get_integrity_args(*, sha256, integrity):
6364

6465
return result
6566

67+
def _mirrors_urls(url, mirrors):
68+
filename = _basename(url)
69+
return [
70+
mirror + "/" + filename
71+
for mirror in mirrors
72+
] + [url]
73+
6674
def _zig_repository_impl(repository_ctx):
6775
cache_prefix = env_zig_cache_prefix(
6876
repository_ctx.os.environ,
@@ -95,7 +103,10 @@ zig_toolchain(
95103
repository_ctx.file("BUILD.bazel", build_content)
96104

97105
download_args = {
98-
"url": repository_ctx.attr.url,
106+
"url": _mirrors_urls(
107+
url = repository_ctx.attr.url,
108+
mirrors = repository_ctx.attr.mirrors,
109+
),
99110
"stripPrefix": _get_strip_prefix(url = repository_ctx.attr.url),
100111
}
101112
integrity = _get_integrity_args(

zig/tests/integration_tests/BUILD.bazel

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,38 @@ bazel_integration_tests(
126126
workspace_path = "minimal",
127127
)
128128

129+
mirrors_files = integration_test_utils.glob_workspace_files("mirrors") + [
130+
"//:all_files",
131+
"//:bazelrc",
132+
".bazelrc.meta",
133+
]
134+
135+
zig_test(
136+
name = "mirrors_tests_runner",
137+
main = "mirrors_tests_runner.zig",
138+
tags = ["manual"],
139+
deps = [":integration_testing"],
140+
)
141+
142+
bazel_integration_tests(
143+
name = "mirrors_test",
144+
timeout = "moderate",
145+
bazel_versions = bazel_binaries.versions.all,
146+
tags = ["requires-network"] + integration_test_utils.DEFAULT_INTEGRATION_TEST_TAGS,
147+
test_runner = ":mirrors_tests_runner",
148+
workspace_files = mirrors_files,
149+
workspace_path = "mirrors",
150+
)
151+
129152
test_suite(
130153
name = "integration_tests",
131154
tags = integration_test_utils.DEFAULT_INTEGRATION_TEST_TAGS,
132155
tests = integration_test_utils.bazel_integration_test_names(
133156
"minimal_test",
134157
bazel_binaries.versions.all,
158+
) + integration_test_utils.bazel_integration_test_names(
159+
"mirrors_test",
160+
bazel_binaries.versions.all,
135161
) + integration_test_utils.bazel_integration_test_names(
136162
"bzlmod_test",
137163
bazel_binaries.versions.all,
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Common configuration.
2+
import %workspace%/../../../../.bazelrc.common
3+
4+
# Zig build mode flag aliases. See further explanation in that file.
5+
import %workspace%/../../../../.bazelrc.flags
6+
7+
# Remote cache configuration.
8+
import %workspace%/../../../../.bazelrc.remote
9+
10+
# Build metadata
11+
import %workspace%/../.bazelrc.meta
12+
13+
# Load any settings specific to the current user.
14+
try-import %workspace%/../../../../.bazelrc.ic.user
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
load("@rules_zig//zig:defs.bzl", "zig_binary")
2+
3+
zig_binary(
4+
name = "binary",
5+
main = "main.zig",
6+
)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
module(name = "mirrors")
2+
3+
bazel_dep(name = "rules_zig", version = "0.0.0")
4+
bazel_dep(name = "platforms", version = "0.0.6")
5+
6+
bazel_dep(name = "rules_cc", version = "0.1.1", dev_dependency = True)
7+
8+
local_path_override(
9+
module_name = "rules_zig",
10+
path = "../../../..",
11+
)
12+
13+
zig = use_extension("@rules_zig//zig:extensions.bzl", "zig")
14+
15+
# https://ziglang.org/download/community-mirrors.txt
16+
zig.mirrors(urls = [
17+
"https://pkg.machengine.org/zig",
18+
"https://zigmirror.hryx.net/zig",
19+
"https://zig.linus.dev/zig",
20+
"https://zig.squirl.dev",
21+
"https://zig.florent.dev",
22+
"https://zig.mirror.mschae23.de/zig",
23+
"https://zigmirror.meox.dev",
24+
])
25+
zig.toolchain(
26+
default = True,
27+
zig_version = "0.15.1",
28+
)
29+
use_repo(zig, "zig_toolchains")
30+
31+
bazel_dep(name = "toolchains_buildbuddy", dev_dependency = True)
32+
archive_override(
33+
module_name = "toolchains_buildbuddy",
34+
integrity = "sha256-UA+poYaWFbPxgtoA2re4mX89c3/8yYchpKwr4pvvGOw=",
35+
strip_prefix = "buildbuddy-toolchain-ffd296b7a9821174cdb2188d1373fd262cacb09d",
36+
urls = ["https://github.com/buildbuddy-io/buildbuddy-toolchain/archive/ffd296b7a9821174cdb2188d1373fd262cacb09d.tar.gz"],
37+
)
38+
39+
buildbuddy = use_extension(
40+
"@toolchains_buildbuddy//:extensions.bzl",
41+
"buildbuddy",
42+
dev_dependency = True,
43+
)
44+
use_repo(buildbuddy, "buildbuddy_toolchain")

zig/tests/integration_tests/mirrors/WORKSPACE.bazel

Whitespace-only changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const std = @import("std");
2+
const builtin = @import("builtin");
3+
4+
pub fn main() void {
5+
if (builtin.zig_version.major == 0 and builtin.zig_version.minor >= 15) {
6+
std.fs.File.stdout().writeAll("Hello World!\n") catch unreachable;
7+
} else {
8+
std.io.getStdOut().writeAll("Hello World!\n") catch unreachable;
9+
}
10+
}

0 commit comments

Comments
 (0)