サーバが乾燥するまで設営作業が出来ないので、本日はとりあえずやっぱりマニュアルとサンプル作成。。。
前回の記事であげたGoogleTestとの連携のなかで、http_archiveルールというルールが出てきました。
これを利用するに当たって、ある程度内容を把握していたほうがいいだろうと考え、今回はhttp_archiveルールの翻訳です。
あいかわらず速度重視した、Da★Boの独断と偏見と愛と憎しみと希望と絶望の翻訳です。
ご利用は計画的に♥
http_archiveルールの使用例
http_archveルールは、アーカイブ化されたバジルリポジトリをダウンロードするためのルールです。このルールを使用することで、アーカイブファイルを解凍、メイクした上でバインド可能な状態にします。
このルールが対応している拡張子は以下のとおりです。
zip
jar
war
tar
tar.gz
tgz
tar.zz
tar.bz2
例として、手元のソースコードを含むチャットプログラムのリポジトリにSSLライブラリを配置する例を紹介します。
URLはhttp://example.com/openssl.zipです。
このzipファイルを解凍すると以下のような構成のフォルダが得られます。
src/ openssl.cc openssl.h
ローカルリポジトリには、openssl.BUILDという名称のBUILDファイルを用意し、内容を以下のように記載してください。
cc_library( name = "openssl-lib", srcs = ["src/openssl.cc"], hdrs = ["src/openssl.h"], )
ローカルリポジトリのチャットアプリからこのライブラリを参照するには、チャットアプリのWORKSPACEファイルに以下の内容を記載してください。
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive( name = "my_ssl", urls = ["http://example.com/openssl.zip"], sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", build_file = "@//:openssl.BUILD", )
これによりチャットアプリのBUILDファイルから、@my_ssl//:openssl-lib を依存関係として参照することが出来るようになります。
対象がDebの場合
対象のアーカイブがDebの場合、http_archiveルールではなく、http_fileルールを使用します。
ロードにPythonを使用しますが、http_fileルールの内容の指定方法は基本的にhttp_archveと同様です。
python load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
http_file( name = "my_deb", urls = ["http://example.com/package.deb"], sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", )
http_archiveルールの属性
name
必須:このリポジトリを一位に識別する名称を設定します。
auth_patterns
任意:dict型文字列ホスト名をカスタム認証パターンに紐付けます。
URLのホスト名が設定した辞書の値と一致した場合、設定されたパターンをもとに http リクエストへの認証ヘッダを生成します。
これにより一般的なクラウドストレージの多くの認証手続きに対応することが出来ます。
ここで設定するパターンは、文字列をnetrcファイルに記載された対応するホスト名の設定値に置き換え書式を作成します。
作成された書式はHTTPリクエストのAuthorizationフィールドに設定されます。
以下に例を記載します。
python http_jar( name = "custom-artifact", url = "https://storage.cloudprovider.com/custom-bucket/custom-artifact.jar", sha256 = "...", netrc = "/home/testuser/workspace/netrc", auth_patterns = { "storage.cloudprovider.com": "Bearer " } )
netrc:
machine storage.cloudprovider.com password RANDOM-TOKEN
最終的なhttpリクエストヘッダは以下のように生成されます。
Authorization: Bearer RANDOM-TOKEN
build_file
任意:ラベル名リポジトリのBUILDルールが記載されたBUILDファイルの名称を指定します。このラベルは絶対参照での指定が必要です。
@// がメインリポジトリのルートを表します。
このファイルは必ずしも名称が必要ではありませんが、BUILD.new-repo-name などと名付けで区別しておいたほうが識別しやすいでしょう。
build_file 属性と build_file_content属性で指定する方法がありますが、両方を同時に指定することは出来ません。
build_file_content
任意:文字列このリポジトリのビルドファイルの内容を指定できます。
build_file 属性と build_file_content属性で指定する方法がありますが、両方を同時に指定することは出来ません。
canonical_id
任意:文字列アーカイブのIDです。この値が指定された場合、bazel はアーカイブをキャッシュに配置し、IDが一致しない限りキャッシュのアーカイブを使用してビルドを行います。
netrc
任意:文字列認証情報として使用するnetrcファイルへのパスを記載します。
patch_args
任意:文字列リストパッチツールの引数を設定します。デフォルトの値は-p0ですが、gitによって生成されたパッチは-p1を必要とします。
-pオプションを複数設定することも可能ですが、リストの最後に指定されたオプションが有効になります。
-pオプションがどれも有効でなかった場合などは、Bazelはフォールバックを行い、Bazelネイティブのコマンドラインパッチツールを使ってパッチを実装します。
フォールバックが行われた場合、パッチコマンドラインツールおよびパッチツールは使用される、patchオプションが使用されます。
patch_cmds
任意:文字列リストBashコマンドによるパッチ適用後に実行されるコマンドを指定します。
patch_cmds_win
任意:文字列リストWindowsなんて都市伝説です。
patches
任意:ラベルリストアーカイブの解凍後にパッチとして適用されるファイルの名称のリストです。デフォルトではBazelネイティブで実装されたパッチツールを使用しますが、これはファズマッチおよびバイナリーパッチをサポートしていません。
patch_tool 属性が指定されているか patch_args属性に -p 以外の引数がある場合、Bazelはフォールバックしてパッチコマンドラインツールを使用します。
sha256
任意:文字列ダウンロードされるファイルの SHA-256 を指定します。SHA-256が一致なかった場合ファイルはダウンロードされません。
SHA-256 をしなければリモートファイルが変更することが可能となってしまうため、セキュリティリスクに繋がります。
開発中に除外して開発を容易にすることは出来ますが、製品の出荷時には設定することを推奨します。
strip_prefix
任意:文字列アーカイブの解凍先のディレクトリから、指定されたプリフィックスを取り除きます。
階層ごとにこれを指定する必要はなく、strip_prefixが指定された位置から下の階層のプリフィックスのついたファイルやディレクトリについて、一括して取り除きます。
実際の使用例はこちら
type
任意:文字列ダウンロードするアーカイブのファイルタイプを指定します。デフォルトでは、アーカイブの種類はURLから推測されますが、ファイルに拡張子がない場合にこの属性を使用して指定することが出来ます。
このルールが対応している拡張子は以下のとおりです。
zip
jar
war
tar
tar.gz
tgz
tar.zz
tar.bz2
url
任意:文字列リストBazelに使用させたいファイルへのURLのリストです。
全ての指定のプロトコルはhttpまたはhttpsでなくてはならず、また参照先はファイルである必要があります。
URLのリダイレクトは参照されますが、認証が必要なURLには対応していません。
workspace_file
任意:ラベルここで指定されたファイルをリポジトリのWORKSPACEファイルとして扱います。
workspace_file属性とworkspace_file_content属性のどちらかで指定できますが、両方を指定することはできません。
workspace_file_content
任意:ラベルここで指定されたファイルをリポジトリのWORKSPACEファイルとして扱います。
workspace_file属性とworkspace_file_content属性のどちらかで指定できますが、両方を指定することはできません。
0 件のコメント:
コメントを投稿