angular/integration/index.bzl
Alan Agius 950ffd001e build: remove yarn from integration tests, switch to pnpm (#63902)
This commit removes Yarn as a package manager for integration tests and migrates to pnpm. This change aims to standardize package management across the project, leveraging pnpm's efficiency and consistent behavior for dependency resolution and installation.

PR Close #63902
2025-09-18 14:39:51 +00:00

82 lines
3 KiB
Python

# Copyright Google LLC All Rights Reserved.
#
# Use of this source code is governed by an MIT-style license that can be
# found in the LICENSE file at https://angular.dev/license
"""Angular integration testing
"""
load("@devinfra//bazel/integration:index.bzl", "integration_test")
load("//:packages.bzl", "INTEGRATION_PACKAGES")
def _ng_integration_test(name, setup_chromium = False, **kwargs):
"Set defaults for the npm_integration_test common to the angular repo"
toolchains = kwargs.pop("toolchains", [])
environment = kwargs.pop("environment", {})
data = kwargs.pop("data", [])
if setup_chromium:
data.append("@rules_browsers//browsers/chromium")
toolchains.append("@rules_browsers//browsers/chromium:toolchain_alias")
environment.update({
"CHROMEDRIVER_BIN": "$(CHROMEDRIVER)",
"CHROME_BIN": "$(CHROME-HEADLESS-SHELL)",
})
# By default run `pnpm install` followed by `pnpm test` using the tools linked
# into the integration tests (using the `tool_mappings` attribute).
commands = kwargs.pop("commands", [
"pnpm install",
"pnpm run test",
])
# Complete list of npm packages to override in the test's package.json file mapped to
# tgz archive to use for the replacement. This is the full list for all integration
# tests. Any given integration does not need to use all of these packages.
npm_packages = {}
for pkg in INTEGRATION_PACKAGES:
npm_packages["//:node_modules/%s/dir" % pkg] = pkg
integration_test(
name = name,
commands = commands,
npm_packages = npm_packages,
tags = kwargs.pop("tags", []) + [
# `integration` tag is used for filtering out these tests from the normal
# developer workflow
"integration",
# Integration tests do not work inside of a sandbox as they may run host applications such
# as chrome (which is run by ng) that require access to files outside of the sandbox.
"no-sandbox",
],
data = data,
environment = environment,
toolchains = toolchains,
tool_mappings = {
"@pnpm//:pnpm": "pnpm",
"@nodejs_toolchains//:resolved_toolchain": "node",
},
# 15-minute timeout
timeout = "long",
# Tells bazel that this test should be allocated a large amount of memory.
# See https://docs.bazel.build/versions/2.0.0/be/common-definitions.html#common-attributes-tests.
size = "enormous",
**kwargs
)
def ng_integration_test(name, **kwargs):
"Sets up the integration test target based on the test folder name"
native.filegroup(
name = "_%s_sources" % name,
srcs = native.glob(
include = ["**/*"],
exclude = [
"node_modules/**",
],
),
)
_ng_integration_test(
name = name,
srcs = kwargs.pop("srcs", ["_%s_sources" % name]),
**kwargs
)