| load("@aspect_rules_js//js:defs.bzl", "js_run_binary") |
| load("//infra-sk:index.bzl", "nodejs_test", "ts_library") |
| |
| nodejs_test( |
| name = "util_nodejs_test", |
| src = "util_nodejs_test.ts", |
| deps = [ |
| ":util_ts_lib", |
| "//:node_modules/@types/chai", |
| "//:node_modules/@types/express", |
| "//:node_modules/chai", |
| "//:node_modules/express", |
| "//:node_modules/puppeteer", |
| ], |
| ) |
| |
| ts_library( |
| name = "util_ts_lib", |
| srcs = ["util.ts"], |
| data = select({ |
| # Provides Google Chrome, libraries and fonts. |
| "@platforms//os:linux": [ |
| ":chrome", |
| "//:.puppeteerrc.js", |
| # TODO(lovisolo): Do we really need this? Can't we just use the :chrome target? |
| "@google_chrome//:all_files", |
| ], |
| # We don't have hermetic support for Mac and Windows. Users are expected |
| # to have a working chrome installation already. |
| "//conditions:default": [], |
| }), |
| visibility = ["//visibility:public"], |
| deps = [ |
| "//:node_modules/puppeteer", |
| "//puppeteer-tests/chrome_downloader:chrome_executable_path_ts_lib", |
| ], |
| ) |
| |
| # Hermetically downloads Chrome using Puppeteer's own code (@puppeteer/browsers NPM package). In |
| # conjunction with disabling Puppeteer's automatic downloading behavior in //.puppeteerrc.json, |
| # this guarantees that we get a Chrome version that is known to work well with Puppeteer, and that |
| # it is placed in a predictable location. |
| # |
| # This rule behaves like a fancy genrule, and can be depended upon by other targets as if it were a |
| # filegroup. See https://docs.aspect.build/rulesets/aspect_rules_js/docs/js_run_binary. |
| js_run_binary( |
| name = "chrome", |
| args = ["puppeteer-tests/chrome"], |
| mnemonic = "DownloadChrome", |
| out_dirs = ["chrome"], |
| stderr = "chrome.stderr", |
| stdout = "chrome.stdout", |
| tool = "//puppeteer-tests/chrome_downloader", |
| visibility = ["//visibility:public"], |
| ) |