dart-archive / bazel

Bazel support for Dart projects [EXPERIMENTAL]
https://pub.dartlang.org/packages/dazel
33 stars 13 forks source link

More than one entry point creates conflicting rules #38

Closed zoechi closed 7 years ago

zoechi commented 8 years ago

I have 3 entry points in web/ and bazelify creates a rule for each. When I want to build or run I always get errors because of conflicting rules.

I removed the duplicate rules in BUILD but now I get conflicts for rules of dependency packages.

/home/myuser/.cache/myuser/_bazel_myuser/d7cc63dbd0d8e0618a44683ac56d1bee/external/ng_bootstrap/BUILD:89:1: dart_web_application rule 'main' in package '' conflicts with existing dart_web_application rule.

ng_bootstrap is a dependency and I don't care about it's entry points because its just the demo applications. Any hint how to work around? I'm just starting with bazel.

matanlurey commented 8 years ago

Can you share an example of your generated BUILD file?

I thought I dealt with this by using the file name - but maybe that wasn't good enough:

https://github.com/dart-lang/bazel/blob/master/lib/src/bazelify/build.dart#L43

zoechi commented 8 years ago
# Automatically generated by "pub global run bazel:bazelify".
# DO NOT MODIFY BY HAND

# Bazelify: 1 libraries.
load("@io_bazel_rules_dart//dart/build_rules:core.bzl", "dart_library")

# Bazelify: 3 web apps.
load("@io_bazel_rules_dart//dart/build_rules:ddc.bzl", "dart_ddc_bundle")
load("@io_bazel_rules_dart//dart/build_rules:dev_server.bzl", "dev_server")
load("@io_bazel_rules_dart//dart/build_rules:web.bzl", "dart_web_application")

# Bazelify: 1 binaries.
load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_binary")

package(default_visibility = ["//visibility:public"])

_PUB_DEPS = [
    "@angular2//:angular2",
    "@bootstrap_sass//:bootstrap_sass",
    "@browser//:browser",
    "@fhir_client_api//:fhir_client_api",
    "@google_maps//:google_maps",
    "@http//:http",
    "@logging//:logging",
    "@meta//:meta",
    "@ng_bootstrap//:ng_bootstrap",
    "@path//:path",
    "@quiver//:quiver",
    "@sass//:sass",
]

# Generated automatically for package:fhir_client
dart_library(
    name = "fhir_client",
    srcs = glob(["lib/**", "web/**"]),
    deps = _PUB_DEPS,
    pub_pkg_name = "fhir_client",
)
# Generated automatically for package:fhir_client|web/designer.dart
dart_web_application(
    name = "designer",
    srcs = glob(["web/**"]),
    script_file = "web/designer.dart",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
)
dev_server(
    name = "designer_dartium_serve",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "designer_ddc_bundle",
    entry_library = "web/designer.dart",
    entry_module = ":fhir_client",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "designer_ddc_serve",
    data = [":designer_ddc_bundle"],
)
# Generated automatically for package:fhir_client|web/index.dart
dart_web_application(
    name = "index",
    srcs = glob(["web/**"]),
    script_file = "web/index.dart",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
)
dev_server(
    name = "index_dartium_serve",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "index_ddc_bundle",
    entry_library = "web/index.dart",
    entry_module = ":fhir_client",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "index_ddc_serve",
    data = [":index_ddc_bundle"],
)
# Generated automatically for package:fhir_client|web/practitioner.dart
dart_web_application(
    name = "practitioner",
    srcs = glob(["web/**"]),
    script_file = "web/practitioner.dart",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
)
dev_server(
    name = "practitioner_dartium_serve",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "practitioner_ddc_bundle",
    entry_library = "web/practitioner.dart",
    entry_module = ":fhir_client",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "practitioner_ddc_serve",
    data = [":practitioner_ddc_bundle"],
)
# Generated automatically for package:fhir_client|bin/uploader.dart
dart_vm_binary(
    name = "uploader",
    srcs = glob(["bin/**"]),
    script_file = "bin/uploader.dart",
    deps = _PUB_DEPS + [
        ":fhir_client",
    ],
)
matanlurey commented 8 years ago

Can I have a copy of the error too?

zoechi commented 8 years ago

ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/ng_bootstrap/BUILD:89:1: dart_web_application rule 'main' in package '' conflicts with existing dart_web_application rule.

Seems to be caused by .bazelify/ng_bootstrap.BUILD (not BUILD) I had to remove the duplicates there to get rid of the error.

# Automatically generated by "pub global run bazel:bazelify".
# DO NOT MODIFY BY HAND

# Bazelify: 1 libraries.
load("@io_bazel_rules_dart//dart/build_rules:core.bzl", "dart_library")

# Bazelify: 17 web apps.
load("@io_bazel_rules_dart//dart/build_rules:ddc.bzl", "dart_ddc_bundle")
load("@io_bazel_rules_dart//dart/build_rules:dev_server.bzl", "dev_server")
load("@io_bazel_rules_dart//dart/build_rules:web.bzl", "dart_web_application")

package(default_visibility = ["//visibility:public"])

_PUB_DEPS = [
    "@angular2//:angular2",
    "@bootstrap_sass//:bootstrap_sass",
    "@browser//:browser",
    "@dart_to_js_script_rewriter//:dart_to_js_script_rewriter",
    "@font_awesome//:font_awesome",
    "@intl//:intl",
    "@markdown//:markdown",
    "@node_shims//:node_shims",
    "@sass//:sass",
    "@stream_transformers//:stream_transformers",
]

# Generated automatically for package:ng_bootstrap
dart_library(
    name = "ng_bootstrap",
    srcs = glob(["lib/**", "web/**"]),
    deps = _PUB_DEPS,
    pub_pkg_name = "ng_bootstrap",
)
# Generated automatically for package:ng_bootstrap|web/index.dart
dart_web_application(
    name = "index",
    srcs = glob(["web/**"]),
    script_file = "web/index.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "index_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "index_ddc_bundle",
    entry_library = "web/index.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "index_ddc_serve",
    data = [":index_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/buttons/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/buttons/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/buttons/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/datepicker/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/datepicker/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/datepicker/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/typeahead/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/typeahead/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/typeahead/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/accordion/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/accordion/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/accordion/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/tooltip/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/tooltip/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/tooltip/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/tabsx/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/tabsx/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/tabsx/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/dropdown/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/dropdown/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/dropdown/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/timepicker/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/timepicker/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/timepicker/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/rating/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/rating/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/rating/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/carousel/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/carousel/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/carousel/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/tabs/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/tabs/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/tabs/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/pagination/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/pagination/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/pagination/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/modal/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/modal/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/modal/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/progress/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/progress/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/progress/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/alert/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/alert/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/alert/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
# Generated automatically for package:ng_bootstrap|web/components/collapse/main.dart
dart_web_application(
    name = "main",
    srcs = glob(["web/**"]),
    script_file = "web/components/collapse/main.dart",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
)
dev_server(
    name = "main_dartium_serve",
    deps = _PUB_DEPS + [
        ":ng_bootstrap",
    ],
    data = glob(["web/**"]),
)
dart_ddc_bundle(
    name = "main_ddc_bundle",
    entry_library = "web/components/collapse/main.dart",
    entry_module = ":ng_bootstrap",
    input_html = "web/index.html",
    output_dir = "web",
)
dev_server(
    name = "main_ddc_serve",
    data = [":main_ddc_bundle"],
)
zoechi commented 8 years ago

Might be caused because it's a path dependency. I checked out markdown to fix a strong mode error and added a dependency_override to use my local version. Now I get the same error for markdown

zoechi commented 8 years ago
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:24:1: dart_vm_binary rule 'markdown' in package '' conflicts with existing dart_library rule.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/markdown.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/ast.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/block_parser.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/document.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/extension_set.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/html_renderer.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/inline_parser.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/util.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/markdown/BUILD:17:1: Target '@markdown//:lib/src/version.dart' contains an error and its package is in error and referenced by '@markdown//:markdown'.
ERROR: /home/zoechi/.cache/bazel/_bazel_zoechi/d7cc63dbd0d8e0618a44683ac56d1bee/external/ng_bootstrap/BUILD:28:1: Target '@markdown//:markdown' contains an error and its package is in error and referenced by '@ng_bootstrap//:ng_bootstrap'.
ERROR: Analysis of target '//:designer_ddc_serve' failed; build aborted.
INFO: Elapsed time: 0.337s
ERROR: Build failed. Not running target.
z

ng_bootstrap also is a path dependency (but not with dependency_overrides)

matanlurey commented 8 years ago

Ah I see, ng_bootstrap has a bunch of main.dart.

We need to emit something like components_collapse_main.

zoechi commented 8 years ago

Are these needed at all? If I would want to run entrypoints from dependencies I would check out that project and run bazelify there.

jakemac53 commented 7 years ago

https://github.com/dart-lang/bazel/pull/54 fixes a lot of issues with web app discovery, and should solve this issue (at least for web apps).

natebosch commented 7 years ago

Should we skip checking for web apps at all in deps?

jakemac53 commented 7 years ago

good question.... it might actually be cool to be able to run things under say the example folder

natebosch commented 7 years ago

If we want to have https://github.com/dart-lang/bazel/issues/56 work for dependencies too we'd have to solve this problem.

If we limit to a dart_library only for deps it'd be harder to get broken by your deps, but in an ideal world we'd work when bazelifying those packages directly and thats the same problem.

jakemac53 commented 7 years ago

Closing now as I think the original issue is resolved.