Skip to content

Commit 173d11d

Browse files
author
Paolo Tranquilli
committed
Bazel: add a test wrapper around installation scripts
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.
1 parent 066db76 commit 173d11d

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

misc/bazel/pkg.bzl

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Wrappers and helpers around `rules_pkg` to build codeql packs.
33
"""
44

55
load("@bazel_skylib//lib:paths.bzl", "paths")
6+
load("@bazel_skylib//rules:native_binary.bzl", "native_test")
67
load("@rules_pkg//pkg:install.bzl", "pkg_install")
78
load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files", _strip_prefix = "strip_prefix")
89
load("@rules_pkg//pkg:pkg.bzl", "pkg_zip")
@@ -351,25 +352,42 @@ def _codeql_pack_install(name, srcs, install_dest = None, build_file_label = Non
351352
visibility = ["//visibility:private"],
352353
)
353354
build_file_label = internal("build-file")
354-
355+
data = [
356+
internal("script"),
357+
internal("zip-manifest"),
358+
Label("//misc/ripunzip"),
359+
] + ([build_file_label] if build_file_label else [])
360+
args = [
361+
"--pkg-install-script=$(rlocationpath %s)" % internal("script"),
362+
"--ripunzip=$(rlocationpath %s)" % Label("//misc/ripunzip"),
363+
"--zip-manifest=$(rlocationpath %s)" % internal("zip-manifest"),
364+
] + ([
365+
"--build-file=$(rlocationpath %s)" % build_file_label,
366+
] if build_file_label else []) + (
367+
["--destdir", "\"%s\"" % install_dest] if install_dest else []
368+
)
355369
py_binary(
356370
name = name,
357371
srcs = [Label("//misc/bazel/internal:install.py")],
358372
main = Label("//misc/bazel/internal:install.py"),
359-
data = [
360-
internal("script"),
361-
internal("zip-manifest"),
362-
Label("//misc/ripunzip"),
363-
] + ([build_file_label] if build_file_label else []),
364373
deps = ["@rules_python//python/runfiles"],
365-
args = [
366-
"--pkg-install-script=$(rlocationpath %s)" % internal("script"),
367-
"--ripunzip=$(rlocationpath %s)" % Label("//misc/ripunzip"),
368-
"--zip-manifest=$(rlocationpath %s)" % internal("zip-manifest"),
369-
] + ([
370-
"--build-file=$(rlocationpath %s)" % build_file_label,
371-
] if build_file_label else []) +
372-
(["--destdir", "\"%s\"" % install_dest] if install_dest else []),
374+
data = data,
375+
args = args,
376+
)
377+
378+
# this hack is meant to be an optimization when using install for tests, where
379+
# the install step is skipped if nothing changed. If the installation directory
380+
# is somehow messed up, `bazel run` can be used to force install
381+
native_test(
382+
name = internal("as", "test"),
383+
src = name,
384+
tags = [
385+
"manual", # avoid having this picked up by `...`, `:all` or `:*`
386+
"local", # make sure installation does not run sandboxed
387+
],
388+
data = data,
389+
args = args,
390+
size = "small",
373391
)
374392

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

0 commit comments

Comments
 (0)