Skip to content

Commit

Permalink
Bazel: add a test wrapper around installation scripts
Browse files Browse the repository at this point in the history
This hack is meant to be an optimization when using install for tests,
where the install step is skipped if nothing changed. If the
installation directory is somehow messed up, `bazel run` can be used to
force install.

This is added as a `<name>-installer-as-test` target, which we can now
use in our internal pytest integration to skip the installation step if
nothing changed on the CLI + language packs side.
  • Loading branch information
Paolo Tranquilli committed Dec 12, 2024
1 parent 066db76 commit 173d11d
Showing 1 changed file with 32 additions and 14 deletions.
46 changes: 32 additions & 14 deletions misc/bazel/pkg.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Wrappers and helpers around `rules_pkg` to build codeql packs.
"""

load("@bazel_skylib//lib:paths.bzl", "paths")
load("@bazel_skylib//rules:native_binary.bzl", "native_test")
load("@rules_pkg//pkg:install.bzl", "pkg_install")
load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files", _strip_prefix = "strip_prefix")
load("@rules_pkg//pkg:pkg.bzl", "pkg_zip")
Expand Down Expand Up @@ -351,25 +352,42 @@ def _codeql_pack_install(name, srcs, install_dest = None, build_file_label = Non
visibility = ["//visibility:private"],
)
build_file_label = internal("build-file")

data = [
internal("script"),
internal("zip-manifest"),
Label("//misc/ripunzip"),
] + ([build_file_label] if build_file_label else [])
args = [
"--pkg-install-script=$(rlocationpath %s)" % internal("script"),
"--ripunzip=$(rlocationpath %s)" % Label("//misc/ripunzip"),
"--zip-manifest=$(rlocationpath %s)" % internal("zip-manifest"),
] + ([
"--build-file=$(rlocationpath %s)" % build_file_label,
] if build_file_label else []) + (
["--destdir", "\"%s\"" % install_dest] if install_dest else []
)
py_binary(
name = name,
srcs = [Label("//misc/bazel/internal:install.py")],
main = Label("//misc/bazel/internal:install.py"),
data = [
internal("script"),
internal("zip-manifest"),
Label("//misc/ripunzip"),
] + ([build_file_label] if build_file_label else []),
deps = ["@rules_python//python/runfiles"],
args = [
"--pkg-install-script=$(rlocationpath %s)" % internal("script"),
"--ripunzip=$(rlocationpath %s)" % Label("//misc/ripunzip"),
"--zip-manifest=$(rlocationpath %s)" % internal("zip-manifest"),
] + ([
"--build-file=$(rlocationpath %s)" % build_file_label,
] if build_file_label else []) +
(["--destdir", "\"%s\"" % install_dest] if install_dest else []),
data = data,
args = args,
)

# this hack is meant to be an optimization when using install for tests, where
# the install step is skipped if nothing changed. If the installation directory
# is somehow messed up, `bazel run` can be used to force install
native_test(
name = internal("as", "test"),
src = name,
tags = [
"manual", # avoid having this picked up by `...`, `:all` or `:*`
"local", # make sure installation does not run sandboxed
],
data = data,
args = args,
size = "small",
)

def codeql_pack_group(name, srcs, visibility = None, skip_installer = False, prefix = "", install_dest = None, build_file_label = None, compression_level = 6):
Expand Down

0 comments on commit 173d11d

Please sign in to comment.