次の関数は @bazel_tools//tools/build_defs/repo:http.bzl
から読み込むことができます。
HTTP 経由でファイルやアーカイブをダウンロードするためのルール。
セットアップ
これらのルールを使用するには、次のように WORKSPACE
ファイルにルールを読み込みます。
load(
"@bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive",
"http_file",
"http_jar",
)
これらのルールはネイティブ HTTP ルールの改良版であり、 置き換えます。
http_archive
http_archive(name, add_prefix, auth_patterns, build_file, build_file_content, canonical_id, integrity, netrc, patch_args, patch_cmds, patch_cmds_win, patch_tool, patches, remote_file_integrity, remote_file_urls, remote_patch_strip, remote_patches, repo_mapping, sha256, strip_prefix, type, url, urls, workspace_file, workspace_file_content)
Bazel リポジトリを圧縮アーカイブ ファイルとしてダウンロードし、解凍して、ターゲットをバインディングに使用できるようにします。
サポートされているファイル拡張子は、"zip"
、"jar"
、"war"
、"aar"
、"tar"
、"tar.gz"
、"tgz"
、"tar.xz"
、"txz"
、"tar.zst"
、"tzst"
、tar.bz2
、"ar"
、"deb"
です。
例: 現在のリポジトリに、ディレクトリ ~/chat-app
をルートとするチャット プログラムのソースコードが含まれているとします。http://example.com/openssl.zip から入手できる SSL ライブラリに依存する必要があります。この .zip
ファイル
次のディレクトリ構造が含まれています。
WORKSPACE
src/
openssl.cc
openssl.h
ローカル リポジトリで、次のターゲット定義を含む openssl.BUILD
ファイルを作成します。
cc_library(
name = "openssl-lib",
srcs = ["src/openssl.cc"],
hdrs = ["src/openssl.h"],
)
~/chat-app/WORKSPACE
に次の行を追加すると、~/chat-app
リポジトリ内のターゲットがこのターゲットに依存できるようになります。
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "my_ssl",
url = "http://example.com/openssl.zip",
sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
build_file = "@//:openssl.BUILD",
)
ターゲットでは、@my_ssl//:openssl-lib
を依存関係として指定します。
属性
name |
名前:必須
このリポジトリの一意の名前。 |
add_prefix |
文字列(省略可) リポジトリ ディレクトリからの相対パスの宛先ディレクトリ。アーカイブ内のファイルパスに「strip_prefix」(存在する場合)を適用した後、アーカイブはこのディレクトリに解凍されます。たとえば、 `add_prefix = "bar"` の場合、`foo-1.2.3/src/foo.h` は `bar/src/foo.h` にアンパックされます および `strip_prefix = "foo-1.2.3"` のようにします。 |
auth_patterns |
辞書: String -> String(省略可)
ホスト名をカスタム認証パターンにマッピングする辞書(省略可)。
この辞書に URL のホスト名が含まれている場合、その値は HTTP リクエストの認可ヘッダーを生成するときにパターンとして使用されます。これにより
認証方式も採用されています。
このパターンで現在サポートされているトークンは、 auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKEN最終的な HTTP リクエストには、次のヘッダーが含まれます。 Authorization: Bearer RANDOM-TOKEN |
build_file |
ラベル:省略可
このリポジトリの BUILD ファイルとして使用するファイル。この属性は絶対ラベルです(メイン リポジトリの場合は「@//」を使用します)。ファイル名は BUILD にする必要はありませんが、BUILD.new-repo-name などにすると、リポジトリの実際の BUILD ファイルと区別しやすくなります。build_file または build_file_content のいずれかを指定できます。両方は指定できません。 |
build_file_content |
文字列(省略可) このリポジトリの BUILD ファイルの内容。build_file または build_file_content のいずれかを指定できます。両方は指定できません。 |
canonical_id |
文字列(省略可) ダウンロードされたファイルの正規 ID。 指定した場合かつ空でない場合、Bazel はキャッシュからファイルを取得しません。ただし、 同じ正規 ID を持つリクエストによってキャッシュに追加されたもの。 指定しないか空にした場合、Bazel はデフォルトでファイルの URL を 指定します。これにより、名前リンクなしで URL を更新するよくある間違いを ハッシュも更新されるため、ビルドはローカルで成功しても失敗する キャッシュにファイルがないマシンに 保存されたファイルが表示されますこの動作は、 --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
integrity |
String;省略可
ダウンロードされたファイルの想定チェックサムはサブリソース整合性形式です。 ダウンロードしたファイルのチェックサムと一致する必要があります。_リモート ファイルが変更される可能性があるため、チェックサムを省略することはセキュリティ上のリスクです。_ 最善の場合、このフィールドを省略すると、ビルドが非密閉になります。開発を容易にするために省略できますが、出荷前にこの属性または「sha256」のいずれかを設定する必要があります。 |
netrc |
文字列(省略可) 認証に使用する .netrc ファイルの場所 |
patch_args |
文字列のリスト。省略可
パッチツールに渡される引数。デフォルトは -p0 ですが、通常、git によって生成されたパッチには -p1 が必要です。複数の -p 引数が指定されている場合は、最後の引数が有効になります。-p 以外の引数が指定されている場合、Bazel はフォールバックして、Bazel ネイティブのパッチ実装ではなく、パッチ コマンドライン ツールを使用します。パッチ コマンドライン ツールにフォールバックし、patch_tool 属性が指定されていない場合は、`patch` が使用されます。これは、`patches` 属性内のパッチファイルにのみ影響します。 |
patch_cmds |
文字列のリスト。省略可
パッチ適用後に Linux / macOS で適用する Bash コマンドのシーケンス。 |
patch_cmds_win |
文字列のリスト(省略可) パッチ適用後に Windows に適用される Powershell コマンドの順序。この属性が設定されていない場合、patch_cmds が Windows で実行されます。この場合、Bash バイナリが存在する必要があります。 |
patch_tool |
文字列(省略可) 使用する patch(1) ユーティリティ。これを指定すると、Bazel ネイティブのパッチ実装ではなく、指定されたパッチツールが使用されます。 |
patches |
ラベルのリスト省略可
アーカイブの抽出後にパッチとして適用するファイルのリスト。デフォルトでは、ファズマッチとバイナリパッチをサポートしていない Bazel ネイティブのパッチ実装が使用されますが、「patch_tool」属性が指定されている場合、または `patch_args` 属性に `-p` 以外の引数がある場合、Bazel はフォールバックしてパッチ コマンドライン ツールを使用します。 |
remote_file_integrity |
辞書: 文字列 ->String;省略可
ファイルの相対パス(キー)と完全性値(値)のマップ。これらの相対パスは、「remote_file_urls」属性内のファイル(キー)にマッピングされる必要があります。 |
remote_file_urls |
辞書: 文字列 -> 文字列のリスト(省略可) ダウンロードされ、リポジトリのオーバーレイ ファイルとして利用可能になる URL(値)のリストへの相対パス(キー)のマップ。これは、既存のリポジトリに WORKSPACE ファイルまたは BUILD.bazel ファイルを追加する場合に便利です。ファイルは、`patches` 属性でパッチを適用する前にダウンロードされます。URL のリストはすべて、同じファイルのミラーである必要があります。1 つが成功するまで URL が順番に試行されます。 |
remote_patch_strip |
Integer;省略可
リモート パッチのファイル名から削除する先頭のスラッシュの数。 |
remote_patches |
辞書: 文字列 ->String;省略可
パッチファイルの URL と完全性値のマップ。アーカイブの抽出後に適用され、[patches] 属性からパッチファイルを適用する前に適用されます。Bazel ネイティブのパッチ実装を使用します。パッチストリップ番号は `remote_patch_strip` で指定できます。 |
repo_mapping |
ディクショナリ: String -> String(必須) ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。 たとえば、エントリ "@foo": "@bar"` は、このリポジトリが `@foo` に依存する場合は常に(`@foo//some:target` への依存関係など、グローバルに宣言された `@bar`(`@bar//some:target`)内でその依存関係を解決する必要があることを宣言します。 |
sha256 |
String;省略可
ダウンロードされたファイルの想定される SHA-256。ダウンロードしたファイルの SHA-256 と一致している必要があります。リモート ファイルが変更される可能性があるため、SHA-256 を省略することはセキュリティ上のリスクです。このフィールドを省略すると、ビルドが非密閉になります。開発を容易にするために省略可能ですが、出荷前にこの属性または「integrity」のいずれかを設定する必要があります。 |
strip_prefix |
String;省略可
抽出されたファイルから削除するディレクトリ接頭辞。 多くのアーカイブには、アーカイブ内のすべての有用なファイルを含む最上位ディレクトリが含まれています。この接頭辞を何度も指定することなく、 `build_file` 内で、このフィールドを使用して 表示されます。 たとえば、`foo-lib-latest.zip` を使用するとします。 ディレクトリ `foo-lib-1.2.3/` の下には `WORKSPACE` ファイルがあり、 `src/`、`lib/`、`test/` ディレクトリ。 指定します。「strip_prefix = "foo-lib-1.2.3"」を指定して、「foo-lib-1.2.3」ディレクトリを最上位ディレクトリとして使用します。このディレクトリの外部にファイルがある場合、それらのファイルは破棄され、アクセスできなくなります(最上位のライセンス ファイルなど)。例 先頭が接頭辞で、ディレクトリにないファイル/ディレクトリ (例:`foo-lib-1.2.3.release-notes`).指定した接頭辞が 一致しなかった場合、Bazel はエラーを返します。 |
type |
文字列(省略可) ダウンロードされたファイルのアーカイブ タイプ。 デフォルトでは、アーカイブ タイプは、 URL。ファイルに拡張子がない場合は、 「zip」「jar」「jar」「war」「aar」「tar」「tar.gz」「tgz」 「tar.xz」、「txz」、「tar.zst」、「tzst」、「tar.bz2」、「ar」、「deb」のいずれかです。 |
url |
文字列(省略可) Bazel で利用可能なファイルの URL。ファイル、http URL、または https URL を指定する必要があります。リダイレクトが設定されています。 認証はサポートされていません。取得元の代替 URL を指定できる urls パラメータを使用すると、より柔軟な設定が可能になります。 |
urls |
文字列のリスト(省略可) Bazel で使用できるようにするファイルの URL のリストです。 各エントリはファイル、HTTP または https の URL にする必要があります。リダイレクトが設定されています。 認証はサポートされていません。 URL は、成功するまで順番に試行されるため、ローカルミラーを最初にリストする必要があります。 すべてのダウンロードが失敗した場合、ルールは失敗します。 |
workspace_file |
ラベル(省略可) このリポジトリの WORKSPACE ファイルとして使用するファイル。「workspace_file」または「workspace_file_content」のどちらか一方を指定するか、どちらも指定できません。両方を指定することはできません。 |
workspace_file_content |
String;省略可
このリポジトリの WORKSPACE ファイルのコンテンツ。「workspace_file」または「workspace_file_content」のいずれかを指定するか、どちらも指定しないことができます。両方を指定することはできません。 |
http_file
http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc, repo_mapping, sha256, url, urls)
URL からファイルをダウンロードし、ファイル グループとして使用できるようにします。
例: カスタムルール用の debian パッケージが必要であるとします。このパッケージ は http://example.com/package.deb から入手できます。キャンペーンに WORKSPACE ファイル:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
http_file(
name = "my_deb",
url = "http://example.com/package.deb",
sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
)
ターゲットは、このファイルに依存する依存関係として @my_deb//file
を指定します。
属性
name |
名前(必須) このリポジトリの一意の名前。 |
auth_patterns |
辞書: 文字列 ->String;省略可
ホスト名をカスタム認可パターンにマッピングするオプションの辞書。この辞書に URL のホスト名が含まれている場合、その値は HTTP リクエストの認可ヘッダーを生成するときにパターンとして使用されます。これにより
認証方式も採用されています。
このパターンで現在サポートされているトークンは、 auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKEN最終的な HTTP リクエストのヘッダーは次のようになります。 Authorization: Bearer RANDOM-TOKEN |
canonical_id |
文字列(省略可) ダウンロードされたファイルの正規 ID。 指定した場合かつ空でない場合、Bazel はキャッシュからファイルを取得しません。ただし、 同じ正規 ID を持つリクエストによってキャッシュに追加されたもの。 指定しないか空にした場合、Bazel はデフォルトでファイルの URL を 指定します。これにより、名前リンクなしで URL を更新するよくある間違いを ハッシュも更新されるため、ビルドはローカルで成功しても失敗する キャッシュにファイルがないマシンに 保存されたファイルが表示されますこの動作は、 --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_path |
文字列(省略可) ダウンロードしたファイルに割り当てられたパス |
executable |
ブール値(省略可) ダウンロードしたファイルを実行可能にする必要があります。 |
integrity |
文字列(省略可) ダウンロードされたファイルの想定チェックサムはサブリソース整合性形式です。 ダウンロードしたファイルのチェックサムと一致する必要があります。_リモート ファイルが変更される可能性があるため、チェックサムを省略することはセキュリティ上のリスクです。_ 最善の場合、このフィールドを省略すると、ビルドが非密閉になります。開発を容易にするために省略できますが、出荷前にこの属性または「sha256」のいずれかを設定する必要があります。 |
netrc |
文字列(省略可) 認証に使用する .netrc ファイルの場所 |
repo_mapping |
辞書: 文字列 ->String;必須
ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。 たとえば、エントリ "@foo": "@bar"` は、このリポジトリが `@foo` に依存する場合は常に(`@foo//some:target` への依存関係など、グローバルに宣言された `@bar`(`@bar//some:target`)内でその依存関係を解決する必要があることを宣言します。 |
sha256 |
String;省略可
ダウンロードされるファイルの想定 SHA-256 です。 ダウンロードしたファイルの SHA-256 と一致している必要があります。リモート ファイルが変更される可能性があるため、SHA-256 を省略することはセキュリティ上のリスクです。このフィールドを省略すると、ビルドが非密閉になります。開発を容易にするために設定できますが、出荷前に設定する必要があります。 |
url |
String;省略可
Bazel で利用可能なファイルの URL。ファイル、http URL、または https URL を指定する必要があります。リダイレクトが設定されています。 認証はサポートされていません。取得元の代替 URL を指定できる urls パラメータを使用すると、より柔軟な設定が可能になります。 |
urls |
文字列のリスト(省略可) Bazel で使用可能なファイルの URL のリスト。各エントリはファイル、http または https URL である必要があります。リダイレクトが行われます。認証はサポートされていません。 URL は、1 つが成功するまで順番に試行されるため、ローカル ミラーを先頭に指定する必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。 |
http_jar
http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping, sha256, url, urls)
URL から jar をダウンロードし、java_import として利用できるようにします。
ダウンロードされるファイルの拡張子は .jar でなければなりません。
例:
現在のリポジトリに、チャット プログラムのソースコードが格納されているとします。
ディレクトリ ~/chat-app
。使用する SSL ライブラリは Google Cloud から入手可能な
http://example.com/openssl-0.2.jar
。
次の行がある場合、~/chat-app
リポジトリ内のターゲットはこのターゲットに依存できます。
~/chat-app/WORKSPACE
に追加しました。
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar")
http_jar(
name = "my_ssl",
url = "http://example.com/openssl-0.2.jar",
sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
)
ターゲットはこの jar に依存する依存関係として @my_ssl//jar
を指定します。
Unix ベースのシステムを使用している場合は、「file:///path/to/file」を使用して、現在のシステム(localhost)上のファイルを参照することもできます。Windows の場合は、「file:///c:/path/to/file」を使用します。両方
例では、3 つのスラッシュ(/
)に注意してください。最初の 2 つのスラッシュは file://
に属し、3 番目のスラッシュは file://
に属します。
もう 1 つはファイルの絶対パスです
属性
name |
名前:必須
このリポジトリの一意の名前。 |
auth_patterns |
辞書: String -> String(省略可)
ホスト名をカスタム認証パターンにマッピングする辞書(省略可)。
この辞書に URL のホスト名が含まれている場合、値がパターンとして
HTTP リクエストの Authorization ヘッダーを生成します。これにより
認証方式も採用されています。
このパターンで現在サポートされているトークンは、 auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKEN最終的な HTTP リクエストには、次のヘッダーが含まれます。 Authorization: Bearer RANDOM-TOKEN |
canonical_id |
文字列(省略可) ダウンロードされたファイルの正規 ID。 指定した場合かつ空でない場合、Bazel はキャッシュからファイルを取得しません。ただし、 同じ正規 ID を持つリクエストによってキャッシュに追加されたもの。 指定しないか空にした場合、Bazel はデフォルトでファイルの URL を 指定します。これにより、名前リンクなしで URL を更新するよくある間違いを ハッシュも更新されるため、ビルドはローカルで成功しても失敗する キャッシュにファイルがないマシンに 保存されたファイルが表示されますこの動作は、 --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_name |
文字列(省略可) ダウンロードされた jar に割り当てられたファイル名 |
integrity |
String;省略可
ダウンロードされたファイルの想定チェックサムはサブリソース整合性形式です。 ダウンロードしたファイルのチェックサムと一致する必要があります。_リモート ファイルが変更される可能性があるため、チェックサムを省略することはセキュリティ上のリスクです。_ 最善の場合、このフィールドを省略すると、ビルドが非密閉になります。開発を容易にするために省略できますが、出荷前にこの属性または「sha256」のいずれかを設定する必要があります。 |
netrc |
文字列(省略可) 認証に使用する .netrc ファイルの場所 |
repo_mapping |
辞書: 文字列 ->String;必須
ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。 たとえば、エントリ "@foo": "@bar"` は、このリポジトリが `@foo` に依存する場合は常に(`@foo//some:target` への依存関係など、グローバルに宣言された `@bar`(`@bar//some:target`)内でその依存関係を解決する必要があることを宣言します。 |
sha256 |
String;省略可
ダウンロードされたファイルの想定される SHA-256。ダウンロードしたファイルの SHA-256 と一致している必要があります。リモート ファイルが変更される可能性があるため、SHA-256 を省略することはセキュリティ上のリスクです。このフィールドを省略すると、ビルドが非密閉になります。開発を容易にするために省略可能ですが、出荷前にこの属性または「integrity」のいずれかを設定する必要があります。 |
url |
文字列(省略可) Bazel で使用できるようにするファイルの URL。 ファイル、http または https の URL を指定してください。リダイレクトが行われます。認証はサポートされていません。URL パラメータを使用すると、より柔軟な設定が可能です。 取得する代替 URL を指定します。 URL の末尾は「.jar」でなければなりません。 |
urls |
文字列のリスト(省略可) Bazel で使用できるようにするファイルの URL のリストです。 各エントリはファイル、HTTP または https の URL にする必要があります。リダイレクトが設定されています。 認証はサポートされていません。 URL は、1 つが成功するまで順番に試行されるため、ローカル ミラーを先頭に指定する必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。 すべての URL は「.jar」で終わる必要があります。 |