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, muat aturan tersebut dalam file WORKSPACE
Anda seperti berikut:
load(
"@bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive",
"http_file",
"http_jar",
)
Aturan ini adalah versi aturan http native yang ditingkatkan dan pada akhirnya akan menggantikan aturan native.
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_patch_strip, remote_patches, repo_mapping, sha256, strip_prefix, type, url, urls, workspace_file, workspace_file_content)
Mendownload repositori Bazel sebagai file arsip terkompresi, mendekompresinya, dan menyediakan targetnya untuk binding.
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 chat,
yang di-root pada direktori ~/chat-app
. URL tersebut 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",
)
Selanjutnya, 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 dalam 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
dict opsional yang memetakan nama host ke pola otorisasi kustom.
Jika nama host URL ada dalam perintah ini, nilai akan digunakan sebagai pola saat membuat header otorisasi untuk permintaan http. Hal ini memungkinkan penggunaan skema otorisasi khusus
yang digunakan di banyak penyedia penyimpanan {i>cloud <i}umum.
Pola tersebut saat ini mendukung 2 token: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENPermintaan HTTP akhir 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 tidak perlu diberi nama BUILD, tetapi bisa juga (seperti BUILD.new-repo-name mungkin berfungsi dengan baik 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 cache, kecuali jika file tersebut ditambahkan ke cache melalui permintaan dengan ID kanonis yang sama. Jika tidak ditentukan atau kosong, Bazel secara default akan menggunakan URL file sebagai ID kanonis. Cara ini membantu mengidentifikasi kesalahan umum saat memperbarui URL tanpa memperbarui hash, sehingga build berhasil secara lokal tetapi gagal di mesin tanpa file dalam cache. Perilaku ini dapat dinonaktifkan dengan --repo_env=BAZEL_HTTP_RulesS_URLS_AS_DEFAULT_CANONICAL_ID=0. |
integrity |
String; opsional
Checksum yang diharapkan dalam format Subresource Integrity dari file yang didownload. Nilai ini harus cocok dengan checksum file yang didownload. _Menghilangkan checksum adalah risiko keamanan karena file jarak jauh dapat berubah._ Paling baik menghilangkan kolom ini akan membuat build Anda non-hermetic. Anda dapat menjadikan pengembangan 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 string; opsional
Argumen yang diberikan ke alat patch. Defaultnya adalah -p0, namun -p1 biasanya akan diperlukan untuk patch yang dihasilkan oleh git. Jika beberapa argumen -p ditentukan, argumen terakhir akan diterapkan.Jika argumen selain -p ditentukan, Bazel akan kembali menggunakan alat command line patch, bukan implementasi patch native Bazel. Saat fallback 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 string; opsional
Urutan perintah Bash yang akan diterapkan di Linux/Macos setelah patch diterapkan. |
patch_cmds_win |
Daftar string; opsional
Urutan perintah Powershell yang akan diterapkan di Windows setelah patch diterapkan. Jika atribut ini tidak ditetapkan, patch_cmds akan dijalankan di Windows, yang mengharuskan biner Bash ada. |
patch_tool |
String; opsional
Utilitas patch(1) yang akan digunakan. Jika ditentukan, Bazel akan menggunakan patch tool yang ditentukan, bukan implementasi patch native Bazel. |
patches |
Daftar label; opsional
Daftar file yang akan diterapkan sebagai patch setelah mengekstrak arsip. Secara default, implementasi patch berbasis Bazel tidak mendukung pencocokan fuzz dan patch biner, tetapi Bazel akan kembali menggunakan alat command line patch jika atribut `patch_tool` ditentukan atau terdapat argumen selain `-p` dalam atribut `patch_args`. |
remote_patch_strip |
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, diterapkan setelah mengekstrak arsip dan sebelum menerapkan file patch dari atribut `patches`. Kode ini menggunakan implementasi patch native Bazel. Anda dapat menentukan nomor patch strip dengan `remote_patch_strip` |
repo_mapping |
Kamus: String -> String; wajib diisi
Kamus dari nama repositori lokal hingga nama repositori global. Hal ini memungkinkan kontrol atas penyelesaian 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`, repositori ini sebenarnya akan menyelesaikan dependensi tersebut dalam `@bar` yang dideklarasikan secara global (`@bar//some:target`). |
sha256 |
String; opsional
SHA-256 yang diharapkan dari file yang didownload. File ini harus cocok dengan SHA-256 file yang didownload. _Hilangkan SHA-256 merupakan risiko keamanan karena file jarak jauh dapat berubah._ Paling baik menghilangkan kolom ini akan membuat build Anda non-hermetic. Anda dapat menjadikan pengembangan 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 file yang berguna di dalam arsip. Daripada harus menentukan awalan ini berulang-ulang dalam `build_file`, kolom 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 sebenarnya yang ingin Anda buat. Tentukan `strip_prefix = "foo-lib-1.2.3"` untuk menggunakan direktori `foo-lib-1.2.3` sebagai direktori level teratas. Perlu diketahui bahwa jika ada file di luar direktori ini, file tersebut akan dihapus dan tidak dapat diakses (misalnya, file lisensi level teratas). Hal ini mencakup file/direktori yang dimulai dengan awalan, tetapi tidak berada dalam direktori (mis., `foo-lib-1.2.3.release-notes`). Jika awalan yang ditentukan tidak cocok dengan direktori dalam arsip, Bazel akan menampilkan error. |
type |
String; opsional
Jenis arsip file yang didownload. Secara default, jenis arsip ditentukan dari ekstensi file URL. Jika file tidak memiliki ekstensi, Anda dapat secara eksplisit menentukan salah satu dari hal berikut: `"zip"`, `"jar"`, `"war"`, `"aar"`, `"tar"`, `"tar.gz"`, `"tgz"`, `"tar.xz"`, `"txz"`, `"tar.zst"`, `"tzst."b"`tar.zst"`, `"tzst."b"`tar.zst"`, `"tzst". |
url |
String; opsional
URL ke file yang akan tersedia bagi Bazel. Harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. Fleksibilitas yang lebih besar dapat dicapai dengan parameter URL yang memungkinkan penentuan URL alternatif yang akan diambil. |
urls |
Daftar string; 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 hingga ada URL yang berhasil, jadi Anda harus mencantumkan pencerminan 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 grup file.
Contoh: Misalnya Anda perlu memiliki paket debian untuk aturan kustom. Paket ini tersedia dari http://example.com/package.deb. Kemudian, Anda dapat menambahkannya ke 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 untuk bergantung pada file ini.
Atribut
name |
Nama; wajib diisi
Nama unik untuk repositori ini. |
auth_patterns |
Kamus: String -> String; opsional
dict opsional yang memetakan nama host ke pola otorisasi kustom.
Jika nama host URL ada dalam perintah ini, nilai akan digunakan sebagai pola saat membuat header otorisasi untuk permintaan http. Hal ini memungkinkan penggunaan skema otorisasi khusus
yang digunakan di banyak penyedia penyimpanan {i>cloud <i}umum.
Pola tersebut saat ini mendukung 2 token: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENPermintaan HTTP akhir 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 cache, kecuali jika file tersebut ditambahkan ke cache melalui permintaan dengan ID kanonis yang sama. Jika tidak ditentukan atau kosong, Bazel secara default akan menggunakan URL file sebagai ID kanonis. Cara ini membantu mengidentifikasi kesalahan umum saat memperbarui URL tanpa memperbarui hash, sehingga build berhasil secara lokal tetapi gagal di mesin tanpa file dalam cache. Perilaku ini dapat dinonaktifkan dengan --repo_env=BAZEL_HTTP_RulesS_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 seharusnya dapat dieksekusi. |
integrity |
String; opsional
Checksum yang diharapkan dalam format Subresource Integrity dari file yang didownload. Nilai ini harus cocok dengan checksum file yang didownload. _Menghilangkan checksum adalah risiko keamanan karena file jarak jauh dapat berubah._ Paling baik menghilangkan kolom ini akan membuat build Anda non-hermetic. Anda dapat menjadikan pengembangan 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 hingga nama repositori global. Hal ini memungkinkan kontrol atas penyelesaian 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`, repositori ini sebenarnya akan menyelesaikan dependensi tersebut dalam `@bar` yang dideklarasikan secara global (`@bar//some:target`). |
sha256 |
String; opsional
SHA-256 yang diharapkan dari file yang didownload. File ini harus cocok dengan SHA-256 file yang didownload. _Hilangkan SHA-256 merupakan risiko keamanan karena file jarak jauh dapat berubah._ Paling baik menghilangkan kolom ini akan membuat build Anda non-hermetic. Tindakan ini bersifat opsional untuk mempermudah pengembangan, tetapi harus ditetapkan sebelum pengiriman. |
url |
String; opsional
URL ke file yang akan tersedia bagi Bazel. Harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. Fleksibilitas yang lebih besar dapat dicapai dengan parameter URL yang memungkinkan penentuan URL alternatif yang akan diambil. |
urls |
Daftar string; 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 hingga ada URL yang berhasil, jadi Anda harus mencantumkan pencerminan 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)
Mengunduh jar dari URL dan membuatnya tersedia 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
. Pengujian ini harus bergantung pada library 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 untuk bergantung pada jar ini.
Anda juga dapat mereferensikan file di sistem saat ini (localhost) menggunakan "file:///path/to/file"
jika menggunakan sistem berbasis Unix. Jika Anda menggunakan Windows, gunakan "file:///c:/path/to/file". Pada kedua
contoh, perhatikan tiga garis miring (/
), -- dua garis miring pertama adalah milik file://
dan yang ketiga
adalah milik jalur absolut ke file tersebut.
Atribut
name |
Nama; wajib diisi
Nama unik untuk repositori ini. |
auth_patterns |
Kamus: String -> String; opsional
dict opsional yang memetakan nama host ke pola otorisasi kustom.
Jika nama host URL ada dalam perintah ini, nilai akan digunakan sebagai pola saat membuat header otorisasi untuk permintaan http. Hal ini memungkinkan penggunaan skema otorisasi khusus
yang digunakan di banyak penyedia penyimpanan {i>cloud <i}umum.
Pola tersebut saat ini mendukung 2 token: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENPermintaan HTTP akhir 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 cache, kecuali jika file tersebut ditambahkan ke cache melalui permintaan dengan ID kanonis yang sama. Jika tidak ditentukan atau kosong, Bazel secara default akan menggunakan URL file sebagai ID kanonis. Cara ini membantu mengidentifikasi kesalahan umum saat memperbarui URL tanpa memperbarui hash, sehingga build berhasil secara lokal tetapi gagal di mesin tanpa file dalam cache. Perilaku ini dapat dinonaktifkan dengan --repo_env=BAZEL_HTTP_RulesS_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_name |
String; opsional
Nama file yang ditetapkan ke jar didownload |
integrity |
String; opsional
Checksum yang diharapkan dalam format Subresource Integrity dari file yang didownload. Nilai ini harus cocok dengan checksum file yang didownload. _Menghilangkan checksum adalah risiko keamanan karena file jarak jauh dapat berubah._ Paling baik menghilangkan kolom ini akan membuat build Anda non-hermetic. Anda dapat menjadikan pengembangan 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 hingga nama repositori global. Hal ini memungkinkan kontrol atas penyelesaian 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`, repositori ini sebenarnya akan menyelesaikan dependensi tersebut dalam `@bar` yang dideklarasikan secara global (`@bar//some:target`). |
sha256 |
String; opsional
SHA-256 yang diharapkan dari file yang didownload. File ini harus cocok dengan SHA-256 file yang didownload. _Hilangkan SHA-256 merupakan risiko keamanan karena file jarak jauh dapat berubah._ Paling baik menghilangkan kolom ini akan membuat build Anda non-hermetic. Anda dapat menjadikan pengembangan lebih mudah, tetapi atribut atau `integritas` ini harus ditetapkan sebelum pengiriman. |
url |
String; opsional
URL ke file yang akan tersedia bagi Bazel. Harus berupa URL file, http, atau https. Pengalihan diikuti. Autentikasi tidak didukung. Fleksibilitas yang lebih besar dapat dicapai dengan parameter URL yang memungkinkan penentuan URL alternatif yang akan diambil. URL harus diakhiri dengan `.jar`. |
urls |
Daftar string; 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 hingga ada URL yang berhasil, jadi Anda harus mencantumkan pencerminan lokal terlebih dahulu. Jika semua download gagal, aturan akan gagal. Semua URL harus diakhiri dengan `.jar`. |