次の関数は @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_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"」かつ「strip_prefix = "foo-1.2.3"」ファイル「foo-1.2.3/src/foo.h」は、「bar/src/foo.h」に展開されます。 |
auth_patterns |
辞書: 文字列 -> 文字列(省略可)
ホスト名をカスタム認可パターンにマッピングする辞書(省略可)。この辞書に 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 にすることもできます(リポジトリの実際の BUILD ファイルと区別するには、BUILD.new-repo-name などのような名前になります)。build_file または build_file_content のいずれかを指定できますが、両方は指定できません。 |
build_file_content |
文字列。省略可
このリポジトリの BUILD ファイルの内容。build_file または build_file_content のいずれかを指定できますが、両方は指定できません。 |
canonical_id |
文字列。省略可
ダウンロードされたファイルの正規 ID。 指定されていて空でない場合、Bazel は、同じ正規 ID のリクエストによってキャッシュに追加された場合を除き、キャッシュからファイルを取得しません。指定しないか空の場合、Bazel はデフォルトではファイルの URL を正規 ID として使用します。これにより、ハッシュを更新せずに URL を更新してしまうというよくある間違いを検出できます。この場合、ビルドはローカルで成功しますが、キャッシュにファイルがないマシンでは失敗します。この動作は、--repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 で無効にできます。 |
integrity |
文字列。省略可
ダウンロードされたファイルの、サブリソースの整合性形式で予想されるチェックサム。 これは、ダウンロードしたファイルのチェックサムと一致する必要があります。リモート ファイルが変更される可能性があるため、チェックサムを省略することはセキュリティ上のリスクになります。このフィールドを省略すると、ビルドが非密閉型になります。開発を容易にするために省略することもできますが、出荷前にこの属性または 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 は Bazel ネイティブのパッチ実装ではなく、指定されたパッチツールを使用します。 |
patches |
ラベルのリスト。省略可 アーカイブの展開後にパッチとして適用するファイルのリスト。デフォルトでは、ファズマッチとバイナリパッチをサポートしない Bazel ネイティブのパッチ実装を使用しますが、「patch_tool」属性が指定されているか、「patch_args」属性に「-p」以外の引数がある場合、Bazel はフォールバックしてパッチ コマンドライン ツールを使用します。 |
remote_patch_strip |
整数。省略可
リモートパッチでファイル名から削除する先頭のスラッシュの数。 |
remote_patches |
辞書: 文字列 -> 文字列(省略可)
パッチファイルの URL と整合性値のマップ。これらは、アーカイブの抽出後、`patches` 属性からパッチファイルを適用する前に適用されます。Bazel ネイティブのパッチ実装を使用しているため、remote_patch_strip でパッチ ストリップ番号を指定できます。 |
repo_mapping |
辞書: 文字列 -> 文字列(必須)
ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係に対するワークスペースの依存関係の解決を制御できます。 たとえば、エントリ"@foo": "@bar" は、このリポジトリが@foo に依存しているときは常に(「@foo//some:target」への依存関係がある場合など)、グローバルに宣言された「@bar」(「@bar//some:target」)内でその依存関係を実際に解決する必要があると宣言しています。 |
sha256 |
文字列。省略可
ダウンロードされたファイルの想定された SHA-256。 これは、ダウンロードしたファイルの SHA-256 と一致する必要があります。リモート ファイルは変更される可能性があるため、SHA-256 を省略することはセキュリティ上のリスクになります。このフィールドを省略すると、ビルドが非密閉型になります。開発を容易にするために必須ではありませんが、この属性または「integrity」は出荷前に設定する必要があります。 |
strip_prefix |
文字列。省略可
抽出されたファイルから削除するディレクトリ接頭辞。 多くのアーカイブには、アーカイブ内の有用なすべてのファイルを含む最上位ディレクトリが含まれています。このフィールドを build_file で何度も指定する必要はありません。このフィールドを使用すると、抽出されたすべてのファイルからこの接頭辞を除去できます。 たとえば、foo-lib-latest.zip には foo-lib-1.2.3/というディレクトリがあり、その下に WORKSPACE ファイルが格納されており、src/、lib/、test/の各ディレクトリにはビルド対象の実際のコードが格納されています。最上位ディレクトリとして「foo-lib-1.2.3」ディレクトリを使用するには、strip_prefix = "foo-lib-1.2.3" を指定します。 このディレクトリの外部にファイルが存在する場合、そのファイルは破棄され、アクセスできなくなります(例: トップレベルのライセンス ファイル)。これには、接頭辞で始まるものの、そのディレクトリには存在しないファイル/ディレクトリも含まれます(例:「foo-lib-1.2.3.release-notes」など)を入力します。指定された接頭辞がアーカイブ内のディレクトリと一致しない場合、Bazel はエラーを返します。 |
type |
文字列。省略可
ダウンロードしたファイルのアーカイブ タイプ。 デフォルトでは、アーカイブ タイプは URL のファイル拡張子から決定されます。ファイルに拡張子がない場合は、"zip"、"jar"、"war"、"aar"、"tar"、"tar.gz"、"tgz"、"tar.xz"、"txz"、"tar.zst"、"ztar"、" "tar.zst" のいずれかを明示的に指定できます。 |
url |
文字列。省略可
Bazel で使用可能になるファイルの URL。 ファイル、http または https の URL を指定する必要があります。リダイレクト処理が行われます。認証はサポートされていません。取得する代替 URL を指定できる urls パラメータを使用すると、柔軟性を高めることができます。 |
urls |
文字列のリスト。省略可
Bazel で使用可能になるファイルへの URL のリストです。 各エントリはファイル、http または https の URL にする必要があります。リダイレクト処理が行われます。認証はサポートされていません。URL は成功するまで順番に試行されるため、最初にローカル ミラーをリストする必要があります。すべてのダウンロードが失敗すると、そのルールは失敗します。 |
workspace_file |
ラベル(省略可)
このリポジトリの「WORKSPACE」ファイルとして使用するファイル。「workspace_file」または「workspace_file_content」はいずれか 1 つでも指定できます。両方を指定することもできません。 |
workspace_file_content |
文字列。省略可
このリポジトリの WORKSPACE ファイルの内容。「workspace_file」または「workspace_file_content」はいずれか 1 つでも指定できます。両方を指定することもできません。 |
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 |
辞書: 文字列 -> 文字列(省略可)
ホスト名をカスタム認可パターンにマッピングする辞書(省略可)。この辞書に 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 を正規 ID として使用します。これにより、ハッシュを更新せずに URL を更新してしまうというよくある間違いを検出できます。この場合、ビルドはローカルで成功しますが、キャッシュにファイルがないマシンでは失敗します。この動作は、--repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 で無効にできます。 |
downloaded_file_path |
文字列。省略可
ダウンロードしたファイルへのパス。 |
executable |
ブール値。省略可
ダウンロードしたファイルを実行可能にできるかどうか。 |
integrity |
文字列。省略可
ダウンロードされたファイルの、サブリソースの整合性形式で予想されるチェックサム。 これは、ダウンロードしたファイルのチェックサムと一致する必要があります。リモート ファイルが変更される可能性があるため、チェックサムを省略することはセキュリティ上のリスクになります。このフィールドを省略すると、ビルドが非密閉型になります。開発を容易にするために省略することもできますが、出荷前にこの属性または sha256 を設定する必要があります。 |
netrc |
文字列。省略可
認証に使用する .netrc ファイルの場所 |
repo_mapping |
辞書: 文字列 -> 文字列(必須)
ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係に対するワークスペースの依存関係の解決を制御できます。 たとえば、エントリ"@foo": "@bar" は、このリポジトリが@foo に依存しているときは常に(「@foo//some:target」への依存関係がある場合など)、グローバルに宣言された「@bar」(「@bar//some:target」)内でその依存関係を実際に解決する必要があると宣言しています。 |
sha256 |
文字列。省略可
ダウンロードされたファイルの想定された SHA-256。 これは、ダウンロードしたファイルの SHA-256 と一致する必要があります。リモート ファイルは変更される可能性があるため、SHA-256 を省略することはセキュリティ上のリスクになります。このフィールドを省略すると、ビルドが非密閉型になります。開発を容易にするために省略できますが、リリース前に設定する必要があります。 |
url |
文字列。省略可
Bazel で使用可能になるファイルの URL。 ファイル、http または https の URL を指定する必要があります。リダイレクト処理が行われます。認証はサポートされていません。取得する代替 URL を指定できる urls パラメータを使用すると、柔軟性を高めることができます。 |
urls |
文字列のリスト。省略可
Bazel で使用可能になるファイルへの URL のリストです。 各エントリはファイル、http または https の URL にする必要があります。リダイレクト処理が行われます。認証はサポートされていません。URL は成功するまで順番に試行されるため、最初にローカル ミラーをリストする必要があります。すべてのダウンロードが失敗すると、そのルールは失敗します。 |
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
をルートとするチャット プログラムのソースコードが含まれているとします。http://example.com/openssl-0.2.jar
から入手できる SSL ライブラリに依存する必要があります。
次の行を ~/chat-app/WORKSPACE
に追加した場合、~/chat-app
リポジトリ内のターゲットは、このターゲットに依存できます。
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 つ目のスラッシュはファイルの絶対パスに属します。
属性
name |
名前(必須) このリポジトリの一意の名前。 |
auth_patterns |
辞書: 文字列 -> 文字列(省略可)
ホスト名をカスタム認可パターンにマッピングする辞書(省略可)。この辞書に 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 を正規 ID として使用します。これにより、ハッシュを更新せずに URL を更新してしまうというよくある間違いを検出できます。この場合、ビルドはローカルで成功しますが、キャッシュにファイルがないマシンでは失敗します。この動作は、--repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 で無効にできます。 |
downloaded_file_name |
文字列。省略可
ダウンロードした jar に割り当てられたファイル名 |
integrity |
文字列。省略可
ダウンロードされたファイルの、サブリソースの整合性形式で予想されるチェックサム。 これは、ダウンロードしたファイルのチェックサムと一致する必要があります。リモート ファイルが変更される可能性があるため、チェックサムを省略することはセキュリティ上のリスクになります。このフィールドを省略すると、ビルドが非密閉型になります。開発を容易にするために省略することもできますが、出荷前にこの属性または sha256 を設定する必要があります。 |
netrc |
文字列。省略可
認証に使用する .netrc ファイルの場所 |
repo_mapping |
辞書: 文字列 -> 文字列(必須)
ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係に対するワークスペースの依存関係の解決を制御できます。 たとえば、エントリ"@foo": "@bar" は、このリポジトリが@foo に依存しているときは常に(「@foo//some:target」への依存関係がある場合など)、グローバルに宣言された「@bar」(「@bar//some:target」)内でその依存関係を実際に解決する必要があると宣言しています。 |
sha256 |
文字列。省略可
ダウンロードされたファイルの想定された SHA-256。 これは、ダウンロードしたファイルの SHA-256 と一致する必要があります。リモート ファイルは変更される可能性があるため、SHA-256 を省略することはセキュリティ上のリスクになります。このフィールドを省略すると、ビルドが非密閉型になります。開発を容易にするために必須ではありませんが、この属性または「integrity」は出荷前に設定する必要があります。 |
url |
文字列。省略可
Bazel で使用可能になるファイルの URL。 ファイル、http または https の URL を指定する必要があります。リダイレクト処理が行われます。認証はサポートされていません。取得する代替 URL を指定できる urls パラメータを使用すると、柔軟性を高めることができます。URL の末尾は「.jar」にする必要があります。 |
urls |
文字列のリスト。省略可
Bazel で使用可能になるファイルへの URL のリストです。 各エントリはファイル、http または https の URL にする必要があります。リダイレクト処理が行われます。認証はサポートされていません。URL は成功するまで順番に試行されるため、最初にローカル ミラーをリストする必要があります。すべてのダウンロードが失敗すると、そのルールは失敗します。 すべての URL の末尾は「.jar」にする必要があります。 |