Fungsi berikut dapat dimuat dari
@bazel_tools//tools/build_defs/repo:http.bzl
.
Aturan untuk mendownload file dan arsip melalui HTTP.
Penyiapan
Untuk menggunakan aturan ini dalam ekstensi modul, muat aturan ini dalam file .bzl, lalu panggil aturan tersebut dari
fungsi implementasi ekstensi. Sebagai contoh, untuk menggunakan 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)
Atau, Anda dapat langsung memanggil aturan repo ini di file MODULE.bazel dengan
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
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)
Mengunduh repositori Bazel sebagai file arsip terkompresi, mendekompresinya, dan membuat targetnya tersedia untuk binding.
File ini mendukung ekstensi file berikut: "zip"
, "jar"
, "war"
, "aar"
, "tar"
,
"tar.gz"
, "tgz"
, "tar.xz"
, "txz"
, "tar.zst"
, "tzst"
, tar.bz2
, "ar"
,
atau "deb"
.
Contoh:
Misalkan repositori saat ini berisi
kode sumber untuk program {i>chat<i},
di-root pada direktori ~/chat-app
. Metode ini harus bergantung pada library SSL
yang tersedia dari http://example.com/openssl.zip. File .zip
ini
berisi struktur direktori berikut:
WORKSPACE
src/
openssl.cc
openssl.h
Di repositori lokal, pengguna membuat file openssl.BUILD
yang
berisi definisi target berikut:
cc_library(
name = "openssl-lib",
srcs = ["src/openssl.cc"],
hdrs = ["src/openssl.h"],
)
Target dalam repositori ~/chat-app
dapat bergantung pada target ini jika
baris berikut ditambahkan ke ~/chat-app/WORKSPACE
:
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",
)
Kemudian, target akan menentukan @my_ssl//:openssl-lib
sebagai dependensi.
Atribut
name |
Nama; wajib diisi
Nama unik untuk repositori ini. |
add_prefix |
String; opsional
Direktori tujuan relatif terhadap direktori repositori. Arsip akan diekstrak ke direktori ini, setelah menerapkan `strip_prefix` (jika ada) ke jalur file dalam arsip. Misalnya, file `foo-1.2.3/src/foo.h` akan diekstrak ke `bar/src/foo.h` jika `add_prefix = "bar"` dan `strip_prefix = "foo-1.2.3"`. |
auth_patterns |
Kamus: String -> String; opsional
Dikte opsional yang memetakan nama host ke pola otorisasi kustom.
Jika nama host URL ada dalam dikte ini, nilai akan digunakan sebagai pola saat
yang membuat {i>header <i}otorisasi untuk
permintaan http. Hal ini memungkinkan penggunaan
skema otorisasi yang digunakan
di banyak penyedia penyimpanan {i>cloud<i} umum.
Saat ini pola mendukung 2 token: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENPermintaan HTTP terakhir akan memiliki header berikut: Authorization: Bearer RANDOM-TOKEN |
build_file |
Label; opsional
File yang akan digunakan sebagai file BUILD untuk repositori ini.Atribut ini adalah label absolut (gunakan '@//' untuk repositori utama). File ini tidak perlu diberi nama BUILD, tetapi bisa berupa nama (seperti BUILD.new-repo-name) mungkin cocok untuk membedakannya dari file BUILD repositori yang sebenarnya. Build_file atau build_file_content dapat ditentukan, tetapi tidak keduanya. |
build_file_content |
String; opsional
Konten untuk file BUILD untuk repositori ini. Build_file atau build_file_content dapat ditentukan, tetapi tidak keduanya. |
canonical_id |
String; opsional
ID kanonis file yang didownload. Jika ditentukan dan tidak kosong, Bazel tidak akan mengambil file dari {i>cache<i}, kecuali jika ditambahkan ke cache atas permintaan dengan ID kanonis yang sama. Jika tidak ditetapkan atau kosong, Bazel secara {i>default<i} menggunakan URL file sebagai ID kanonis. Hal ini membantu menangkap kesalahan umum dalam memperbarui URL tanpa juga memperbarui hash, menghasilkan build yang berhasil secara lokal, tetapi gagal komputer tanpa file dalam cache. Perilaku ini dapat dinonaktifkan dengan --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
integrity |
String; opsional
Checksum yang diharapkan dalam format Integritas Subresource dari file yang didownload. Ini harus cocok dengan checksum file yang didownload. _Ini adalah risiko keamanan untuk menghilangkan {i>checksum<i} karena file jarak jauh dapat berubah._ Paling baik mengabaikan ini akan membuat build Anda non-hermetic. Melakukan pengembangan bersifat opsional lebih mudah tetapi atribut ini atau `sha256` harus ditetapkan sebelum pengiriman. |
netrc |
String; opsional
Lokasi file .netrc yang akan digunakan untuk autentikasi |
patch_args |
Daftar {i>string<i}; opsional
Argumen yang diberikan pada alat patch. Setelan defaultnya adalah -p0, tetapi -p1 biasanya akan diperlukan untuk patch yang dihasilkan oleh git. Jika beberapa argumen -p ditentukan, maka argumen yang terakhir akan diterapkan.Jika argumen selain -p ditentukan, Bazel akan kembali menggunakan alat baris perintah patch alih-alih implementasi patch bawaan Bazel. Saat kembali ke alat command line patch dan atribut patch_tool tidak ditentukan, `patch` akan digunakan. Hal ini hanya memengaruhi file patch dalam atribut `patches`. |
patch_cmds |
Daftar {i>string<i}; opsional
Urutan perintah Bash yang akan diterapkan di Linux/Macos setelah patch diterapkan. |
patch_cmds_win |
Daftar {i>string<i}; opsional
Urutan perintah Powershell yang akan diterapkan di Windows setelah patch diterapkan. Jika atribut ini tidak disetel, patch_cmds akan dieksekusi di Windows, yang mengharuskan keberadaan biner Bash. |
patch_tool |
String; opsional
Utilitas patch(1) yang akan digunakan. Jika hal ini ditetapkan, Bazel akan menggunakan alat patch yang ditentukan, bukan implementasi patch asli Bazel. |
patches |
Daftar label; opsional
Daftar file yang akan diterapkan sebagai patch setelah mengekstrak arsip. Secara default, ia menggunakan implementasi patch asli Bazel yang tidak mendukung pencocokan fuzz dan patch biner, tetapi Bazel akan kembali menggunakan alat command line patch jika atribut `patch_tool` ditentukan atau ada argumen selain `-p` dalam atribut `patch_args`. |
remote_file_integrity |
Kamus: String -> String; opsional
Peta jalur relatif file (kunci) ke nilai integritasnya (nilai). Jalur relatif ini harus dipetakan ke file (kunci) dalam atribut `remote_file_urls`. |
remote_file_urls |
Kamus: String -> Daftar string; opsional
Peta jalur relatif (kunci) ke daftar URL (nilai) yang akan didownload dan disediakan sebagai file overlay di repo. Hal ini berguna ketika Anda ingin menambahkan file WORKSPACE atau BUILD.bazel di atas repositori yang ada. File didownload sebelum menerapkan patch dalam atribut `patches` dan daftar URL harus merupakan duplikat dari file yang sama. URL dicoba secara berurutan sampai salah satunya berhasil. |
remote_patch_strip |
{i>Integer<i} (Bilangan bulat): opsional
Jumlah garis miring di awal yang akan dihapus dari nama file di patch jarak jauh. |
remote_patches |
Kamus: String -> String; opsional
Peta URL file patch ke nilai integritasnya, URL tersebut diterapkan setelah mengekstrak arsip dan sebelum menerapkan file patch dari atribut `patches`. Patch ini menggunakan implementasi patch native Bazel. Anda dapat menentukan nomor strip patch dengan `remote_patch_strip` |
repo_mapping |
Kamus: String -> String; wajib diisi
Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas resolusi dependensi Workspace untuk dependensi repositori ini. Misalnya, entri `"@foo": "@bar"` mendeklarasikan bahwa, kapan pun repositori ini bergantung pada `@foo` (seperti dependensi pada `@foo//some:target`, dependensi tersebut harus benar-benar menyelesaikan dependensi tersebut dalam `@bar` yang dideklarasikan secara global (`@bar//some:target`). |
sha256 |
String; opsional
SHA-256 yang diharapkan dari file telah didownload. Nama ini harus cocok dengan SHA-256 file yang didownload. _Ini adalah risiko keamanan untuk menghilangkan SHA-256 karena file jarak jauh dapat berubah._ Paling tidak, menghilangkan akan membuat build Anda non-hermetic. Melakukan pengembangan bersifat opsional lebih mudah tetapi atribut atau `integritas` ini harus ditetapkan sebelum pengiriman. |
strip_prefix |
String; opsional
Awalan direktori yang akan dihapus dari file yang diekstrak. Banyak arsip berisi direktori tingkat atas yang berisi semua informasi {i>file<i} dalam arsip. Alih-alih harus menentukan awalan ini berulang-ulang dalam `build_file`, bidang ini dapat digunakan untuk menghapusnya dari semua file yang diekstrak. Misalnya, Anda menggunakan `foo-lib-latest.zip`, yang berisi direktori `foo-lib-1.2.3/` di mana ada file `WORKSPACE` dan Direktori `src/`, `lib/`, dan `test/` yang berisi kode aktual yang Anda ingin Anda bangun. Tentukan `strip_prefix = "foo-lib-1.2.3"` untuk menggunakan Direktori `foo-lib-1.2.3` sebagai direktori {i>top-level<i}. Perhatikan bahwa jika ada file di luar direktori ini, file tersebut akan dihapus dan tidak dapat diakses (misalnya, file lisensi tingkat atas). Hal ini mencakup file/direktori yang dimulai dengan awalan tetapi tidak ada di direktori (mis., `foo-lib-1.2.3.release-notes`). Jika awalan yang ditentukan tidak cocok dengan direktori dalam arsip, Bazel akan mengirimkan pesan {i>error<i}. |
type |
String; opsional
Jenis arsip file yang didownload. Secara {i>default<i}, jenis arsip ditentukan dari ekstensi file . Jika file tidak memiliki ekstensi, Anda dapat menentukan secara eksplisit salah satu berikut: `"zip"`, `"jar"`, `"war"`, `"aar"`, `"tar"`, `"tar.gz"`, `"tgz"`, `"tar.xz"`, `"txz"`, `"tar.zst"`, `"tzst"`, `"tar.bz2"`, `"ar"`, atau `"deb"`. |
url |
String; opsional
URL ke file yang akan disediakan untuk Bazel. Ini harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. Fleksibilitas yang lebih besar dapat dicapai dengan parameter URL yang memungkinkan untuk menentukan URL alternatif yang akan diambil. |
urls |
Daftar {i>string<i}; opsional
Daftar URL ke file yang akan tersedia untuk Bazel. Setiap entri harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. URL dicoba secara berurutan sampai ada yang berhasil, jadi Anda harus mencantumkan duplikasi lokal terlebih dahulu. Jika semua download gagal, aturan akan gagal. |
workspace_file |
Label; opsional
File yang akan digunakan sebagai file `WORKSPACE` untuk repositori ini. `workspace_file` atau `workspace_file_content` dapat ditentukan atau tidak keduanya, tetapi tidak keduanya. |
workspace_file_content |
String; opsional
Konten untuk file WORKSPACE untuk repositori ini. `workspace_file` atau `workspace_file_content` dapat ditentukan atau tidak keduanya, tetapi tidak keduanya. |
http_file
http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc, repo_mapping, sha256, url, urls)
Mendownload file dari URL dan membuatnya tersedia untuk digunakan sebagai file ras.
Contoh: Misalkan Anda perlu memiliki paket debian untuk aturan kustom. Paket ini tersedia dari http://example.com/package.deb. Kemudian, Anda dapat menambahkan File 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",
)
Target akan menentukan @my_deb//file
sebagai dependensi yang akan bergantung pada file ini.
Atribut
name |
Nama; wajib diisi
Nama unik untuk repositori ini. |
auth_patterns |
Kamus: String -> String; opsional
Dikte opsional yang memetakan nama host ke pola otorisasi kustom.
Jika nama host URL ada dalam dikte ini, nilai akan digunakan sebagai pola saat
yang membuat {i>header <i}otorisasi untuk
permintaan http. Hal ini memungkinkan penggunaan
skema otorisasi yang digunakan
di banyak penyedia penyimpanan {i>cloud<i} umum.
Saat ini pola mendukung 2 token: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENPermintaan HTTP terakhir akan memiliki header berikut: Authorization: Bearer RANDOM-TOKEN |
canonical_id |
String; opsional
ID kanonis file yang didownload. Jika ditentukan dan tidak kosong, Bazel tidak akan mengambil file dari {i>cache<i}, kecuali jika ditambahkan ke cache atas permintaan dengan ID kanonis yang sama. Jika tidak ditetapkan atau kosong, Bazel secara {i>default<i} menggunakan URL file sebagai ID kanonis. Hal ini membantu menangkap kesalahan umum dalam memperbarui URL tanpa juga memperbarui hash, menghasilkan build yang berhasil secara lokal, tetapi gagal komputer tanpa file dalam cache. Perilaku ini dapat dinonaktifkan dengan --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_path |
String; opsional
Jalur yang ditetapkan ke file yang didownload |
executable |
Boolean; opsional
Apakah file yang didownload harus dapat dieksekusi. |
integrity |
String; opsional
Checksum yang diharapkan dalam format Integritas Subresource dari file yang didownload. Ini harus cocok dengan checksum file yang didownload. _Ini adalah risiko keamanan untuk menghilangkan {i>checksum<i} karena file jarak jauh dapat berubah._ Paling baik mengabaikan ini akan membuat build Anda non-hermetic. Melakukan pengembangan bersifat opsional lebih mudah tetapi atribut ini atau `sha256` harus ditetapkan sebelum pengiriman. |
netrc |
String; opsional
Lokasi file .netrc yang akan digunakan untuk autentikasi |
repo_mapping |
Kamus: String -> String; wajib diisi
Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas resolusi dependensi Workspace untuk dependensi repositori ini. Misalnya, entri `"@foo": "@bar"` mendeklarasikan bahwa, kapan pun repositori ini bergantung pada `@foo` (seperti dependensi pada `@foo//some:target`, dependensi tersebut harus benar-benar menyelesaikan dependensi tersebut dalam `@bar` yang dideklarasikan secara global (`@bar//some:target`). |
sha256 |
String; opsional
SHA-256 yang diharapkan dari file telah didownload. Nama ini harus cocok dengan SHA-256 file yang didownload. _Ini adalah risiko keamanan untuk menghilangkan SHA-256 karena file jarak jauh dapat berubah._ Paling tidak, menghilangkan akan membuat build Anda non-hermetic. Melakukan pengembangan bersifat opsional lebih mudah tetapi harus diatur sebelum pengiriman. |
url |
String; opsional
URL ke file yang akan disediakan untuk Bazel. Ini harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. Fleksibilitas yang lebih besar dapat dicapai dengan parameter URL yang memungkinkan untuk menentukan URL alternatif yang akan diambil. |
urls |
Daftar {i>string<i}; opsional
Daftar URL ke file yang akan tersedia untuk Bazel. Setiap entri harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. URL dicoba secara berurutan sampai ada yang berhasil, jadi Anda harus mencantumkan duplikasi lokal terlebih dahulu. Jika semua download gagal, aturan akan gagal. |
http_jar
http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping, sha256, url, urls)
Mendownload jar dari URL dan menyediakannya sebagai java_import
File yang didownload harus memiliki ekstensi .jar.
Contoh:
Misalkan repositori saat ini berisi kode sumber untuk program chat, yang di-root pada
direktori ~/chat-app
. Perangkat itu harus tergantung pada
perpustakaan SSL yang tersedia dari
http://example.com/openssl-0.2.jar
.
Target dalam repositori ~/chat-app
dapat bergantung pada target ini jika baris berikut
ditambahkan ke ~/chat-app/WORKSPACE
:
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",
)
Target akan menentukan @my_ssl//jar
sebagai dependensi yang bergantung pada jar ini.
Anda juga dapat mereferensikan file di sistem saat ini (localhost) dengan menggunakan "file:///path/to/file"
jika Anda menggunakan sistem berbasis Unix. Jika Anda menggunakan Windows, gunakan "file:///c:/path/to/file". Di keduanya
contoh, perhatikan tiga garis miring (/
) -- dua garis miring pertama adalah milik file://
dan garis miring ketiga
satu berada di jalur absolut file.
Atribut
name |
Nama; wajib diisi
Nama unik untuk repositori ini. |
auth_patterns |
Kamus: String -> String; opsional
Dikte opsional yang memetakan nama host ke pola otorisasi kustom.
Jika nama host URL ada dalam dikte ini, nilai akan digunakan sebagai pola saat
yang membuat {i>header <i}otorisasi untuk
permintaan http. Hal ini memungkinkan penggunaan
skema otorisasi yang digunakan
di banyak penyedia penyimpanan {i>cloud<i} umum.
Saat ini pola mendukung 2 token: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENPermintaan HTTP terakhir akan memiliki header berikut: Authorization: Bearer RANDOM-TOKEN |
canonical_id |
String; opsional
ID kanonis file yang didownload. Jika ditentukan dan tidak kosong, Bazel tidak akan mengambil file dari {i>cache<i}, kecuali jika ditambahkan ke cache atas permintaan dengan ID kanonis yang sama. Jika tidak ditetapkan atau kosong, Bazel secara {i>default<i} menggunakan URL file sebagai ID kanonis. Hal ini membantu menangkap kesalahan umum dalam memperbarui URL tanpa juga memperbarui hash, menghasilkan build yang berhasil secara lokal, tetapi gagal komputer tanpa file dalam cache. Perilaku ini dapat dinonaktifkan dengan --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_name |
String; opsional
Nama file yang ditetapkan ke jar yang didownload |
integrity |
String; opsional
Checksum yang diharapkan dalam format Integritas Subresource dari file yang didownload. Ini harus cocok dengan checksum file yang didownload. _Ini adalah risiko keamanan untuk menghilangkan {i>checksum<i} karena file jarak jauh dapat berubah._ Paling baik mengabaikan ini akan membuat build Anda non-hermetic. Melakukan pengembangan bersifat opsional lebih mudah tetapi atribut ini atau `sha256` harus ditetapkan sebelum pengiriman. |
netrc |
String; opsional
Lokasi file .netrc yang akan digunakan untuk autentikasi |
repo_mapping |
Kamus: String -> String; wajib diisi
Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas resolusi dependensi Workspace untuk dependensi repositori ini. Misalnya, entri `"@foo": "@bar"` mendeklarasikan bahwa, kapan pun repositori ini bergantung pada `@foo` (seperti dependensi pada `@foo//some:target`, dependensi tersebut harus benar-benar menyelesaikan dependensi tersebut dalam `@bar` yang dideklarasikan secara global (`@bar//some:target`). |
sha256 |
String; opsional
SHA-256 yang diharapkan dari file telah didownload. Nama ini harus cocok dengan SHA-256 file yang didownload. _Ini adalah risiko keamanan untuk menghilangkan SHA-256 karena file jarak jauh dapat berubah._ Paling tidak, menghilangkan akan membuat build Anda non-hermetic. Melakukan pengembangan bersifat opsional lebih mudah tetapi atribut atau `integritas` ini harus ditetapkan sebelum pengiriman. |
url |
String; opsional
URL ke file yang akan disediakan untuk Bazel. Ini harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. Fleksibilitas yang lebih besar dapat dicapai dengan parameter URL yang memungkinkan untuk menentukan URL alternatif yang akan diambil. URL harus diakhiri dengan `.jar`. |
urls |
Daftar {i>string<i}; opsional
Daftar URL ke file yang akan tersedia untuk Bazel. Setiap entri harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. URL dicoba secara berurutan sampai ada yang berhasil, jadi Anda harus mencantumkan duplikasi lokal terlebih dahulu. Jika semua download gagal, aturan akan gagal. Semua URL harus diakhiri dengan `.jar`. |