diff --git a/.github/workflows/cpp-swift-analysis.yml b/.github/workflows/cpp-swift-analysis.yml index 4b923f1b39c6..3af9c3c5e4ea 100644 --- a/.github/workflows/cpp-swift-analysis.yml +++ b/.github/workflows/cpp-swift-analysis.yml @@ -48,7 +48,7 @@ jobs: - name: "Build Swift extractor using Bazel" run: | bazel clean --expunge - bazel run //swift:create-extractor-pack --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local + bazel run //swift:install --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local bazel shutdown - name: Perform CodeQL Analysis diff --git a/actions/BUILD.bazel b/actions/BUILD.bazel index 643d40897185..b1af486543c6 100644 --- a/actions/BUILD.bazel +++ b/actions/BUILD.bazel @@ -2,19 +2,8 @@ load("//misc/bazel:pkg.bzl", "codeql_pack") package(default_visibility = ["//visibility:public"]) -[ - codeql_pack( - name = "-".join(parts), - srcs = [ - "//actions/extractor", - ], - pack_prefix = "/".join(parts), - ) - for parts in ( - [ - "experimental", - "actions", - ], - ["actions"], - ) -] +codeql_pack( + name = "actions", + srcs = ["//actions/extractor"], + experimental = True, +) diff --git a/misc/bazel/pkg.bzl b/misc/bazel/pkg.bzl index 62c2ee199459..d455e99c7493 100644 --- a/misc/bazel/pkg.bzl +++ b/misc/bazel/pkg.bzl @@ -429,6 +429,8 @@ def codeql_pack( arch_overrides = None, pack_prefix = None, install_dest = "extractor-pack", + installer_alias = "install", + experimental = False, **kwargs): """ Define a codeql pack. @@ -448,21 +450,64 @@ def codeql_pack( contain the `{CODEQL_PLATFORM}` marker. All files in the pack will be prefixed with `name`, unless `pack_prefix` is set, then is used instead. - This rule also provides a convenient installer target, with a path governed by `install_dest`. - This installer is used for installing this pack into the source-tree, relative to the directory where the rule is used. - See `codeql_pack_install` for more details. + This rule also provides a convenient installer target named `-installer`, with a path governed by `install_dest`, + unless `install_dest == None`. This installer is used for installing this pack into the source-tree, relative to the + directory where the rule is used. See `codeql_pack_install` for more details. If present, `installer_alias` is used + to define a shorthand alias for `-installer`. Be sure to change `installer_alias` or set it to `None` if a + bazel package defines multiple `codeql_pack`s. + + If `experimental = True`, a second `codeql_pack` named `-experimental` is defined alongside the primary one with + an `experimental` pack prefix and no installer, intended to be used when packaging the full distribution. This function does not accept `visibility`, as packs are always public to make it easy to define pack groups. """ - internal = _make_internal(name) - zips = zips or {} if pack_prefix == None: pack_prefix = name + _codeql_pack_impl( + name, + srcs, + zips, + arch_overrides, + pack_prefix, + install_dest, + installer_alias, + pkg_filegroup_kwargs = kwargs, + ) + if experimental: + _codeql_pack_impl( + "%s-experimental" % name, + srcs, + zips, + arch_overrides, + pack_prefix = "experimental/%s" % pack_prefix, + install_dest = None, + installer_alias = None, + pkg_filegroup_kwargs = kwargs, + ) + + # TODO: remove this after internal repo update + native.alias( + name = "experimental-%s" % name, + actual = "%s-experimental" % name, + visibility = ["//visibility:public"], + ) + +def _codeql_pack_impl( + name, + srcs, + zips, + arch_overrides, + pack_prefix, + install_dest, + installer_alias, + pkg_filegroup_kwargs): + internal = _make_internal(name) + zips = zips or {} pkg_filegroup( name = internal("all"), srcs = srcs, visibility = ["//visibility:private"], - **kwargs + **pkg_filegroup_kwargs ) _codeql_pack_info( name = name, @@ -473,7 +518,12 @@ def codeql_pack( # packs are always public, so that we can easily bundle them into groups visibility = ["//visibility:public"], ) - _codeql_pack_install(internal("installer"), [name], install_dest = install_dest, apply_pack_prefix = False) + if install_dest: + _codeql_pack_install(internal("installer"), [name], install_dest = install_dest, apply_pack_prefix = False) + + # TODO: remove deprecated `native.existing_rule(installer_alias)` after internal repo update + if installer_alias and not native.existing_rule(installer_alias): + native.alias(name = installer_alias, actual = internal("installer")) strip_prefix = _strip_prefix diff --git a/rust/BUILD.bazel b/rust/BUILD.bazel index 848a5dbb78a6..aee5d77aa643 100644 --- a/rust/BUILD.bazel +++ b/rust/BUILD.bazel @@ -46,20 +46,11 @@ codeql_pkg_files( ], ) -[ - codeql_pack( - name = "-".join(parts), - srcs = [ - ":root-files", - ":tools", - ], - pack_prefix = "/".join(parts), - ) - for parts in ( - [ - "experimental", - "rust", - ], - ["rust"], - ) -] +codeql_pack( + name = "rust", + srcs = [ + ":root-files", + ":tools", + ], + experimental = True, +) diff --git a/rust/README.md b/rust/README.md index 87c7072c6758..2f9a7503abb7 100644 --- a/rust/README.md +++ b/rust/README.md @@ -13,7 +13,7 @@ If you don't have the `semmle-code` repo you may need to install Bazel manually, This approach uses a released `codeql` version and is simpler to use for QL development. From your `semmle-code` directory run: ```bash -bazel run @codeql//rust:rust-installer +bazel run @codeql//rust:install ``` You now need to create a [per-user CodeQL configuration file](https://docs.github.com/en/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/specifying-command-options-in-a-codeql-configuration-file#using-a-codeql-configuration-file) and specify the option: ``` diff --git a/swift/README.md b/swift/README.md index a39c0ea55788..b5be374b5e70 100644 --- a/swift/README.md +++ b/swift/README.md @@ -13,7 +13,7 @@ brew install bazelisk then from the `ql` directory run ```bash -bazel run //swift:create-extractor-pack +bazel run //swift:install ``` If you are running on macOS and you encounter errors mentioning `XXX is unavailable: introduced in macOS YY.ZZ`, diff --git a/swift/actions/build-and-test/action.yml b/swift/actions/build-and-test/action.yml index 2522f545c05f..4048560640b2 100644 --- a/swift/actions/build-and-test/action.yml +++ b/swift/actions/build-and-test/action.yml @@ -48,7 +48,7 @@ runs: - name: Build Swift extractor shell: bash run: | - bazel run //swift:create-extractor-pack + bazel run //swift:install - name: Run codegen tests if : ${{ github.event_name == 'pull_request' }} shell: bash