Skip to content

Commit

Permalink
Add basic bzlmod setup
Browse files Browse the repository at this point in the history
This commit adds a MODULE.bazel that makes rules_go usable as a bzlmod
module for basic use cases.

The new module definition is verified by a test module that will be used
in the presubmit tests of the Bazel Central Registry (BCR).

The following features require more thought and/or work and are not yet
supported:
* SDK rules other than go_host_sdk and go_download_sdk.
* non-no-op nogo
* go_proto_library
  • Loading branch information
fmeum committed Jun 9, 2022
1 parent b621206 commit 92a17aa
Show file tree
Hide file tree
Showing 14 changed files with 158 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .bazelci/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,20 @@ tasks:
- "//..."
test_targets:
- "//..."
ubuntu2004_bcr_tests:
name: BCR test module
platform: ubuntu2004
bazel: 6.0.0-pre.20220526.1
working_directory: tests/bcr
build_flags:
- "--experimental_enable_bzlmod"
test_flags:
- "--experimental_enable_bzlmod"
build_targets:
- "//..."
- "@go_sdk//..."
test_targets:
- "//..."
macos:
shell_commands:
- tests/core/cgo/generate_imported_dylib.sh
Expand Down
1 change: 1 addition & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tests/bcr
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/bazel-*
/tests/core/cgo/libimported.*
/tests/core/cgo/libversioned.*
/tests/bcr/bazel-*
23 changes: 23 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module(
name = "io_bazel_rules_go",
version = "0.33.0",
compatibility_level = 0,
toolchains_to_register = [
"@go_default_sdk//:all",
],
)

print("WARNING: The rules_go Bazel module is still highly experimental and subject to change at any time. Only use it to try out bzlmod for now.")

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

non_module_dependencies = use_extension("@io_bazel_rules_go//go/private:extensions.bzl", "non_module_dependencies")
use_repo(
non_module_dependencies,
"io_bazel_rules_nogo",
)

go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk")
go_sdk.download(name = "go_default_sdk", version = "1.18.3")
use_repo(go_sdk, "go_default_sdk")
3 changes: 3 additions & 0 deletions go/extensions.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
load("//go/private:extensions.bzl", _go_sdk = "go_sdk")

go_sdk = _go_sdk
53 changes: 53 additions & 0 deletions go/private/extensions.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
load("//go/private:sdk.bzl", "go_download_sdk", "go_host_sdk")
load("//go/private:repositories.bzl", "go_rules_dependencies")

_download_tag = tag_class(
attrs = {
"name": attr.string(mandatory = True),
"goos": attr.string(),
"goarch": attr.string(),
"sdks": attr.string_list_dict(),
"urls": attr.string_list(default = ["https://dl.google.com/go/{}"]),
"version": attr.string(),
"strip_prefix": attr.string(default = "go"),
},
)

_host_tag = tag_class(
attrs = {
"name": attr.string(mandatory = True),
},
)

def _go_sdk_impl(ctx):
for mod in ctx.modules:
for download_tag in mod.tags.download:
go_download_sdk(
name = download_tag.name,
goos = download_tag.goos,
goarch = download_tag.goarch,
sdks = download_tag.sdks,
urls = download_tag.urls,
version = download_tag.version,
register_toolchains = False,
)
for host_tag in mod.tags.host:
go_host_sdk(
name = host_tag.name,
register_toolchains = False,
)

go_sdk = module_extension(
implementation = _go_sdk_impl,
tag_classes = {
"download": _download_tag,
"host": _host_tag,
},
)

def _non_module_dependencies_impl(ctx):
go_rules_dependencies(force = True)

non_module_dependencies = module_extension(
implementation = _non_module_dependencies_impl,
)
1 change: 1 addition & 0 deletions tests/bcr/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build --experimental_enable_bzlmod
1 change: 1 addition & 0 deletions tests/bcr/.bazelversion
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6.0.0-pre.20220526.1
19 changes: 19 additions & 0 deletions tests/bcr/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
load("@my_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")

go_library(
name = "lib",
srcs = ["lib.go"],
importpath = "example.com/lib",
)

go_binary(
name = "main",
srcs = ["main.go"],
deps = [":lib"],
)

go_test(
name = "test",
srcs = ["test.go"],
embed = [":lib"],
)
15 changes: 15 additions & 0 deletions tests/bcr/MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module(
name = "rules_go_bcr_tests",
# Test that the default SDK is registered by not registering one from the test module.
)

bazel_dep(name = "io_bazel_rules_go", version = "", repo_name = "my_rules_go")
local_path_override(
module_name = "io_bazel_rules_go",
path = "../..",
)

# Test that this correctly downloads the SDK by requesting it from the commandline (see presubmit.yml).
go_sdk = use_extension("@my_rules_go//go:extensions.bzl", "go_sdk")
go_sdk.download(name = "go_sdk", version = "1.17.5")
use_repo(go_sdk, "go_sdk")
Empty file added tests/bcr/WORKSPACE
Empty file.
5 changes: 5 additions & 0 deletions tests/bcr/lib.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package lib

func Name() string {
return "bzlmod"
}
11 changes: 11 additions & 0 deletions tests/bcr/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package main

import (
"fmt"

"example.com/lib"
)

func main() {
fmt.Printf("Hello %s!", lib.Name())
}
11 changes: 11 additions & 0 deletions tests/bcr/test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package lib

import (
"testing"
)

func TestName(t *testing.T) {
if Name() != "bzlmod" {
t.Fail()
}
}

0 comments on commit 92a17aa

Please sign in to comment.