HTTP リポジトリ ルール

次の関数は @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)

あるいは、MODULE.bazel ファイル内で use_repo_rule を使用して、これらのリポジトリ ルールを直接呼び出すこともできます。

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(name = "foo", urls = [...])

http_archive

load("@bazel//tools/build_defs/repo:http.bzl", "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 辞書: 文字列 -> 文字列(省略可)

ホスト名をカスタム認可パターンにマッピングする辞書(省略可)。この辞書に URL のホスト名が含まれている場合、その値は HTTP リクエストの認可ヘッダーを生成するときにパターンとして使用されます。これにより、多くの一般的なクラウド ストレージ プロバイダで使用されているカスタム認可スキームを使用できます。このパターンは現在、<login><password> の 2 つのトークンをサポートしています。これらのトークンは、同じホスト名の netrc ファイル内の同等の値に置き換えられます。フォーマット後、結果が HTTP リクエストの Authorization フィールドの値として設定されます。ベアラー トークンを使用して oauth2 対応 API への HTTP ダウンロードの属性と netrc の例:

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。指定されていて空でない場合、同じ正規 ID を持つリクエストによってキャッシュに追加されていない限り、Bazel はキャッシュからファイルを取得しません。指定しないか空にした場合、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 コマンドのシーケンス。この属性が設定されていない場合、patch_cmds は Windows で実行されます。この場合、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 のリストは、すべて同じファイルの可能なミラーである必要があります。1 つが成功するまで URL が順番に試行されます。

remote_patch_strip 整数(省略可)

リモート パッチのファイル名から削除する先頭のスラッシュの数。

remote_patches 辞書: String -> String(省略可)

パッチファイルの URL とその完全性値のマップ。これらは、アーカイブの抽出後、`patches` 属性からパッチファイルを適用する前に適用されます。Bazel ネイティブのパッチ実装を使用します。「remote_patch_strip」でパッチストリップ番号を指定できます。

repo_mapping 辞書: String -> String(省略可)

「WORKSPACE」コンテキストのみ: ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係について、ワークスペースの依存関係の解決を管理できます。 たとえば、エントリ「"@foo": "@bar"」は、このリポジトリが「@foo」に依存するすべての場合(「@foo//some:target」の依存関係など)に、グローバルに宣言された「@bar」(「@bar//some:target」)内でその依存関係を解決することを宣言します。この属性は、「MODULE.bazel」コンテキスト(モジュール拡張機能の実装関数内でリポジトリ ルールを呼び出す場合)ではサポートされていません。

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 を指定する必要があります。リダイレクトが行われます。認証はサポートされていません。取得元の代替 URL を指定できる urls パラメータを使用すると、より柔軟な設定が可能になります。

urls 文字列のリスト(省略可)

Bazel で使用可能なファイルの URL のリスト。各エントリはファイル、HTTP または https の URL にする必要があります。リダイレクトが行われます。認証はサポートされていません。URL は、1 つが成功するまで順番に試行されるため、ローカル ミラーを先頭に指定する必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。

workspace_file ラベル(省略可)

このリポジトリの WORKSPACE ファイルとして使用するファイル。「workspace_file」または「workspace_file_content」のいずれかを指定するか、どちらも指定しないことができます。両方を指定することはできません。

workspace_file_content 文字列。省略可

このリポジトリの WORKSPACE ファイルのコンテンツ。「workspace_file」または「workspace_file_content」のいずれかを指定するか、どちらも指定しないことができます。両方を指定することはできません。

環境変数

このリポジトリ ルールは、次の環境変数に依存します。

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID

http_file

load("@bazel//tools/build_defs/repo:http.bzl", "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 リクエストの Authorization ヘッダーを生成するときに値がパターンとして使用されます。これにより、多くの一般的なクラウド ストレージ プロバイダで使用されているカスタム認可スキームを使用できます。このパターンは現在、<login><password> の 2 つのトークンをサポートしています。これらのトークンは、同じホスト名の netrc ファイル内の同等の値に置き換えられます。フォーマット後、結果は HTTP リクエストの Authorization フィールドの値として設定されます。ベアラー トークンを使用して oauth2 対応 API への HTTP ダウンロードの属性と netrc の例:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
最終的な HTTP リクエストには、次のヘッダーが含まれます。
Authorization: Bearer RANDOM-TOKEN

canonical_id 文字列(省略可)

ダウンロードしたファイルの正規 ID。指定されていて空でない場合、同じ正規 ID を持つリクエストによってキャッシュに追加されていない限り、Bazel はキャッシュからファイルを取得しません。指定しないか空にした場合、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(省略可)

「WORKSPACE」コンテキストのみ: ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係のワークスペース依存関係解決を制御できます。たとえば、エントリ「"@foo": "@bar"」は、このリポジトリが「@foo」に依存するすべての場合(「@foo//some:target」の依存関係など)に、グローバルに宣言された「@bar」(「@bar//some:target」)内でその依存関係を解決することを宣言します。この属性は、「MODULE.bazel」コンテキスト(モジュール拡張機能の実装関数内でリポジトリ ルールを呼び出す場合)ではサポートされていません。

sha256 文字列(省略可)

ダウンロードされたファイルの想定される SHA-256。これは、ダウンロードしたファイルの SHA-256 と一致する必要があります。リモート ファイルは変更される可能性があるため、SHA-256 を省略するとセキュリティ上のリスクが発生します。このフィールドを省略すると、ビルドが密閉型でなくなります。開発を容易にするために設定できますが、出荷前に設定する必要があります。

url 文字列(省略可)

Bazel で使用可能なファイルの URL。ファイル、http URL、または https URL を指定する必要があります。リダイレクトが行われます。認証はサポートされていません。取得元の代替 URL を指定できる urls パラメータを使用すると、より柔軟な設定が可能になります。

urls 文字列のリスト(省略可)

Bazel で使用可能なファイルの URL のリスト。各エントリはファイル、http または https URL である必要があります。リダイレクトが行われます。認証はサポートされていません。URL は、1 つが成功するまで順番に試行されるため、ローカル ミラーを先頭に指定する必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。

環境変数

このリポジトリ ルールは、次の環境変数に依存します。

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID

http_jar

load("@bazel//tools/build_defs/repo:http.bzl", "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 Name(必須)

このリポジトリの一意の名前。

auth_patterns 辞書: String -> String(省略可)

ホスト名をカスタム認可パターンにマッピングする辞書(省略可)。この辞書に URL のホスト名が含まれている場合、その値は HTTP リクエストの認可ヘッダーを生成するときにパターンとして使用されます。これにより、多くの一般的なクラウド ストレージ プロバイダで使用されているカスタム認証スキームを使用できるようになります。このパターンは現在、<login><password> の 2 つのトークンをサポートしています。これらのトークンは、同じホスト名の netrc ファイル内の同等の値に置き換えられます。フォーマット後、結果が HTTP リクエストの Authorization フィールドの値として設定されます。ベアラー トークンを使用して oauth2 対応 API への HTTP ダウンロードの属性と netrc の例:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
最終的な HTTP リクエストには、次のヘッダーが含まれます。
Authorization: Bearer RANDOM-TOKEN

canonical_id 文字列。省略可

ダウンロードしたファイルの正規 ID。指定されていて空でない場合、同じ正規 ID を持つリクエストによってキャッシュに追加されていない限り、Bazel はキャッシュからファイルを取得しません。指定しないか空にした場合、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(省略可)

「WORKSPACE」コンテキストの場合のみ: ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより、このリポジトリの依存関係について、ワークスペースの依存関係の解決を管理できます。 たとえば、エントリ「"@foo": "@bar"」は、このリポジトリが「@foo」に依存するすべての場合(「@foo//some:target」の依存関係など)に、グローバルに宣言された「@bar」(「@bar//some:target」)内でその依存関係を解決することを宣言します。この属性は、「MODULE.bazel」コンテキスト(モジュール拡張機能の実装関数内でリポジトリ ルールを呼び出す場合)ではサポートされていません。

sha256 文字列(省略可)

ダウンロードされたファイルの想定される SHA-256。ダウンロードしたファイルの SHA-256 と一致している必要があります。リモート ファイルは変更される可能性があるため、SHA-256 を省略するとセキュリティ上のリスクが発生します。このフィールドを省略すると、ビルドが密閉型でなくなります。開発を容易にするために省略可能ですが、出荷前にこの属性または「integrity」のいずれかを設定する必要があります。

url 文字列(省略可)

Bazel で使用可能なファイルの URL。ファイル、http URL、または https URL を指定する必要があります。リダイレクトが行われます。認証はサポートされていません。取得元の代替 URL を指定できる urls パラメータを使用すると、柔軟性を高めることができます。 URL の末尾は「.jar」にする必要があります。

urls 文字列のリスト(省略可)

Bazel で使用可能なファイルの URL のリスト。各エントリはファイル、HTTP または https の URL にする必要があります。リダイレクトが行われます。認証はサポートされていません。URL は、1 つが成功するまで順番に試行されるため、ローカル ミラーを先頭に指定する必要があります。すべてのダウンロードが失敗した場合、ルールは失敗します。すべての URL は「.jar」で終わる必要があります。

環境変数

このリポジトリ ルールは、次の環境変数に依存します。

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID