| # Copyright 2017 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| workspace( |
| name = "build_bazel_rules_nodejs", |
| managed_directories = {"@npm": ["node_modules"]}, |
| ) |
| |
| load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") |
| load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") |
| |
| # |
| # Check that build is using a minimum compatible bazel version |
| # |
| |
| load("//internal/common:check_bazel_version.bzl", "check_bazel_version") |
| |
| # 0.18.0: support for .bazelignore |
| # 0.23.0: required fix for pkg_tar strip_prefix |
| # 0.26.0: managed_directories feature added |
| check_bazel_version( |
| message = """ |
| You no longer need to install Bazel on your machine. |
| rules_nodejs has a dependency on the @bazel/bazel package which supplies it. |
| Try running `yarn bazel` instead. |
| """, |
| minimum_bazel_version = "0.26.0", |
| ) |
| |
| # |
| # Nested package worksapces required to build packages & reference rules |
| # |
| |
| load("//packages:index.bzl", "NESTED_PACKAGES") |
| |
| [local_repository( |
| name = "npm_bazel_%s" % name, |
| path = "packages/%s/src" % name, |
| ) for name in NESTED_PACKAGES] |
| |
| # |
| # Install rules_nodejs dev dependencies |
| # |
| |
| load("//:package.bzl", "rules_nodejs_dev_dependencies") |
| |
| rules_nodejs_dev_dependencies() |
| |
| # |
| # Setup rules_nodejs npm dependencies |
| # |
| |
| load("@build_bazel_rules_nodejs//:index.bzl", "npm_install", "yarn_install") |
| |
| yarn_install( |
| name = "npm", |
| # The @npm//:node_modules_filegroup generated by manual_build_file_contents |
| # is used in the //packages/typescript/test/reference_types_directive:tsconfig_types |
| # test. For now we're still supporting node_modules as a filegroup tho this |
| # may change in the future. The default generated //:node_modules target is a |
| # node_module_library rule which provides NodeModuleInfo and NodeModuleSources |
| # but that rule is not yet in the public API and we have not yet dropped support |
| # for filegroup based node_modules target. |
| manual_build_file_contents = """ |
| filegroup( |
| name = "node_modules_filegroup", |
| srcs = [ |
| "//@types/hammerjs:hammerjs__files", |
| "//@types/jasmine:jasmine__files", |
| "//typescript:typescript__files", |
| ], |
| ) |
| """, |
| package_json = "//:package.json", |
| yarn_lock = "//:yarn.lock", |
| ) |
| |
| # Install all Bazel dependencies needed for npm packages that supply Bazel rules |
| load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") |
| |
| install_bazel_dependencies() |
| |
| # |
| # Install npm_bazel_typescript dependencies |
| # |
| |
| # Uncomment for local development |
| # local_repository( |
| # name = "build_bazel_rules_typescript", |
| # path = "../../../rules_typescript", |
| # ) |
| |
| # We use git_repository since Renovate knows how to update it. |
| # With http_archive it only sees releases/download/*.tar.gz urls |
| git_repository( |
| name = "build_bazel_rules_typescript", |
| commit = "fcf33e92a60c2b0613e931d05b305e1d962648e0", |
| remote = "http://github.com/bazelbuild/rules_typescript.git", |
| ) |
| |
| # We have a source dependency on build_bazel_rules_typescript |
| # so we must repeat its transitive toolchain deps |
| load("@build_bazel_rules_typescript//:package.bzl", "rules_typescript_dev_dependencies") |
| |
| rules_typescript_dev_dependencies() |
| |
| load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") |
| load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") |
| |
| gazelle_dependencies() |
| |
| go_rules_dependencies() |
| |
| go_register_toolchains() |
| |
| load("@build_bazel_rules_typescript//internal:ts_repositories.bzl", "ts_setup_dev_workspace") |
| |
| ts_setup_dev_workspace() |
| |
| load("@npm_bazel_typescript//internal:ts_repositories.bzl", "ts_setup_workspace") |
| |
| ts_setup_workspace() |
| |
| # |
| # Install npm_bazel_karma dependencies |
| # |
| |
| load("@npm_bazel_karma//:package.bzl", "npm_bazel_karma_dependencies") |
| |
| npm_bazel_karma_dependencies() |
| |
| # Setup the rules_webtesting toolchain |
| load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories") |
| |
| web_test_repositories() |
| |
| load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.2.bzl", "browser_repositories") |
| |
| browser_repositories(chromium = True) |
| |
| # |
| # Dependencies to run skydoc & generating documentation |
| # |
| |
| load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories") |
| |
| sass_repositories() |
| |
| load("@io_bazel_skydoc//skylark:skylark.bzl", "skydoc_repositories") |
| |
| skydoc_repositories() |
| |
| load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") |
| |
| protobuf_deps() |
| |
| # Needed for starlark unit testing |
| load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") |
| |
| bazel_skylib_workspace() |
| |
| # |
| # Setup local respositories & install npm dependencies for tests |
| # |
| |
| local_repository( |
| name = "internal_npm_package_test_vendored_external", |
| path = "internal/npm_package/test/vendored_external", |
| ) |
| |
| yarn_install( |
| name = "fine_grained_deps_yarn", |
| included_files = [ |
| "", |
| ".js", |
| ".d.ts", |
| ".json", |
| ".proto", |
| ], |
| package_json = "//:tools/fine_grained_deps_yarn/package.json", |
| symlink_node_modules = False, |
| yarn_lock = "//:tools/fine_grained_deps_yarn/yarn.lock", |
| ) |
| |
| npm_install( |
| name = "fine_grained_deps_npm", |
| included_files = [ |
| "", |
| ".js", |
| ".d.ts", |
| ".json", |
| ".proto", |
| ], |
| package_json = "//:tools/fine_grained_deps_npm/package.json", |
| package_lock_json = "//:tools/fine_grained_deps_npm/package-lock.json", |
| symlink_node_modules = False, |
| ) |
| |
| yarn_install( |
| name = "fine_grained_no_bin", |
| package_json = "//:tools/fine_grained_no_bin/package.json", |
| symlink_node_modules = False, |
| yarn_lock = "//:tools/fine_grained_no_bin/yarn.lock", |
| ) |
| |
| yarn_install( |
| name = "fine_grained_goldens", |
| # exercise the dynamic_deps feature, even though it doesn't make sense for the targets to |
| # depend on zone.js or Angular core. This will just inject an extra data[] dependency into |
| # the generated binary targets. Note that we also ensure that scoped packages can be properly |
| # modified. |
| dynamic_deps = { |
| "@gregmagolan/test-a": "@angular/core", |
| "jasmine": "zone.js", |
| }, |
| manual_build_file_contents = """ |
| filegroup( |
| name = "golden_files", |
| srcs = [ |
| "//:BUILD.bazel", |
| "//:install_bazel_dependencies.bzl", |
| "//:manual_build_file_contents", |
| "//:WORKSPACE", |
| "//@angular/core:BUILD.bazel", |
| "//@gregmagolan:BUILD.bazel", |
| "//@gregmagolan/test-a/bin:BUILD.bazel", |
| "//@gregmagolan/test-a:BUILD.bazel", |
| "//@gregmagolan/test-a:index.bzl", |
| "//@gregmagolan/test-b:BUILD.bazel", |
| "//ajv:BUILD.bazel", |
| "//jasmine/bin:BUILD.bazel", |
| "//jasmine:BUILD.bazel", |
| "//jasmine:index.bzl", |
| "//rxjs:BUILD.bazel", |
| "//unidiff:BUILD.bazel", |
| "//zone.js:BUILD.bazel", |
| ], |
| )""", |
| package_json = "//:tools/fine_grained_goldens/package.json", |
| symlink_node_modules = False, |
| yarn_lock = "//:tools/fine_grained_goldens/yarn.lock", |
| ) |
| |
| # |
| # RBE configuration |
| # |
| |
| load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig") |
| |
| # Creates toolchain configuration for remote execution with BuildKite CI |
| # for rbe_ubuntu1604 |
| rbe_autoconfig( |
| name = "buildkite_config", |
| ) |
| |
| rbe_autoconfig( |
| name = "rbe_default", |
| ) |
| |
| load("@build_bazel_integration_testing//tools:repositories.bzl", "bazel_binaries") |
| |
| # Depend on the Bazel binaries |
| bazel_binaries(versions = ["0.28.1"]) |
| |
| # |
| # Support creating Docker images for our node apps # |
| # Not used but needed for @e2e_angular_bazel_example//:bazel_integration_test_files target |
| # |
| |
| http_archive( |
| name = "io_bazel_rules_docker", |
| sha256 = "7d453450e1eb70e238eea6b31f4115607ec1200e91afea01c25f9804f37e39c8", |
| strip_prefix = "rules_docker-0.10.0", |
| urls = ["https://github.com/bazelbuild/rules_docker/archive/v0.10.0.tar.gz"], |
| ) |
| |
| load("@io_bazel_rules_docker//nodejs:image.bzl", nodejs_image_repos = "repositories") |
| |
| nodejs_image_repos() |
| |
| # |
| # Kubernetes setup, for deployment to Google Cloud |
| # Not used but needed for @e2e_angular_bazel_example//:bazel_integration_test_files target |
| # |
| |
| git_repository( |
| name = "io_bazel_rules_k8s", |
| commit = "36ae5b534cc51ab0815c9bc723760469a9f7175c", |
| remote = "https://github.com/bazelbuild/rules_k8s.git", |
| shallow_since = "1545317854 -0500", |
| ) |
| |
| load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults", "k8s_repositories") |
| |
| k8s_repositories() |
| |
| k8s_defaults( |
| # This creates a rule called "k8s_deploy" that we can call later |
| name = "k8s_deploy", |
| # This is the name of the cluster as it appears in: |
| # kubectl config view --minify -o=jsonpath='{.contexts[0].context.cluster}' |
| cluster = "_".join([ |
| "gke", |
| "internal-200822", |
| "us-west1-a", |
| "angular-bazel-example", |
| ]), |
| kind = "deployment", |
| ) |
| |
| # |
| # Setup bazel_integration_test repositories |
| # |
| |
| # Don't need to build kotlin in the root workspace. |
| # See tools/mock_rules_kotlin/README.md |
| local_repository( |
| name = "io_bazel_rules_kotlin", |
| path = "tools/mock_rules_kotlin", |
| ) |
| |
| load("//e2e:index.bzl", "ALL_E2E") |
| |
| [local_repository( |
| name = "e2e_%s" % name, |
| path = "e2e/%s" % name, |
| ) for name in ALL_E2E] |
| |
| load("@e2e_packages//:setup_workspace.bzl", "e2e_packages_setup_workspace") |
| |
| e2e_packages_setup_workspace() |
| |
| # Mock npm_angular_bazel for @e2e_angular_bazel_example//:bazel_integration_test_files target |
| local_repository( |
| name = "npm_angular_bazel", |
| path = "tools/mock_npm_angular_bazel", |
| ) |
| |
| load("//examples:index.bzl", "ALL_EXAMPLES") |
| |
| [local_repository( |
| name = "examples_%s" % name, |
| path = "examples/%s" % name, |
| ) for name in ALL_EXAMPLES] |