rules_jsonnet icon indicating copy to clipboard operation
rules_jsonnet copied to clipboard

Issue with new bazel_skylib? Error: 'list' value has no field or method '_values'

Open JanJamaszyk-FlyNow opened this issue 4 years ago • 9 comments

Hello,

I am trying to setup the jsonnet bazel rules in the following manner: WORKSPACE:

http_archive(
    name = "bazel_skylib",
    sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
    urls = [
        "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
    ],
)

load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")

bazel_skylib_workspace()

http_archive(
    name = "io_bazel_rules_jsonnet",
    sha256 = "7f51f859035cd98bcf4f70dedaeaca47fe9fbae6b199882c516d67df416505da",
    strip_prefix = "rules_jsonnet-0.3.0",
    urls = ["https://github.com/bazelbuild/rules_jsonnet/archive/0.3.0.tar.gz"],
)

load("@io_bazel_rules_jsonnet//jsonnet:jsonnet.bzl", "jsonnet_repositories")

jsonnet_repositories()

load("@jsonnet_go//bazel:repositories.bzl", "jsonnet_go_repositories")

jsonnet_go_repositories()

load("@jsonnet_go//bazel:deps.bzl", "jsonnet_go_dependencies")

jsonnet_go_dependencies()

BUILD file:

load("@io_bazel_rules_jsonnet//jsonnet:jsonnet.bzl", "jsonnet_to_json")

jsonnet_to_json(
    name = "example1",
    src = "example1.jsonnet",
    outs = ["example1.json"],
)

And I get the following error:

ERROR: /home/flynow/.cache/bazel/_bazel_flynow/22c102f3a5fb9aa0fbbd6f2c12ffc9f6/external/io_bazel_rules_go/go/tools/coverdata/BUILD.bazel:3:16: in go_tool_library rule @io_bazel_rules_go//go/tools/coverdata:coverdata: 
Traceback (most recent call last):
        File "/home/flynow/.cache/bazel/_bazel_flynow/22c102f3a5fb9aa0fbbd6f2c12ffc9f6/external/io_bazel_rules_go/go/tools/coverdata/BUILD.bazel", line 3, column 16, in go_tool_library(name = 'coverdata')
                go_tool_library(
        File "/home/flynow/.cache/bazel/_bazel_flynow/22c102f3a5fb9aa0fbbd6f2c12ffc9f6/external/io_bazel_rules_go/go/private/rules/library.bzl", line 44, column 25, in _go_library_impl
                archive = go.archive(go, source)
        File "/home/flynow/.cache/bazel/_bazel_flynow/22c102f3a5fb9aa0fbbd6f2c12ffc9f6/external/io_bazel_rules_go/go/private/actions/archive.bzl", line 209, column 33, in emit_archive
                searchpaths = sets.union([searchpath], *[a.searchpaths for a in direct]),
        File "/home/flynow/.cache/bazel/_bazel_flynow/22c102f3a5fb9aa0fbbd6f2c12ffc9f6/external/bazel_skylib/lib/new_sets.bzl", line 190, column 42, in _union
                return struct(_values = dicts.add(*[s._values for s in args]))
Error: 'list' value has no field or method '_values'

I did some digging and found the following issue: https://github.com/bazelbuild/rules_go/issues/2157 Could it be that the jsonnet rules are not yet compatible with the new version of skylib?

Thanks for your help!

JanJamaszyk-FlyNow avatar Nov 04 '20 10:11 JanJamaszyk-FlyNow

Just run into this now. Did you find a solution @JanJamaszyk-FlyNow ?

finn-ball avatar Apr 05 '21 16:04 finn-ball

Unfortunately not. For now we reverted to the older skylib that comes with jsonnet.

JanJamaszyk-FlyNow avatar Apr 06 '21 07:04 JanJamaszyk-FlyNow

This could be a problem for bazel 4.0.0 as I believe it requires a newer skylib.

finn-ball avatar Apr 06 '21 08:04 finn-ball

It's just rules_go that seems to be outdated and quickly checking that repo, it looks like they resolved it. This could be a matter of updating this repository's dependency right?

finn-ball avatar Apr 06 '21 08:04 finn-ball

Confirmed. If you update rules_go and bazel_gazelle yourself, it works! This is the part you'd be overriding:

https://github.com/google/go-jsonnet/blob/master/bazel/repositories.bzl

finn-ball avatar Apr 06 '21 09:04 finn-ball

@finn-ball, I have made these changes in the "WORKSPACE"

http_archive(
        name = "bazel_gazelle",
        sha256 = "222e49f034ca7a1d1231422cdb67066b885819885c356673cb1f72f748a3c9d4",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.3/bazel-gazelle-v0.22.3.tar.gz",
            "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.3/bazel-gazelle-v0.22.3.tar.gz",
        ],
    )

load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")

gazelle_dependencies()

...
...
http_archive(
        name = "io_bazel_rules_go",
        sha256 = "7904dbecbaffd068651916dce77ff3437679f9d20e1a7956bff43826e7645fcc",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz",
            "https://github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz",
        ],
    )

Still, I am facing the Error:

ERROR: /home/ajithu/.cache/bazel/_bazel_ajithu/64f281071d7b4d7bf8c57a82ac06e780/external/io_bazel_rules_go/go/tools/coverdata/BUILD.bazel:3:16: in go_tool_library rule @io_bazel_rules_go//go/tools/coverdata:coverdata: 
Traceback (most recent call last):
	File "/home/ajithu/.cache/bazel/_bazel_ajithu/64f281071d7b4d7bf8c57a82ac06e780/external/io_bazel_rules_go/go/private/rules/library.bzl", line 42, column 25, in _go_library_impl
		archive = go.archive(go, source)
	File "/home/ajithu/.cache/bazel/_bazel_ajithu/64f281071d7b4d7bf8c57a82ac06e780/external/io_bazel_rules_go/go/private/actions/archive.bzl", line 219, column 29, in emit_archive
		cgo_exports = sets.union(cgo_exports, *[a.cgo_exports for a in direct])
	File "/home/ajithu/.cache/bazel/_bazel_ajithu/64f281071d7b4d7bf8c57a82ac06e780/external/bazel_skylib/lib/new_sets.bzl", line 189, column 42, in _union
		return struct(_values = dicts.add(*[s._values for s in args]))
Error: 'list' value has no field or method '_values'

I am using Bazel 4.0.0 I suspect the problem is here

Note:- I have used Skylib version 1.0.3 and 1.0.1. Both are having the same issue.

uajith avatar Sep 07 '21 06:09 uajith

This works fine, Only thing we need to consider is the order in the WORKSPACE file. those should be defined on top of io_bazel_rules_jsonnet

uajith avatar Sep 17 '21 05:09 uajith

I'm not following the details but please send a PR if you have a fix

sparkprime avatar Sep 17 '21 10:09 sparkprime

I have changed the sequence of the rules in my WORKSPACE file. PR won't be required I guess. This is the sequence in the WORKSPACE file

  1. io_bazel_rules_go
  2. bazel_gazelle
  3. bazel_skylib.

When I mentioned bazel_skylib above the io_bazel_rules_go, I was getting the above-mentioned error.

 106 http_archive(
 107     name = "io_bazel_rules_go",
 108     sha256 = "8e968b5fcea1d2d64071872b12737bbb5514524ee5f0a4f54f5920266c261acb",
 109     urls = [
 110         "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.28.0/rules_go-v0.28.0.zip",
 111         "https://github.com/bazelbuild/rules_go/releases/download/v0.28.0/rules_go-v0.28.0.zip",
 112     ],
 113 )
 114 load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
 115 
 116 go_rules_dependencies()
 117 
 118 go_register_toolchains("host")
 119 
 120 http_archive(
 121     name = "bazel_gazelle",
 122     sha256 = "bfd86b3cbe855d6c16c6fce60d76bd51f5c8dbc9cfcaef7a2bb5c1aafd0710e8",
 123     urls = [
 124         "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.21.0/bazel-gazelle-v0.21.0.tar.gz",
 125         "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.21.0/bazel-gazelle-v0.21.0.tar.gz",
 126     ],
 127 )
 128 # Another Gazelle repository hint.
 129 # gazelle:repository go_repository name=bazel_gazelle importpath=github.com/bazelbuild/bazel-gazelle/testtools
 130 
 131 load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
 132 
 133 gazelle_dependencies()
 134 #load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 135 http_archive(
 136     name = "bazel_skylib",
 137     url = "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
 138     sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
 139 )
 140 
 141 load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
 142 bazel_skylib_workspace()
 143 
 144 

uajith avatar Sep 17 '21 14:09 uajith

Closing this, as the issue at hand has been resolved. Furthermore, this should be less of an issue going forward due to bzlmod. The order in which dependencies are listed is no longer relevant.

EdSchouten avatar Apr 05 '24 13:04 EdSchouten