Skip to content

Commit

Permalink
test: introduce an e2e test asserting that bzlmod works
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeagle committed Apr 27, 2022
1 parent c2d4481 commit 29494cf
Show file tree
Hide file tree
Showing 10 changed files with 88 additions and 5 deletions.
8 changes: 7 additions & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ jobs:
# The type of runner that the job will run on
runs-on: ubuntu-latest

strategy:
matrix:
folder:
- "."
- "e2e/bzlmod"

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
Expand All @@ -33,7 +39,7 @@ jobs:
env:
# Bazelisk will download bazel to here
XDG_CACHE_HOME: ~/.cache/bazel-repo
run: bazel --bazelrc=.github/workflows/ci.bazelrc --bazelrc=.bazelrc test //...
run: cd ${{ matrix.folder }}; bazel --bazelrc=$GITHUB_WORKSPACE/.github/workflows/ci.bazelrc --bazelrc=.bazelrc test //...
- name: integration tests
# Find all shell scripts within e2e, echo the filename, execute, fail on error
run: find e2e/*.sh -maxdepth 1 -type f -exec sh -c 'echo "\n\n------------------------------- $0 -------------------------------" && "$0" || kill $PPID' \{\} \;
18 changes: 18 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"aspect-build/bazel-lib"

module(
name = "aspect_bazel_lib",
version = "0.0.0",
compatibility_level = 1,
toolchains_to_register = [
"@jq_toolchains//:all",
"@yq_toolchains//:all",
],
)

bazel_dep(name = "bazel_skylib", version = "1.1.1")
bazel_dep(name = "platforms", version = "0.0.4")

ext = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "ext")
use_repo(ext, "jq_toolchains")
use_repo(ext, "yq_toolchains")
6 changes: 6 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ local_repository(
path = "./lib/tests/external_test_repo",
)

# Avoid descending into the e2e workspaces
local_repository(
name = "e2e_bzlmod",
path = "./e2e/bzlmod",
)

############################################
# Gazelle, for generating bzl_library targets
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
Expand Down
2 changes: 2 additions & 0 deletions e2e/bzlmod/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
common --experimental_enable_bzlmod
common --registry=https://raw.githubusercontent.com/aspect-build/bazel-central-registry/main/
15 changes: 15 additions & 0 deletions e2e/bzlmod/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
load("@aspect_bazel_lib//lib:jq.bzl", "jq")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")

# No sources produces null (equivalent to --null-input)
jq(
name = "case_no_sources",
srcs = [],
filter = ".",
)

diff_test(
name = "test",
file1 = "case_no_sources",
file2 = "expected",
)
13 changes: 13 additions & 0 deletions e2e/bzlmod/MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module(
name = "e2e_bzlmod",
version = "0.0.0",
compatibility_level = 1,
)

bazel_dep(name = "aspect_bazel_lib", version = "0.9.8")
bazel_dep(name = "bazel_skylib", version = "1.1.1")

local_path_override(
module_name = "aspect_bazel_lib",
path = "../..",
)
Empty file added e2e/bzlmod/WORKSPACE
Empty file.
1 change: 1 addition & 0 deletions e2e/bzlmod/expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
null
16 changes: 16 additions & 0 deletions lib/extensions.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"Module extensions for use with bzlmod"

load(
"@aspect_bazel_lib//lib:repositories.bzl",
"register_jq_toolchains",
"register_yq_toolchains",
)

def _toolchain_extension(_):
register_yq_toolchains(register = False)
register_jq_toolchains(register = False)

# TODO: some way for users to control repo name/version of the tools installed
ext = module_extension(
implementation = _toolchain_extension,
)
14 changes: 10 additions & 4 deletions lib/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,23 @@ def aspect_bazel_lib_dependencies():
DEFAULT_JQ_VERSION = _DEFAULT_JQ_VERSION
DEFAULT_YQ_VERSION = _DEFAULT_YQ_VERSION

def register_jq_toolchains(name = "jq", version = DEFAULT_JQ_VERSION):
def register_jq_toolchains(name = "jq", version = DEFAULT_JQ_VERSION, register = True):
"""Registers jq toolchain and repositories
Args:
name: override the prefix for the generated toolchain repositories
version: the version of jq to execute (see https://github.com/stedolan/jq/releases)
register: whether to call through to native.register_toolchains.
Should be True for WORKSPACE users, but false when used under bzlmod extension
"""
for [platform, meta] in JQ_PLATFORMS.items():
jq_platform_repo(
name = "%s_%s" % (name, platform),
platform = platform,
version = version,
)
native.register_toolchains("@%s_toolchains//:%s_toolchain" % (name, platform))
if register:
native.register_toolchains("@%s_toolchains//:%s_toolchain" % (name, platform))

jq_host_alias_repo(
name = "%s_host" % name,
Expand All @@ -46,20 +49,23 @@ def register_jq_toolchains(name = "jq", version = DEFAULT_JQ_VERSION):
user_repository_name = name,
)

def register_yq_toolchains(name = "yq", version = DEFAULT_YQ_VERSION):
def register_yq_toolchains(name = "yq", version = DEFAULT_YQ_VERSION, register = True):
"""Registers yq toolchain and repositories
Args:
name: override the prefix for the generated toolchain repositories
version: the version of yq to execute (see https://github.com/mikefarah/yq/releases)
register: whether to call through to native.register_toolchains.
Should be True for WORKSPACE users, but false when used under bzlmod extension
"""
for [platform, meta] in YQ_PLATFORMS.items():
yq_platform_repo(
name = "%s_%s" % (name, platform),
platform = platform,
version = version,
)
native.register_toolchains("@%s_toolchains//:%s_toolchain" % (name, platform))
if register:
native.register_toolchains("@%s_toolchains//:%s_toolchain" % (name, platform))

yq_host_alias_repo(
name = "%s_host" % name,
Expand Down

0 comments on commit 29494cf

Please sign in to comment.