tindakan

Laporkan masalah Lihat sumber Malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Modul yang menyediakan fungsi untuk membuat tindakan. Akses modul ini menggunakan ctx.actions.

Anggota

args

Args actions.args()

Menampilkan objek Args yang dapat digunakan untuk membangun command line yang hemat memori.

declare_directory

File actions.declare_directory(filename, *, sibling=None)

Mendeklarasikan bahwa aturan atau aspek membuat direktori dengan nama yang diberikan, dalam paket saat ini. Anda harus membuat tindakan yang menghasilkan direktori. Konten direktori tidak dapat diakses langsung dari Starlark, tetapi dapat diperluas dalam perintah tindakan dengan Args.add_all(). Hanya file dan direktori biasa yang bisa berada dalam konten yang diperluas dari file deploy_directory.

Parameter

Parameter Deskripsi
filename wajib
Jika tidak ada 'saudara' disediakan, jalur direktori baru, relatif terhadap paket saat ini. Jika tidak, nama dasar untuk file ('sibling' menentukan direktori).
sibling File; atau None; default adalah None
File yang berada di direktori yang sama dengan direktori yang baru dideklarasikan. File harus ada dalam paket saat ini.

declare_file

File actions.declare_file(filename, *, sibling=None)

Mendeklarasikan bahwa aturan atau aspek membuat file dengan nama file yang diberikan. Jika sibling tidak ditentukan, nama file akan relatif terhadap direktori paket. Jika tidak, file akan berada di direktori yang sama dengan sibling. File tidak dapat dibuat di luar paket saat ini.

Ingat bahwa selain mendeklarasikan file, Anda harus membuat tindakan yang memunculkan file secara terpisah. Untuk membuat tindakan tersebut, Anda harus meneruskan objek File yang ditampilkan ke fungsi konstruksi tindakan.

Perhatikan bahwa file output yang telah dideklarasikan tidak perlu (dan tidak dapat) dideklarasikan menggunakan fungsi ini. Anda bisa mendapatkan objek File dari ctx.outputs sebagai gantinya. Lihat contoh penggunaan.

Parameter

Parameter Deskripsi
filename wajib
Jika tidak ada 'saudara' disediakan, jalur file baru, relatif terhadap paket saat ini. Jika tidak, nama dasar untuk file ('sibling' menentukan direktori).
sibling File; atau None; default adalah None
File yang berada di direktori yang sama dengan file yang baru dibuat. File harus ada dalam paket saat ini.

File actions.declare_symlink(filename, *, sibling=None)

Mendeklarasikan bahwa aturan atau aspek membuat symlink dengan nama yang diberikan dalam paket saat ini. Anda harus membuat tindakan yang menghasilkan symlink ini. Bazel tidak akan pernah membatalkan referensi symlink ini dan akan mentransfernya kata demi kata ke sandbox atau eksekutor jarak jauh. Symlink di dalam artefak pohon saat ini tidak didukung.

Parameter

Parameter Deskripsi
filename wajib
Jika tidak ada 'saudara' disediakan, jalur symlink baru, relatif terhadap paket saat ini. Jika tidak, nama dasar untuk file ('sibling' menentukan direktori).
sibling File; atau None; default adalah None
File yang berada di direktori yang sama dengan symlink yang baru dideklarasikan.

do_nothing

None actions.do_nothing(mnemonic, inputs=[])

Membuat tindakan kosong yang tidak mengeksekusi perintah atau menghasilkan output apa pun, tetapi berguna untuk menyisipkan 'tindakan tambahan'.

Parameter

Parameter Deskripsi
mnemonic wajib
Deskripsi tindakan satu kata, misalnya, CppCompile atau GoLink.
inputs urutan File; atau depset; default-nya adalah []
Daftar file input tindakan.

expand_template

None actions.expand_template(template, output, substitutions={}, is_executable=False, computed_substitutions=unbound)

Membuat tindakan perluasan template. Ketika dijalankan, tindakan akan menghasilkan file berdasarkan template. Bagian-bagian template akan diganti menggunakan kamus substitutions, sesuai urutan substitusi yang ditentukan. Setiap kali kunci kamus muncul di template (atau hasil dari penggantian sebelumnya), kamus akan diganti dengan nilai terkait. Tidak ada sintaksis khusus untuk kunci tersebut. Misalnya, Anda dapat menggunakan tanda kurung kurawal untuk menghindari konflik (misalnya, {KEY}). Lihat contoh penggunaan.

Parameter

Parameter Deskripsi
template wajib
File template, yang merupakan file teks berenkode UTF-8.
output wajib
File output, yang merupakan file teks berenkode UTF-8.
substitutions default adalah {}
Substitusi yang akan dibuat saat meluaskan template.
is_executable default adalah False
Apakah file output harus dapat dieksekusi.
computed_substitutions TemplateDict; default adalah unbound
Substitusi yang akan dibuat saat meluaskan template.

lari

None actions.run(outputs, inputs=[], unused_inputs_list=None, executable, tools=unbound, arguments=[], mnemonic=None, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=unbound)

Membuat tindakan yang menjalankan file yang dapat dieksekusi. Lihat contoh penggunaan.

Parameter

Parameter Deskripsi
outputs urutan File; wajib
Daftar file output dari tindakan.
inputs urutan File; atau depset; default-nya adalah []
Daftar atau hapus file input tindakan.
unused_inputs_list File; atau None; default adalah None
File yang berisi daftar input yang tidak digunakan oleh tindakan.

Konten file ini (umumnya salah satu output tindakan) sesuai dengan daftar file input yang tidak digunakan selama keseluruhan eksekusi tindakan. Perubahan apa pun pada file tersebut tidak boleh memengaruhi output tindakan dengan cara apa pun.

executable File; atau string; atau FilesToRunProvider; wajib
File yang dapat dieksekusi yang akan dipanggil oleh tindakan.
tools urut; atau depset; default adalah unbound
Daftar atau hapus daftar alat yang diperlukan oleh tindakan. Alat adalah input dengan runfile tambahan yang otomatis tersedia untuk tindakan. Jika disediakan, daftar dapat berupa kumpulan File, instance FilesToRunProvider, atau depset Files yang heterogen. File yang langsung ada dalam daftar dan berasal dari ctx.executable akan otomatis ditambahkan runfile-nya. Jika depset diberikan, depset tersebut hanya boleh berisi Files. Dalam kedua kasus tersebut, file dalam depset tidak direferensikan silang dengan ctx.executable untuk runfile.
arguments urut; default adalah []
Argumen command line untuk tindakan. Harus berupa daftar string atau objek actions.args().
mnemonic string; atau None; default adalah None
Deskripsi tindakan satu kata, misalnya, CppCompile atau GoLink.
progress_message string; atau None; default adalah None
Pesan progres yang akan ditampilkan kepada pengguna selama build, misalnya, "Mengompilasi foo.cc to create foo.o". Pesan ini dapat berisi pola %{label}, %{input}, atau %{output}, yang diganti dengan string label, input pertama, atau jalur output. Memilih untuk menggunakan pola daripada string statis, karena yang pertama lebih efisien.
use_default_shell_env default adalah False
Apakah tindakan harus menggunakan lingkungan shell default, yang terdiri dari beberapa variabel bergantung OS serta variabel yang ditetapkan melalui --action_env.

Jika use_default_shell_env dan env disetel ke True, nilai yang ditetapkan di env akan menimpa lingkungan shell default jika --incompatible_merge_fixed_and_default_shell_env diaktifkan (default). Jika tanda tidak diaktifkan, env akan diabaikan.

env dict; atau None; default adalah None
Menetapkan kamus variabel lingkungan.

Jika use_default_shell_env dan env disetel ke True, nilai yang ditetapkan di env akan menimpa lingkungan shell default jika --incompatible_merge_fixed_and_default_shell_env diaktifkan (default). Jika tanda tidak diaktifkan, env akan diabaikan.

execution_requirements dict; atau None; default adalah None
Informasi untuk menjadwalkan tindakan. Lihat tag untuk kunci yang berguna.
input_manifests urut; atau None; default adalah None
(Eksperimental) menyetel metadata runfiles input; parameter tersebut biasanya dihasilkan oleh resolve_command.
exec_group string; atau None; default adalah None
Menjalankan tindakan di platform eksekusi grup exec tertentu. Jika tidak ada, target akan menggunakan platform eksekusi default.
shadowed_action Tindakan; default adalah None
Menjalankan tindakan menggunakan input dan lingkungan tindakan berbayang yang diberikan dan ditambahkan ke daftar input dan lingkungan tindakan. Lingkungan tindakan dapat menimpa variabel lingkungan tindakan yang dibayangi apa pun. Jika tidak ada, hanya input tindakan dan lingkungan yang diberikan yang akan digunakan.
resource_set dapat dipanggil; atau None; default adalah None
Fungsi callback yang menampilkan kamus set resource, yang digunakan untuk memperkirakan penggunaan resource pada waktu eksekusi jika tindakan ini dijalankan secara lokal.

Fungsi ini menerima dua argumen posisi: string yang mewakili nama OS (misalnya, "osx"), dan bilangan bulat yang mewakili jumlah input untuk tindakan. Kamus yang ditampilkan dapat berisi entri berikut, yang masing-masing mungkin berupa float atau int:

  • "cpu": jumlah CPU; default 1
  • "memory": dalam MB; 250 default
  • "local_test": jumlah pengujian lokal; default 1

Jika parameter ini disetel ke None atau jika --experimental_action_resource_set salah, nilai default akan digunakan.

Callback harus merupakan level teratas (lambda dan fungsi bertingkat tidak diizinkan).

toolchain Label; atau string; atau None; default-nya adalah unbound

Jenis toolchain yang dapat dieksekusi atau alat yang digunakan dalam tindakan ini. Parameter ini harus disetel, agar tindakan dapat dieksekusi di platform eksekusi yang benar.

Untuk saat ini tidak ada pengoperasian, tetapi sebaiknya setel jika toolchain digunakan, karena akan diperlukan pada rilis Bazel mendatang.

Perhatikan bahwa aturan yang membuat tindakan ini perlu mendefinisikan toolchain ini dalam 'rule()' .

Jika parameter `toolchain` dan `exec_group` ditetapkan, `exec_group` akan digunakan. Error akan muncul jika `exec_group` tidak menentukan hal yang sama.

run_shell

None actions.run_shell(outputs, inputs=[], tools=unbound, arguments=[], mnemonic=None, command, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=unbound)

Membuat tindakan yang menjalankan perintah shell. Lihat contoh penggunaan.

Parameter

Parameter Deskripsi
outputs urutan File; wajib
Daftar file output dari tindakan.
inputs urutan File; atau depset; default-nya adalah []
Daftar atau hapus file input tindakan.
tools urutan File; atau depset; default-nya adalah unbound
Daftar atau hapus daftar alat yang diperlukan oleh tindakan. Alat adalah input dengan runfile tambahan yang otomatis tersedia untuk tindakan. Daftar dapat berisi instance Files atau FilesToRunProvider.
arguments urut; default adalah []
Argumen command line untuk tindakan. Harus berupa daftar string atau objek actions.args().

Bazel meneruskan elemen dalam atribut ini sebagai argumen ke perintah.Perintah tersebut dapat mengakses argumen ini menggunakan substitusi variabel shell seperti $1, $2, dll. Perhatikan bahwa karena objek Args disatukan sebelum pengindeksan, jika ada objek Args dengan ukuran yang tidak diketahui, maka semua string berikutnya akan berada pada indeks yang tidak dapat diprediksi. Mungkin berguna untuk menggunakan $@ (untuk mengambil semua argumen) bersama dengan objek Args yang ukurannya tidak tentu.

Jika command adalah daftar string, parameter ini tidak boleh digunakan.

mnemonic string; atau None; default adalah None
Deskripsi tindakan satu kata, misalnya, CppCompile atau GoLink.
command string; atau urutan string; wajib
perintah shell yang akan dijalankan. Ini dapat berupa string (lebih disukai) atau urutan string (tidak digunakan lagi).

Jika command adalah string, maka dieksekusi seolah-olah oleh sh -c <command> "" <arguments> -- yaitu, elemen dalam arguments disediakan untuk perintah sebagai $1, $2 (atau %1, %2 jika menggunakan batch Windows), dll. Jika arguments berisi objek actions.args(), kontennya ditambahkan satu per satu ke command line, sehingga $i dapat merujuk ke masing-masing string dalam objek Args. Perhatikan bahwa jika objek Args dengan ukuran yang tidak diketahui diteruskan sebagai bagian dari arguments, string akan berada pada indeks yang tidak diketahui; dalam hal ini substitusi shell $@ (ambil semua argumen) mungkin berguna.

(Tidak digunakan lagi) Jika command adalah urutan string, item pertama adalah dapat dieksekusi untuk dijalankan dan item sisanya adalah argumennya. Jika formulir ini digunakan, parameter arguments tidak boleh diberikan. Perhatikan bahwa formulir ini tidak digunakan lagi dan akan segera dihapus. Fungsi ini dinonaktifkan dengan `--incompatible_run_shell_command_string`. Gunakan tanda ini untuk memverifikasi bahwa kode Anda kompatibel.

Bazel menggunakan {i>shell<i} yang sama untuk menjalankan perintah seperti yang dilakukan untuk genrules.

progress_message string; atau None; default adalah None
Pesan progres yang akan ditampilkan kepada pengguna selama build, misalnya, "Mengompilasi foo.cc to create foo.o". Pesan ini dapat berisi pola %{label}, %{input}, atau %{output}, yang diganti dengan string label, input pertama, atau jalur output. Memilih untuk menggunakan pola daripada string statis, karena yang pertama lebih efisien.
use_default_shell_env default adalah False
Apakah tindakan harus menggunakan lingkungan shell default, yang terdiri dari beberapa variabel bergantung OS serta variabel yang ditetapkan melalui --action_env.

Jika use_default_shell_env dan env disetel ke True, nilai yang ditetapkan di env akan menimpa lingkungan shell default jika --incompatible_merge_fixed_and_default_shell_env diaktifkan (default). Jika tanda tidak diaktifkan, env akan diabaikan.

env dict; atau None; default adalah None
Menetapkan kamus variabel lingkungan.

Jika use_default_shell_env dan env disetel ke True, nilai yang ditetapkan di env akan menimpa lingkungan shell default jika --incompatible_merge_fixed_and_default_shell_env diaktifkan (default). Jika tanda tidak diaktifkan, env akan diabaikan.

execution_requirements dict; atau None; default adalah None
Informasi untuk menjadwalkan tindakan. Lihat tag untuk kunci yang berguna.
input_manifests urut; atau None; default adalah None
(Eksperimental) menyetel metadata runfiles input; parameter tersebut biasanya dihasilkan oleh resolve_command.
exec_group string; atau None; default adalah None
Menjalankan tindakan di platform eksekusi grup exec tertentu. Jika tidak ada, target akan menggunakan platform eksekusi default.
shadowed_action Tindakan; default adalah None
Menjalankan tindakan menggunakan input yang ditemukan dari tindakan dibayangi tertentu yang ditambahkan ke daftar input tindakan. Jika tidak ada, hanya input tindakan yang akan digunakan.
resource_set dapat dipanggil; atau None; default adalah None
Fungsi callback untuk memperkirakan penggunaan resource jika dijalankan secara lokal. Lihatctx.actions.run().
toolchain Label; atau string; atau None; default-nya adalah unbound

Jenis toolchain yang dapat dieksekusi atau alat yang digunakan dalam tindakan ini. Parameter ini harus disetel, agar tindakan dapat dieksekusi di platform eksekusi yang benar.

Untuk saat ini tidak ada pengoperasian, tetapi sebaiknya setel jika toolchain digunakan, karena akan diperlukan pada rilis Bazel mendatang.

Perhatikan bahwa aturan yang membuat tindakan ini perlu mendefinisikan toolchain ini dalam 'rule()' .

Jika parameter `toolchain` dan `exec_group` ditetapkan, `exec_group` akan digunakan. Error akan muncul jika `exec_group` tidak menentukan hal yang sama. Rantai Alat (Toolchain).

None actions.symlink(output, target_file=None, target_path=None, is_executable=False, progress_message=None)

Membuat tindakan yang menulis symlink di sistem file.

Fungsi ini harus dipanggil dengan salah satu dari target_file atau target_path yang ditentukan.

Saat Anda menggunakan target_file, deklarasikan output dengan declare_file() atau declare_directory() dan cocokkan dengan jenis target_file. Ini membuat symlink mengarah ke target_file. Bazel membatalkan output tindakan ini setiap kali target symlink atau kontennya berubah.

Atau, saat Anda menggunakan target_path, deklarasikan output dengan declare_symlink()). Dalam hal ini, symlink mengarah ke target_path. Bazel tidak pernah me-resolve symlink dan output tindakan ini hanya menjadi tidak valid jika konten teks symlink (yaitu, nilai readlink()) berubah. Secara khusus, ini dapat digunakan untuk membuat symlink yang menjuntai.

Parameter

Parameter Deskripsi
output wajib
Output dari tindakan ini.
target_file File; atau None; default adalah None
File yang akan dituju oleh symlink output.
target_path string; atau None; default adalah None
Jalur persis yang akan dituju symlink output. Tidak ada normalisasi atau pemrosesan lain yang diterapkan.
is_executable default adalah False
Hanya dapat digunakan dengan target_file, bukan target_path. Jika true (benar), saat tindakan dieksekusi, jalur target_file akan diperiksa untuk mengonfirmasi bahwa tindakan tersebut dapat dieksekusi, dan error akan dilaporkan jika tidak. Menetapkan is_executable ke Salah (False) bukan berarti target tidak dapat dieksekusi, hanya saja tidak ada verifikasi yang dilakukan.

Fitur ini tidak masuk akal untuk target_path karena symlink yang menggantung mungkin tidak ada pada waktu build.

progress_message string; atau None; default adalah None
Pesan progres yang akan ditampilkan kepada pengguna selama build.

template_dict

TemplateDict actions.template_dict()

Menampilkan objek TemplateDict untuk perluasan template yang hemat memori.

write

None actions.write(output, content, is_executable=False)

Membuat tindakan tulis file. Ketika dieksekusi, tindakan akan menulis konten yang diberikan ke file. Langkah ini digunakan untuk menghasilkan {i>file<i} dengan menggunakan informasi yang tersedia dalam fase analisis. Jika file berukuran besar dan memiliki banyak konten statis, pertimbangkan untuk menggunakan expand_template.

Parameter

Parameter Deskripsi
output wajib
File output.
content string; atau Args; wajib
isi file. Dapat berupa string atau objek actions.args().
is_executable default adalah False
Apakah file output harus dapat dieksekusi.