From 2ea75419e0ddd22162f1f4a221731fe15f21fc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Wed, 22 Mar 2023 13:25:20 +0200 Subject: [PATCH] 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$ --- .bazelrc | 7 + .bazelversion | 1 - .envrc | 8 +- .gitignore | 1 + BUILD | 15 -- WORKSPACE | 35 +++ ci/launcher | 2 +- ci/launcher-wine64 | 2 +- ci/lint | 2 +- ci/list_toolchains_platforms | 10 +- ci/release | 2 +- ci/test | 4 +- flake.lock | 60 +++++ flake.nix | 21 ++ go.mod | 7 - go.sum | 82 ------ nixpkgs.nix | 6 + repositories.bzl | 190 +------------- tools.go | 5 - tools/bazel | 493 ----------------------------------- tools/buildifier | 8 - tools/mod-tidy | 6 +- 22 files changed, 150 insertions(+), 817 deletions(-) delete mode 100644 .bazelversion create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nixpkgs.nix delete mode 100644 tools.go delete mode 100755 tools/bazel delete mode 100755 tools/buildifier diff --git a/.bazelrc b/.bazelrc index dc904bb..71f9097 100644 --- a/.bazelrc +++ b/.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 diff --git a/.bazelversion b/.bazelversion deleted file mode 100644 index 09b254e..0000000 --- a/.bazelversion +++ /dev/null @@ -1 +0,0 @@ -6.0.0 diff --git a/.envrc b/.envrc index b5f7e2d..42aa96f 100644 --- a/.envrc +++ b/.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 diff --git a/.gitignore b/.gitignore index 9cfbf7f..9526ab7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *~ *.sw[op] +/.direnv /bazel-bazel-zig-cc /bazel-bin diff --git a/BUILD b/BUILD index dcedea4..12a5324 100644 --- a/BUILD +++ b/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", -) diff --git a/WORKSPACE b/WORKSPACE index e1b4454..a20aa41 100644 --- a/WORKSPACE +++ b/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") diff --git a/ci/launcher b/ci/launcher index a72bbfb..72d14bc 100755 --- a/ci/launcher +++ b/ci/launcher @@ -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 \ diff --git a/ci/launcher-wine64 b/ci/launcher-wine64 index fd16e84..e1c8d04 100755 --- a/ci/launcher-wine64 +++ b/ci/launcher-wine64 @@ -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 diff --git a/ci/lint b/ci/lint index c40ecbb..0390097 100755 --- a/ci/lint +++ b/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 diff --git a/ci/list_toolchains_platforms b/ci/list_toolchains_platforms index 2feac74..9068f7c 100755 --- a/ci/list_toolchains_platforms +++ b/ci/list_toolchains_platforms @@ -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 diff --git a/ci/release b/ci/release index 2d89c64..9e09216 100755 --- a/ci/release +++ b/ci/release @@ -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 diff --git a/ci/test b/ci/test index 4d6f75f..4e0bbd5 100755 --- a/ci/test +++ b/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" \ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..78bf821 --- /dev/null +++ b/flake.lock @@ -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 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..10a3d18 --- /dev/null +++ b/flake.nix @@ -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 ]; + }; + }); +} diff --git a/go.mod b/go.mod index 0c9effb..54d1fb8 100644 --- a/go.mod +++ b/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 -) diff --git a/go.sum b/go.sum index 077f646..e69de29 100644 --- a/go.sum +++ b/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= diff --git a/nixpkgs.nix b/nixpkgs.nix new file mode 100644 index 0000000..375f4f6 --- /dev/null +++ b/nixpkgs.nix @@ -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 diff --git a/repositories.bzl b/repositories.bzl index a10ae99..8f8e86c 100644 --- a/repositories.bzl +++ b/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 diff --git a/tools.go b/tools.go deleted file mode 100644 index bc6aa0c..0000000 --- a/tools.go +++ /dev/null @@ -1,5 +0,0 @@ -package bazel_zig_cc - -import ( - _ "github.com/bazelbuild/buildtools/buildifier" -) diff --git a/tools/bazel b/tools/bazel deleted file mode 100755 index cddbe2b..0000000 --- a/tools/bazel +++ /dev/null @@ -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\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()) diff --git a/tools/buildifier b/tools/buildifier deleted file mode 100755 index d5a0e60..0000000 --- a/tools/buildifier +++ /dev/null @@ -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 -- "$@" diff --git a/tools/mod-tidy b/tools/mod-tidy index 063faa8..fe566de 100755 --- a/tools/mod-tidy +++ b/tools/mod-tidy @@ -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