wip nix
$ ./ci/test bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) + cache_prefix=/tmp/bazel-zig-cc + echo '--- build a single target with very hermetic sandbox' --- build a single target with very hermetic sandbox + bazel build --experimental_use_hermetic_linux_sandbox --sandbox_writable_path=/tmp/bazel-zig-cc --sandbox_add_mount_pair=/proc //test/c:which_libc_linux_amd64_gnu.2.19 /nix/store/96ky1zdkpq871h2dlk198fz0zvklr1dr-bash-5.1-p16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) /nix/store/96ky1zdkpq871h2dlk198fz0zvklr1dr-bash-5.1-p16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) INFO: Analyzed target //test/c:which_libc_linux_amd64_gnu.2.19 (0 packages loaded, 0 targets configured). INFO: Found 1 target... Target //test/c:which_libc_linux_amd64_gnu.2.19 up-to-date: bazel-bin/test/c/which_libc_/libc_aware/platform:linux_amd64_gnu.2.19 INFO: Elapsed time: 1.147s, Critical Path: 0.02s INFO: 1 process: 1 internal. INFO: Build completed successfully, 1 total action + echo '--- bazel test ...' --- bazel test ... + bazel test ... /nix/store/96ky1zdkpq871h2dlk198fz0zvklr1dr-bash-5.1-p16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) /nix/store/96ky1zdkpq871h2dlk198fz0zvklr1dr-bash-5.1-p16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) ERROR: /home/motiejus/.cache/bazel/_bazel_motiejus/6ec14a6813f13f2c8f1d8cce5637da2e/external/local_jdk/BUILD.bazel:2:10: in fail_rule rule @local_jdk//:jdk: Traceback (most recent call last): File "/home/motiejus/.cache/bazel/_bazel_motiejus/6ec14a6813f13f2c8f1d8cce5637da2e/external/bazel_tools/tools/jdk/fail_rule.bzl", line 19, column 13, in _fail_rule_impl fail("%s %s" % (ctx.attr.header, ctx.attr.message)) Error in fail: Auto-Configuration Error: Cannot find Java binary bin/java in /home/motiejus/.cache/bazel/_bazel_motiejus/install/1349a6142c7ce93610b5832496a88870/embedded_tools/tools/jdk/nosystemjdk; either correct your JAVA_HOME, PATH or specify Java from remote repository (e.g. --java_runtime_version=remotejdk_11 ERROR: /home/motiejus/.cache/bazel/_bazel_motiejus/6ec14a6813f13f2c8f1d8cce5637da2e/external/local_jdk/BUILD.bazel:2:10: Analysis of target '@local_jdk//:jdk' failed ERROR: Analysis of target '//.direnv/flake-inputs/hfjyanh5shjsx6m3h1k8gw61s3azkk68-source/test/cgo:cgo_test_linux_amd64_gnu.2.19' failed; build aborted: INFO: Elapsed time: 1.853s INFO: 0 processes. FAILED: Build did NOT complete successfully (70 packages loaded, 11766 targets configured) Fetching repository @nixpkgs_go; Building Nix derivation ERROR: Couldn't start the build. Unable to run tests motiejus@mtwork:/code/bazel-zig-cc$
This commit is contained in:
parent
6d2ee8cad0
commit
2ea75419e0
7
.bazelrc
7
.bazelrc
@ -7,3 +7,10 @@ build --worker_sandboxing
|
||||
build --experimental_reuse_sandbox_directories
|
||||
build --incompatible_enable_cc_toolchain_resolution
|
||||
build --action_env BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
|
||||
|
||||
#https://github.com/tweag/rules_nixpkgs#nixpkgs_java_configure
|
||||
build --host_platform=@io_tweag_rules_nixpkgs//nixpkgs/platforms:host
|
||||
build --java_runtime_version=nixpkgs_java_11
|
||||
build --tool_java_runtime_version=nixpkgs_java_11
|
||||
build --java_language_version=11
|
||||
build --tool_java_language_version=11
|
||||
|
@ -1 +0,0 @@
|
||||
6.0.0
|
8
.envrc
8
.envrc
@ -1,7 +1,9 @@
|
||||
# Copyright 2023 Uber Technologies, Inc.
|
||||
# Licensed under the Apache License, Version 2.0
|
||||
|
||||
set -eu
|
||||
if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then
|
||||
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs="
|
||||
fi
|
||||
|
||||
BIN_DIR="$(git rev-parse --show-toplevel)/tools"
|
||||
export PATH="$BIN_DIR:$PATH"
|
||||
# Load the development shell defined in the flake.nix file
|
||||
use flake
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,5 +1,6 @@
|
||||
*~
|
||||
*.sw[op]
|
||||
/.direnv
|
||||
|
||||
/bazel-bazel-zig-cc
|
||||
/bazel-bin
|
||||
|
15
BUILD
15
BUILD
@ -1,22 +1,7 @@
|
||||
# Copyright 2023 Uber Technologies, Inc.
|
||||
# Licensed under the Apache License, Version 2.0
|
||||
|
||||
load("@bazel_gazelle//:def.bzl", "gazelle")
|
||||
|
||||
# gazelle:map_kind go_binary go_binary //rules:rules_go.bzl
|
||||
|
||||
# gazelle:build_file_name BUILD
|
||||
# gazelle:prefix github.com/uber/bazel-zig-cc
|
||||
# gazelle:exclude tools.go
|
||||
|
||||
gazelle(name = "gazelle")
|
||||
|
||||
gazelle(
|
||||
name = "gazelle-update-repos",
|
||||
args = [
|
||||
"-from_file=go.mod",
|
||||
"-to_macro=repositories.bzl%go_repositories",
|
||||
"-prune",
|
||||
],
|
||||
command = "update-repos",
|
||||
)
|
||||
|
35
WORKSPACE
35
WORKSPACE
@ -4,6 +4,12 @@ workspace(
|
||||
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
|
||||
http_archive(
|
||||
name = "io_tweag_rules_nixpkgs",
|
||||
strip_prefix = "rules_nixpkgs-f6df41ce89814672d656c9d4d61c65867fb4981a",
|
||||
urls = ["https://github.com/tweag/rules_nixpkgs/archive/f6df41ce89814672d656c9d4d61c65867fb4981a.tar.gz"],
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "io_bazel_rules_go",
|
||||
sha256 = "dd926a88a564a9246713a9c00b35315f54cbd46b31a26d5d8fb264c07045f05d",
|
||||
@ -22,6 +28,35 @@ http_archive(
|
||||
],
|
||||
)
|
||||
|
||||
load("@io_tweag_rules_nixpkgs//nixpkgs:repositories.bzl", "rules_nixpkgs_dependencies")
|
||||
|
||||
rules_nixpkgs_dependencies()
|
||||
|
||||
load("@io_tweag_rules_nixpkgs//nixpkgs:nixpkgs.bzl", "nixpkgs_cc_configure", "nixpkgs_local_repository")
|
||||
|
||||
nixpkgs_local_repository(
|
||||
name = "nixpkgs",
|
||||
nix_file = "//:nixpkgs.nix",
|
||||
nix_file_deps = ["//:flake.lock"],
|
||||
)
|
||||
|
||||
load("@io_tweag_rules_nixpkgs//nixpkgs:toolchains/go.bzl", "nixpkgs_go_configure")
|
||||
|
||||
nixpkgs_go_configure(
|
||||
repository = "@nixpkgs",
|
||||
sdk_name = "nixpkgs_go",
|
||||
)
|
||||
|
||||
load("@io_tweag_rules_nixpkgs//nixpkgs:nixpkgs.bzl", "nixpkgs_java_configure")
|
||||
|
||||
nixpkgs_java_configure(
|
||||
attribute_path = "jdk11.home",
|
||||
repository = "@nixpkgs",
|
||||
toolchain = True,
|
||||
toolchain_name = "nixpkgs_java",
|
||||
toolchain_version = "11",
|
||||
)
|
||||
|
||||
load("@io_bazel_rules_go//go:deps.bzl", "go_download_sdk", "go_register_toolchains", "go_rules_dependencies")
|
||||
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
set -xeuo pipefail
|
||||
|
||||
echo "--- which zig"
|
||||
ZIG=${ZIG:-$(tools/bazel run "$@" --run_under=echo @zig_sdk//:zig)}
|
||||
ZIG=${ZIG:-$(bazel run "$@" --run_under=echo @zig_sdk//:zig)}
|
||||
|
||||
echo "--- compile launcher.zig for various architectures"
|
||||
for target in \
|
||||
|
@ -6,7 +6,7 @@
|
||||
set -xeuo pipefail
|
||||
|
||||
echo "--- which zig"
|
||||
ZIG=${ZIG:-$(tools/bazel run "$@" --run_under=echo @zig_sdk//:zig)}
|
||||
ZIG=${ZIG:-$(bazel run "$@" --run_under=echo @zig_sdk//:zig)}
|
||||
|
||||
echo "--- test toolchain/launcher.zig via wine64"
|
||||
# ReleaseSafe because of https://github.com/ziglang/zig/issues/14036
|
||||
|
2
ci/lint
2
ci/lint
@ -23,4 +23,4 @@ tools/buildifier -r -mode check "$PWD"
|
||||
>&2 echo -e "OK\n"
|
||||
|
||||
>&2 echo "--- Gazelle :goat:"
|
||||
tools/bazel run //:gazelle -- -mode diff
|
||||
bazel run //:gazelle -- -mode diff
|
||||
|
@ -8,12 +8,12 @@ set -euo pipefail
|
||||
indent() { sed 's/^/ /'; }
|
||||
|
||||
echo "--- Available toolchains:"
|
||||
tools/bazel query --noshow_progress '@zig_sdk//toolchain:*' | indent
|
||||
bazel query --noshow_progress '@zig_sdk//toolchain:*' | indent
|
||||
echo "--- Available platforms:"
|
||||
tools/bazel query --noshow_progress '@zig_sdk//platform:*' | indent
|
||||
bazel query --noshow_progress '@zig_sdk//platform:*' | indent
|
||||
echo "--- Available libc aware toolchains:"
|
||||
tools/bazel query --noshow_progress '@zig_sdk//libc_aware/toolchain:*' | indent
|
||||
bazel query --noshow_progress '@zig_sdk//libc_aware/toolchain:*' | indent
|
||||
echo "--- Available libc aware platforms:"
|
||||
tools/bazel query --noshow_progress '@zig_sdk//libc_aware/platform:*' | indent
|
||||
bazel query --noshow_progress '@zig_sdk//libc_aware/platform:*' | indent
|
||||
echo "--- Available libc variants:"
|
||||
tools/bazel query --noshow_progress "attr(constraint_setting, @zig_sdk//libc:variant, @zig_sdk//...)" | indent
|
||||
bazel query --noshow_progress "attr(constraint_setting, @zig_sdk//libc:variant, @zig_sdk//...)" | indent
|
||||
|
@ -8,7 +8,7 @@ set -xeuo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
prev_ref=$(git rev-parse HEAD)
|
||||
git commit --allow-empty -m "this is a test commit"
|
||||
tools/bazel run //tools/releaser -- -tag v99.0.0
|
||||
bazel run //tools/releaser -- -tag v99.0.0
|
||||
cleanup() { git tag -d v99.0.0; git reset --hard "$prev_ref"; }
|
||||
trap cleanup EXIT
|
||||
|
||||
|
4
ci/test
4
ci/test
@ -13,7 +13,7 @@ cache_prefix="${BAZEL_ZIG_CC_CACHE_PREFIX:-/tmp/bazel-zig-cc}"
|
||||
# linux.
|
||||
|
||||
echo "--- build a single target with very hermetic sandbox"
|
||||
tools/bazel build "$@" \
|
||||
bazel build "$@" \
|
||||
--experimental_use_hermetic_linux_sandbox \
|
||||
--sandbox_writable_path="$cache_prefix" \
|
||||
--sandbox_add_mount_pair=/proc \
|
||||
@ -21,7 +21,7 @@ tools/bazel build "$@" \
|
||||
|
||||
# then test everything else with the standard sandbox
|
||||
echo "--- bazel test $* ..."
|
||||
tools/bazel test "$@" ...
|
||||
bazel test "$@" ...
|
||||
|
||||
echo "--- ensure github.com/ziglang/zig/issues/13050 does not regress"
|
||||
find "$cache_prefix" \
|
||||
|
60
flake.lock
generated
Normal file
60
flake.lock
generated
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1673956053,
|
||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1678901627,
|
||||
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1679472241,
|
||||
"narHash": "sha256-VK2YDic2NjPvfsuneJCLIrWS38qUfoW8rLLimx0rWXA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9ef6e7727f4c31507627815d4f8679c5841efb00",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-22.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
21
flake.nix
Normal file
21
flake.nix
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
|
||||
flake-compat = {
|
||||
url = "github:edolstra/flake-compat";
|
||||
flake = false;
|
||||
};
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
outputs = { nixpkgs, flake-utils, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
in
|
||||
{
|
||||
devShells.default = with pkgs; mkShell {
|
||||
name = "rules_nixpkgs_shell";
|
||||
packages = [ bazel_6 bazel-buildtools bazel-gazelle ];
|
||||
};
|
||||
});
|
||||
}
|
7
go.mod
7
go.mod
@ -1,10 +1,3 @@
|
||||
module github.com/uber/bazel-zig-cc
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/bazelbuild/buildtools v0.0.0-20230302165817-a6ca93fd072d
|
||||
|
||||
require (
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
)
|
||||
|
82
go.sum
82
go.sum
@ -1,82 +0,0 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/bazelbuild/buildtools v0.0.0-20230302165817-a6ca93fd072d h1:AfqOWCQPEd/qAi41zI5ovrK0d5oQbXdX+l5VonjZq7A=
|
||||
github.com/bazelbuild/buildtools v0.0.0-20230302165817-a6ca93fd072d/go.mod h1:689QdV3hBP7Vo9dJMmzhoYIyo/9iMhEmHkJcnaPRCbo=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
go.starlark.net v0.0.0-20210223155950-e043a3d3c984/go.mod h1:t3mmBBPzAVvK0L0n1drDmrQsJ8FoIx4INCqVMTr/Zo0=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
6
nixpkgs.nix
Normal file
6
nixpkgs.nix
Normal file
@ -0,0 +1,6 @@
|
||||
let
|
||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||
spec = lock.nodes.nixpkgs.locked;
|
||||
nixpkgs = fetchTarball "https://github.com/${spec.owner}/${spec.repo}/archive/${spec.rev}.tar.gz";
|
||||
in
|
||||
import nixpkgs
|
190
repositories.bzl
190
repositories.bzl
@ -4,192 +4,4 @@
|
||||
load("@bazel_gazelle//:deps.bzl", "go_repository")
|
||||
|
||||
def go_repositories():
|
||||
go_repository(
|
||||
name = "co_honnef_go_tools",
|
||||
importpath = "honnef.co/go/tools",
|
||||
sum = "h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs=",
|
||||
version = "v0.0.0-20190523083050-ea95bdfd59fc",
|
||||
)
|
||||
|
||||
go_repository(
|
||||
name = "com_github_bazelbuild_buildtools",
|
||||
importpath = "github.com/bazelbuild/buildtools",
|
||||
sum = "h1:AfqOWCQPEd/qAi41zI5ovrK0d5oQbXdX+l5VonjZq7A=",
|
||||
version = "v0.0.0-20230302165817-a6ca93fd072d",
|
||||
)
|
||||
|
||||
go_repository(
|
||||
name = "com_github_burntsushi_toml",
|
||||
importpath = "github.com/BurntSushi/toml",
|
||||
sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=",
|
||||
version = "v0.3.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_census_instrumentation_opencensus_proto",
|
||||
importpath = "github.com/census-instrumentation/opencensus-proto",
|
||||
sum = "h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=",
|
||||
version = "v0.2.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_chzyer_logex",
|
||||
importpath = "github.com/chzyer/logex",
|
||||
sum = "h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=",
|
||||
version = "v1.1.10",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_chzyer_readline",
|
||||
importpath = "github.com/chzyer/readline",
|
||||
sum = "h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=",
|
||||
version = "v0.0.0-20180603132655-2972be24d48e",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_chzyer_test",
|
||||
importpath = "github.com/chzyer/test",
|
||||
sum = "h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=",
|
||||
version = "v0.0.0-20180213035817-a1ea475d72b1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_client9_misspell",
|
||||
importpath = "github.com/client9/misspell",
|
||||
sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=",
|
||||
version = "v0.3.4",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_envoyproxy_go_control_plane",
|
||||
importpath = "github.com/envoyproxy/go-control-plane",
|
||||
sum = "h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=",
|
||||
version = "v0.9.1-0.20191026205805-5f8ba28d4473",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_envoyproxy_protoc_gen_validate",
|
||||
importpath = "github.com/envoyproxy/protoc-gen-validate",
|
||||
sum = "h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=",
|
||||
version = "v0.1.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_golang_glog",
|
||||
importpath = "github.com/golang/glog",
|
||||
sum = "h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=",
|
||||
version = "v0.0.0-20160126235308-23def4e6c14b",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_golang_mock",
|
||||
importpath = "github.com/golang/mock",
|
||||
sum = "h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=",
|
||||
version = "v1.1.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_golang_protobuf",
|
||||
importpath = "github.com/golang/protobuf",
|
||||
sum = "h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=",
|
||||
version = "v1.5.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_google_go_cmp",
|
||||
importpath = "github.com/google/go-cmp",
|
||||
sum = "h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=",
|
||||
version = "v0.5.5",
|
||||
)
|
||||
|
||||
go_repository(
|
||||
name = "com_github_prometheus_client_model",
|
||||
importpath = "github.com/prometheus/client_model",
|
||||
sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=",
|
||||
version = "v0.0.0-20190812154241-14fe0d1b01d4",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_google_cloud_go",
|
||||
importpath = "cloud.google.com/go",
|
||||
sum = "h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=",
|
||||
version = "v0.26.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "net_starlark_go",
|
||||
importpath = "go.starlark.net",
|
||||
sum = "h1:xwwDQW5We85NaTk2APgoN9202w/l0DVGp+GZMfsrh7s=",
|
||||
version = "v0.0.0-20210223155950-e043a3d3c984",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_google_appengine",
|
||||
importpath = "google.golang.org/appengine",
|
||||
sum = "h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=",
|
||||
version = "v1.4.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_google_genproto",
|
||||
importpath = "google.golang.org/genproto",
|
||||
sum = "h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=",
|
||||
version = "v0.0.0-20200526211855-cb27e3aa2013",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_google_grpc",
|
||||
importpath = "google.golang.org/grpc",
|
||||
sum = "h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=",
|
||||
version = "v1.27.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_google_protobuf",
|
||||
importpath = "google.golang.org/protobuf",
|
||||
sum = "h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=",
|
||||
version = "v1.28.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_crypto",
|
||||
importpath = "golang.org/x/crypto",
|
||||
sum = "h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=",
|
||||
version = "v0.0.0-20190308221718-c2843e01d9a2",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_exp",
|
||||
importpath = "golang.org/x/exp",
|
||||
sum = "h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=",
|
||||
version = "v0.0.0-20190121172915-509febef88a4",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_lint",
|
||||
importpath = "golang.org/x/lint",
|
||||
sum = "h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=",
|
||||
version = "v0.0.0-20190313153728-d0100b6bd8b3",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_net",
|
||||
importpath = "golang.org/x/net",
|
||||
sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=",
|
||||
version = "v0.0.0-20190311183353-d8887717615a",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_oauth2",
|
||||
importpath = "golang.org/x/oauth2",
|
||||
sum = "h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=",
|
||||
version = "v0.0.0-20180821212333-d2e6202438be",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_sync",
|
||||
importpath = "golang.org/x/sync",
|
||||
sum = "h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=",
|
||||
version = "v0.0.0-20190423024810-112230192c58",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_sys",
|
||||
importpath = "golang.org/x/sys",
|
||||
sum = "h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=",
|
||||
version = "v0.0.0-20200930185726-fdedc70b468f",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_text",
|
||||
importpath = "golang.org/x/text",
|
||||
sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=",
|
||||
version = "v0.3.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_tools",
|
||||
importpath = "golang.org/x/tools",
|
||||
sum = "h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=",
|
||||
version = "v0.0.0-20190524140312-2c0ae7006135",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_xerrors",
|
||||
importpath = "golang.org/x/xerrors",
|
||||
sum = "h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=",
|
||||
version = "v0.0.0-20200804184101-5ec99f83aff1",
|
||||
)
|
||||
pass
|
||||
|
5
tools.go
5
tools.go
@ -1,5 +0,0 @@
|
||||
package bazel_zig_cc
|
||||
|
||||
import (
|
||||
_ "github.com/bazelbuild/buildtools/buildifier"
|
||||
)
|
493
tools/bazel
493
tools/bazel
@ -1,493 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Copyright 2018 Google Inc. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
"""
|
||||
# Origin: https://github.com/bazelbuild/bazelisk/blob/fc3e3d68c42744dc1c01739f9710cc52f4a8258c/bazelisk.py
|
||||
|
||||
import base64
|
||||
from contextlib import closing
|
||||
import hashlib
|
||||
import json
|
||||
import netrc
|
||||
import os
|
||||
import os.path
|
||||
import platform
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
|
||||
try:
|
||||
from urllib.parse import urlparse
|
||||
from urllib.request import urlopen, Request
|
||||
from urllib.error import HTTPError
|
||||
except ImportError:
|
||||
# Python 2.x compatibility hack.
|
||||
# http://python-future.org/compatible_idioms.html?highlight=urllib#urllib-module
|
||||
from urlparse import urlparse
|
||||
from urllib2 import urlopen, Request, HTTPError
|
||||
|
||||
FileNotFoundError = IOError
|
||||
|
||||
ONE_HOUR = 1 * 60 * 60
|
||||
|
||||
LATEST_PATTERN = re.compile(r"latest(-(?P<offset>\d+))?$")
|
||||
|
||||
LAST_GREEN_COMMIT_BASE_PATH = (
|
||||
"https://storage.googleapis.com/bazel-untrusted-builds/last_green_commit/"
|
||||
)
|
||||
|
||||
LAST_GREEN_COMMIT_PATH_SUFFIXES = {
|
||||
"last_green": "github.com/bazelbuild/bazel.git/bazel-bazel",
|
||||
"last_downstream_green": "downstream_pipeline",
|
||||
}
|
||||
|
||||
BAZEL_GCS_PATH_PATTERN = (
|
||||
"https://storage.googleapis.com/bazel-builds/artifacts/{platform}/{commit}/bazel"
|
||||
)
|
||||
|
||||
SUPPORTED_PLATFORMS = {"linux": "ubuntu1404", "windows": "windows", "darwin": "macos"}
|
||||
|
||||
TOOLS_BAZEL_PATH = "./tools/bazel"
|
||||
|
||||
BAZEL_REAL = "BAZEL_REAL"
|
||||
|
||||
BAZEL_UPSTREAM = "bazelbuild"
|
||||
|
||||
|
||||
def decide_which_bazel_version_to_use():
|
||||
# Check in this order:
|
||||
# - env var "USE_BAZEL_VERSION" is set to a specific version.
|
||||
# - env var "USE_NIGHTLY_BAZEL" or "USE_BAZEL_NIGHTLY" is set -> latest
|
||||
# nightly. (TODO)
|
||||
# - env var "USE_CANARY_BAZEL" or "USE_BAZEL_CANARY" is set -> latest
|
||||
# rc. (TODO)
|
||||
# - the file workspace_root/tools/bazel exists -> that version. (TODO)
|
||||
# - workspace_root/.bazelversion exists -> read contents, that version.
|
||||
# - workspace_root/WORKSPACE contains a version -> that version. (TODO)
|
||||
# - fallback: latest release
|
||||
if "USE_BAZEL_VERSION" in os.environ:
|
||||
return os.environ["USE_BAZEL_VERSION"]
|
||||
|
||||
workspace_root = find_workspace_root()
|
||||
if workspace_root:
|
||||
bazelversion_path = os.path.join(workspace_root, ".bazelversion")
|
||||
if os.path.exists(bazelversion_path):
|
||||
with open(bazelversion_path, "r") as f:
|
||||
return f.read().strip()
|
||||
|
||||
return "latest"
|
||||
|
||||
|
||||
def find_workspace_root(root=None):
|
||||
if root is None:
|
||||
root = os.getcwd()
|
||||
if os.path.exists(os.path.join(root, "WORKSPACE")):
|
||||
return root
|
||||
new_root = os.path.dirname(root)
|
||||
return find_workspace_root(new_root) if new_root != root else None
|
||||
|
||||
|
||||
def resolve_version_label_to_number_or_commit(bazelisk_directory, version):
|
||||
"""Resolves the given label to a released version of Bazel or a commit.
|
||||
|
||||
Args:
|
||||
bazelisk_directory: string; path to a directory that can store
|
||||
temporary data for Bazelisk.
|
||||
version: string; the version label that should be resolved.
|
||||
Returns:
|
||||
A (string, bool) tuple that consists of two parts:
|
||||
1. the resolved number of a Bazel release (candidate), or the commit
|
||||
of an unreleased Bazel binary,
|
||||
2. An indicator for whether the returned version refers to a commit.
|
||||
"""
|
||||
suffix = LAST_GREEN_COMMIT_PATH_SUFFIXES.get(version)
|
||||
if suffix:
|
||||
return get_last_green_commit(suffix), True
|
||||
|
||||
if "latest" in version:
|
||||
match = LATEST_PATTERN.match(version)
|
||||
if not match:
|
||||
raise Exception(
|
||||
'Invalid version "{}". In addition to using a version '
|
||||
'number such as "0.20.0", you can use values such as '
|
||||
'"latest" and "latest-N", with N being a non-negative '
|
||||
"integer.".format(version)
|
||||
)
|
||||
|
||||
history = get_version_history(bazelisk_directory)
|
||||
offset = int(match.group("offset") or "0")
|
||||
return resolve_latest_version(history, offset), False
|
||||
|
||||
return version, False
|
||||
|
||||
|
||||
def get_last_green_commit(path_suffix):
|
||||
return read_remote_text_file(LAST_GREEN_COMMIT_BASE_PATH + path_suffix).strip()
|
||||
|
||||
|
||||
def get_releases_json(bazelisk_directory):
|
||||
"""Returns the most recent versions of Bazel, in descending order."""
|
||||
releases = os.path.join(bazelisk_directory, "releases.json")
|
||||
|
||||
# Use a cached version if it's fresh enough.
|
||||
if os.path.exists(releases):
|
||||
if abs(time.time() - os.path.getmtime(releases)) < ONE_HOUR:
|
||||
with open(releases, "rb") as f:
|
||||
try:
|
||||
return json.loads(f.read().decode("utf-8"))
|
||||
except ValueError:
|
||||
print("WARN: Could not parse cached releases.json.")
|
||||
pass
|
||||
|
||||
with open(releases, "wb") as f:
|
||||
body = read_remote_text_file("https://api.github.com/repos/bazelbuild/bazel/releases")
|
||||
f.write(body.encode("utf-8"))
|
||||
return json.loads(body)
|
||||
|
||||
|
||||
def read_remote_text_file(url):
|
||||
with closing(urlopen(url)) as res:
|
||||
body = res.read()
|
||||
try:
|
||||
return body.decode(res.info().get_content_charset("iso-8859-1"))
|
||||
except AttributeError:
|
||||
# Python 2.x compatibility hack
|
||||
return body.decode(res.info().getparam("charset") or "iso-8859-1")
|
||||
|
||||
|
||||
def get_version_history(bazelisk_directory):
|
||||
return sorted(
|
||||
(
|
||||
release["tag_name"]
|
||||
for release in get_releases_json(bazelisk_directory)
|
||||
if not release["prerelease"]
|
||||
),
|
||||
# This only handles versions with numeric components, but that is fine
|
||||
# since prerelease versions have been excluded.
|
||||
key=lambda version: tuple(int(component)
|
||||
for component in version.split('.')),
|
||||
reverse=True,
|
||||
)
|
||||
|
||||
|
||||
def resolve_latest_version(version_history, offset):
|
||||
if offset >= len(version_history):
|
||||
version = "latest-{}".format(offset) if offset else "latest"
|
||||
raise Exception(
|
||||
'Cannot resolve version "{}": There are only {} Bazel '
|
||||
"releases.".format(version, len(version_history))
|
||||
)
|
||||
|
||||
# This only works since we store the history in descending order.
|
||||
return version_history[offset]
|
||||
|
||||
|
||||
def get_operating_system():
|
||||
operating_system = platform.system().lower()
|
||||
if operating_system not in ("linux", "darwin", "windows"):
|
||||
raise Exception(
|
||||
'Unsupported operating system "{}". '
|
||||
"Bazel currently only supports Linux, macOS and Windows.".format(operating_system)
|
||||
)
|
||||
return operating_system
|
||||
|
||||
|
||||
def determine_executable_filename_suffix():
|
||||
operating_system = get_operating_system()
|
||||
return ".exe" if operating_system == "windows" else ""
|
||||
|
||||
|
||||
def determine_bazel_filename(version):
|
||||
operating_system = get_operating_system()
|
||||
supported_machines = get_supported_machine_archs(version, operating_system)
|
||||
machine = normalized_machine_arch_name()
|
||||
if machine not in supported_machines:
|
||||
raise Exception(
|
||||
'Unsupported machine architecture "{}". Bazel {} only supports {} on {}.'.format(
|
||||
machine, version, ", ".join(supported_machines), operating_system.capitalize()
|
||||
)
|
||||
)
|
||||
|
||||
filename_suffix = determine_executable_filename_suffix()
|
||||
bazel_flavor = "bazel"
|
||||
if os.environ.get("BAZELISK_NOJDK", "0") != "0":
|
||||
bazel_flavor = "bazel_nojdk"
|
||||
return "{}-{}-{}-{}{}".format(bazel_flavor, version, operating_system, machine, filename_suffix)
|
||||
|
||||
|
||||
def get_supported_machine_archs(version, operating_system):
|
||||
supported_machines = ["x86_64"]
|
||||
versions = version.split(".")[:2]
|
||||
if len(versions) == 2:
|
||||
# released version
|
||||
major, minor = int(versions[0]), int(versions[1])
|
||||
if (
|
||||
operating_system == "darwin"
|
||||
and (major > 4 or major == 4 and minor >= 1)
|
||||
or operating_system == "linux"
|
||||
and (major > 3 or major == 3 and minor >= 4)
|
||||
):
|
||||
# Linux arm64 was supported since 3.4.0.
|
||||
# Darwin arm64 was supported since 4.1.0.
|
||||
supported_machines.append("arm64")
|
||||
elif operating_system in ("darwin", "linux"):
|
||||
# This is needed to run bazelisk_test.sh on Linux and Darwin arm64 machines, which are
|
||||
# becoming more and more popular.
|
||||
# It works because all recent commits of Bazel support arm64 on Darwin and Linux.
|
||||
# However, this would add arm64 by mistake if the commit is too old, which should be
|
||||
# a rare scenario.
|
||||
supported_machines.append("arm64")
|
||||
return supported_machines
|
||||
|
||||
|
||||
def normalized_machine_arch_name():
|
||||
machine = platform.machine().lower()
|
||||
if machine == "amd64":
|
||||
machine = "x86_64"
|
||||
elif machine == "aarch64":
|
||||
machine = "arm64"
|
||||
return machine
|
||||
|
||||
|
||||
def determine_url(version, is_commit, bazel_filename):
|
||||
if is_commit:
|
||||
sys.stderr.write("Using unreleased version at commit {}\n".format(version))
|
||||
# No need to validate the platform thanks to determine_bazel_filename().
|
||||
return BAZEL_GCS_PATH_PATTERN.format(
|
||||
platform=SUPPORTED_PLATFORMS[platform.system().lower()], commit=version
|
||||
)
|
||||
|
||||
# Split version into base version and optional additional identifier.
|
||||
# Example: '0.19.1' -> ('0.19.1', None), '0.20.0rc1' -> ('0.20.0', 'rc1')
|
||||
(version, rc) = re.match(r"(\d*\.\d*(?:\.\d*)?)(rc\d+)?", version).groups()
|
||||
|
||||
if "BAZELISK_BASE_URL" in os.environ:
|
||||
return "{}/{}/{}".format(os.environ["BAZELISK_BASE_URL"], version, bazel_filename)
|
||||
else:
|
||||
return "https://releases.bazel.build/{}/{}/{}".format(
|
||||
version, rc if rc else "release", bazel_filename
|
||||
)
|
||||
|
||||
|
||||
def trim_suffix(string, suffix):
|
||||
if string.endswith(suffix):
|
||||
return string[: len(string) - len(suffix)]
|
||||
else:
|
||||
return string
|
||||
|
||||
|
||||
def download_bazel_into_directory(version, is_commit, directory):
|
||||
bazel_filename = determine_bazel_filename(version)
|
||||
bazel_url = determine_url(version, is_commit, bazel_filename)
|
||||
|
||||
filename_suffix = determine_executable_filename_suffix()
|
||||
bazel_directory_name = trim_suffix(bazel_filename, filename_suffix)
|
||||
destination_dir = os.path.join(directory, bazel_directory_name, "bin")
|
||||
maybe_makedirs(destination_dir)
|
||||
|
||||
destination_path = os.path.join(destination_dir, "bazel" + filename_suffix)
|
||||
if not os.path.exists(destination_path):
|
||||
download(bazel_url, destination_path)
|
||||
os.chmod(destination_path, 0o755)
|
||||
|
||||
sha256_path = destination_path + ".sha256"
|
||||
expected_hash = ""
|
||||
if not os.path.exists(sha256_path):
|
||||
try:
|
||||
download(bazel_url + ".sha256", sha256_path)
|
||||
except HTTPError as e:
|
||||
if e.code == 404:
|
||||
sys.stderr.write(
|
||||
"The Bazel mirror does not have a checksum file; skipping checksum verification."
|
||||
)
|
||||
return destination_path
|
||||
raise e
|
||||
with open(sha256_path, "r") as sha_file:
|
||||
expected_hash = sha_file.read().split()[0]
|
||||
sha256_hash = hashlib.sha256()
|
||||
with open(destination_path, "rb") as bazel_file:
|
||||
for byte_block in iter(lambda: bazel_file.read(4096), b""):
|
||||
sha256_hash.update(byte_block)
|
||||
actual_hash = sha256_hash.hexdigest()
|
||||
if actual_hash != expected_hash:
|
||||
os.remove(destination_path)
|
||||
os.remove(sha256_path)
|
||||
print(
|
||||
"The downloaded Bazel binary is corrupted. Expected SHA-256 {}, got {}. Please try again.".format(
|
||||
expected_hash, actual_hash
|
||||
)
|
||||
)
|
||||
# Exiting with a special exit code not used by Bazel, so the calling process may retry based on that.
|
||||
# https://docs.bazel.build/versions/0.21.0/guide.html#what-exit-code-will-i-get
|
||||
sys.exit(22)
|
||||
return destination_path
|
||||
|
||||
|
||||
def download(url, destination_path):
|
||||
sys.stderr.write("Downloading {}...\n".format(url))
|
||||
request = Request(url)
|
||||
if "BAZELISK_BASE_URL" in os.environ:
|
||||
parts = urlparse(url)
|
||||
creds = None
|
||||
try:
|
||||
creds = netrc.netrc().hosts.get(parts.netloc)
|
||||
except Exception:
|
||||
pass
|
||||
if creds is not None:
|
||||
auth = base64.b64encode(("%s:%s" % (creds[0], creds[2])).encode("ascii"))
|
||||
request.add_header("Authorization", "Basic %s" % auth.decode("utf-8"))
|
||||
with closing(urlopen(request)) as response, open(destination_path, "wb") as file:
|
||||
shutil.copyfileobj(response, file)
|
||||
|
||||
|
||||
def get_bazelisk_directory():
|
||||
bazelisk_home = os.environ.get("BAZELISK_HOME")
|
||||
if bazelisk_home is not None:
|
||||
return bazelisk_home
|
||||
|
||||
operating_system = get_operating_system()
|
||||
|
||||
base_dir = None
|
||||
|
||||
if operating_system == "windows":
|
||||
base_dir = os.environ.get("LocalAppData")
|
||||
if base_dir is None:
|
||||
raise Exception("%LocalAppData% is not defined")
|
||||
elif operating_system == "darwin":
|
||||
base_dir = os.environ.get("HOME")
|
||||
if base_dir is None:
|
||||
raise Exception("$HOME is not defined")
|
||||
base_dir = os.path.join(base_dir, "Library/Caches")
|
||||
elif operating_system == "linux":
|
||||
base_dir = os.environ.get("XDG_CACHE_HOME")
|
||||
if base_dir is None:
|
||||
base_dir = os.environ.get("HOME")
|
||||
if base_dir is None:
|
||||
raise Exception("neither $XDG_CACHE_HOME nor $HOME are defined")
|
||||
base_dir = os.path.join(base_dir, ".cache")
|
||||
else:
|
||||
raise Exception("Unsupported operating system '{}'".format(operating_system))
|
||||
|
||||
return os.path.join(base_dir, "bazelisk")
|
||||
|
||||
|
||||
def maybe_makedirs(path):
|
||||
"""
|
||||
Creates a directory and its parents if necessary.
|
||||
"""
|
||||
try:
|
||||
os.makedirs(path)
|
||||
except OSError as e:
|
||||
if not os.path.isdir(path):
|
||||
raise e
|
||||
|
||||
|
||||
def delegate_tools_bazel(bazel_path):
|
||||
"""Match Bazel's own delegation behavior in the builds distributed by most
|
||||
package managers: use tools/bazel if it's present, executable, and not this
|
||||
script.
|
||||
"""
|
||||
root = find_workspace_root()
|
||||
if root:
|
||||
wrapper = os.path.join(root, TOOLS_BAZEL_PATH)
|
||||
if os.path.exists(wrapper) and os.access(wrapper, os.X_OK):
|
||||
try:
|
||||
if not os.path.samefile(wrapper, __file__):
|
||||
return wrapper
|
||||
except AttributeError:
|
||||
# Python 2 on Windows does not support os.path.samefile
|
||||
if os.path.abspath(wrapper) != os.path.abspath(__file__):
|
||||
return wrapper
|
||||
return None
|
||||
|
||||
|
||||
def prepend_directory_to_path(env, directory):
|
||||
"""
|
||||
Prepend binary directory to PATH
|
||||
"""
|
||||
if "PATH" in env:
|
||||
env["PATH"] = directory + os.pathsep + env["PATH"]
|
||||
else:
|
||||
env["PATH"] = directory
|
||||
|
||||
|
||||
def make_bazel_cmd(bazel_path, argv):
|
||||
env = os.environ.copy()
|
||||
|
||||
wrapper = delegate_tools_bazel(bazel_path)
|
||||
if wrapper:
|
||||
env[BAZEL_REAL] = bazel_path
|
||||
bazel_path = wrapper
|
||||
|
||||
directory = os.path.dirname(bazel_path)
|
||||
prepend_directory_to_path(env, directory)
|
||||
return {
|
||||
"exec": bazel_path,
|
||||
"args": argv,
|
||||
"env": env,
|
||||
}
|
||||
|
||||
|
||||
def execute_bazel(bazel_path, argv):
|
||||
cmd = make_bazel_cmd(bazel_path, argv)
|
||||
|
||||
# We cannot use close_fds on Windows, so disable it there.
|
||||
p = subprocess.Popen([cmd["exec"]] + cmd["args"], close_fds=os.name != "nt", env=cmd["env"])
|
||||
while True:
|
||||
try:
|
||||
return p.wait()
|
||||
except KeyboardInterrupt:
|
||||
# Bazel will also get the signal and terminate.
|
||||
# We should continue waiting until it does so.
|
||||
pass
|
||||
|
||||
|
||||
def get_bazel_path():
|
||||
bazelisk_directory = get_bazelisk_directory()
|
||||
maybe_makedirs(bazelisk_directory)
|
||||
|
||||
bazel_version = decide_which_bazel_version_to_use()
|
||||
bazel_version, is_commit = resolve_version_label_to_number_or_commit(
|
||||
bazelisk_directory, bazel_version
|
||||
)
|
||||
|
||||
# TODO: Support other forks just like Go version
|
||||
bazel_directory = os.path.join(bazelisk_directory, "downloads", BAZEL_UPSTREAM)
|
||||
return download_bazel_into_directory(bazel_version, is_commit, bazel_directory)
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
|
||||
bazel_path = get_bazel_path()
|
||||
|
||||
argv = argv[1:]
|
||||
|
||||
if argv and argv[0] == "--print_env":
|
||||
cmd = make_bazel_cmd(bazel_path, argv)
|
||||
env = cmd["env"]
|
||||
for key in env:
|
||||
print("{}={}".format(key, env[key]))
|
||||
return 0
|
||||
|
||||
return execute_bazel(bazel_path, argv)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright 2023 Uber Technologies, Inc.
|
||||
# Licensed under the Apache License, Version 2.0
|
||||
|
||||
set -xeu
|
||||
|
||||
exec "$(git rev-parse --show-toplevel)/tools/bazel" run @com_github_bazelbuild_buildtools//buildifier -- "$@"
|
@ -6,7 +6,7 @@ set -xeu
|
||||
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
echo "--- go mod tidy"
|
||||
tools/bazel run @go_sdk//:bin/go -- mod tidy "$@"
|
||||
bazel run @go_sdk//:bin/go -- mod tidy "$@"
|
||||
|
||||
echo "--- gazelle-update-repos"
|
||||
exec tools/bazel run //:gazelle-update-repos
|
||||
echo "--- gazelle update-repos"
|
||||
exec gazelle update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories -prune
|
||||
|
Loading…
Reference in New Issue
Block a user