問題タブ [starlark]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
struct - メソッドを持つひばり構造体
ここに私がやろうとしたことがありますが、うまくいきます。便利だと思いますが、ハックのように感じるので、将来壊れるのではないかと心配しています.
私は大規模なプロジェクトを Bazel に変換することに取り組んでおり、次のような多くのローカル ラッパーがあります。
これには多くのload
コマンドが必要であり、煩わしく、繰り返し発生するエラーの原因となります。通常の Python であれば、モジュール全体をインポートするだけです。しかし、Skylark では関数を 1 つずつロードする必要があります。
構造体を使用して、個々のロードの必要性を取り除くことができます。
でmy.bzl
:
さまざまなBUILD
ファイルで:
上にも書きましたが、すべてうまくいきます。ネイティブ ルールのラッパーやその他のさまざまな機能に if を使用できます。
しかし、私は言語を乱用していますか?将来壊れる可能性はありますか?
ありがとう。
bazel - ルールで構築されたツールではなく、提供されたツールを使用して Bazel テストルールを作成する方法は?
2 つの入力を受け取り、出力 (2 つの入力の差) とリターン コード (2 つの入力が一致する場合は 0、一致しない場合は 1) の両方を返すテスト ツール (大まかに言えば、差分ツール) があります。これは Kotlin で構築されて//java/fr/enoent/phosphorus
おり、私のリポジトリで利用できます。
何かによって生成されたファイルが、リポジトリに既に存在する参照ファイルと同一であることをテストするルールを作成したいと考えています。ctx.actions.run
問題は、設定したルールが、そのルールによってビルドされtest = True
た実行可能ファイルを返す必要があることです (ルールに提供されるツールではありません)。次に、次のように、例に従ってシェルスクリプトでラップしようとしました:
(phosphorus_compare
実際のコマンドを生成する単なるマクロです。)
ただし、このアプローチには 2 つの問題があります。
- このように出力を宣言することはできません。それはどのアクションにもリンクされていません (そして Bazel はそれについて不平を言っています)。テストの出力を宣言する必要はないのではないでしょうか? Bazel は、テストが失敗したときにテスト フォルダー内の何かを使用できるようにしますか?
- ツールの実行に必要な実行ファイルは、テストの実行時に利用できないようです。
java/fr/enoent/phosphorus/phosphorus: line 359: /home/kernald/.cache/bazel/_bazel_kernald/58c025fbb926eac6827117ef80f7d2fa/sandbox/linux-sandbox/1979/execroot/fr_enoent/bazel-out/k8-fastbuild/bin/tools/phosphorus/tests/should_pass.runfiles/remotejdk11_linux/bin/java: No such file or directory
全体として、シェル スクリプトを使用すると、不必要な間接化が追加され、一部のコンテキスト (ツールの実行ファイルなど) が失われるだけのように感じます。理想的には、ctx.actions.run
その戻りコードを使用して依存するだけですが、テストで実行可能ファイルを生成する必要があるように見えるため、それはオプションではないようです。そのようなルールを書くための正しいアプローチは何でしょうか?