Add a mechanism to configure the downloader

This adds a `--experimental_remote_downloader_config` flag to the
`build` command that accepts the path to a configuration file. This
file has a line-based format, with each line starting with a directive
and then the action to take. These directives are:

* `allow hostName` Will allow access to the given host and subdomains
* `block hostName` Will block access to the given host and subdomains
* `rewrite pattern pattern` Rewrite a URL using the given
  pattern. Back references are numbered from `$1`

The directives are applied in the order `rewrite, allow, block'. An
example config may look like:

```
block mvnrepository.com
block maven-central.storage.googleapis.com
block gitblit.github.io
rewrite repo.maven.apache.org/maven2/(.*) artifacts.mycorp.com/libs-release/$1

block github.com
rewrite github.com/([^/]+)/([^/]+)/releases/download/([^/]+)/(.*) artifacts.mycorp.com/github-releases/$1/$2/releases/download/$3/$4
rewrite github.com/([^/]+)/([^/]+)/archive/(.+).(tar.gz|zip) artifacts.mycorp.com/api/vcs/downloadRelease/github.com/$1/$2/$3?ext=$4
```

In addition, you can block all hosts using the `*` wildcard.

Comments within the config file are allowed, and must be on their own
line preceded by a `#`

Closes #12170.

PiperOrigin-RevId: 337219987
6 files changed
tree: 8fe6546152e23976561a6238573243df61e839cf
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEBASE.md
  15. CODEOWNERS
  16. combine_distfiles.py
  17. combine_distfiles_to_tar.sh
  18. compile.sh
  19. CONTRIBUTING.md
  20. CONTRIBUTORS
  21. distdir.bzl
  22. ISSUE_TEMPLATE.md
  23. LICENSE
  24. README.md
  25. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status