次の関数は @bazel_tools//tools/build_defs/repo:http.bzl
から読み込むことができます。
HTTP 経由でファイルとアーカイブをダウンロードするためのルール。
セットアップ
モジュール拡張機能でこれらのルールを使用するには、.bzl ファイルにルールを読み込んでから、拡張機能の実装関数からルールを呼び出します。たとえば、http_archive
を使用するには、次のようにします。
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
def _my_extension_impl(mctx):
http_archive(name = "foo", urls = [...])
my_extension = module_extension(implementation = _my_extension_impl)
または、use_repo_rule
を使用して MODULE.bazel ファイルでこれらのリポジトリ ルールを直接呼び出すこともできます。
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(name = "foo", urls = [...])
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"` と `strip_prefix = "foo-1.2.3"` の場合、ファイル `foo-1.2.3/src/foo.h` は `bar/src/foo.h` に展開されます。 |
auth_patterns |
ディクショナリ: String -> String。省略可
ホスト名をカスタム認証パターンにマッピングする省略可能な辞書。URL のホスト名がこの辞書に含まれている場合、値は HTTP リクエストの認証ヘッダーを生成する際のパターンとして使用されます。これにより、一般的なクラウド ストレージ プロバイダでよく使用されるカスタム認証スキームを使用できます。現在、このパターンは auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN 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 を正規 ID として使用します。これにより、ハッシュを更新せずに URL を更新するというよくある間違いを検出できます。この間違いを犯すと、ローカルではビルドが成功しても、キャッシュにファイルがないマシンではビルドが失敗します。この動作は、--repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 で無効にできます。 |
integrity |
文字列。省略可
ダウンロードしたファイルの Subresource 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 コマンドのシーケンス。この属性が設定されていない場合、Windows で patch_cmds が実行されます。これには Bash バイナリが存在する必要があります。 |
patch_tool |
文字列。省略可
使用する patch(1) ユーティリティ。指定すると、Bazel は Bazel ネイティブのパッチ実装ではなく、指定されたパッチツールを使用します。 |
patches |
ラベルのリスト。省略可 アーカイブの抽出後にパッチとして適用されるファイルのリスト。デフォルトでは、ファジー マッチとバイナリ パッチをサポートしていない Bazel ネイティブのパッチ実装を使用しますが、`patch_tool` 属性が指定されている場合や、`patch_args` 属性に `-p` 以外の引数がある場合は、Bazel はパッチ コマンドライン ツールを使用するようにフォールバックします。 |
remote_file_integrity |
ディクショナリ: String -> String。省略可
ファイルの相対パス(キー)とその完全性値(値)のマップ。これらの相対パスは、`remote_file_urls` 属性のファイル(キー)にマッピングする必要があります。 |
remote_file_urls |
ディクショナリ: 文字列 -> 文字列のリスト。省略可 ダウンロードしてリポジトリのオーバーレイ ファイルとして使用可能にする相対パス(キー)と URL のリスト(値)のマップ。これは、既存のリポジトリの上に WORKSPACE ファイルまたは BUILD.bazel ファイルを追加する場合に便利です。ファイルは、`patches` 属性でパッチを適用する前にダウンロードされます。URL のリストはすべて、同じファイルのミラーである必要があります。URL は、成功するまで順番に試行されます。 |
remote_patch_strip |
整数。省略可
リモート パッチのファイル名から削除する先頭のスラッシュの数。 |
remote_patches |
ディクショナリ: String -> String。省略可
パッチ ファイルの URL とその完全性値のマップ。アーカイブの抽出後、`patches` 属性からパッチ ファイルを適用する前に適用されます。Bazel ネイティブのパッチ実装を使用します。`remote_patch_strip` でパッチ ストリップ番号を指定できます。 |
repo_mapping |
ディクショナリ: String -> String。必須
ローカル リポジトリ名からグローバル リポジトリ名へのディクショナリ。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。 たとえば、エントリ `"@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/` ディレクトリがあります。`strip_prefix = "foo-lib-1.2.3"` を指定して、`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"`、`"tzst"`、`"tar.bz2"`、`"ar"`、`"deb"` のいずれかを明示的に指定できます。 |
url |
文字列。省略可
Bazel で利用可能になるファイルへの URL。これは、ファイル、http URL、または https URL である必要があります。リダイレクトが実行されます。認証はサポートされていません。urls パラメータを使用すると、取得元の代替 URL を指定できるため、柔軟性が高まります。 |
urls |
文字列のリスト。省略可 Bazel で利用可能になるファイルの URL のリスト。各エントリは、ファイル、http URL、https URL のいずれかである必要があります。リダイレクトが実行されます。認証はサポートされていません。URL は成功するまで順番に試されるため、ローカル ミラーを最初にリストする必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。 |
workspace_file |
ラベル(省略可) このリポジトリの `WORKSPACE` ファイルとして使用するファイル。`workspace_file` または `workspace_file_content` のいずれか、または両方とも指定できますが、両方を指定することはできません。 |
workspace_file_content |
文字列。省略可
このリポジトリの 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 -> String。省略可
ホスト名をカスタム認証パターンにマッピングする省略可能な辞書。URL のホスト名がこの辞書に含まれている場合、値は HTTP リクエストの認証ヘッダーを生成する際のパターンとして使用されます。これにより、一般的なクラウド ストレージ プロバイダでよく使用されるカスタム認証スキームを使用できます。現在、このパターンは auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN 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 |
文字列。省略可
ダウンロードしたファイルの Subresource Integrity 形式の想定されるチェックサム。 これは、ダウンロードしたファイルのチェックサムと一致している必要があります。_リモート ファイルは変更される可能性があるため、チェックサムを省略するとセキュリティ上のリスクがあります。_このフィールドを省略すると、ビルドが非ハーメチックになる可能性があります。開発を容易にするために省略可能ですが、出荷前にこの属性または `sha256` のいずれかを設定する必要があります。 |
netrc |
文字列。省略可
認証に使用する .netrc ファイルの場所 |
repo_mapping |
ディクショナリ: String -> String。必須
ローカル リポジトリ名からグローバル リポジトリ名へのディクショナリ。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。 たとえば、エントリ `"@foo": "@bar"` は、このリポジトリが `@foo` に依存するたびに(`@foo//some:target` への依存関係など)、グローバルに宣言された `@bar`(`@bar//some:target`)内でその依存関係を実際に解決することを宣言します。 |
sha256 |
文字列。省略可
ダウンロードされたファイルの想定される SHA-256。 これは、ダウンロードしたファイルの SHA-256 と一致する必要があります。_SHA-256 を省略すると、リモートファイルが変更される可能性があるため、セキュリティ上のリスクがあります。_ このフィールドを省略すると、ビルドが非ハーメチックになります。開発を容易にするために省略可能ですが、出荷前に設定する必要があります。 |
url |
文字列。省略可
Bazel で利用可能になるファイルへの URL。これは、ファイル、http URL、または https URL である必要があります。リダイレクトが実行されます。認証はサポートされていません。urls パラメータを使用すると、取得元の代替 URL を指定できるため、柔軟性が高まります。 |
urls |
文字列のリスト。省略可 Bazel で利用可能になるファイルの URL のリスト。各エントリは、ファイル、http URL、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 |
ディクショナリ: String -> String。省略可
ホスト名をカスタム認証パターンにマッピングする省略可能な辞書。URL のホスト名がこの辞書に含まれている場合、値は HTTP リクエストの認証ヘッダーを生成する際のパターンとして使用されます。これにより、一般的なクラウド ストレージ プロバイダでよく使用されるカスタム認証スキームを使用できます。現在、このパターンは auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN 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 |
文字列。省略可
ダウンロードしたファイルの Subresource Integrity 形式の想定されるチェックサム。 これは、ダウンロードしたファイルのチェックサムと一致している必要があります。_リモート ファイルは変更される可能性があるため、チェックサムを省略するとセキュリティ上のリスクがあります。_このフィールドを省略すると、ビルドが非ハーメチックになる可能性があります。開発を容易にするために省略可能ですが、出荷前にこの属性または `sha256` のいずれかを設定する必要があります。 |
netrc |
文字列。省略可
認証に使用する .netrc ファイルの場所 |
repo_mapping |
ディクショナリ: String -> String。必須
ローカル リポジトリ名からグローバル リポジトリ名へのディクショナリ。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。 たとえば、エントリ `"@foo": "@bar"` は、このリポジトリが `@foo` に依存するたびに(`@foo//some:target` への依存関係など)、グローバルに宣言された `@bar`(`@bar//some:target`)内でその依存関係を実際に解決することを宣言します。 |
sha256 |
文字列。省略可
ダウンロードされたファイルの想定される SHA-256。 これは、ダウンロードしたファイルの SHA-256 と一致する必要があります。_SHA-256 を省略すると、リモートファイルが変更される可能性があるため、セキュリティ上のリスクがあります。_ このフィールドを省略すると、ビルドが非ハーメチックになります。開発を容易にするために省略可能ですが、出荷前にこの属性または `integrity` のいずれかを設定する必要があります。 |
url |
文字列。省略可
Bazel で利用可能になるファイルへの URL。これは、ファイル、http URL、または https URL である必要があります。リダイレクトが実行されます。認証はサポートされていません。urls パラメータを使用すると、取得元の代替 URL を指定できるため、柔軟性が高まります。URL の末尾は `.jar` でなければなりません。 |
urls |
文字列のリスト。省略可 Bazel で利用可能になるファイルの URL のリスト。各エントリは、ファイル、http URL、https URL のいずれかである必要があります。リダイレクトが実行されます。認証はサポートされていません。URL は成功するまで順番に試されるため、ローカル ミラーを最初にリストする必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。すべての URL の末尾は `.jar` でなければなりません。 |