From 153551ceeabcbeccb33bfd1665503168a751a58f Mon Sep 17 00:00:00 2001 From: Greg Magolan Date: Thu, 8 Aug 2019 10:05:05 -0700 Subject: [PATCH] test: test remaining nested workspaces from root workspace with bazel_integration_test --- .bazelci/presubmit.yml | 109 +- .bazelignore | 14 - .circleci/config.yml | 100 +- .gitignore | 2 - DEVELOPING.md | 17 +- WORKSPACE | 70 +- e2e/BUILD.bazel | 11 + .../bazel_managed_deps/.bazelignore | 0 {examples => e2e}/bazel_managed_deps/.bazelrc | 0 .../bazel_managed_deps/BUILD.bazel | 14 + .../bazel_managed_deps/README.md | 0 .../bazel_managed_deps/WORKSPACE | 22 +- .../bazel_managed_deps/deps.spec.js | 2 +- .../bazel_managed_deps/package.json | 4 +- .../bazel_managed_deps/yarn.lock | 2 +- .../fine_grained_symlinks}/.bazelignore | 0 e2e/fine_grained_symlinks/.bazelrc | 1 + .../fine_grained_symlinks/BUILD.bazel | 14 + .../fine_grained_symlinks/WORKSPACE | 9 +- .../fine_grained_symlinks/index.spec.js | 0 .../fine_grained_symlinks/package.json | 2 +- .../fine_grained_symlinks/yarn.lock | 0 .../.bazelignore | 0 e2e/node_loader_no_preserve_symlinks/.bazelrc | 1 + .../BUILD.bazel | 26 + .../WORKSPACE | 9 +- .../node_loader_test.spec.js | 0 .../package.json | 2 +- .../yarn.lock | 0 .../.bazelignore | 0 e2e/node_loader_preserve_symlinks/.bazelrc | 1 + e2e/node_loader_preserve_symlinks/BUILD.bazel | 26 + e2e/node_loader_preserve_symlinks/WORKSPACE | 22 + .../node_loader_test.spec.js | 0 .../package.json | 2 +- .../node_loader_preserve_symlinks/yarn.lock | 0 {internal/e2e => e2e}/packages/.bazelrc | 0 e2e/packages/BUILD.bazel | 61 ++ e2e/packages/WORKSPACE | 20 + .../packages/npm1/package-lock.json | 0 .../e2e => e2e}/packages/npm1/package.json | 0 .../packages/npm2/package-lock.json | 0 .../e2e => e2e}/packages/npm2/package.json | 0 .../packages/npm_determinism.spec.js | 3 +- .../e2e => e2e}/packages/npm_install.spec.js | 0 .../packages/npm_no_lockfile.spec.js | 0 {internal/e2e => e2e}/packages/package.json | 2 +- {internal/e2e => e2e}/packages/postinstall.js | 0 e2e/packages/setup_workspace.bzl | 55 + .../e2e => e2e}/packages/test_version.js | 0 .../e2e => e2e}/packages/yarn1/package.json | 0 .../e2e => e2e}/packages/yarn1/yarn.lock | 0 .../e2e => e2e}/packages/yarn2/package.json | 0 .../e2e => e2e}/packages/yarn2/yarn.lock | 0 .../packages/yarn_determinism.spec.js | 3 +- .../e2e => e2e}/packages/yarn_install.spec.js | 0 e2e/symlinked_node_modules_npm/WORKSPACE | 2 + e2e/symlinked_node_modules_yarn/WORKSPACE | 2 + e2e/ts_auto_deps/WORKSPACE | 2 + e2e/ts_devserver/app_e2e-spec.ts | 5 +- examples/BUILD.bazel | 230 ++++ examples/app/BUILD.bazel | 40 + examples/app/WORKSPACE | 14 +- examples/app/dummy_test.sh | 2 + examples/app/package.json | 6 +- examples/app/test/BUILD.bazel | 7 + examples/app/yarn.lock | 6 +- examples/nestjs/.bazelignore | 3 +- examples/nestjs/BUILD.bazel | 16 + examples/nestjs/WORKSPACE | 12 +- examples/nestjs/package.json | 4 +- examples/nestjs/src/BUILD.bazel | 7 + examples/nestjs/yarn.lock | 2 +- examples/parcel/BUILD.bazel | 16 +- examples/parcel/README.md | 2 +- examples/parcel/WORKSPACE | 24 +- examples/parcel/package.json | 3 +- examples/program/README.md | 26 - examples/protocol_buffers/BUILD.bazel | 40 +- examples/protocol_buffers/WORKSPACE | 9 +- examples/protocol_buffers/defaults.bzl | 48 + examples/protocol_buffers/dummy_test.sh | 2 + examples/protocol_buffers/package.json | 8 +- examples/protocol_buffers/yarn.lock | 8 +- .../user_managed_deps}/.bazelignore | 0 .../{program => user_managed_deps}/.bazelrc | 0 .../BUILD.bazel | 14 + examples/user_managed_deps/README.md | 53 + .../{program => user_managed_deps}/WORKSPACE | 20 +- .../decrement.js | 0 .../{program => user_managed_deps}/index.js | 0 .../index.spec.js | 0 .../package.json | 2 +- .../{program => user_managed_deps}/yarn.lock | 0 examples/vendored_node/BUILD.bazel | 26 +- examples/vendored_node/WORKSPACE | 54 +- examples/vendored_node/npm/package-lock.json | 97 -- examples/vendored_node/npm/package.json | 6 - examples/vendored_node/package-lock.json | 981 ++++++++++++++++++ examples/vendored_node/package.json | 8 +- examples/vendored_node/yarn/package.json | 6 - examples/vendored_node/yarn/yarn.lock | 88 -- examples/vendored_node_and_yarn/.bazelignore | 1 + examples/vendored_node_and_yarn/.bazelrc | 1 + examples/vendored_node_and_yarn/BUILD.bazel | 20 + examples/vendored_node_and_yarn/README.md | 5 + examples/vendored_node_and_yarn/WORKSPACE | 63 ++ examples/vendored_node_and_yarn/package.json | 9 + .../vendored_node_and_yarn/vendored.spec.js | 5 + examples/vendored_node_and_yarn/yarn.lock | 797 ++++++++++++++ examples/web_testing/BUILD.bazel | 22 +- examples/web_testing/WORKSPACE | 7 +- examples/web_testing/defaults.bzl | 82 ++ examples/web_testing/dummy_test.sh | 2 + examples/web_testing/package.json | 4 +- examples/web_testing/yarn.lock | 4 +- examples/webapp/BUILD.bazel | 42 +- examples/webapp/WORKSPACE | 29 +- examples/webapp/app.spec.js | 20 + examples/webapp/dummy_test.sh | 2 + examples/webapp/index.js | 1 + examples/webapp/package.json | 6 +- examples/webapp/protractor.on-prepare.js | 20 + examples/webapp/yarn.lock | 853 +++++++++++++++ internal/e2e/fine_grained_symlinks/.bazelrc | 1 - .../node_loader_no_preserve_symlinks/.bazelrc | 1 - .../BUILD.bazel | 12 - .../node_loader_preserve_symlinks/.bazelrc | 1 - .../node_loader_preserve_symlinks/BUILD.bazel | 12 - .../node_loader_preserve_symlinks/WORKSPACE | 19 - internal/e2e/packages/BUILD.bazel | 43 - internal/e2e/packages/WORKSPACE | 17 - internal/e2e/packages/setup_workspace.bzl | 55 - package.json | 13 +- packages/hide-bazel-files/BUILD.bazel | 5 +- packages/jasmine/BUILD.bazel | 5 +- packages/jasmine/src/BUILD.bazel | 11 + packages/karma/BUILD.bazel | 5 +- packages/labs/BUILD.bazel | 5 +- packages/protractor/BUILD.bazel | 5 +- packages/stylus/BUILD.bazel | 5 +- packages/typescript/BUILD.bazel | 5 +- scripts/build_all.sh | 11 - scripts/build_packages.sh | 35 - scripts/build_packages_all.sh | 12 - scripts/build_release.sh | 33 - scripts/check_deps.sh | 51 - scripts/clean_all.sh | 34 - scripts/clean_e2e.sh | 23 - scripts/clean_e2e_all.sh | 13 - scripts/clean_examples.sh | 23 - scripts/clean_examples_all.sh | 13 - scripts/clean_legacy_e2e.sh | 23 - scripts/clean_nested_workspaces.sh | 24 + scripts/clean_yarn_cache_selectively.sh | 15 +- scripts/on-release.js | 5 +- scripts/packages.sh | 8 - scripts/publish_release.sh | 1 - scripts/test_all.sh | 28 +- scripts/test_examples.sh | 33 - scripts/test_examples_all.sh | 30 - scripts/test_legacy_e2e.sh | 25 - scripts/test_legacy_e2e_all.sh | 27 - scripts/touch_deps.sh | 65 -- 164 files changed, 4093 insertions(+), 1181 deletions(-) rename {examples => e2e}/bazel_managed_deps/.bazelignore (100%) rename {examples => e2e}/bazel_managed_deps/.bazelrc (100%) rename {examples => e2e}/bazel_managed_deps/BUILD.bazel (70%) rename {examples => e2e}/bazel_managed_deps/README.md (100%) rename {examples => e2e}/bazel_managed_deps/WORKSPACE (64%) rename {examples => e2e}/bazel_managed_deps/deps.spec.js (86%) rename {examples => e2e}/bazel_managed_deps/package.json (61%) rename {examples => e2e}/bazel_managed_deps/yarn.lock (99%) rename {examples/program => e2e/fine_grained_symlinks}/.bazelignore (100%) create mode 100644 e2e/fine_grained_symlinks/.bazelrc rename {internal/e2e => e2e}/fine_grained_symlinks/BUILD.bazel (50%) rename {internal/e2e => e2e}/fine_grained_symlinks/WORKSPACE (63%) rename {internal/e2e => e2e}/fine_grained_symlinks/index.spec.js (100%) rename {internal/e2e => e2e}/fine_grained_symlinks/package.json (69%) rename {internal/e2e => e2e}/fine_grained_symlinks/yarn.lock (100%) rename {internal/e2e/fine_grained_symlinks => e2e/node_loader_no_preserve_symlinks}/.bazelignore (100%) create mode 100644 e2e/node_loader_no_preserve_symlinks/.bazelrc create mode 100644 e2e/node_loader_no_preserve_symlinks/BUILD.bazel rename {internal/e2e => e2e}/node_loader_no_preserve_symlinks/WORKSPACE (52%) rename {internal/e2e => e2e}/node_loader_no_preserve_symlinks/node_loader_test.spec.js (100%) rename {internal/e2e/node_loader_preserve_symlinks => e2e/node_loader_no_preserve_symlinks}/package.json (87%) rename {internal/e2e => e2e}/node_loader_no_preserve_symlinks/yarn.lock (100%) rename {internal/e2e => e2e}/node_loader_preserve_symlinks/.bazelignore (100%) create mode 100644 e2e/node_loader_preserve_symlinks/.bazelrc create mode 100644 e2e/node_loader_preserve_symlinks/BUILD.bazel create mode 100644 e2e/node_loader_preserve_symlinks/WORKSPACE rename {internal/e2e => e2e}/node_loader_preserve_symlinks/node_loader_test.spec.js (100%) rename {internal/e2e/node_loader_no_preserve_symlinks => e2e/node_loader_preserve_symlinks}/package.json (87%) rename {internal/e2e => e2e}/node_loader_preserve_symlinks/yarn.lock (100%) rename {internal/e2e => e2e}/packages/.bazelrc (100%) create mode 100644 e2e/packages/BUILD.bazel create mode 100644 e2e/packages/WORKSPACE rename {internal/e2e => e2e}/packages/npm1/package-lock.json (100%) rename {internal/e2e => e2e}/packages/npm1/package.json (100%) rename {internal/e2e => e2e}/packages/npm2/package-lock.json (100%) rename {internal/e2e => e2e}/packages/npm2/package.json (100%) rename {internal/e2e => e2e}/packages/npm_determinism.spec.js (84%) rename {internal/e2e => e2e}/packages/npm_install.spec.js (100%) rename {internal/e2e => e2e}/packages/npm_no_lockfile.spec.js (100%) rename {internal/e2e => e2e}/packages/package.json (68%) rename {internal/e2e => e2e}/packages/postinstall.js (100%) create mode 100644 e2e/packages/setup_workspace.bzl rename {internal/e2e => e2e}/packages/test_version.js (100%) rename {internal/e2e => e2e}/packages/yarn1/package.json (100%) rename {internal/e2e => e2e}/packages/yarn1/yarn.lock (100%) rename {internal/e2e => e2e}/packages/yarn2/package.json (100%) rename {internal/e2e => e2e}/packages/yarn2/yarn.lock (100%) rename {internal/e2e => e2e}/packages/yarn_determinism.spec.js (84%) rename {internal/e2e => e2e}/packages/yarn_install.spec.js (100%) create mode 100644 examples/BUILD.bazel create mode 100755 examples/app/dummy_test.sh delete mode 100644 examples/program/README.md create mode 100644 examples/protocol_buffers/defaults.bzl create mode 100755 examples/protocol_buffers/dummy_test.sh rename {internal/e2e/node_loader_no_preserve_symlinks => examples/user_managed_deps}/.bazelignore (100%) rename examples/{program => user_managed_deps}/.bazelrc (100%) rename examples/{program => user_managed_deps}/BUILD.bazel (82%) create mode 100644 examples/user_managed_deps/README.md rename examples/{program => user_managed_deps}/WORKSPACE (60%) rename examples/{program => user_managed_deps}/decrement.js (100%) rename examples/{program => user_managed_deps}/index.js (100%) rename examples/{program => user_managed_deps}/index.spec.js (100%) rename examples/{program => user_managed_deps}/package.json (86%) rename examples/{program => user_managed_deps}/yarn.lock (100%) delete mode 100644 examples/vendored_node/npm/package-lock.json delete mode 100644 examples/vendored_node/npm/package.json create mode 100644 examples/vendored_node/package-lock.json delete mode 100644 examples/vendored_node/yarn/package.json delete mode 100644 examples/vendored_node/yarn/yarn.lock create mode 100644 examples/vendored_node_and_yarn/.bazelignore create mode 100644 examples/vendored_node_and_yarn/.bazelrc create mode 100644 examples/vendored_node_and_yarn/BUILD.bazel create mode 100644 examples/vendored_node_and_yarn/README.md create mode 100644 examples/vendored_node_and_yarn/WORKSPACE create mode 100644 examples/vendored_node_and_yarn/package.json create mode 100644 examples/vendored_node_and_yarn/vendored.spec.js create mode 100644 examples/vendored_node_and_yarn/yarn.lock create mode 100644 examples/web_testing/defaults.bzl create mode 100755 examples/web_testing/dummy_test.sh create mode 100644 examples/webapp/app.spec.js create mode 100755 examples/webapp/dummy_test.sh create mode 100644 examples/webapp/protractor.on-prepare.js delete mode 100644 internal/e2e/fine_grained_symlinks/.bazelrc delete mode 100644 internal/e2e/node_loader_no_preserve_symlinks/.bazelrc delete mode 100644 internal/e2e/node_loader_no_preserve_symlinks/BUILD.bazel delete mode 100644 internal/e2e/node_loader_preserve_symlinks/.bazelrc delete mode 100644 internal/e2e/node_loader_preserve_symlinks/BUILD.bazel delete mode 100644 internal/e2e/node_loader_preserve_symlinks/WORKSPACE delete mode 100644 internal/e2e/packages/BUILD.bazel delete mode 100644 internal/e2e/packages/WORKSPACE delete mode 100644 internal/e2e/packages/setup_workspace.bzl delete mode 100755 scripts/build_all.sh delete mode 100755 scripts/build_packages.sh delete mode 100755 scripts/build_packages_all.sh delete mode 100755 scripts/build_release.sh delete mode 100755 scripts/check_deps.sh delete mode 100755 scripts/clean_all.sh delete mode 100755 scripts/clean_e2e.sh delete mode 100755 scripts/clean_e2e_all.sh delete mode 100755 scripts/clean_examples.sh delete mode 100755 scripts/clean_examples_all.sh delete mode 100755 scripts/clean_legacy_e2e.sh create mode 100755 scripts/clean_nested_workspaces.sh delete mode 100644 scripts/packages.sh delete mode 100755 scripts/test_examples.sh delete mode 100755 scripts/test_examples_all.sh delete mode 100755 scripts/test_legacy_e2e.sh delete mode 100755 scripts/test_legacy_e2e_all.sh delete mode 100755 scripts/touch_deps.sh diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index c7250bc2ae..ad926f8e0d 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -18,7 +18,7 @@ tasks: build_targets: - "//..." test_flags: - - "--test_tag_filters=-e2e,-fix-bazelci-ubuntu" + - "--test_tag_filters=-e2e,-examples,-fix-bazelci-ubuntu" test_targets: - "//..." ubuntu1604_e2e: @@ -44,6 +44,34 @@ tasks: - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-ubuntu" test_targets: - "//..." + ubuntu1604_examples: + name: ubuntu1604_examples + platform: ubuntu1604 + # We need to reduce the memory & CPU usage of the top-level + # bazel process for bazel-in-bazel tests to not + # deplete the system memory completely. + # - startup JVM memory reduced + # - top-level bazel process should use as little memory as possible and only 1 core + # - nested bazel process should use a limited number of cores + shell_commands: + - echo 'startup --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1536m' >> .bazelrc + build_flags: + - "--build_tag_filters=examples" + build_targets: + - "//..." + test_flags: + - "--test_tag_filters=examples" + - "--local_resources=792,1.0,1.0" + # test_args will be passed to the nested bazel process + - "--test_arg=--local_resources=13288,7.0,1.0" + - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-ubuntu" + test_targets: + - "//..." + # The following examples only works on linux as it downloads the linux node distribution + # It is tagged "manual" so we run it explicitly here + # TODO(gregmagolan): make node_repositories acccept different archives for different platforms + - "//examples:examples_vendored_node" + - "//examples:examples_vendored_node_and_yarn" # ubuntu1604_angular_bazel_example: # name: ubuntu1604_angular_bazel_example # platform: ubuntu1604 @@ -75,7 +103,7 @@ tasks: # coverage of it to make sure it doesn't break. - "//docs" test_flags: - - "--test_tag_filters=-e2e,-fix-bazelci-ubuntu" + - "--test_tag_filters=-e2e,-examples,-fix-bazelci-ubuntu" test_targets: - "//..." ubuntu1804_e2e: @@ -101,6 +129,34 @@ tasks: - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-ubuntu" test_targets: - "//..." + ubuntu1804_examples: + name: ubuntu1804_examples + platform: ubuntu1604 + # We need to reduce the memory & CPU usage of the top-level + # bazel process for bazel-in-bazel tests to not + # deplete the system memory completely. + # - startup JVM memory reduced + # - top-level bazel process should use as little memory as possible and only 1 core + # - nested bazel process should use a limited number of cores + shell_commands: + - echo 'startup --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1536m' >> .bazelrc + build_flags: + - "--build_tag_filters=examples" + build_targets: + - "//..." + test_flags: + - "--test_tag_filters=examples" + - "--local_resources=792,1.0,1.0" + # test_args will be passed to the nested bazel process + - "--test_arg=--local_resources=13288,7.0,1.0" + - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-ubuntu" + test_targets: + - "//..." + # The following examples only works on linux as it downloads the linux node distribution + # It is tagged "manual" so we run it explicitly here + # TODO(gregmagolan): make node_repositories acccept different archives for different platforms + - "//examples:examples_vendored_node" + - "//examples:examples_vendored_node_and_yarn" # ubuntu1804_angular_bazel_example: # name: ubuntu1804_angular_bazel_example # platform: ubuntu1804 @@ -129,7 +185,7 @@ tasks: build_targets: - "//..." test_flags: - - "--test_tag_filters=-e2e" + - "--test_tag_filters=-e2e,-examples" test_targets: - "//..." macos_e2e: @@ -152,7 +208,31 @@ tasks: - "--local_resources=792,1.0,1.0" # test_args will be passed to the nested bazel process # TODO(gregmagolan): fix frequent flake with multiple cores in nested bazel (osx buildkite & local) - - "--test_arg=--local_resources=8192,1.0,1.0" + - "--test_arg=--local_resources=13288,1.0,1.0" + - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-mac" + test_targets: + - "//..." + macos_examples: + name: macos_examples + platform: macos + # We need to reduce the memory & CPU usage of the top-level + # bazel process for bazel-in-bazel tests to not + # deplete the system memory completely. + # - startup JVM memory reduced + # - top-level bazel process should use as little memory as possible and only 1 core + # - nested bazel process should use a limited number of cores + shell_commands: + - echo 'startup --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1536m' >> .bazelrc + build_flags: + - "--build_tag_filters=examples" + build_targets: + - "//..." + test_flags: + - "--test_tag_filters=examples" + - "--local_resources=792,1.0,1.0" + # test_args will be passed to the nested bazel process + # TODO(gregmagolan): fix frequent flake with multiple cores in nested bazel (osx buildkite & local) + - "--test_arg=--local_resources=13288,1.0,1.0" - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-mac" test_targets: - "//..." @@ -205,7 +285,7 @@ tasks: build_targets: - "//..." test_flags: - - "--test_tag_filters=-e2e,-fix-windows" + - "--test_tag_filters=-e2e,-examples,-fix-windows" test_targets: - "//..." windows_e2e: @@ -219,8 +299,23 @@ tasks: - "--test_tag_filters=e2e" - "--local_resources=792,1.0,1.0" # test_args will be passed to the nested bazel process - - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-windows" - - "--test_arg=--local_resources=8192,1.0,1.0" + - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-windows,-fix-windows" + - "--test_arg=--local_resources=13288,1.0,1.0" + test_targets: + - "//..." + windows_examples: + name: windows_examples + platform: windows + build_flags: + - "--build_tag_filters=examples" + build_targets: + - "//..." + test_flags: + - "--test_tag_filters=examples,-fix-windows,-no-bazelci-windows" + - "--local_resources=792,1.0,1.0" + # test_args will be passed to the nested bazel process + - "--test_arg=--test_tag_filters=-no-bazelci,-no-bazelci-windows,-fix-windows" + - "--test_arg=--local_resources=13288,1.0,1.0" test_targets: - "//..." # windows_angular_bazel_example: diff --git a/.bazelignore b/.bazelignore index 72493a179a..f06235c460 100644 --- a/.bazelignore +++ b/.bazelignore @@ -1,16 +1,2 @@ node_modules -internal/npm_install/test/node_modules dist -release -# Examples are tested by running examples/test_example.sh outside of Bazel -examples/ -# A subset of legacy e2e tests are nested workspaces -# TODO(gregmagolan): move these to /e2e -internal/e2e/bazel_workspaces_compat -internal/e2e/fine_grained_deps/npm/node_modules -internal/e2e/fine_grained_deps/yarn/node_modules -internal/e2e/fine_grained_no_bin/node_modules -internal/e2e/fine_grained_symlinks -internal/e2e/node_loader_no_preserve_symlinks -internal/e2e/node_loader_preserve_symlinks -internal/e2e/packages diff --git a/.circleci/config.yml b/.circleci/config.yml index 17b81a479e..bfd0650966 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,7 +10,7 @@ ## IMPORTANT # If you change the `default_docker_image` version, also change the `cache_key` version var_1: &default_docker_image circleci/node:10.16 -var_3: &cache_key node-0.16-{{ checksum "yarn.lock" }}-{{ checksum "examples/program/yarn.lock" }} +var_3: &cache_key node-0.16-{{ checksum "yarn.lock" }} var_4: &init_environment run: @@ -107,14 +107,13 @@ jobs: - *init_bazel # Run yarn on all node_repositories - - run: bazel run @nodejs//:yarn + - run: bazel run @nodejs//:bin/yarn # Save all node_modules to the cache - save_cache: key: *cache_key paths: - "node_modules" - - "examples/program/node_modules" # Persist any changes at this point to be reused by further jobs. - persist_to_workspace: @@ -153,7 +152,7 @@ jobs: - *init_bazel - *hide_node_and_yarn_local_binaries - - run: bazel test ... --test_tag_filters=-e2e + - run: bazel test ... --test_tag_filters=-e2e,-examples test_e2e: <<: *job_defaults @@ -188,6 +187,39 @@ jobs: command: bazel test --test_tag_filters=e2e --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,7.0,1.0 --test_arg=--test_tag_filters=-no-circleci ... no_output_timeout: 20m + test_examples: + <<: *job_defaults + resource_class: xlarge + # We need to reduce the memory & CPU usage of the top-level + # bazel process for this large bazel-in-bazel test to not + # deplete the system memory completely. + # - startup JVM memory reduced + # - top-level bazel process should use as little memory as possible and only 1 core + # - nested bazel process should have its memory & core optimally capped as well + steps: + - *attach_workspace + - *init_environment + - run: + name: Tune top-level bazel JVM memory usage + command: echo 'startup --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m' >> .bazelrc + - *init_bazel + - *hide_node_and_yarn_local_binaries + + # Split up the build & test as test takes a long time and has very + # little output so running build first makes CI output friendlier. + # The build step can also use up more memory which may be required + # to build the release package with this configuration. + - run: bazel build --build_tag_filters=examples ... + - run: + command: bazel test --test_tag_filters=examples --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,7.0,1.0 --test_arg=--test_tag_filters=-no-circleci ... + no_output_timeout: 20m + # The following examples only works on linux as it downloads the linux node distribution + # It is tagged "manual" so we run it explicitly here + # TODO(gregmagolan): make node_repositories acccept different archives for different platforms + - run: + command: bazel test --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,7.0,1.0 //examples:examples_vendored_node //examples:examples_vendored_node_and_yarn + no_output_timeout: 20m + test_e2e_angular_bazel_example: <<: *job_defaults resource_class: xlarge @@ -248,48 +280,9 @@ jobs: # We should also be able to test targets in a different workspace # TODO(gmagolan): move these tests into `build` job once # https://github.com/bazelbuild/bazel/issues/6481 is resolved - - run: 'cd examples/program && bazel run @nodejs//:yarn' - - run: bazel test @examples_program//... - - run: bazel test @internal_e2e_packages//... - - build_release: - <<: *job_defaults - # Need to compile Go and protocol buffers from source for typescript package - resource_class: xlarge - steps: - - *attach_workspace - - *init_environment - - *init_bazel - - *hide_node_and_yarn_local_binaries - - run: ./scripts/build_release.sh - - run: ./scripts/build_packages_all.sh - - persist_to_workspace: - root: ~/ - paths: - - ./rules_nodejs/release - - # These e2e tests are in the process of being moved to the test_e2e job - test_e2e_legacy: - <<: *job_defaults - parallelism: 2 - steps: - - *attach_workspace - - *init_environment - - *init_bazel - - run: ./scripts/test_legacy_e2e_all.sh ${CIRCLE_NODE_INDEX} ${CIRCLE_NODE_TOTAL} - - # This job cannot run on BuildKite (BazelCI) because it requires changing - # directories to test inside nested workspaces. - # See https://github.com/bazelbuild/continuous-integration/issues/225 - test_examples: - <<: *job_defaults - resource_class: xlarge - parallelism: 4 - steps: - - *attach_workspace - - *init_environment - - *init_bazel - - run: ./scripts/test_examples_all.sh ${CIRCLE_NODE_INDEX} ${CIRCLE_NODE_TOTAL} + - run: 'cd examples/user_managed_deps && bazel run @nodejs//:yarn' + - run: bazel test @examples_user_managed_deps//... + - run: bazel test @e2e_packages//... workflows: version: 2 @@ -305,21 +298,12 @@ workflows: - test_e2e: requires: - setup - - test_e2e_angular_bazel_example: + - test_examples: requires: - setup - - runnable_targets: + - test_e2e_angular_bazel_example: requires: - setup - - build_release: + - runnable_targets: requires: - setup - - test_legacy_runfiles: - requires: - - build_release - - test_e2e_legacy: - requires: - - build_release - - test_examples: - requires: - - build_release diff --git a/.gitignore b/.gitignore index 106e3a7de9..b136c6b082 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,7 @@ bazel-out /e2e/*/bazel-* /examples/*/bazel-* /packages/*/bazel-* -/internal/e2e/*/bazel-* node_modules -!/internal/npm_install/test/golden/node_modules examples/vendored_node/node-v10.12.0-linux-x64 examples/vendored_node/node-v10.12.0-linux-x64.tar.xz examples/vendored_node/yarn-v1.10.0 diff --git a/DEVELOPING.md b/DEVELOPING.md index 3296fc47ef..b6673039f3 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -4,13 +4,15 @@ We strongly encourage you to review the project's scope described in the `README ## Testing locally -This repository contains nested workspaces with are in the process of being phased out. Some of these nested workspaces are now tested with the bazel-in-bazel bazel_integration_test rule. The integration tests must be run in series as they use up too many resources when run in parallel. +This repository contains nested workspaces which are tested with the bazel-in-bazel bazel_integration_test rule. The integration tests must be run in series as they use up too many resources when run in parallel. -`bazel test ...` includes all these integration tests so if you want to run all tests except the integration tests you can use `bazel test ... --test_tag_filters=-e2e`. A shortcut for this is `yarn test`. +`bazel test ...` includes all these integration tests so if you want to run all tests except the integration tests you can use `bazel test ... --test_tag_filters=-e2e,-examples`. A shortcut for this is `yarn test`. -When running the integration tests, it is recommended to tune the memory usage of Bazel locally. This can be done with `bazel --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m test ... --test_tag_filters=e2e --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,1.0,1.0`. A shortcut for this is `yarn test_e2e`. +When running the e2e tests, it is recommended to tune the memory usage of Bazel locally. This can be done with `bazel --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m test ... --test_tag_filters=e2e --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,1.0,1.0`. A shortcut for this is `yarn test_e2e`. -To test all targets locally in the main workspace and in all nested workspaces (includes those that are not yet tested as integration tests) run: +Similarly, for test examples run `bazel --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m test ... --test_tag_filters=examples --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,1.0,1.0`. A shortcut for this is `yarn test_examples`. + +To test all targets locally in the main workspace and in all nested workspaces run: ``` yarn test_all @@ -22,13 +24,6 @@ To do a full clean run: yarn clean_all ``` -Other scripts allow you to test all or e2e tests and examples. For example, - -``` -yarn test_examples_all -yarn test_examples webapp -``` - ## Releasing Start from a clean checkout at master/HEAD. diff --git a/WORKSPACE b/WORKSPACE index 27cb0e8fd9..34fbc4cb35 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -14,13 +14,7 @@ workspace( name = "build_bazel_rules_nodejs", - managed_directories = { - "@fine_grained_deps_npm": ["internal/e2e/fine_grained_deps/npm/node_modules"], - "@fine_grained_deps_yarn": ["internal/e2e/fine_grained_deps/yarn/node_modules"], - "@fine_grained_no_bin": ["internal/e2e/fine_grained_no_bin/node_modules"], - "@npm": ["node_modules"], - "@npm_install_test": ["internal/npm_install/test/node_modules"], - }, + managed_directories = {"@npm": ["node_modules"]}, ) load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") @@ -68,24 +62,7 @@ rules_nodejs_dev_dependencies() # Setup rules_nodejs npm dependencies # -load("//:defs.bzl", "node_repositories", "npm_install", "yarn_install") - -# Install a hermetic version of node. -# After this is run, these labels will be available: -# - NodeJS: -# @nodejs//:node -# - NPM: -# @nodejs//:npm -# - The yarn package manager: -# @nodejs//:yarn -# -# To install the node_modules of all the listed package_json files run: -# bazel run @nodejs//:yarn -# or -# bazel run @nodejs//:npm -node_repositories( - package_json = ["//:package.json"], -) +load("//:defs.bzl", "npm_install", "yarn_install") yarn_install( name = "npm", @@ -200,25 +177,11 @@ bazel_skylib_workspace() # Setup local respositories & install npm dependencies for tests # -local_repository( - name = "examples_program", - path = "examples/program", -) - -local_repository( - name = "internal_e2e_packages", - path = "internal/e2e/packages", -) - local_repository( name = "internal_npm_package_test_vendored_external", path = "internal/npm_package/test/vendored_external", ) -load("@internal_e2e_packages//:setup_workspace.bzl", "internal_e2e_packages_setup_workspace") - -internal_e2e_packages_setup_workspace() - yarn_install( name = "fine_grained_deps_yarn", included_files = [ @@ -229,6 +192,7 @@ yarn_install( ".proto", ], package_json = "//internal/e2e/fine_grained_deps:yarn/package.json", + symlink_node_modules = False, yarn_lock = "//internal/e2e/fine_grained_deps:yarn/yarn.lock", ) @@ -243,11 +207,13 @@ npm_install( ], package_json = "//internal/e2e/fine_grained_deps:npm/package.json", package_lock_json = "//internal/e2e/fine_grained_deps:npm/package-lock.json", + symlink_node_modules = False, ) yarn_install( name = "fine_grained_no_bin", package_json = "//internal/e2e/fine_grained_no_bin:package.json", + symlink_node_modules = False, yarn_lock = "//internal/e2e/fine_grained_no_bin:yarn.lock", ) @@ -277,6 +243,7 @@ filegroup( ], )""", package_json = "//internal/npm_install/test:package.json", + symlink_node_modules = False, yarn_lock = "//internal/npm_install/test:yarn.lock", ) @@ -355,10 +322,15 @@ k8s_defaults( name = "e2e_%s" % name, path = "e2e/%s" % name, ) for name in [ + "bazel_managed_deps", + "fine_grained_symlinks", "jasmine", "karma", "karma_stack_trace", "karma_typescript", + "node_loader_no_preserve_symlinks", + "node_loader_preserve_symlinks", + "packages", "stylus", "symlinked_node_modules_npm", "symlinked_node_modules_yarn", @@ -368,6 +340,10 @@ k8s_defaults( "webpack", ]] +load("@e2e_packages//:setup_workspace.bzl", "e2e_packages_setup_workspace") + +e2e_packages_setup_workspace() + git_repository_under_test( name = "e2e_angular_bazel_example", branch = "add-buildkite-filter-flags", @@ -379,3 +355,19 @@ local_repository( name = "npm_angular_bazel", path = "tools/mock_npm_angular_bazel", ) + +[local_repository( + name = "examples_%s" % name, + path = "examples/%s" % name, +) for name in [ + "app", + "nestjs", + "parcel", + "program", + "protocol_buffers", + "user_managed_deps", + "vendored_node", + "vendored_node_and_yarn", + "web_testing", + "webapp", +]] diff --git a/e2e/BUILD.bazel b/e2e/BUILD.bazel index e79ce3cf57..96a97bc1df 100644 --- a/e2e/BUILD.bazel +++ b/e2e/BUILD.bazel @@ -19,6 +19,11 @@ load("@build_bazel_rules_nodejs//packages:index.bzl", "NPM_PACKAGES") # This mapping optimizes development so when making changes to files under packages # only affected e2e tests are run. E2E_TESTS = { + "e2e_bazel_managed_deps": { + "//packages/jasmine:npm_package": "@bazel/jasmine", + }, + "e2e_fine_grained_symlinks": { + }, "e2e_jasmine": { "//packages/jasmine:npm_package": "@bazel/jasmine", }, @@ -34,6 +39,12 @@ E2E_TESTS = { "//packages/karma:npm_package": "@bazel/karma", "//packages/typescript:npm_package": "@bazel/typescript", }, + "e2e_node_loader_no_preserve_symlinks": { + }, + "e2e_node_loader_preserve_symlinks": { + }, + "e2e_packages": { + }, "e2e_stylus": { "//packages/stylus:npm_package": "@bazel/stylus", }, diff --git a/examples/bazel_managed_deps/.bazelignore b/e2e/bazel_managed_deps/.bazelignore similarity index 100% rename from examples/bazel_managed_deps/.bazelignore rename to e2e/bazel_managed_deps/.bazelignore diff --git a/examples/bazel_managed_deps/.bazelrc b/e2e/bazel_managed_deps/.bazelrc similarity index 100% rename from examples/bazel_managed_deps/.bazelrc rename to e2e/bazel_managed_deps/.bazelrc diff --git a/examples/bazel_managed_deps/BUILD.bazel b/e2e/bazel_managed_deps/BUILD.bazel similarity index 70% rename from examples/bazel_managed_deps/BUILD.bazel rename to e2e/bazel_managed_deps/BUILD.bazel index 67a9cc107d..23db25e5f0 100644 --- a/examples/bazel_managed_deps/BUILD.bazel +++ b/e2e/bazel_managed_deps/BUILD.bazel @@ -22,3 +22,17 @@ jasmine_node_test( "@npm//typescript", ], ) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/bazel_managed_deps/README.md b/e2e/bazel_managed_deps/README.md similarity index 100% rename from examples/bazel_managed_deps/README.md rename to e2e/bazel_managed_deps/README.md diff --git a/examples/bazel_managed_deps/WORKSPACE b/e2e/bazel_managed_deps/WORKSPACE similarity index 64% rename from examples/bazel_managed_deps/WORKSPACE rename to e2e/bazel_managed_deps/WORKSPACE index ed1d8f51fa..c8a6d0edf8 100644 --- a/examples/bazel_managed_deps/WORKSPACE +++ b/e2e/bazel_managed_deps/WORKSPACE @@ -13,30 +13,30 @@ # limitations under the License. workspace( - name = "examples_bazel_managed_deps", + name = "e2e_bazel_managed_deps", managed_directories = {"@npm": ["node_modules"]}, ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") -# This runs yarn install, then our generate_build_file.js to create BUILD files -# inside the resulting node_modules directory. -# The name "npm" here means the resulting modules are referenced like -# @npm//jasmine yarn_install( name = "npm", manual_build_file_contents = """ filegroup( name = "bin_files", - srcs = glob(["node_modules/.bin/*"]), + srcs = [ + "node_modules/.bin/jasmine", + "node_modules/.bin/tsc", + "node_modules/.bin/tsserver", + ], )""", package_json = "//:package.json", yarn_lock = "//:yarn.lock", diff --git a/examples/bazel_managed_deps/deps.spec.js b/e2e/bazel_managed_deps/deps.spec.js similarity index 86% rename from examples/bazel_managed_deps/deps.spec.js rename to e2e/bazel_managed_deps/deps.spec.js index ae1ee3c2ba..6793348432 100644 --- a/examples/bazel_managed_deps/deps.spec.js +++ b/e2e/bazel_managed_deps/deps.spec.js @@ -15,7 +15,7 @@ describe('dependencies', () => { const files = ['jasmine', 'tsc', 'tsserver']; for (const f of files) { try { - expect(require.resolve(`.bin/${f}`).endsWith(`/npm/node_modules/.bin/${f}`)).toBe(true); + expect(!!require.resolve(`.bin/${f}`)).toBeTruthy(); } catch (_) { fail(`.bin/${f} not resolved`); } diff --git a/examples/bazel_managed_deps/package.json b/e2e/bazel_managed_deps/package.json similarity index 61% rename from examples/bazel_managed_deps/package.json rename to e2e/bazel_managed_deps/package.json index 0b6030e8fc..962a13c449 100644 --- a/examples/bazel_managed_deps/package.json +++ b/e2e/bazel_managed_deps/package.json @@ -1,10 +1,10 @@ { "description": "runtime dependencies for bazel_managed_deps example", "devDependencies": { - "@bazel/jasmine": "file:../../release/npm_bazel_jasmine", + "@bazel/jasmine": "latest", "typescript": "^3.0.1" }, "scripts": { - "test": "bazel test //..." + "test": "bazel test ..." } } diff --git a/examples/bazel_managed_deps/yarn.lock b/e2e/bazel_managed_deps/yarn.lock similarity index 99% rename from examples/bazel_managed_deps/yarn.lock rename to e2e/bazel_managed_deps/yarn.lock index 3b6a270790..bf7e08dc0f 100644 --- a/examples/bazel_managed_deps/yarn.lock +++ b/e2e/bazel_managed_deps/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@bazel/jasmine@file:../../release/npm_bazel_jasmine": +"@bazel/jasmine@latest": version "1.2.3" dependencies: jasmine "~3.4.0" diff --git a/examples/program/.bazelignore b/e2e/fine_grained_symlinks/.bazelignore similarity index 100% rename from examples/program/.bazelignore rename to e2e/fine_grained_symlinks/.bazelignore diff --git a/e2e/fine_grained_symlinks/.bazelrc b/e2e/fine_grained_symlinks/.bazelrc new file mode 100644 index 0000000000..3431057af6 --- /dev/null +++ b/e2e/fine_grained_symlinks/.bazelrc @@ -0,0 +1 @@ +import %workspace%/../../common.bazelrc diff --git a/internal/e2e/fine_grained_symlinks/BUILD.bazel b/e2e/fine_grained_symlinks/BUILD.bazel similarity index 50% rename from internal/e2e/fine_grained_symlinks/BUILD.bazel rename to e2e/fine_grained_symlinks/BUILD.bazel index 0fad4418a4..7a26ed9ab4 100644 --- a/internal/e2e/fine_grained_symlinks/BUILD.bazel +++ b/e2e/fine_grained_symlinks/BUILD.bazel @@ -10,3 +10,17 @@ nodejs_test( ], entry_point = ":index.spec.js", ) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/internal/e2e/fine_grained_symlinks/WORKSPACE b/e2e/fine_grained_symlinks/WORKSPACE similarity index 63% rename from internal/e2e/fine_grained_symlinks/WORKSPACE rename to e2e/fine_grained_symlinks/WORKSPACE index d32b6abc2b..dd8e5f0794 100644 --- a/internal/e2e/fine_grained_symlinks/WORKSPACE +++ b/e2e/fine_grained_symlinks/WORKSPACE @@ -1,11 +1,14 @@ workspace( - name = "fine_grained_symlinks", + name = "e2e_fine_grained_symlinks", managed_directories = {"@npm": ["node_modules"]}, ) -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install") diff --git a/internal/e2e/fine_grained_symlinks/index.spec.js b/e2e/fine_grained_symlinks/index.spec.js similarity index 100% rename from internal/e2e/fine_grained_symlinks/index.spec.js rename to e2e/fine_grained_symlinks/index.spec.js diff --git a/internal/e2e/fine_grained_symlinks/package.json b/e2e/fine_grained_symlinks/package.json similarity index 69% rename from internal/e2e/fine_grained_symlinks/package.json rename to e2e/fine_grained_symlinks/package.json index fceac5fa14..320958f969 100644 --- a/internal/e2e/fine_grained_symlinks/package.json +++ b/e2e/fine_grained_symlinks/package.json @@ -3,6 +3,6 @@ "webpack": "4.26.1" }, "scripts": { - "test": "bazel test //..." + "test": "bazel test ..." } } diff --git a/internal/e2e/fine_grained_symlinks/yarn.lock b/e2e/fine_grained_symlinks/yarn.lock similarity index 100% rename from internal/e2e/fine_grained_symlinks/yarn.lock rename to e2e/fine_grained_symlinks/yarn.lock diff --git a/internal/e2e/fine_grained_symlinks/.bazelignore b/e2e/node_loader_no_preserve_symlinks/.bazelignore similarity index 100% rename from internal/e2e/fine_grained_symlinks/.bazelignore rename to e2e/node_loader_no_preserve_symlinks/.bazelignore diff --git a/e2e/node_loader_no_preserve_symlinks/.bazelrc b/e2e/node_loader_no_preserve_symlinks/.bazelrc new file mode 100644 index 0000000000..3431057af6 --- /dev/null +++ b/e2e/node_loader_no_preserve_symlinks/.bazelrc @@ -0,0 +1 @@ +import %workspace%/../../common.bazelrc diff --git a/e2e/node_loader_no_preserve_symlinks/BUILD.bazel b/e2e/node_loader_no_preserve_symlinks/BUILD.bazel new file mode 100644 index 0000000000..4e5598d3e6 --- /dev/null +++ b/e2e/node_loader_no_preserve_symlinks/BUILD.bazel @@ -0,0 +1,26 @@ +load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test") + +package(default_visibility = ["//visibility:public"]) + +nodejs_test( + name = "test", + data = [ + "node_loader_test.spec.js", + ], + entry_point = ":node_loader_test.spec.js", + node_modules = "@npm//:node_modules", +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/internal/e2e/node_loader_no_preserve_symlinks/WORKSPACE b/e2e/node_loader_no_preserve_symlinks/WORKSPACE similarity index 52% rename from internal/e2e/node_loader_no_preserve_symlinks/WORKSPACE rename to e2e/node_loader_no_preserve_symlinks/WORKSPACE index 236fa429aa..15bea2270c 100644 --- a/internal/e2e/node_loader_no_preserve_symlinks/WORKSPACE +++ b/e2e/node_loader_no_preserve_symlinks/WORKSPACE @@ -1,13 +1,16 @@ workspace( - name = "node_loader_e2e_no_preserve_symlinks", + name = "e2e_node_loader_no_preserve_symlinks", managed_directories = { "@npm": ["node_modules"], }, ) -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install") diff --git a/internal/e2e/node_loader_no_preserve_symlinks/node_loader_test.spec.js b/e2e/node_loader_no_preserve_symlinks/node_loader_test.spec.js similarity index 100% rename from internal/e2e/node_loader_no_preserve_symlinks/node_loader_test.spec.js rename to e2e/node_loader_no_preserve_symlinks/node_loader_test.spec.js diff --git a/internal/e2e/node_loader_preserve_symlinks/package.json b/e2e/node_loader_no_preserve_symlinks/package.json similarity index 87% rename from internal/e2e/node_loader_preserve_symlinks/package.json rename to e2e/node_loader_no_preserve_symlinks/package.json index 4ead28ddef..8ad04d32d3 100644 --- a/internal/e2e/node_loader_preserve_symlinks/package.json +++ b/e2e/node_loader_no_preserve_symlinks/package.json @@ -7,6 +7,6 @@ "tmp": "0.0.33" }, "scripts": { - "test": "bazel test //..." + "test": "bazel test ..." } } diff --git a/internal/e2e/node_loader_no_preserve_symlinks/yarn.lock b/e2e/node_loader_no_preserve_symlinks/yarn.lock similarity index 100% rename from internal/e2e/node_loader_no_preserve_symlinks/yarn.lock rename to e2e/node_loader_no_preserve_symlinks/yarn.lock diff --git a/internal/e2e/node_loader_preserve_symlinks/.bazelignore b/e2e/node_loader_preserve_symlinks/.bazelignore similarity index 100% rename from internal/e2e/node_loader_preserve_symlinks/.bazelignore rename to e2e/node_loader_preserve_symlinks/.bazelignore diff --git a/e2e/node_loader_preserve_symlinks/.bazelrc b/e2e/node_loader_preserve_symlinks/.bazelrc new file mode 100644 index 0000000000..3431057af6 --- /dev/null +++ b/e2e/node_loader_preserve_symlinks/.bazelrc @@ -0,0 +1 @@ +import %workspace%/../../common.bazelrc diff --git a/e2e/node_loader_preserve_symlinks/BUILD.bazel b/e2e/node_loader_preserve_symlinks/BUILD.bazel new file mode 100644 index 0000000000..4e5598d3e6 --- /dev/null +++ b/e2e/node_loader_preserve_symlinks/BUILD.bazel @@ -0,0 +1,26 @@ +load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test") + +package(default_visibility = ["//visibility:public"]) + +nodejs_test( + name = "test", + data = [ + "node_loader_test.spec.js", + ], + entry_point = ":node_loader_test.spec.js", + node_modules = "@npm//:node_modules", +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/e2e/node_loader_preserve_symlinks/WORKSPACE b/e2e/node_loader_preserve_symlinks/WORKSPACE new file mode 100644 index 0000000000..3ff7535ce7 --- /dev/null +++ b/e2e/node_loader_preserve_symlinks/WORKSPACE @@ -0,0 +1,22 @@ +workspace( + name = "e2e_node_loader_preserve_symlinks", + managed_directories = { + "@npm": ["node_modules"], + }, +) + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "build_bazel_rules_nodejs", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], +) + +load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") + +yarn_install( + name = "npm", + package_json = "//:package.json", + yarn_lock = "//:yarn.lock", +) diff --git a/internal/e2e/node_loader_preserve_symlinks/node_loader_test.spec.js b/e2e/node_loader_preserve_symlinks/node_loader_test.spec.js similarity index 100% rename from internal/e2e/node_loader_preserve_symlinks/node_loader_test.spec.js rename to e2e/node_loader_preserve_symlinks/node_loader_test.spec.js diff --git a/internal/e2e/node_loader_no_preserve_symlinks/package.json b/e2e/node_loader_preserve_symlinks/package.json similarity index 87% rename from internal/e2e/node_loader_no_preserve_symlinks/package.json rename to e2e/node_loader_preserve_symlinks/package.json index 4ead28ddef..8ad04d32d3 100644 --- a/internal/e2e/node_loader_no_preserve_symlinks/package.json +++ b/e2e/node_loader_preserve_symlinks/package.json @@ -7,6 +7,6 @@ "tmp": "0.0.33" }, "scripts": { - "test": "bazel test //..." + "test": "bazel test ..." } } diff --git a/internal/e2e/node_loader_preserve_symlinks/yarn.lock b/e2e/node_loader_preserve_symlinks/yarn.lock similarity index 100% rename from internal/e2e/node_loader_preserve_symlinks/yarn.lock rename to e2e/node_loader_preserve_symlinks/yarn.lock diff --git a/internal/e2e/packages/.bazelrc b/e2e/packages/.bazelrc similarity index 100% rename from internal/e2e/packages/.bazelrc rename to e2e/packages/.bazelrc diff --git a/e2e/packages/BUILD.bazel b/e2e/packages/BUILD.bazel new file mode 100644 index 0000000000..1ded6ef548 --- /dev/null +++ b/e2e/packages/BUILD.bazel @@ -0,0 +1,61 @@ +load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test") + +# This is like a "js_library", but there are no actions to run on JS files so a +# filegroup is semantically equivalent. +filegroup( + name = "test_version", + srcs = ["test_version.js"], +) + +VARIANTS = [ + "npm_install", + "yarn_install", +] + +[nodejs_test( + name = "version_" + variant + "_test", + data = [ + variant + ".spec.js", + ":test_version", + ], + entry_point = ":%s.spec.js" % variant, + node_modules = "@e2e_packages_" + variant + "//:node_modules", +) for variant in VARIANTS] + +nodejs_test( + name = "npm_determinism_test", + data = [ + "npm_determinism.spec.js", + "@e2e_packages_npm_install//:node_modules/jsesc/package.json", + ], + entry_point = ":npm_determinism.spec.js", + node_modules = "@e2e_packages_npm_install_duplicate_for_determinism_testing//:node_modules", + # TODO(gregmagolan): fix this test on windows + tags = ["fix-windows"], +) + +nodejs_test( + name = "yarn_determinism_test", + data = [ + "yarn_determinism.spec.js", + "@e2e_packages_yarn_install//:node_modules/jsesc/package.json", + ], + entry_point = ":yarn_determinism.spec.js", + node_modules = "@e2e_packages_yarn_install_duplicate_for_determinism_testing//:node_modules", + # TODO(gregmagolan): fix this test on windows + tags = ["fix-windows"], +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/e2e/packages/WORKSPACE b/e2e/packages/WORKSPACE new file mode 100644 index 0000000000..f33663abcb --- /dev/null +++ b/e2e/packages/WORKSPACE @@ -0,0 +1,20 @@ +workspace(name = "e2e_packages") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "build_bazel_rules_nodejs", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], +) + +load("@build_bazel_rules_nodejs//:defs.bzl", "check_rules_nodejs_version", "node_repositories") + +# Test that check_rules_nodejs_version works as expected +check_rules_nodejs_version(minimum_version_string = "0.11.2") + +node_repositories() + +load(":setup_workspace.bzl", "e2e_packages_setup_workspace") + +e2e_packages_setup_workspace() diff --git a/internal/e2e/packages/npm1/package-lock.json b/e2e/packages/npm1/package-lock.json similarity index 100% rename from internal/e2e/packages/npm1/package-lock.json rename to e2e/packages/npm1/package-lock.json diff --git a/internal/e2e/packages/npm1/package.json b/e2e/packages/npm1/package.json similarity index 100% rename from internal/e2e/packages/npm1/package.json rename to e2e/packages/npm1/package.json diff --git a/internal/e2e/packages/npm2/package-lock.json b/e2e/packages/npm2/package-lock.json similarity index 100% rename from internal/e2e/packages/npm2/package-lock.json rename to e2e/packages/npm2/package-lock.json diff --git a/internal/e2e/packages/npm2/package.json b/e2e/packages/npm2/package.json similarity index 100% rename from internal/e2e/packages/npm2/package.json rename to e2e/packages/npm2/package.json diff --git a/internal/e2e/packages/npm_determinism.spec.js b/e2e/packages/npm_determinism.spec.js similarity index 84% rename from internal/e2e/packages/npm_determinism.spec.js rename to e2e/packages/npm_determinism.spec.js index 7b35c6363a..e7504730d6 100644 --- a/internal/e2e/packages/npm_determinism.spec.js +++ b/e2e/packages/npm_determinism.spec.js @@ -5,8 +5,7 @@ const packageJsonPath = require.resolve('jsesc').replace('jsesc.js', 'package.js const packageJson = JSON.parse(fs.readFileSync(packageJsonPath)); const packageJsonPath2 = packageJsonPath.replace( - '/internal_e2e_packages_npm_install_duplicate_for_determinism_testing/', - '/internal_e2e_packages_npm_install/'); + '/e2e_packages_npm_install_duplicate_for_determinism_testing/', '/e2e_packages_npm_install/'); const packageJson2 = JSON.parse(fs.readFileSync(packageJsonPath2)); diff --git a/internal/e2e/packages/npm_install.spec.js b/e2e/packages/npm_install.spec.js similarity index 100% rename from internal/e2e/packages/npm_install.spec.js rename to e2e/packages/npm_install.spec.js diff --git a/internal/e2e/packages/npm_no_lockfile.spec.js b/e2e/packages/npm_no_lockfile.spec.js similarity index 100% rename from internal/e2e/packages/npm_no_lockfile.spec.js rename to e2e/packages/npm_no_lockfile.spec.js diff --git a/internal/e2e/packages/package.json b/e2e/packages/package.json similarity index 68% rename from internal/e2e/packages/package.json rename to e2e/packages/package.json index 710b1095c6..ec22042a73 100644 --- a/internal/e2e/packages/package.json +++ b/e2e/packages/package.json @@ -1,6 +1,6 @@ { "scripts": { "postinstall": "node ./postinstall.js", - "test": "bazel test //..." + "test": "bazel test ..." } } diff --git a/internal/e2e/packages/postinstall.js b/e2e/packages/postinstall.js similarity index 100% rename from internal/e2e/packages/postinstall.js rename to e2e/packages/postinstall.js diff --git a/e2e/packages/setup_workspace.bzl b/e2e/packages/setup_workspace.bzl new file mode 100644 index 0000000000..2359ae82c3 --- /dev/null +++ b/e2e/packages/setup_workspace.bzl @@ -0,0 +1,55 @@ +# 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. + +"""Helper function to setup @e2e_packages workspace. +""" + +load("@build_bazel_rules_nodejs//:defs.bzl", "npm_install", "yarn_install") + +def e2e_packages_setup_workspace(): + """Node repositories for @e2e_packagess + """ + npm_install( + name = "e2e_packages_npm_install", + package_json = "@e2e_packages//:npm1/package.json", + package_lock_json = "@e2e_packages//:npm1/package-lock.json", + data = ["@e2e_packages//:postinstall.js"], + symlink_node_modules = False, + # Just here as a smoke test for this attribute + prod_only = True, + ) + + npm_install( + name = "e2e_packages_npm_install_duplicate_for_determinism_testing", + package_json = "@e2e_packages//:npm2/package.json", + package_lock_json = "@e2e_packages//:npm2/package-lock.json", + data = ["@e2e_packages//:postinstall.js"], + symlink_node_modules = False, + ) + + yarn_install( + name = "e2e_packages_yarn_install", + package_json = "@e2e_packages//:yarn1/package.json", + yarn_lock = "@e2e_packages//:yarn1/yarn.lock", + data = ["@e2e_packages//:postinstall.js"], + symlink_node_modules = False, + ) + + yarn_install( + name = "e2e_packages_yarn_install_duplicate_for_determinism_testing", + package_json = "@e2e_packages//:yarn2/package.json", + yarn_lock = "@e2e_packages//:yarn2/yarn.lock", + data = ["@e2e_packages//:postinstall.js"], + symlink_node_modules = False, + ) diff --git a/internal/e2e/packages/test_version.js b/e2e/packages/test_version.js similarity index 100% rename from internal/e2e/packages/test_version.js rename to e2e/packages/test_version.js diff --git a/internal/e2e/packages/yarn1/package.json b/e2e/packages/yarn1/package.json similarity index 100% rename from internal/e2e/packages/yarn1/package.json rename to e2e/packages/yarn1/package.json diff --git a/internal/e2e/packages/yarn1/yarn.lock b/e2e/packages/yarn1/yarn.lock similarity index 100% rename from internal/e2e/packages/yarn1/yarn.lock rename to e2e/packages/yarn1/yarn.lock diff --git a/internal/e2e/packages/yarn2/package.json b/e2e/packages/yarn2/package.json similarity index 100% rename from internal/e2e/packages/yarn2/package.json rename to e2e/packages/yarn2/package.json diff --git a/internal/e2e/packages/yarn2/yarn.lock b/e2e/packages/yarn2/yarn.lock similarity index 100% rename from internal/e2e/packages/yarn2/yarn.lock rename to e2e/packages/yarn2/yarn.lock diff --git a/internal/e2e/packages/yarn_determinism.spec.js b/e2e/packages/yarn_determinism.spec.js similarity index 84% rename from internal/e2e/packages/yarn_determinism.spec.js rename to e2e/packages/yarn_determinism.spec.js index a754000b5e..c2b6814dab 100644 --- a/internal/e2e/packages/yarn_determinism.spec.js +++ b/e2e/packages/yarn_determinism.spec.js @@ -5,8 +5,7 @@ const packageJsonPath = require.resolve('jsesc').replace('jsesc.js', 'package.js const packageJson = JSON.parse(fs.readFileSync(packageJsonPath)); const packageJsonPath2 = packageJsonPath.replace( - '/internal_e2e_packages_yarn_install_duplicate_for_determinism_testing/', - '/internal_e2e_packages_yarn_install/'); + '/e2e_packages_yarn_install_duplicate_for_determinism_testing/', '/e2e_packages_yarn_install/'); const packageJson2 = JSON.parse(fs.readFileSync(packageJsonPath2)); if (packageJsonPath === packageJsonPath2) { diff --git a/internal/e2e/packages/yarn_install.spec.js b/e2e/packages/yarn_install.spec.js similarity index 100% rename from internal/e2e/packages/yarn_install.spec.js rename to e2e/packages/yarn_install.spec.js diff --git a/e2e/symlinked_node_modules_npm/WORKSPACE b/e2e/symlinked_node_modules_npm/WORKSPACE index a04b9e14a4..472a82576e 100644 --- a/e2e/symlinked_node_modules_npm/WORKSPACE +++ b/e2e/symlinked_node_modules_npm/WORKSPACE @@ -11,6 +11,8 @@ local_repository( path = "../..", ) +# rules_nodejs_dev_dependencies() required since we're using local_repository for +# build_bazel_rules_nodejs above. load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") rules_nodejs_dev_dependencies() diff --git a/e2e/symlinked_node_modules_yarn/WORKSPACE b/e2e/symlinked_node_modules_yarn/WORKSPACE index 4c0d6ad543..72d286e30d 100644 --- a/e2e/symlinked_node_modules_yarn/WORKSPACE +++ b/e2e/symlinked_node_modules_yarn/WORKSPACE @@ -11,6 +11,8 @@ local_repository( path = "../..", ) +# rules_nodejs_dev_dependencies() required since we're using local_repository for +# build_bazel_rules_nodejs above. load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") rules_nodejs_dev_dependencies() diff --git a/e2e/ts_auto_deps/WORKSPACE b/e2e/ts_auto_deps/WORKSPACE index 895dbd2cc0..597c1a0d97 100644 --- a/e2e/ts_auto_deps/WORKSPACE +++ b/e2e/ts_auto_deps/WORKSPACE @@ -25,6 +25,8 @@ local_repository( path = "../..", ) +# rules_nodejs_dev_dependencies() required since we're using local_repository for +# build_bazel_rules_nodejs above. load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") rules_nodejs_dev_dependencies() diff --git a/e2e/ts_devserver/app_e2e-spec.ts b/e2e/ts_devserver/app_e2e-spec.ts index c5fb09d29c..079bf48d37 100644 --- a/e2e/ts_devserver/app_e2e-spec.ts +++ b/e2e/ts_devserver/app_e2e-spec.ts @@ -3,10 +3,7 @@ import {browser, by, element, ExpectedConditions} from 'protractor'; // This test uses Protractor without Angular, so disable Angular features browser.waitForAngularEnabled(false); -// Since we don't have a protractor bazel rule yet, the test is brought up in -// parallel with building the service under test. So the timeout must include -// compiling the application as well as starting the server. -const timeoutMs = 90 * 1000; +const timeoutMs = 10 * 1000; describe('app', () => { beforeAll(() => { diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel new file mode 100644 index 0000000000..09306a1af5 --- /dev/null +++ b/examples/BUILD.bazel @@ -0,0 +1,230 @@ +# 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. + +load("@build_bazel_rules_nodejs//internal/bazel_integration_test:bazel_integration_test.bzl", "bazel_integration_test") +load("@build_bazel_rules_nodejs//packages:index.bzl", "NPM_PACKAGES") + +# Mappings of integration tests workspaces to their required npm packages +# This mapping optimizes development so when making changes to files under packages +# only affected examples tests are run. +EXAMPLES_TESTS = { + "examples_app": { + "//packages/hide-bazel-files:npm_package": "@bazel/hide-bazel-files", + "//packages/protractor:npm_package": "@bazel/protractor", + "//packages/typescript:npm_package": "@bazel/typescript", + }, + "examples_parcel": { + "//packages/jasmine:npm_package": "@bazel/jasmine", + }, + "examples_web_testing": { + "//packages/karma:npm_package": "@bazel/karma", + "//packages/typescript:npm_package": "@bazel/typescript", + }, + "examples_webapp": { + "//packages/protractor:npm_package": "@bazel/protractor", + }, +} + +[bazel_integration_test( + name = wksp_name, + # some bazelrc imports are outside of the nested workspace so + # the test runner will handle these as special cases + bazelrc_imports = { + "//:common.bazelrc": "import %workspace%/../../common.bazelrc", + }, + check_npm_packages = NPM_PACKAGES, + # package.json will be updated with `file:` links to the absolute paths + # of the generated npm packages in runfiles + npm_packages = EXAMPLES_TESTS[wksp_name], + # replace the following repositories with the generated archives + repositories = { + "//:release": "build_bazel_rules_nodejs", + }, + tags = [ + "examples", + # exclusive keyword will force the test to be run in the "exclusive" mode, + # ensuring that no other tests are running at the same time. Such tests + # will be executed in serial fashion after all build activity and non-exclusive + # tests have been completed. Remote execution is disabled for such tests + # because Bazel doesn't have control over what's running on a remote machine. + "exclusive", + ], + workspace_files = "@%s//:all_files" % wksp_name, +) for wksp_name in EXAMPLES_TESTS] + +bazel_integration_test( + name = "examples_nestjs", + bazel_commands = [ + "build ...", + # Test cross-platform build + "build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //src:docker", + ], + # some bazelrc imports are outside of the nested workspace so + # the test runner will handle these as special cases + bazelrc_imports = { + "//:common.bazelrc": "import %workspace%/../../common.bazelrc", + }, + check_npm_packages = NPM_PACKAGES, + # package.json will be updated with `file:` links to the absolute paths + # of the generated npm packages in runfiles + npm_packages = { + "//packages/typescript:npm_package": "@bazel/typescript", + }, + # replace the following repositories with the generated archives + repositories = { + "//:release": "build_bazel_rules_nodejs", + }, + tags = [ + # Breaks on Windows with `rules_docker requires a python interpreter installed. Please set + # BAZEL_PYTHON, or put it on your path.` + "fix-windows", + "examples", + # exclusive keyword will force the test to be run in the "exclusive" mode, + # ensuring that no other tests are running at the same time. Such tests + # will be executed in serial fashion after all build activity and non-exclusive + # tests have been completed. Remote execution is disabled for such tests + # because Bazel doesn't have control over what's running on a remote machine. + "exclusive", + ], + workspace_files = "@examples_nestjs//:all_files", +) + +bazel_integration_test( + name = "examples_protocol_buffers", + # some bazelrc imports are outside of the nested workspace so + # the test runner will handle these as special cases + bazelrc_imports = { + "//:common.bazelrc": "import %workspace%/../../common.bazelrc", + }, + check_npm_packages = NPM_PACKAGES, + # package.json will be updated with `file:` links to the absolute paths + # of the generated npm packages in runfiles + npm_packages = { + "//packages/hide-bazel-files:npm_package": "@bazel/hide-bazel-files", + "//packages/karma:npm_package": "@bazel/karma", + "//packages/protractor:npm_package": "@bazel/protractor", + "//packages/typescript:npm_package": "@bazel/typescript", + }, + # replace the following repositories with the generated archives + repositories = { + "//:release": "build_bazel_rules_nodejs", + }, + tags = [ + # Runs out of memory on bazelci windows + # TODO(gregmagolan): fix on bazelci windows + "no-bazelci-windows", + "examples", + # exclusive keyword will force the test to be run in the "exclusive" mode, + # ensuring that no other tests are running at the same time. Such tests + # will be executed in serial fashion after all build activity and non-exclusive + # tests have been completed. Remote execution is disabled for such tests + # because Bazel doesn't have control over what's running on a remote machine. + "exclusive", + ], + workspace_files = "@examples_protocol_buffers//:all_files", +) + +bazel_integration_test( + name = "examples_user_managed_deps", + # This test requires calling `bazel run @nodejs//:yarn` before `bazel test ...` + bazel_commands = [ + "run @nodejs//:yarn", + "test ...", + ], + # some bazelrc imports are outside of the nested workspace so + # the test runner will handle these as special cases + bazelrc_imports = { + "//:common.bazelrc": "import %workspace%/../../common.bazelrc", + }, + check_npm_packages = NPM_PACKAGES, + # replace the following repositories with the generated archives + repositories = { + "//:release": "build_bazel_rules_nodejs", + "@npm_bazel_jasmine//:release": "npm_bazel_jasmine", + }, + tags = [ + "examples", + # exclusive keyword will force the test to be run in the "exclusive" mode, + # ensuring that no other tests are running at the same time. Such tests + # will be executed in serial fashion after all build activity and non-exclusive + # tests have been completed. Remote execution is disabled for such tests + # because Bazel doesn't have control over what's running on a remote machine. + "exclusive", + ], + workspace_files = "@examples_user_managed_deps//:all_files", +) + +bazel_integration_test( + name = "examples_vendored_node", + # some bazelrc imports are outside of the nested workspace so + # the test runner will handle these as special cases + bazelrc_imports = { + "//:common.bazelrc": "import %workspace%/../../common.bazelrc", + }, + check_npm_packages = NPM_PACKAGES, + # package.json will be updated with `file:` links to the absolute paths + # of the generated npm packages in runfiles + npm_packages = { + "//packages/jasmine:npm_package": "@bazel/jasmine", + }, + # replace the following repositories with the generated archives + repositories = { + "//:release": "build_bazel_rules_nodejs", + }, + tags = [ + # This example only works on linux as it downloads the linux node distribution + # TODO(gregmagolan): make node_repositories acccept different archives for different platforms + "manual", + "examples", + # exclusive keyword will force the test to be run in the "exclusive" mode, + # ensuring that no other tests are running at the same time. Such tests + # will be executed in serial fashion after all build activity and non-exclusive + # tests have been completed. Remote execution is disabled for such tests + # because Bazel doesn't have control over what's running on a remote machine. + "exclusive", + ], + workspace_files = "@examples_vendored_node//:all_files", +) + +bazel_integration_test( + name = "examples_vendored_node_and_yarn", + # some bazelrc imports are outside of the nested workspace so + # the test runner will handle these as special cases + bazelrc_imports = { + "//:common.bazelrc": "import %workspace%/../../common.bazelrc", + }, + check_npm_packages = NPM_PACKAGES, + # package.json will be updated with `file:` links to the absolute paths + # of the generated npm packages in runfiles + npm_packages = { + "//packages/jasmine:npm_package": "@bazel/jasmine", + }, + # replace the following repositories with the generated archives + repositories = { + "//:release": "build_bazel_rules_nodejs", + }, + tags = [ + # This example only works on linux as it downloads the linux node distribution + # TODO(gregmagolan): make node_repositories acccept different archives for different platforms + "manual", + "examples", + # exclusive keyword will force the test to be run in the "exclusive" mode, + # ensuring that no other tests are running at the same time. Such tests + # will be executed in serial fashion after all build activity and non-exclusive + # tests have been completed. Remote execution is disabled for such tests + # because Bazel doesn't have control over what's running on a remote machine. + "exclusive", + ], + workspace_files = "@examples_vendored_node//:all_files", +) diff --git a/examples/app/BUILD.bazel b/examples/app/BUILD.bazel index b91810de00..b877d4a147 100644 --- a/examples/app/BUILD.bazel +++ b/examples/app/BUILD.bazel @@ -59,16 +59,56 @@ ts_library( ], ) +# BazelCI docker images are missing shares libs to run a subset browser tests: +# mac: firefox does not work, chrome works +# ubuntu: firefox and chrome do not work --- there are 0 tests to run +# windows: firefox works, chrome does not work +# TODO(gregmagolan): support firefox in protractor rule protractor_web_test_suite( name = "prodserver_test", on_prepare = ":protractor.on-prepare.js", server = "//:prodserver", + tags = [ + "no-bazelci-ubuntu", + "no-bazelci-windows", + ], deps = [":e2e"], ) +# BazelCI docker images are missing shares libs to run a subset browser tests: +# mac: firefox does not work, chrome works +# ubuntu: firefox and chrome do not work --- there are 0 tests to run +# windows: firefox works, chrome does not work +# TODO(gregmagolan): support firefox in protractor rule protractor_web_test_suite( name = "devserver_test", on_prepare = ":protractor.on-prepare.js", server = "//:devserver", + tags = [ + "no-bazelci-ubuntu", + "no-bazelci-windows", + ], deps = [":e2e"], ) + +# Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test +sh_test( + name = "dummy_test", + srcs = ["dummy_test.sh"], +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ) + [ + "//test:all_files", + ], + visibility = ["//visibility:public"], +) diff --git a/examples/app/WORKSPACE b/examples/app/WORKSPACE index feecb5ddb4..1667821a7d 100644 --- a/examples/app/WORKSPACE +++ b/examples/app/WORKSPACE @@ -17,20 +17,16 @@ workspace( managed_directories = {"@npm": ["node_modules"]}, ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") -# This runs yarn install, then our generate_build_file.js to create BUILD files -# inside the resulting node_modules directory. -# The name "npm" here means the resulting modules are referenced like -# @npm//jasmine yarn_install( name = "npm", package_json = "//:package.json", diff --git a/examples/app/dummy_test.sh b/examples/app/dummy_test.sh new file mode 100755 index 0000000000..ea29726125 --- /dev/null +++ b/examples/app/dummy_test.sh @@ -0,0 +1,2 @@ +echo "Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test" +exit 0 \ No newline at end of file diff --git a/examples/app/package.json b/examples/app/package.json index 0ccdd5d7c2..970d65bb6a 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -1,8 +1,8 @@ { "devDependencies": { - "@bazel/hide-bazel-files": "file:../../release/npm_bazel_hide-bazel-files", - "@bazel/protractor": "file:../../release/npm_bazel_protractor", - "@bazel/typescript": "file:../../release/npm_bazel_typescript", + "@bazel/hide-bazel-files": "latest", + "@bazel/protractor": "latest", + "@bazel/typescript": "latest", "@types/jasmine": "3.3.15", "typescript": "2.7.x" }, diff --git a/examples/app/test/BUILD.bazel b/examples/app/test/BUILD.bazel index 6e2e1d7924..87a649b4be 100644 --- a/examples/app/test/BUILD.bazel +++ b/examples/app/test/BUILD.bazel @@ -5,3 +5,10 @@ genrule( outs = [":MANIFEST"], cmd = "cp $< $@", ) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob(["**/*"]), + visibility = ["//visibility:public"], +) diff --git a/examples/app/yarn.lock b/examples/app/yarn.lock index d177e1fd18..c1ac6aacfd 100644 --- a/examples/app/yarn.lock +++ b/examples/app/yarn.lock @@ -2,15 +2,15 @@ # yarn lockfile v1 -"@bazel/hide-bazel-files@file:../../release/npm_bazel_hide-bazel-files": +"@bazel/hide-bazel-files@latest": version "1.2.3" -"@bazel/protractor@file:../../release/npm_bazel_protractor": +"@bazel/protractor@latest": version "1.2.3" dependencies: protractor "^5.4.2" -"@bazel/typescript@file:../../release/npm_bazel_typescript": +"@bazel/typescript@latest": version "1.2.3" dependencies: protobufjs "6.8.8" diff --git a/examples/nestjs/.bazelignore b/examples/nestjs/.bazelignore index b512c09d47..76add878f8 100644 --- a/examples/nestjs/.bazelignore +++ b/examples/nestjs/.bazelignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +dist \ No newline at end of file diff --git a/examples/nestjs/BUILD.bazel b/examples/nestjs/BUILD.bazel index 625c76ab93..45ffe67ab1 100644 --- a/examples/nestjs/BUILD.bazel +++ b/examples/nestjs/BUILD.bazel @@ -13,3 +13,19 @@ # limitations under the License. exports_files(["tsconfig.json"]) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ) + [ + "//src:all_files", + ], + visibility = ["//visibility:public"], +) diff --git a/examples/nestjs/WORKSPACE b/examples/nestjs/WORKSPACE index 856060fc6f..90d76290ca 100644 --- a/examples/nestjs/WORKSPACE +++ b/examples/nestjs/WORKSPACE @@ -17,12 +17,12 @@ workspace( managed_directories = {"@npm": ["node_modules"]}, ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") @@ -37,8 +37,6 @@ load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") install_bazel_dependencies() -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - http_archive( name = "io_bazel_rules_docker", sha256 = "e513c0ac6534810eb7a14bf025a0f159726753f97f74ab7863c650d26e01d677", diff --git a/examples/nestjs/package.json b/examples/nestjs/package.json index eca7ea9490..cf179e29fb 100644 --- a/examples/nestjs/package.json +++ b/examples/nestjs/package.json @@ -9,11 +9,11 @@ "rxjs": "6.5.2" }, "devDependencies": { - "@bazel/typescript": "file:../../release/npm_bazel_typescript", + "@bazel/typescript": "latest", "@types/node": "12.6.3", "typescript": "3.5.3" }, "scripts": { - "test": "bazel build ... && bazel build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 ..." + "test": "bazel build ... && bazel build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //src:docker" } } diff --git a/examples/nestjs/src/BUILD.bazel b/examples/nestjs/src/BUILD.bazel index 7ebdd65563..b3eb7f76be 100644 --- a/examples/nestjs/src/BUILD.bazel +++ b/examples/nestjs/src/BUILD.bazel @@ -56,3 +56,10 @@ nodejs_image( # and add test for docker image node_modules = "@npm//:node_modules", ) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob(["**/*"]), + visibility = ["//visibility:public"], +) diff --git a/examples/nestjs/yarn.lock b/examples/nestjs/yarn.lock index e2dd866b6a..ba6b859967 100644 --- a/examples/nestjs/yarn.lock +++ b/examples/nestjs/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@bazel/typescript@file:../../release/npm_bazel_typescript": +"@bazel/typescript@latest": version "1.2.3" dependencies: protobufjs "6.8.8" diff --git a/examples/parcel/BUILD.bazel b/examples/parcel/BUILD.bazel index f31031f801..5f3b16a9e1 100644 --- a/examples/parcel/BUILD.bazel +++ b/examples/parcel/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm_bazel_jasmine//:index.from_src.bzl", "jasmine_node_test") +load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test") load(":parcel.bzl", "parcel") parcel( @@ -14,3 +14,17 @@ jasmine_node_test( srcs = glob(["*.spec.js"]), deps = [":bundle"], ) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/parcel/README.md b/examples/parcel/README.md index 99de15d607..fd930b62bf 100644 --- a/examples/parcel/README.md +++ b/examples/parcel/README.md @@ -75,7 +75,7 @@ You can run the test: ```sh $ bazel test :all -//:test (cached) PASSED in 0.3s +//:test (cached) PASSED in 0.3s Executed 0 out of 1 test: 1 test passes. ``` diff --git a/examples/parcel/WORKSPACE b/examples/parcel/WORKSPACE index 06b23d1491..395ac565b8 100644 --- a/examples/parcel/WORKSPACE +++ b/examples/parcel/WORKSPACE @@ -17,18 +17,14 @@ workspace( managed_directories = {"@npm": ["node_modules"]}, ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) -load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") - -rules_nodejs_dev_dependencies() - load("@build_bazel_rules_nodejs//:defs.bzl", "npm_install") npm_install( @@ -37,10 +33,6 @@ npm_install( package_lock_json = "//:package-lock.json", ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( - name = "npm_bazel_jasmine", - path = "../../packages/jasmine/src", -) +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() diff --git a/examples/parcel/package.json b/examples/parcel/package.json index 6fd22fa447..960827353c 100644 --- a/examples/parcel/package.json +++ b/examples/parcel/package.json @@ -1,11 +1,12 @@ { "private": true, "devDependencies": { + "@bazel/jasmine": "latest", "jasmine": "3.4.0", "parcel-bundler": "1.12.3", "v8-coverage": "1.0.9" }, "scripts": { - "test": "bazel run @npm//parcel-bundler/bin:parcel -- --help && bazel test //..." + "test": "bazel run @npm//parcel-bundler/bin:parcel -- --help && bazel test ..." } } diff --git a/examples/program/README.md b/examples/program/README.md deleted file mode 100644 index f45c4a4867..0000000000 --- a/examples/program/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Program example - -This example shows how to write a simple Node.js program, with tests. - -In this example, we do the opposite of the `examples/bazel_managed_deps`. Instead, the dependencies -are managed explicitly by the user. While we typically prefer to have Bazel manage dependencies, this -option could be useful if you vendor the depnedencies into your repository, or use a custom package -manager that's not integrated with Bazel. - -`index.js` is the trivial program. You can run it like: - -```sh -$ bazel run :example 1 -Running program -increment 1 is 2 -``` - -`index.spec.js` is a test. Run it with: - -```sh -$ bazel test :test - -//:test PASSED in 0.2s - -Executed 1 out of 1 test: 1 test passes. -``` diff --git a/examples/protocol_buffers/BUILD.bazel b/examples/protocol_buffers/BUILD.bazel index e5f5f6a690..5340073480 100644 --- a/examples/protocol_buffers/BUILD.bazel +++ b/examples/protocol_buffers/BUILD.bazel @@ -1,9 +1,9 @@ load("@build_bazel_rules_nodejs//:defs.bzl", "http_server", "rollup_bundle") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") -load("@npm_bazel_karma//:index.bzl", "ts_web_test_suite") load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite") load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_devserver", "ts_library", "ts_proto_library") +load("//:defaults.bzl", "ts_web_test_suite") proto_library( name = "tire_proto", @@ -140,16 +140,54 @@ go_library( visibility = ["//visibility:public"], ) +# BazelCI docker images are missing shares libs to run a subset browser tests: +# mac: firefox does not work, chrome works +# ubuntu: firefox and chrome do not work --- there are 0 tests to run +# windows: firefox works, chrome does not work +# TODO(gregmagolan): support firefox in protractor rule protractor_web_test_suite( name = "prodserver_test", on_prepare = ":protractor.on-prepare.js", server = "//:prodserver", + tags = [ + "no-bazelci-ubuntu", + "no-bazelci-windows", + ], deps = [":e2e"], ) +# BazelCI docker images are missing shares libs to run a subset browser tests: +# mac: firefox does not work, chrome works +# ubuntu: firefox and chrome do not work --- there are 0 tests to run +# windows: firefox works, chrome does not work +# TODO(gregmagolan): support firefox in protractor rule protractor_web_test_suite( name = "devserver_test", on_prepare = ":protractor.on-prepare.js", server = "//:devserver", + tags = [ + "no-bazelci-ubuntu", + "no-bazelci-windows", + ], deps = [":e2e"], ) + +# Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test +sh_test( + name = "dummy_test", + srcs = ["dummy_test.sh"], +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/protocol_buffers/WORKSPACE b/examples/protocol_buffers/WORKSPACE index 3ec4c5453c..0f7a3f596e 100644 --- a/examples/protocol_buffers/WORKSPACE +++ b/examples/protocol_buffers/WORKSPACE @@ -19,9 +19,10 @@ workspace( load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -local_repository( +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) http_archive( @@ -39,10 +40,6 @@ http_archive( load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") -# This runs yarn install, then our generate_build_file.js to create BUILD files -# inside the resulting node_modules directory. -# The name "npm" here means the resulting modules are referenced like -# @npm//jasmine yarn_install( name = "npm", package_json = "//:package.json", diff --git a/examples/protocol_buffers/defaults.bzl b/examples/protocol_buffers/defaults.bzl new file mode 100644 index 0000000000..19923aa3f6 --- /dev/null +++ b/examples/protocol_buffers/defaults.bzl @@ -0,0 +1,48 @@ +# 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. + +"""Overrides for ts_web_test_suite to support bazelci testing +""" + +load("@npm_bazel_karma//:index.bzl", _ts_web_test_suite = "ts_web_test_suite") + +def ts_web_test_suite(name, browsers = [], tags = [], **kwargs): + _ts_web_test_suite( + name = name, + tags = tags + ["no-bazelci"], + browsers = browsers, + **kwargs + ) + + # BazelCI docker images are missing shares libs to run a subset browser tests: + # mac: firefox does not work, chrome works + # ubuntu: firefox and chrome do not work --- there are 0 tests to run + # windows: firefox works, chrome does not work + # TODO(gregmagolan): fix underlying issue in bazelci and remove this macro + _ts_web_test_suite( + name = "bazelci_chrome_" + name, + tags = tags + ["no-circleci", "no-bazelci-ubuntu", "no-bazelci-windows", "no-local"], + browsers = [ + "@io_bazel_rules_webtesting//browsers:chromium-local", + ], + **kwargs + ) + _ts_web_test_suite( + name = "bazelci_firefox_" + name, + tags = tags + ["no-circleci", "no-bazelci-ubuntu", "no-bazelci-mac", "no-local"], + browsers = [ + "@io_bazel_rules_webtesting//browsers:firefox-local", + ], + **kwargs + ) diff --git a/examples/protocol_buffers/dummy_test.sh b/examples/protocol_buffers/dummy_test.sh new file mode 100755 index 0000000000..ea29726125 --- /dev/null +++ b/examples/protocol_buffers/dummy_test.sh @@ -0,0 +1,2 @@ +echo "Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test" +exit 0 \ No newline at end of file diff --git a/examples/protocol_buffers/package.json b/examples/protocol_buffers/package.json index 6232f2d748..9784cc7c36 100644 --- a/examples/protocol_buffers/package.json +++ b/examples/protocol_buffers/package.json @@ -1,9 +1,9 @@ { "devDependencies": { - "@bazel/hide-bazel-files": "file:../../release/npm_bazel_hide-bazel-files", - "@bazel/karma": "file:../../release/npm_bazel_karma", - "@bazel/protractor": "file:../../release/npm_bazel_protractor", - "@bazel/typescript": "file:../../release/npm_bazel_typescript", + "@bazel/hide-bazel-files": "latest", + "@bazel/karma": "latest", + "@bazel/protractor": "latest", + "@bazel/typescript": "latest", "@types/jasmine": "2.8.2", "@types/long": "^4.0.0", "@types/node": "11.11.1", diff --git a/examples/protocol_buffers/yarn.lock b/examples/protocol_buffers/yarn.lock index 5866f54651..4b6a9620c9 100644 --- a/examples/protocol_buffers/yarn.lock +++ b/examples/protocol_buffers/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@bazel/hide-bazel-files@file:../../release/npm_bazel_hide-bazel-files": +"@bazel/hide-bazel-files@latest": version "1.2.3" -"@bazel/karma@file:../../release/npm_bazel_karma": +"@bazel/karma@latest": version "1.2.3" dependencies: jasmine-core "2.8.0" @@ -20,12 +20,12 @@ semver "5.6.0" tmp "0.0.33" -"@bazel/protractor@file:../../release/npm_bazel_protractor": +"@bazel/protractor@latest": version "1.2.3" dependencies: protractor "^5.4.2" -"@bazel/typescript@file:../../release/npm_bazel_typescript": +"@bazel/typescript@latest": version "1.2.3" dependencies: protobufjs "6.8.8" diff --git a/internal/e2e/node_loader_no_preserve_symlinks/.bazelignore b/examples/user_managed_deps/.bazelignore similarity index 100% rename from internal/e2e/node_loader_no_preserve_symlinks/.bazelignore rename to examples/user_managed_deps/.bazelignore diff --git a/examples/program/.bazelrc b/examples/user_managed_deps/.bazelrc similarity index 100% rename from examples/program/.bazelrc rename to examples/user_managed_deps/.bazelrc diff --git a/examples/program/BUILD.bazel b/examples/user_managed_deps/BUILD.bazel similarity index 82% rename from examples/program/BUILD.bazel rename to examples/user_managed_deps/BUILD.bazel index 16616af13a..e0580f7bc1 100644 --- a/examples/program/BUILD.bazel +++ b/examples/user_managed_deps/BUILD.bazel @@ -52,3 +52,17 @@ jasmine_node_test( ":program", ], ) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/user_managed_deps/README.md b/examples/user_managed_deps/README.md new file mode 100644 index 0000000000..2cbec77c54 --- /dev/null +++ b/examples/user_managed_deps/README.md @@ -0,0 +1,53 @@ +# User managed dependencies + +This example shows how to write a simple Node.js program using nodejs rules from source and user managed npm dependencies. + +## npm dependencies + +In this example, we do the opposite of the `e2e/bazel_managed_deps`. Instead, the dependencies +are managed explicitly by the user. While we typically prefer to have Bazel manage dependencies, this +option could be useful if you vendor the depnedencies into your repository, or use a custom package +manager that's not integrated with Bazel. + +`index.js` is the trivial program. You can run it like: + +```sh +$ bazel run :example 1 +Running program +increment 1 is 2 +``` + +`index.spec.js` is a test. Run it with: + +```sh +$ bazel test :test + +//:test PASSED in 0.2s + +Executed 1 out of 1 test: 1 test passes. +``` + +## WORKSPACE dependencies from source + +When using user managed npm dependencies it is not possible to use the npm to install +Bazel rules from npm packages such as `@bazel/jasmine` or `@bazel/typescript`. Instead, these +dependencies are specified in your WORKSPACE file from source. For example to use the jasmine +rules: + +``` +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +http_archive( + name = "npm_bazel_jasmine", + urls = ["https://github.com/bazelbuild/rules_nodejs/archive/0.35.0.tar.gz"], + strip_prefix = "rules_nodejs-0.35.0/packages/jasmine/src", + sha256 = "48be6c21d4ee7bf2a6c3dd35ac54f8ff430944b65ab7a43a9cd742f23c9a7279", +) +``` + +In most cases you will also need the `build_bazel_rules_nodejs` dev dependencies installed +to use the rules from source. + +``` +load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") +rules_nodejs_dev_dependencies() +``` diff --git a/examples/program/WORKSPACE b/examples/user_managed_deps/WORKSPACE similarity index 60% rename from examples/program/WORKSPACE rename to examples/user_managed_deps/WORKSPACE index cf405e2355..3d9734b799 100644 --- a/examples/program/WORKSPACE +++ b/examples/user_managed_deps/WORKSPACE @@ -1,11 +1,11 @@ -workspace(name = "examples_program") +workspace(name = "examples_user_managed_deps") -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") @@ -28,9 +28,7 @@ load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories") # or # bazel run @nodejs//:npm node_repositories( - node_version = "8.11.1", package_json = ["//:package.json"], - yarn_version = "1.5.1", ) # In your code, you'd fetch this repository with an `http_archive` call. @@ -40,3 +38,9 @@ local_repository( name = "npm_bazel_jasmine", path = "../../packages/jasmine/src", ) +# http_archive( +# name = "npm_bazel_jasmine", +# urls = ["https://github.com/bazelbuild/rules_nodejs/archive/0.35.0.tar.gz"], +# strip_prefix = "rules_nodejs-0.35.0/packages/jasmine/src", +# sha256 = "48be6c21d4ee7bf2a6c3dd35ac54f8ff430944b65ab7a43a9cd742f23c9a7279", +# ) diff --git a/examples/program/decrement.js b/examples/user_managed_deps/decrement.js similarity index 100% rename from examples/program/decrement.js rename to examples/user_managed_deps/decrement.js diff --git a/examples/program/index.js b/examples/user_managed_deps/index.js similarity index 100% rename from examples/program/index.js rename to examples/user_managed_deps/index.js diff --git a/examples/program/index.spec.js b/examples/user_managed_deps/index.spec.js similarity index 100% rename from examples/program/index.spec.js rename to examples/user_managed_deps/index.spec.js diff --git a/examples/program/package.json b/examples/user_managed_deps/package.json similarity index 86% rename from examples/program/package.json rename to examples/user_managed_deps/package.json index dfe66cb181..f3829e4872 100644 --- a/examples/program/package.json +++ b/examples/user_managed_deps/package.json @@ -6,6 +6,6 @@ }, "scripts": { "pretest": "bazel run @nodejs//:yarn", - "test": "bazel test //..." + "test": "bazel test ..." } } diff --git a/examples/program/yarn.lock b/examples/user_managed_deps/yarn.lock similarity index 100% rename from examples/program/yarn.lock rename to examples/user_managed_deps/yarn.lock diff --git a/examples/vendored_node/BUILD.bazel b/examples/vendored_node/BUILD.bazel index 680dd1bc2d..9697090c23 100644 --- a/examples/vendored_node/BUILD.bazel +++ b/examples/vendored_node/BUILD.bazel @@ -1,18 +1,20 @@ -load("@npm_bazel_jasmine//:index.from_src.bzl", "jasmine_node_test") - -exports_files(["node-v10.12.0-linux-x64/bin/node"]) +load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test") jasmine_node_test( - name = "yarn_test", + name = "test", srcs = glob(["*.spec.js"]), - jasmine_deps = [ - "@yarn//jasmine", - "@yarn//jasmine-core", - "@yarn//v8-coverage", - ], ) -jasmine_node_test( - name = "npm_test", - srcs = glob(["*.spec.js"]), +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], ) diff --git a/examples/vendored_node/WORKSPACE b/examples/vendored_node/WORKSPACE index 4dff403918..3b340ca10e 100644 --- a/examples/vendored_node/WORKSPACE +++ b/examples/vendored_node/WORKSPACE @@ -14,48 +14,42 @@ workspace( name = "examples_vendored_node", - managed_directories = { - "@npm": ["npm/node_modules"], - "@yarn": ["yarn/node_modules"], - }, + managed_directories = {"@npm": ["npm/node_modules"]}, ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) -load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies") - -rules_nodejs_dev_dependencies() +http_archive( + name = "vendored_node_10_12_0", + build_file_content = """exports_files(["node-v10.12.0-linux-x64/bin/node"])""", + sha256 = "4eba2e9a6db95745b769915d58e57df6ca6724ec1f023f76556fce30ceca2367", + urls = ["https://nodejs.org/dist/v10.12.0/node-v10.12.0-linux-x64.tar.xz"], +) -load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "npm_install", "yarn_install") +load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "npm_install") +# This example only works on linux as it downloads the linux node distribution +# TODO(gregmagolan): make node_repositories acccept different archives for different platforms node_repositories( node_version = "10.12.0", - vendored_node = "@examples_vendored_node//:node-v10.12.0-linux-x64", - vendored_yarn = "@examples_vendored_node//:yarn-v1.10.0", -) - -yarn_install( - name = "yarn", - package_json = "//:yarn/package.json", - yarn_lock = "//:yarn/yarn.lock", + vendored_node = "@vendored_node_10_12_0//:node-v10.12.0-linux-x64", ) npm_install( name = "npm", - package_json = "//:npm/package.json", - package_lock_json = "//:npm/package-lock.json", + data = [ + "@vendored_node_10_12_0//:node-v10.12.0-linux-x64/bin/node", + ], + package_json = "//:package.json", + package_lock_json = "//:package-lock.json", ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( - name = "npm_bazel_jasmine", - path = "../../packages/jasmine/src", -) +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() diff --git a/examples/vendored_node/npm/package-lock.json b/examples/vendored_node/npm/package-lock.json deleted file mode 100644 index b4978cb490..0000000000 --- a/examples/vendored_node/npm/package-lock.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "jasmine": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.2.0.tgz", - "integrity": "sha512-qv6TZ32r+slrQz8fbx2EhGbD9zlJo3NwPrpLK1nE8inILtZO9Fap52pyHk7mNTh4tG50a+1+tOiWVT3jO5I0Sg==", - "requires": { - "glob": "^7.0.6", - "jasmine-core": "~3.2.0" - } - }, - "jasmine-core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.2.1.tgz", - "integrity": "sha512-pa9tbBWgU0EE4SWgc85T4sa886ufuQdsgruQANhECYjwqgV4z7Vw/499aCaP8ZH79JDS4vhm8doDG9HO4+e4sA==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } -} diff --git a/examples/vendored_node/npm/package.json b/examples/vendored_node/npm/package.json deleted file mode 100644 index 9f5867fbfa..0000000000 --- a/examples/vendored_node/npm/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dependencies": { - "jasmine": "3.2.0", - "v8-coverage": "1.0.9" - } -} diff --git a/examples/vendored_node/package-lock.json b/examples/vendored_node/package-lock.json new file mode 100644 index 0000000000..0ce3be099a --- /dev/null +++ b/examples/vendored_node/package-lock.json @@ -0,0 +1,981 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@bazel/jasmine": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/@bazel/jasmine/-/jasmine-0.35.0.tgz", + "integrity": "sha512-TBCxjg0CW/C5+GLjyvP1CLPbw66W9HqVMrl0vS/eUyD9WeITID1wzkrjdcSm+FMjftnV/2634Yzj+Wl3nWocMg==", + "dev": true, + "requires": { + "jasmine": "~3.4.0", + "jasmine-core": "~3.4.0", + "v8-coverage": "1.0.9" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", + "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.2.tgz", + "integrity": "sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "jasmine": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.4.0.tgz", + "integrity": "sha512-sR9b4n+fnBFDEd7VS2el2DeHgKcPiMVn44rtKFumq9q7P/t8WrxsVIZPob4UDdgcDNCwyDqwxCt4k9TDRmjPoQ==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "jasmine-core": "~3.4.0" + } + }, + "jasmine-core": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", + "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", + "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "v8-coverage": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/v8-coverage/-/v8-coverage-1.0.9.tgz", + "integrity": "sha512-JolsCH1JDI2QULrxkAGZaovJPvg/Q0p20Uj0F5N8fPtYDtz38gNBRPQ/WVXlLLd3d8WHvKN96AfE4XFk4u0g2g==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "foreground-child": "^1.5.6", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-report": "^1.1.3", + "istanbul-reports": "^1.3.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.2.2", + "uuid": "^3.3.2", + "v8-to-istanbul": "1.2.0", + "yargs": "^11.0.0" + } + }, + "v8-to-istanbul": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-1.2.0.tgz", + "integrity": "sha512-rVSmjdEfJmOHN8GYCbg+XUhbzXZr7DzdaXIslB9DdcopGZEMsW5x5qIdxr/8DcW7msULHNnvs/xUY1TszvhKRw==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } +} diff --git a/examples/vendored_node/package.json b/examples/vendored_node/package.json index b9a4b6ca80..5236876734 100644 --- a/examples/vendored_node/package.json +++ b/examples/vendored_node/package.json @@ -1,7 +1,9 @@ { + "private": true, + "devDependencies": { + "@bazel/jasmine": "latest" + }, "scripts": { - "fetch_node": "curl -OLsS https://nodejs.org/dist/v10.12.0/node-v10.12.0-linux-x64.tar.xz && tar -xJf node-v10.12.0-linux-x64.tar.xz", - "fetch_yarn": "curl -OLsS https://github.com/yarnpkg/yarn/releases/download/v1.10.0/yarn-v1.10.0.tar.gz && tar -xzf yarn-v1.10.0.tar.gz", - "test": "yarn fetch_node && yarn fetch_yarn && bazel test //..." + "test": "bazel test ..." } } diff --git a/examples/vendored_node/yarn/package.json b/examples/vendored_node/yarn/package.json deleted file mode 100644 index 9f5867fbfa..0000000000 --- a/examples/vendored_node/yarn/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dependencies": { - "jasmine": "3.2.0", - "v8-coverage": "1.0.9" - } -} diff --git a/examples/vendored_node/yarn/yarn.lock b/examples/vendored_node/yarn/yarn.lock deleted file mode 100644 index 5e65f8308f..0000000000 --- a/examples/vendored_node/yarn/yarn.lock +++ /dev/null @@ -1,88 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -glob@^7.0.6: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -jasmine-core@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.2.1.tgz#8e4ff5b861603ee83343f2b49eee6a0ffe9650ce" - integrity sha512-pa9tbBWgU0EE4SWgc85T4sa886ufuQdsgruQANhECYjwqgV4z7Vw/499aCaP8ZH79JDS4vhm8doDG9HO4+e4sA== - -jasmine@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.2.0.tgz#b3a018454781805650e46578803d08e7cfdd7b3d" - integrity sha512-qv6TZ32r+slrQz8fbx2EhGbD9zlJo3NwPrpLK1nE8inILtZO9Fap52pyHk7mNTh4tG50a+1+tOiWVT3jO5I0Sg== - dependencies: - glob "^7.0.6" - jasmine-core "~3.2.0" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/examples/vendored_node_and_yarn/.bazelignore b/examples/vendored_node_and_yarn/.bazelignore new file mode 100644 index 0000000000..b512c09d47 --- /dev/null +++ b/examples/vendored_node_and_yarn/.bazelignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/examples/vendored_node_and_yarn/.bazelrc b/examples/vendored_node_and_yarn/.bazelrc new file mode 100644 index 0000000000..3431057af6 --- /dev/null +++ b/examples/vendored_node_and_yarn/.bazelrc @@ -0,0 +1 @@ +import %workspace%/../../common.bazelrc diff --git a/examples/vendored_node_and_yarn/BUILD.bazel b/examples/vendored_node_and_yarn/BUILD.bazel new file mode 100644 index 0000000000..9697090c23 --- /dev/null +++ b/examples/vendored_node_and_yarn/BUILD.bazel @@ -0,0 +1,20 @@ +load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test") + +jasmine_node_test( + name = "test", + srcs = glob(["*.spec.js"]), +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/vendored_node_and_yarn/README.md b/examples/vendored_node_and_yarn/README.md new file mode 100644 index 0000000000..5122a5d918 --- /dev/null +++ b/examples/vendored_node_and_yarn/README.md @@ -0,0 +1,5 @@ +We download https://nodejs.org/dist/v10.12.0/node-v10.12.0-linux-x64.tar.xz and +https://github.com/yarnpkg/yarn/releases/download/v1.10.0/yarn-v1.10.0.tar.gz for this +test (see package.json) so that the contents of these packages do not have to be checked in. + +In a real world scenario, the contents of these files can be checked into the repository. diff --git a/examples/vendored_node_and_yarn/WORKSPACE b/examples/vendored_node_and_yarn/WORKSPACE new file mode 100644 index 0000000000..c82e60f17f --- /dev/null +++ b/examples/vendored_node_and_yarn/WORKSPACE @@ -0,0 +1,63 @@ +# Copyright 2019 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 = "examples_vendored_node_and_yarn", + managed_directories = {"@npm": ["npm/node_modules"]}, +) + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "build_bazel_rules_nodejs", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], +) + +http_archive( + name = "vendored_node_10_12_0", + build_file_content = """exports_files(["node-v10.12.0-linux-x64/bin/node"])""", + # sha256 = "4eba2e9a6db95745b769915d58e57df6ca6724ec1f023f76556fce30ceca2367", + urls = ["https://nodejs.org/dist/v10.12.0/node-v10.12.0-linux-x64.tar.xz"], +) + +http_archive( + name = "vendored_yarn_1_10_0", + build_file_content = """exports_files(["vendored_yarn_1_10_0/yarn-v1.10.0/bin/yarn.js"])""", + urls = ["https://github.com/yarnpkg/yarn/releases/download/v1.10.0/yarn-v1.10.0.tar.gz"], +) + +load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install") + +# This example only works on linux as it downloads the linux node distribution +# TODO(gregmagolan): make node_repositories acccept different archives for different platforms +node_repositories( + node_version = "10.12.0", + vendored_node = "@vendored_node_10_12_0//:node-v10.12.0-linux-x64", + vendored_yarn = "@vendored_yarn_1_10_0//:yarn-v1.10.0", +) + +yarn_install( + name = "npm", + data = [ + "@vendored_node_10_12_0//:node-v10.12.0-linux-x64/bin/node", + "@vendored_yarn_1_10_0//:vendored_yarn_1_10_0/yarn-v1.10.0/bin/yarn.js", + ], + package_json = "//:package.json", + yarn_lock = "//:yarn.lock", +) + +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() diff --git a/examples/vendored_node_and_yarn/package.json b/examples/vendored_node_and_yarn/package.json new file mode 100644 index 0000000000..5236876734 --- /dev/null +++ b/examples/vendored_node_and_yarn/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "devDependencies": { + "@bazel/jasmine": "latest" + }, + "scripts": { + "test": "bazel test ..." + } +} diff --git a/examples/vendored_node_and_yarn/vendored.spec.js b/examples/vendored_node_and_yarn/vendored.spec.js new file mode 100644 index 0000000000..6942f476fe --- /dev/null +++ b/examples/vendored_node_and_yarn/vendored.spec.js @@ -0,0 +1,5 @@ +describe('vendored node', () => { + it('version should be 10.12.0', () => { + expect(process.version).toBe('v10.12.0'); + }); +}); diff --git a/examples/vendored_node_and_yarn/yarn.lock b/examples/vendored_node_and_yarn/yarn.lock new file mode 100644 index 0000000000..adc604eeb5 --- /dev/null +++ b/examples/vendored_node_and_yarn/yarn.lock @@ -0,0 +1,797 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@bazel/jasmine@latest": + version "0.35.0" + resolved "https://registry.yarnpkg.com/@bazel/jasmine/-/jasmine-0.35.0.tgz#1f55145b01761579f8a9f0b525762912ea832d42" + integrity sha512-TBCxjg0CW/C5+GLjyvP1CLPbw66W9HqVMrl0vS/eUyD9WeITID1wzkrjdcSm+FMjftnV/2634Yzj+Wl3nWocMg== + dependencies: + jasmine "~3.4.0" + jasmine-core "~3.4.0" + v8-coverage "1.0.9" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +cross-spawn@^4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +foreground-child@^1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= + dependencies: + cross-spawn "^4" + signal-exit "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" + integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== + +handlebars@^4.0.3: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +hosted-git-info@^2.1.4: + version "2.8.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.2.tgz#a35c3f355ac1249f1093c0c2a542ace8818c171a" + integrity sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w== + dependencies: + lru-cache "^5.1.1" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + +istanbul-lib-report@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-reports@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== + dependencies: + handlebars "^4.0.3" + +jasmine-core@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.4.0.tgz#2a74618e966026530c3518f03e9f845d26473ce3" + integrity sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg== + +jasmine@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.4.0.tgz#0fa68903ff0c9697459cd044b44f4dcef5ec8bdc" + integrity sha512-sR9b4n+fnBFDEd7VS2el2DeHgKcPiMVn44rtKFumq9q7P/t8WrxsVIZPob4UDdgcDNCwyDqwxCt4k9TDRmjPoQ== + dependencies: + glob "^7.1.3" + jasmine-core "~3.4.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5, path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve@^1.10.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +"semver@2 || 3 || 4 || 5": + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-wrap@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" + integrity sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg== + dependencies: + foreground-child "^1.5.6" + mkdirp "^0.5.0" + os-homedir "^1.0.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + which "^1.3.0" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +test-exclude@^5.2.2: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8-coverage@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/v8-coverage/-/v8-coverage-1.0.9.tgz#780889680c0fea0f587adf22e2b5f443b9434745" + integrity sha512-JolsCH1JDI2QULrxkAGZaovJPvg/Q0p20Uj0F5N8fPtYDtz38gNBRPQ/WVXlLLd3d8WHvKN96AfE4XFk4u0g2g== + dependencies: + debug "^3.1.0" + foreground-child "^1.5.6" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-report "^1.1.3" + istanbul-reports "^1.3.0" + mkdirp "^0.5.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + spawn-wrap "^1.4.2" + test-exclude "^5.2.2" + uuid "^3.3.2" + v8-to-istanbul "1.2.0" + yargs "^11.0.0" + +v8-to-istanbul@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-1.2.0.tgz#f6a22ffb08b2202aaba8c2be497d1d41fe8fb4b6" + integrity sha512-rVSmjdEfJmOHN8GYCbg+XUhbzXZr7DzdaXIslB9DdcopGZEMsW5x5qIdxr/8DcW7msULHNnvs/xUY1TszvhKRw== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" diff --git a/examples/web_testing/BUILD.bazel b/examples/web_testing/BUILD.bazel index ead7220ea2..b289472a80 100644 --- a/examples/web_testing/BUILD.bazel +++ b/examples/web_testing/BUILD.bazel @@ -1,5 +1,5 @@ -load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite", "ts_web_test_suite") load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_library") +load("//:defaults.bzl", "karma_web_test_suite", "ts_web_test_suite") ts_library( name = "lib", @@ -100,3 +100,23 @@ ts_web_test_suite( ":tests", ], ) + +# Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test +sh_test( + name = "dummy_test", + srcs = ["dummy_test.sh"], +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/web_testing/WORKSPACE b/examples/web_testing/WORKSPACE index db728fd9cc..b0e7e85bde 100644 --- a/examples/web_testing/WORKSPACE +++ b/examples/web_testing/WORKSPACE @@ -17,9 +17,12 @@ workspace( managed_directories = {"@npm": ["node_modules"]}, ) -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") diff --git a/examples/web_testing/defaults.bzl b/examples/web_testing/defaults.bzl new file mode 100644 index 0000000000..bf551cadd0 --- /dev/null +++ b/examples/web_testing/defaults.bzl @@ -0,0 +1,82 @@ +# 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. + +"""Overrides for karma_web_test_suite & ts_web_test_suite to support bazelci testing +""" + +load( + "@npm_bazel_karma//:index.bzl", + _karma_web_test_suite = "karma_web_test_suite", + _ts_web_test_suite = "ts_web_test_suite", +) + +def ts_web_test_suite(name, browsers = [], tags = [], **kwargs): + _ts_web_test_suite( + name = name, + tags = tags + ["no-bazelci"], + browsers = browsers, + **kwargs + ) + + # BazelCI docker images are missing shares libs to run a subset browser tests: + # mac: firefox does not work, chrome works + # ubuntu: firefox and chrome do not work --- there are 0 tests to run + # windows: firefox works, chrome does not work + # TODO(gregmagolan): fix underlying issue in bazelci and remove this macro + _ts_web_test_suite( + name = "bazelci_chrome_" + name, + tags = tags + ["no-circleci", "no-bazelci-ubuntu", "no-bazelci-windows", "no-local"], + browsers = [ + "@io_bazel_rules_webtesting//browsers:chromium-local", + ], + **kwargs + ) + _ts_web_test_suite( + name = "bazelci_firefox_" + name, + tags = tags + ["no-circleci", "no-bazelci-ubuntu", "no-bazelci-mac", "no-local"], + browsers = [ + "@io_bazel_rules_webtesting//browsers:firefox-local", + ], + **kwargs + ) + +def karma_web_test_suite(name, browsers = [], tags = [], **kwargs): + _karma_web_test_suite( + name = name, + tags = tags + ["no-bazelci"], + browsers = browsers, + **kwargs + ) + + # BazelCI docker images are missing shares libs to run a subset browser tests: + # mac: firefox does not work, chrome works + # ubuntu: firefox and chrome do not work --- there are 0 tests to run + # windows: firefox works, chrome does not work + # TODO(gregmagolan): fix underlying issue in bazelci and remove this macro + _karma_web_test_suite( + name = "bazelci_chrome_" + name, + tags = tags + ["no-circleci", "no-bazelci-ubuntu", "no-bazelci-windows", "no-local"], + browsers = [ + "@io_bazel_rules_webtesting//browsers:chromium-local", + ], + **kwargs + ) + _karma_web_test_suite( + name = "bazelci_firefox_" + name, + tags = tags + ["no-circleci", "no-bazelci-ubuntu", "no-bazelci-mac", "no-local"], + browsers = [ + "@io_bazel_rules_webtesting//browsers:firefox-local", + ], + **kwargs + ) diff --git a/examples/web_testing/dummy_test.sh b/examples/web_testing/dummy_test.sh new file mode 100755 index 0000000000..ea29726125 --- /dev/null +++ b/examples/web_testing/dummy_test.sh @@ -0,0 +1,2 @@ +echo "Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test" +exit 0 \ No newline at end of file diff --git a/examples/web_testing/package.json b/examples/web_testing/package.json index 10dd6394bd..cd594cfc0d 100644 --- a/examples/web_testing/package.json +++ b/examples/web_testing/package.json @@ -1,7 +1,7 @@ { "devDependencies": { - "@bazel/karma": "file:../../release/npm_bazel_karma", - "@bazel/typescript": "file:../../release/npm_bazel_typescript", + "@bazel/karma": "latest", + "@bazel/typescript": "latest", "@types/jasmine": "2.8.2", "@types/node": "11.11.1", "karma-json-result-reporter": "1.0.0", diff --git a/examples/web_testing/yarn.lock b/examples/web_testing/yarn.lock index 0d3c783e48..c9080a6078 100644 --- a/examples/web_testing/yarn.lock +++ b/examples/web_testing/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@bazel/karma@file:../../release/npm_bazel_karma": +"@bazel/karma@latest": version "1.2.3" dependencies: jasmine-core "2.8.0" @@ -17,7 +17,7 @@ semver "5.6.0" tmp "0.0.33" -"@bazel/typescript@file:../../release/npm_bazel_typescript": +"@bazel/typescript@latest": version "1.2.3" dependencies: protobufjs "6.8.8" diff --git a/examples/webapp/BUILD.bazel b/examples/webapp/BUILD.bazel index 24d6919d0b..ee144dd58e 100644 --- a/examples/webapp/BUILD.bazel +++ b/examples/webapp/BUILD.bazel @@ -2,6 +2,7 @@ load("@build_bazel_rules_nodejs//:defs.bzl", "http_server", "rollup_bundle") # TODO(alexeagle): promote web_package rule to the public API load("@build_bazel_rules_nodejs//internal/web_package:web_package.bzl", "web_package") +load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite") rollup_bundle( name = "bundle", @@ -18,7 +19,10 @@ web_package( ":bundle.min.es2015.js", "styles.css", ], - data = ["favicon.png"], + data = [ + "favicon.png", + ":bundle", + ], index_html = "index.html", ) @@ -27,3 +31,39 @@ http_server( data = [":package"], templated_args = ["package"], ) + +# BazelCI docker images are missing shares libs to run a subset browser tests: +# mac: firefox does not work, chrome works +# ubuntu: firefox and chrome do not work --- there are 0 tests to run +# windows: firefox works, chrome does not work +# TODO(gregmagolan): support firefox in protractor rule +protractor_web_test_suite( + name = "server_test", + srcs = ["app.spec.js"], + on_prepare = ":protractor.on-prepare.js", + server = ":server", + tags = [ + "no-bazelci-ubuntu", + "no-bazelci-windows", + ], +) + +# Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test +sh_test( + name = "dummy_test", + srcs = ["dummy_test.sh"], +) + +# For testing from the root workspace of this repository with bazel_integration_test. +filegroup( + name = "all_files", + srcs = glob( + include = ["**/*"], + exclude = [ + "bazel-out/**/*", + "dist/**/*", + "node_modules/**/*", + ], + ), + visibility = ["//visibility:public"], +) diff --git a/examples/webapp/WORKSPACE b/examples/webapp/WORKSPACE index 27b51f1ccc..c6c1e80c64 100644 --- a/examples/webapp/WORKSPACE +++ b/examples/webapp/WORKSPACE @@ -17,12 +17,12 @@ workspace( managed_directories = {"@npm": ["node_modules"]}, ) -# In your code, you'd fetch this repository with an `http_archive` call. -# We do this local repository only because this example lives in the same -# repository with the rules_nodejs code and we want to test them together. -local_repository( +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( name = "build_bazel_rules_nodejs", - path = "../../release/build_bazel_rules_nodejs/release", + sha256 = "6625259f9f77ef90d795d20df1d0385d9b3ce63b6619325f702b6358abb4ab33", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.35.0/rules_nodejs-0.35.0.tar.gz"], ) load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") @@ -32,3 +32,22 @@ yarn_install( package_json = "//:package.json", yarn_lock = "//:yarn.lock", ) + +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() + +load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies") + +npm_bazel_protractor_dependencies() + +# Setup the rules_webtesting toolchain +load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories") + +web_test_repositories() + +# Temporary work-around for https://github.com/angular/angular/issues/28681 +# TODO(gregmagolan): go back to @io_bazel_rules_webtesting browser_repositories +load("@npm_bazel_protractor//:browser_repositories.bzl", "browser_repositories") + +browser_repositories() diff --git a/examples/webapp/app.spec.js b/examples/webapp/app.spec.js new file mode 100644 index 0000000000..e559e22842 --- /dev/null +++ b/examples/webapp/app.spec.js @@ -0,0 +1,20 @@ +const {browser, by, element, ExpectedConditions} = require('protractor'); + +// This test uses Protractor without Angular, so disable Angular features +browser.waitForAngularEnabled(false); + +const timeoutMs = 10 * 1000; + +describe('app', () => { + beforeAll(() => { + browser.get(''); + // Don't run any specs until we see a
on the page. + browser.wait(ExpectedConditions.presenceOf(element(by.css('div.ts1'))), timeoutMs); + }, timeoutMs); + + it('should display: Hello Webapp', (done) => { + const div = element(by.css('div.ts1')); + div.getText().then(t => expect(t).toEqual(`Hello Webapp`)); + done(); + }); +}); diff --git a/examples/webapp/dummy_test.sh b/examples/webapp/dummy_test.sh new file mode 100755 index 0000000000..ea29726125 --- /dev/null +++ b/examples/webapp/dummy_test.sh @@ -0,0 +1,2 @@ +echo "Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test" +exit 0 \ No newline at end of file diff --git a/examples/webapp/index.js b/examples/webapp/index.js index ae94a5f9f9..7f4ae3f1af 100644 --- a/examples/webapp/index.js +++ b/examples/webapp/index.js @@ -1,4 +1,5 @@ import {hello} from './strings.en'; const el = document.createElement('div'); el.innerText = hello; +el.className = 'ts1'; document.body.appendChild(el); diff --git a/examples/webapp/package.json b/examples/webapp/package.json index ada87a9b9b..c1e4a42740 100644 --- a/examples/webapp/package.json +++ b/examples/webapp/package.json @@ -1,7 +1,9 @@ { "private": true, - "devDependencies": {}, + "devDependencies": { + "@bazel/protractor": "latest" + }, "scripts": { - "test": "bazel build :all" + "test": "bazel test ..." } } diff --git a/examples/webapp/protractor.on-prepare.js b/examples/webapp/protractor.on-prepare.js new file mode 100644 index 0000000000..1e11165b42 --- /dev/null +++ b/examples/webapp/protractor.on-prepare.js @@ -0,0 +1,20 @@ +// The function exported from this file is used by the protractor_web_test_suite. +// It is passed to the `onPrepare` configuration setting in protractor and executed +// before running tests. +// +// If the function returns a promise, as it does here, protractor will wait +// for the promise to resolve before running tests. + +const protractorUtils = require('@bazel/protractor/protractor-utils'); +const protractor = require('protractor'); + +module.exports = function(config) { + // In this example, `@bazel/protractor/protractor-utils` is used to run + // the server. protractorUtils.runServer() runs the server on a randomly + // selected port (given a port flag to pass to the server as an argument). + // The port used is returned in serverSpec and the protractor serverUrl + // is the configured. + return protractorUtils.runServer(config.workspace, config.server, '-p', []).then(serverSpec => { + protractor.browser.baseUrl = `http://localhost:${serverSpec.port}`; + }); +}; diff --git a/examples/webapp/yarn.lock b/examples/webapp/yarn.lock index fb57ccd13a..1e55523fd6 100644 --- a/examples/webapp/yarn.lock +++ b/examples/webapp/yarn.lock @@ -2,3 +2,856 @@ # yarn lockfile v1 +"@bazel/protractor@latest": + version "0.35.0" + resolved "https://registry.yarnpkg.com/@bazel/protractor/-/protractor-0.35.0.tgz#10a7a136abf99f81ba8de001a7c3e86a6e3c28c4" + integrity sha512-fpmhiYiTx0mqW3PKTx1/Z9PrKfMeIVaHVC5KDxuBwktAPyhiusbQ9O7xRnfircjKGbP6Lhf1DvIwi0U/SV9cGw== + dependencies: + protractor "^5.4.2" + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/selenium-webdriver@^3.0.0": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz#50a4755f8e33edacd9c406729e9b930d2451902a" + integrity sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA== + +adm-zip@^0.4.9: + version "0.4.13" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" + integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== + dependencies: + minimist "^1.2.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browserstack@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" + integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg== + dependencies: + https-proxy-agent "^2.2.1" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob@^7.0.3, glob@^7.0.6, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793" + integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" + integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +os-tmpdir@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +pako@~1.0.2: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +protractor@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.2.tgz#329efe37f48b2141ab9467799be2d4d12eb48c13" + integrity sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA== + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + optimist "~0.6.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.0.6" + +psl@^1.1.24: + version "1.3.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" + integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +semver@^5.3.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.0.6: + version "12.1.6" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.6.tgz#9e5410c506d1a7e0a7aa6af91ba3d5bb37f362b6" + integrity sha512-B1mOycNCrbk7xODw7Jgq/mdD3qzPxMaTsnKIQDy2nXlQoyjTrJTTD0vRpEZI9b8RibPEyQvh9zIZ0M1mpOxS3w== + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xml2js@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= diff --git a/internal/e2e/fine_grained_symlinks/.bazelrc b/internal/e2e/fine_grained_symlinks/.bazelrc deleted file mode 100644 index 86508414c9..0000000000 --- a/internal/e2e/fine_grained_symlinks/.bazelrc +++ /dev/null @@ -1 +0,0 @@ -import %workspace%/../../../common.bazelrc diff --git a/internal/e2e/node_loader_no_preserve_symlinks/.bazelrc b/internal/e2e/node_loader_no_preserve_symlinks/.bazelrc deleted file mode 100644 index 86508414c9..0000000000 --- a/internal/e2e/node_loader_no_preserve_symlinks/.bazelrc +++ /dev/null @@ -1 +0,0 @@ -import %workspace%/../../../common.bazelrc diff --git a/internal/e2e/node_loader_no_preserve_symlinks/BUILD.bazel b/internal/e2e/node_loader_no_preserve_symlinks/BUILD.bazel deleted file mode 100644 index db064a1c78..0000000000 --- a/internal/e2e/node_loader_no_preserve_symlinks/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test") - -package(default_visibility = ["//visibility:public"]) - -nodejs_test( - name = "test", - data = [ - "node_loader_test.spec.js", - ], - entry_point = ":node_loader_test.spec.js", - node_modules = "@npm//:node_modules", -) diff --git a/internal/e2e/node_loader_preserve_symlinks/.bazelrc b/internal/e2e/node_loader_preserve_symlinks/.bazelrc deleted file mode 100644 index 86508414c9..0000000000 --- a/internal/e2e/node_loader_preserve_symlinks/.bazelrc +++ /dev/null @@ -1 +0,0 @@ -import %workspace%/../../../common.bazelrc diff --git a/internal/e2e/node_loader_preserve_symlinks/BUILD.bazel b/internal/e2e/node_loader_preserve_symlinks/BUILD.bazel deleted file mode 100644 index db064a1c78..0000000000 --- a/internal/e2e/node_loader_preserve_symlinks/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test") - -package(default_visibility = ["//visibility:public"]) - -nodejs_test( - name = "test", - data = [ - "node_loader_test.spec.js", - ], - entry_point = ":node_loader_test.spec.js", - node_modules = "@npm//:node_modules", -) diff --git a/internal/e2e/node_loader_preserve_symlinks/WORKSPACE b/internal/e2e/node_loader_preserve_symlinks/WORKSPACE deleted file mode 100644 index 8e79e959ee..0000000000 --- a/internal/e2e/node_loader_preserve_symlinks/WORKSPACE +++ /dev/null @@ -1,19 +0,0 @@ -workspace( - name = "node_loader_e2e_preserve_symlinks", - managed_directories = { - "@npm": ["node_modules"], - }, -) - -local_repository( - name = "build_bazel_rules_nodejs", - path = "../../../release/build_bazel_rules_nodejs/release", -) - -load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install") - -yarn_install( - name = "npm", - package_json = "//:package.json", - yarn_lock = "//:yarn.lock", -) diff --git a/internal/e2e/packages/BUILD.bazel b/internal/e2e/packages/BUILD.bazel deleted file mode 100644 index 85a06dff27..0000000000 --- a/internal/e2e/packages/BUILD.bazel +++ /dev/null @@ -1,43 +0,0 @@ -load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test") - -# This is like a "js_library", but there are no actions to run on JS files so a -# filegroup is semantically equivalent. -filegroup( - name = "test_version", - srcs = ["test_version.js"], -) - -VARIANTS = [ - "npm_install", - "yarn_install", -] - -[nodejs_test( - name = "version_" + variant + "_test", - data = [ - variant + ".spec.js", - ":test_version", - ], - entry_point = ":%s.spec.js" % variant, - node_modules = "@internal_e2e_packages_" + variant + "//:node_modules", -) for variant in VARIANTS] - -nodejs_test( - name = "npm_determinism_test", - data = [ - "npm_determinism.spec.js", - "@internal_e2e_packages_npm_install//:node_modules/jsesc/package.json", - ], - entry_point = ":npm_determinism.spec.js", - node_modules = "@internal_e2e_packages_npm_install_duplicate_for_determinism_testing//:node_modules", -) - -nodejs_test( - name = "yarn_determinism_test", - data = [ - "yarn_determinism.spec.js", - "@internal_e2e_packages_yarn_install//:node_modules/jsesc/package.json", - ], - entry_point = ":yarn_determinism.spec.js", - node_modules = "@internal_e2e_packages_yarn_install_duplicate_for_determinism_testing//:node_modules", -) diff --git a/internal/e2e/packages/WORKSPACE b/internal/e2e/packages/WORKSPACE deleted file mode 100644 index 380baa4c20..0000000000 --- a/internal/e2e/packages/WORKSPACE +++ /dev/null @@ -1,17 +0,0 @@ -workspace(name = "internal_e2e_packages") - -local_repository( - name = "build_bazel_rules_nodejs", - path = "../../../release/build_bazel_rules_nodejs/release", -) - -load("@build_bazel_rules_nodejs//:defs.bzl", "check_rules_nodejs_version", "node_repositories") - -# Test that check_rules_nodejs_version works as expected -check_rules_nodejs_version(minimum_version_string = "0.11.2") - -node_repositories() - -load(":setup_workspace.bzl", "internal_e2e_packages_setup_workspace") - -internal_e2e_packages_setup_workspace() diff --git a/internal/e2e/packages/setup_workspace.bzl b/internal/e2e/packages/setup_workspace.bzl deleted file mode 100644 index 677c0be1f0..0000000000 --- a/internal/e2e/packages/setup_workspace.bzl +++ /dev/null @@ -1,55 +0,0 @@ -# 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. - -"""Helper function to setup @internal_e2e_packages workspace. -""" - -load("@build_bazel_rules_nodejs//:defs.bzl", "npm_install", "yarn_install") - -def internal_e2e_packages_setup_workspace(): - """Node repositories for @internal_e2e_packagess - """ - npm_install( - name = "internal_e2e_packages_npm_install", - package_json = "@internal_e2e_packages//:npm1/package.json", - package_lock_json = "@internal_e2e_packages//:npm1/package-lock.json", - data = ["@internal_e2e_packages//:postinstall.js"], - symlink_node_modules = False, - # Just here as a smoke test for this attribute - prod_only = True, - ) - - npm_install( - name = "internal_e2e_packages_npm_install_duplicate_for_determinism_testing", - package_json = "@internal_e2e_packages//:npm2/package.json", - package_lock_json = "@internal_e2e_packages//:npm2/package-lock.json", - data = ["@internal_e2e_packages//:postinstall.js"], - symlink_node_modules = False, - ) - - yarn_install( - name = "internal_e2e_packages_yarn_install", - package_json = "@internal_e2e_packages//:yarn1/package.json", - yarn_lock = "@internal_e2e_packages//:yarn1/yarn.lock", - data = ["@internal_e2e_packages//:postinstall.js"], - symlink_node_modules = False, - ) - - yarn_install( - name = "internal_e2e_packages_yarn_install_duplicate_for_determinism_testing", - package_json = "@internal_e2e_packages//:yarn2/package.json", - yarn_lock = "@internal_e2e_packages//:yarn2/yarn.lock", - data = ["@internal_e2e_packages//:postinstall.js"], - symlink_node_modules = False, - ) diff --git a/package.json b/package.json index 9687552804..c5b1a409e1 100644 --- a/package.json +++ b/package.json @@ -63,17 +63,12 @@ "zone.js": "0.8.29" }, "scripts": { - "test": "bazel test ... --test_tag_filters=-e2e", + "test": "bazel test ... --test_tag_filters=-e2e,-examples", + "test_windows": "bazel test ... --test_tag_filters=-e2e,-examples,-fix-windows", "test_e2e": "bazel --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m test --test_tag_filters=e2e --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,1.0,1.0 ...", - "build_packages_all": "./scripts/build_packages_all.sh", - "build_packages": "./scripts/build_packages.sh", - "build_release": "./scripts/build_release.sh", - "clean_all": "./scripts/clean_all.sh", + "test_examples": "bazel --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m test --test_tag_filters=examples --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,1.0,1.0 ...", "test_all": "./scripts/test_all.sh", - "test_examples_all": "./scripts/test_examples_all.sh", - "test_examples": "./scripts/test_examples.sh", - "test_legacy_e2e_all": "./scripts/test_legacy_e2e_all.sh", - "test_legacy_e2e": "./scripts/test_legacy_e2e.sh", + "clean_all": "./scripts/clean_all.sh", "// Unchecked warnings": "The following warnings are not checked as disabling them locally is broken", "// rule-impl-return": "./internal/common/typescript_mock_lib.bzl:29: rule-impl-return: Avoid using the legacy provider syntax. (https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#rule-impl-return)", "// rule-impl-return(2)": "./packages/typescript/internal/protobufjs/ts_proto_library.bzl:105: rule-impl-return: Avoid using the legacy provider syntax. (https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#rule-impl-return)", diff --git a/packages/hide-bazel-files/BUILD.bazel b/packages/hide-bazel-files/BUILD.bazel index 5d576e8ff2..aae0f18f50 100644 --- a/packages/hide-bazel-files/BUILD.bazel +++ b/packages/hide-bazel-files/BUILD.bazel @@ -29,7 +29,10 @@ npm_package( ":index.js", ":package.json", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", ], diff --git a/packages/jasmine/BUILD.bazel b/packages/jasmine/BUILD.bazel index 92ccad6335..945e513dc4 100644 --- a/packages/jasmine/BUILD.bazel +++ b/packages/jasmine/BUILD.bazel @@ -45,7 +45,10 @@ npm_package( vendor_external = [ "npm_bazel_jasmine", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", ":generate_README", diff --git a/packages/jasmine/src/BUILD.bazel b/packages/jasmine/src/BUILD.bazel index 95acb245f7..55421db5cd 100644 --- a/packages/jasmine/src/BUILD.bazel +++ b/packages/jasmine/src/BUILD.bazel @@ -16,6 +16,7 @@ # Parts of this BUILD file only necessary when building from source. # The generated `@bazel/jasmine` npm package contains a trimmed BUILD file using INTERNAL fences. load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -48,4 +49,14 @@ js_library( ], module_name = "@bazel/jasmine", ) + +pkg_tar( + name = "release", + srcs = [ + "index.from_src.bzl", + ":package_contents", + ], + extension = "tar.gz", + tags = ["manual"], +) # END-INTERNAL diff --git a/packages/karma/BUILD.bazel b/packages/karma/BUILD.bazel index 85b4d045a1..b906e981b5 100644 --- a/packages/karma/BUILD.bazel +++ b/packages/karma/BUILD.bazel @@ -44,7 +44,10 @@ npm_package( vendor_external = [ "npm_bazel_karma", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", ":generate_README", diff --git a/packages/labs/BUILD.bazel b/packages/labs/BUILD.bazel index de5ff254a4..c9993f87b8 100644 --- a/packages/labs/BUILD.bazel +++ b/packages/labs/BUILD.bazel @@ -18,7 +18,10 @@ npm_package( vendor_external = [ "npm_bazel_labs", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", "@npm_bazel_labs//webpack:cli_lib", diff --git a/packages/protractor/BUILD.bazel b/packages/protractor/BUILD.bazel index 7cb140490d..b01004a62f 100644 --- a/packages/protractor/BUILD.bazel +++ b/packages/protractor/BUILD.bazel @@ -45,7 +45,10 @@ npm_package( vendor_external = [ "npm_bazel_protractor", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", ":generate_README", diff --git a/packages/stylus/BUILD.bazel b/packages/stylus/BUILD.bazel index d6ab5f3199..674d3f71bd 100644 --- a/packages/stylus/BUILD.bazel +++ b/packages/stylus/BUILD.bazel @@ -45,7 +45,10 @@ npm_package( vendor_external = [ "npm_bazel_stylus", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", ":generate_README", diff --git a/packages/typescript/BUILD.bazel b/packages/typescript/BUILD.bazel index af404aff97..75453e8b1e 100644 --- a/packages/typescript/BUILD.bazel +++ b/packages/typescript/BUILD.bazel @@ -49,7 +49,10 @@ npm_package( "npm_bazel_typescript", "build_bazel_rules_typescript", ], - visibility = ["//e2e:__pkg__"], + visibility = [ + "//e2e:__pkg__", + "//examples:__pkg__", + ], deps = [ ":copy_LICENSE", ":generate_README", diff --git a/scripts/build_all.sh b/scripts/build_all.sh deleted file mode 100755 index 34df084fa1..0000000000 --- a/scripts/build_all.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) - -${RULES_NODEJS_DIR}/scripts/build_release.sh -${RULES_NODEJS_DIR}/scripts/build_packages_all.sh diff --git a/scripts/build_packages.sh b/scripts/build_packages.sh deleted file mode 100755 index 7b4d2891fd..0000000000 --- a/scripts/build_packages.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly PACKAGES=${@:?"No package names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly PACKAGES_DIR="${RULES_NODEJS_DIR}/packages" -readonly RELEASE_DIR="${RULES_NODEJS_DIR}/release" - -echo_and_run() { echo "+ $@" ; "$@" ; } - -for package in ${PACKAGES[@]} ; do - ( - readonly DEST_DIR="${RELEASE_DIR}/npm_bazel_${package}" - - # Build npm package - printf "\n\nBuilding package ${package} //packages/${package}:npm_package\n" - echo_and_run bazel build //packages/${package}:npm_package - - # Copy the npm_package to /release - echo "Copying npm package to ${DEST_DIR}" - rm -rf ${DEST_DIR} - mkdir -p ${RELEASE_DIR} - readonly BAZEL_BIN=$(bazel info bazel-bin) - echo_and_run cp -R "${BAZEL_BIN}/packages/${package}/npm_package" ${DEST_DIR} - chmod -R u+w ${DEST_DIR} - - # Touch downstream package.json that depend on this package - ${RULES_NODEJS_DIR}/scripts/touch_deps.sh ${package} - ) -done diff --git a/scripts/build_packages_all.sh b/scripts/build_packages_all.sh deleted file mode 100755 index 97bd4d0ac2..0000000000 --- a/scripts/build_packages_all.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -source "${RULES_NODEJS_DIR}/scripts/packages.sh" - -${RULES_NODEJS_DIR}/scripts/build_packages.sh ${PACKAGES[@]} - diff --git a/scripts/build_release.sh b/scripts/build_release.sh deleted file mode 100755 index 1d0f1d43f0..0000000000 --- a/scripts/build_release.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly DEST_DIR="${RULES_NODEJS_DIR}/release/build_bazel_rules_nodejs" -readonly UNTAR_DIR="${RULES_NODEJS_DIR}/release/build_bazel_rules_nodejs/release" - -echo_and_run() { echo "+ $@" ; "$@" ; } - -# Build rules_nodejs archive -printf "\n\nBuilding //:release archive\n" -cd ${RULES_NODEJS_DIR} -echo_and_run bazel build //:release - -# Copy the release archive to /release -echo "Copying archive to ${DEST_DIR}" -rm -rf ${DEST_DIR} -mkdir -p ${DEST_DIR} -readonly BAZEL_BIN=$(bazel info bazel-bin) -echo_and_run cp "${BAZEL_BIN}/release.tar.gz" ${DEST_DIR} -chmod -R u+w ${DEST_DIR} - -# Extract contents of archive -echo "Extracting archive to ${UNTAR_DIR}" -rm -rf ${UNTAR_DIR} -mkdir -p ${UNTAR_DIR} -echo_and_run tar xvzf "${DEST_DIR}/release.tar.gz" -C ${UNTAR_DIR} -chmod -R u+w ${UNTAR_DIR} -echo "workspace(name = \"build_bazel_rules_nodejs\")" >> ${UNTAR_DIR}/WORKSPACE diff --git a/scripts/check_deps.sh b/scripts/check_deps.sh deleted file mode 100755 index 34c2f973f0..0000000000 --- a/scripts/check_deps.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -source "${RULES_NODEJS_DIR}/scripts/packages.sh" - -DEPS=() - -# Check for WORKSPACE dependency on release -LINES=$(grep "/release/build_bazel_rules_nodejs/release\"" WORKSPACE || echo "") -if [[ "${LINES}" ]] ; then - DEPS+=(release) -fi - -# Check for file:../../release/npm_bazel_foobar dependencies in package.json -LINES=$(egrep -oh "file:../../release/npm_bazel_([a-z_\-]+)" package.json || echo "") -for line in ${LINES[@]} ; do - # Trim the match from `file:../../release/npm_bazel_foobar` to `foobar` - DEP=$(echo $line | cut -c 27-) - DEPS+=(${DEP}) -done - -if [[ ${DEPS:-} ]] ; then - ALL_GOOD=1 - - echo "checking deps: ${DEPS}" - for dep in ${DEPS} ; do - if [[ ${dep} == "release" ]] ; then - if [[ ! -d "${RULES_NODEJS_DIR}/release/build_bazel_rules_nodejs" ]] ; then - echo "ERROR: You must first run 'yarn build_release' to build /release/build_bazel_rules_nodejs"; - ALL_GOOD=0 - fi - else - if [[ ! -d "${RULES_NODEJS_DIR}/release/npm_bazel_${dep}" ]] ; then - echo "ERROR: You must first run 'yarn build_packages ${dep}' or 'yarn build_packages_all'"; - ALL_GOOD=0 - fi - fi - done - - if [[ ${ALL_GOOD} -eq "0" ]] ; then - echo "ERROR: Some dependencies are not built. Please build all dependencies and try again." - exit 1 - else - echo "all deps built" - fi -fi \ No newline at end of file diff --git a/scripts/clean_all.sh b/scripts/clean_all.sh deleted file mode 100755 index 37979dec5e..0000000000 --- a/scripts/clean_all.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -cd ${RULES_NODEJS_DIR} - -echo_and_run() { echo "+ $@" ; "$@" ; } - -echo_and_run rm -rf ./release -echo_and_run rm -rf `find . -type d -name node_modules -prune` - -echo_and_run bazel clean --expunge - -${RULES_NODEJS_DIR}/scripts/clean_e2e_all.sh -${RULES_NODEJS_DIR}/scripts/clean_examples_all.sh - -( - cd internal/e2e - for subDir in $(ls) ; do - [[ -d "${subDir}" ]] || continue - ( - cd ${subDir} - if [[ -e 'WORKSPACE' ]] ; then - printf "\n\nCleaning /internal/e2e/${subDir}\n" - echo_and_run bazel clean --expunge - echo_and_run rm -rf `find . -type d -name node_modules -prune` - fi - ) - done -) diff --git a/scripts/clean_e2e.sh b/scripts/clean_e2e.sh deleted file mode 100755 index cce590041f..0000000000 --- a/scripts/clean_e2e.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly E2E_TESTS=${@:?"No e2e names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly E2E_DIR="${RULES_NODEJS_DIR}/e2e" - -echo_and_run() { echo "+ $@" ; "$@" ; } - -for e2eTest in ${E2E_TESTS[@]} ; do - ( - # Clean e2e test - cd "${E2E_DIR}/${e2eTest}" - printf "\n\nCleaning e2e test ${e2eTest}\n" - echo_and_run bazel clean --expunge - echo_and_run rm -rf `find . -type d -name node_modules -prune` - ) -done diff --git a/scripts/clean_e2e_all.sh b/scripts/clean_e2e_all.sh deleted file mode 100755 index 117f4e9ab0..0000000000 --- a/scripts/clean_e2e_all.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly E2E_DIR="${RULES_NODEJS_DIR}/e2e" - -readonly E2E=$(ls -l ${E2E_DIR} | grep "^d" | awk -F" " '{print $9}') - -${RULES_NODEJS_DIR}/scripts/clean_e2e.sh ${E2E[@]} diff --git a/scripts/clean_examples.sh b/scripts/clean_examples.sh deleted file mode 100755 index a2239fa24a..0000000000 --- a/scripts/clean_examples.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly EXAMPLES=${@:?"No example names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly EXAMPLES_DIR="${RULES_NODEJS_DIR}/examples" - -echo_and_run() { echo "+ $@" ; "$@" ; } - -for example in ${EXAMPLES[@]} ; do - ( - # Clean example - cd "${EXAMPLES_DIR}/${example}" - printf "\n\nCleaning example ${example}\n" - echo_and_run bazel clean --expunge - echo_and_run rm -rf `find . -type d -name node_modules -prune` - ) -done diff --git a/scripts/clean_examples_all.sh b/scripts/clean_examples_all.sh deleted file mode 100755 index 95017db855..0000000000 --- a/scripts/clean_examples_all.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly EXAMPLES_DIR="${RULES_NODEJS_DIR}/examples" - -readonly EXAMPLES=$(ls -l ${EXAMPLES_DIR} | grep "^d" | awk -F" " '{print $9}') - -${RULES_NODEJS_DIR}/scripts/clean_examples.sh ${EXAMPLES[@]} diff --git a/scripts/clean_legacy_e2e.sh b/scripts/clean_legacy_e2e.sh deleted file mode 100755 index 73ff1117d5..0000000000 --- a/scripts/clean_legacy_e2e.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly E2E_TESTS=${@:?"No e2e test names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly E2E_DIR="${RULES_NODEJS_DIR}/internal/e2e" - -echo_and_run() { echo "+ $@" ; "$@" ; } - -for e2eTest in ${E2E_TESTS[@]} ; do - ( - # Clean e2e test - cd "${E2E_DIR}/${e2eTest}" - printf "\n\nCleaning legacy e2e test ${e2eTest}\n" - echo_and_run bazel clean --expunge - echo_and_run rm -rf `find . -type d -name node_modules -prune` - ) -done diff --git a/scripts/clean_nested_workspaces.sh b/scripts/clean_nested_workspaces.sh new file mode 100755 index 0000000000..e692f55cf5 --- /dev/null +++ b/scripts/clean_nested_workspaces.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -eu -o pipefail +# -e: exits if a command fails +# -u: errors if an variable is referenced before being set +# -o pipefail: causes a pipeline to produce a failure return code if any command errors + +echo_and_run() { echo "+ $@" ; "$@" ; } + +readonly workspaceRoots=("e2e" "examples" "packages") +for workspaceRoot in ${workspaceRoots[@]} ; do + ( + readonly workspaceFiles=($(find ./${workspaceRoot} -type f -name WORKSPACE -prune)) + for workspaceFile in ${workspaceFiles[@]} ; do + ( + readonly workspaceDir=$(dirname ${workspaceFile}) + printf "\n\nCleaning ${workspaceDir}\n" + cd ${workspaceDir} + echo_and_run rm -rf `find . -type d -name node_modules -prune` + echo_and_run bazel clean --expunge + ) + done + ) +done diff --git a/scripts/clean_yarn_cache_selectively.sh b/scripts/clean_yarn_cache_selectively.sh index 2b98425454..eec5f4d769 100755 --- a/scripts/clean_yarn_cache_selectively.sh +++ b/scripts/clean_yarn_cache_selectively.sh @@ -6,19 +6,18 @@ set -eu -o pipefail # -o pipefail: causes a pipeline to produce a failure return code if any command errors readonly YARN_CACHE_ROOT=$(dirname $(yarn cache dir)) -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -source "${RULES_NODEJS_DIR}/scripts/packages.sh" echo_and_run() { echo "+ $@" ; "$@" ; } echo "yarn cache root: ${YARN_CACHE_ROOT}" -for package in ${PACKAGES[@]} ; do - echo_and_run yarn cache clean @bazel/${package} -done +readonly NPM_PACKAGE_LABELS=`bazel query --output=package 'kind("npm_package", //packages/...)'` -# Also clean cache for different versions of yarn since the locally installed -# yarn may have a different cache version from yarn version used by Bazel -for package in ${PACKAGES[@]} ; do +for npmPackageLabel in ${NPM_PACKAGE_LABELS[@]} ; do + # Trim packages/foobar to foobar + package=$(echo ${npmPackageLabel} | cut -c 10-) + echo_and_run yarn cache clean @bazel/${package} + # Also clean cache for different versions of yarn since the locally installed + # yarn may have a different cache version from yarn version used by Bazel echo_and_run rm -rf ${YARN_CACHE_ROOT}/*/npm-@bazel-${package}-* done diff --git a/scripts/on-release.js b/scripts/on-release.js index 282fad772b..65a20b6149 100644 --- a/scripts/on-release.js +++ b/scripts/on-release.js @@ -36,7 +36,10 @@ function findFiles(regex, dir) { }, []); } -for (const f of findFiles(/^WORKSPACE$/, 'e2e')) { +const workspaceFiles = [ + ...findFiles(/^WORKSPACE$/, 'e2e'), + ...findFiles(/^WORKSPACE$/, 'examples'), +] for (const f of workspaceFiles) { let workspaceContents = fs.readFileSync(f, {encoding: 'utf-8'}); const regex = new RegExp(`http_archive\\(\\s*name\\s*\\=\\s*"build_bazel_rules_nodejs"[^)]+`); const replacement = `http_archive( diff --git a/scripts/packages.sh b/scripts/packages.sh deleted file mode 100644 index ed31368e1d..0000000000 --- a/scripts/packages.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -export readonly PACKAGES=( create hide-bazel-files jasmine typescript karma stylus protractor labs ) diff --git a/scripts/publish_release.sh b/scripts/publish_release.sh index 324668e2c2..1849b3a53b 100755 --- a/scripts/publish_release.sh +++ b/scripts/publish_release.sh @@ -8,7 +8,6 @@ set -u -e -o pipefail # To verify: # for p in $(ls packages); do if [[ -d packages/$p ]]; then b="@bazel/$p"; echo -ne "\n$b\n-------\n"; npm dist-tag ls $b; fi; done -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) readonly NPM_COMMAND=${1:-publish} readonly BAZEL_BIN=./node_modules/.bin/bazel diff --git a/scripts/test_all.sh b/scripts/test_all.sh index 309f4f6c34..5948550034 100755 --- a/scripts/test_all.sh +++ b/scripts/test_all.sh @@ -5,9 +5,6 @@ set -eu -o pipefail # -u: errors if an variable is referenced before being set # -o pipefail: causes a pipeline to produce a failure return code if any command errors -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -cd ${RULES_NODEJS_DIR} - echo_and_run() { echo "+ $@" ; "$@" ; } # Check environment @@ -22,17 +19,11 @@ case "${unameOut}" in esac echo "Running on ${machine}" -printf "\n\nRunning @nodejs//:yarn\n" -echo_and_run bazel run @nodejs//:yarn - -printf "\n\nBuilding all targets\n" -echo_and_run bazel build ... - -printf "\n\nTesting all targets\n" +printf "\n\nTesting all targets (except integration tests)\n" if [[ ${machine} == "Windows" ]] ; then - echo_and_run bazel test ... --test_tag_filters=-e2e,-fix-windows + echo_and_run yarn test_windows else - echo_and_run bazel test ... --test_tag_filters=-e2e + echo_and_run yarn test fi # These targets should run @@ -52,14 +43,13 @@ echo_and_run bazel run @bazel_workspace_a//subdir:bin echo_and_run bazel run @bazel_workspace_b//:bin echo_and_run bazel run @bazel_workspace_b//subdir:bin -# bazel test @examples_program//... # DOES NOT WORK WITH --nolegacy_external_runfiles -# bazel test @internal_e2e_packages//... # DOES NOT WORK WITH --nolegacy_external_runfiles +# bazel test @examples_user_managed_deps//... # DOES NOT WORK WITH --nolegacy_external_runfiles +# bazel test @e2e_packages//... # DOES NOT WORK WITH --nolegacy_external_runfiles # TODO: re-enable when after https://github.com/bazelbuild/bazel/pull/8090 makes it into a Bazel release # Related issue https://github.com/bazelbuild/bazel/issues/8088 on Windows -echo_and_run bazel --host_jvm_args=-Xms256m --host_jvm_args=-Xmx1280m test --test_tag_filters=e2e --local_resources=792,1.0,1.0 --test_arg=--local_resources=13288,1.0,1.0 ... - -echo_and_run ./scripts/build_all.sh +printf "\n\nRunning all e2e tests (this make take some time as these are run sequentially...)\n" +echo_and_run yarn test_e2e -echo_and_run ./scripts/test_legacy_e2e_all.sh -echo_and_run ./scripts/test_examples_all.sh +printf "\n\nRunning all examples (this make take some time as these are run sequentially...)\n" +echo_and_run yarn test_examples diff --git a/scripts/test_examples.sh b/scripts/test_examples.sh deleted file mode 100755 index 0727f17cb6..0000000000 --- a/scripts/test_examples.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly EXAMPLES=${@:?"No example names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly EXAMPLES_DIR="${RULES_NODEJS_DIR}/examples" -readonly KERNEL_NAME=$(uname -s) - -echo_and_run() { echo "+ $@" ; "$@" ; } - -for example in ${EXAMPLES[@]} ; do - ( - # Test example - if [[ ${example} == "vendored_node" && ${KERNEL_NAME} != Linux* ]] ; then - printf "\n\nSkipping vendored_node test as it only runs on Linux while we are executing on ${KERNEL_NAME}\n" - else - cd "${EXAMPLES_DIR}/${example}" - printf "\n\nRunning example ${example}\n" - ${RULES_NODEJS_DIR}/scripts/check_deps.sh - if grep -q "\"test\":" package.json; then - echo_and_run yarn test - fi - if grep -q "\"e2e\":" package.json; then - echo_and_run yarn e2e - fi - fi - ) -done diff --git a/scripts/test_examples_all.sh b/scripts/test_examples_all.sh deleted file mode 100755 index 490c8f25cb..0000000000 --- a/scripts/test_examples_all.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# This script runs each of the examples during CI to make sure they still work. -# Note that integration test coverage is expected to be provided mostly by the /internal/e2e/* folders. -# These examples should be convenient for users to reference, not exercise all our features. - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly EXAMPLES_DIR="${RULES_NODEJS_DIR}/examples" -SHARD_INDEX=${1:-0} -readonly MAX_SHARDS=${2:-1} - -# Gather list of examples to run -printf "\n\nFinding examples using shard index ${SHARD_INDEX} and max shards ${MAX_SHARDS}\n" -cd ${EXAMPLES_DIR} -SHARD_DIRS=() -for shardDir in $(ls) ; do - [[ -d "${shardDir}" ]] || continue - if ! (( SHARD_INDEX % MAX_SHARDS )) ; then - SHARD_DIRS+=(${shardDir}) - fi - SHARD_INDEX=$((SHARD_INDEX+1)) -done -echo "Running examples: ${SHARD_DIRS[@]}" - -# Run examples -${RULES_NODEJS_DIR}/scripts/test_examples.sh ${SHARD_DIRS[@]} diff --git a/scripts/test_legacy_e2e.sh b/scripts/test_legacy_e2e.sh deleted file mode 100755 index 0cd73e133d..0000000000 --- a/scripts/test_legacy_e2e.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly E2E_TESTS=${@:?"No e2e test names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly E2E_DIR="${RULES_NODEJS_DIR}/internal/e2e" - -echo_and_run() { echo "+ $@" ; "$@" ; } - -for e2eTest in ${E2E_TESTS[@]} ; do - ( - # Run legacy e2e test - cd "${E2E_DIR}/${e2eTest}" - printf "\n\nRunning legacy e2e test ${e2eTest}\n" - ${RULES_NODEJS_DIR}/scripts/check_deps.sh - if grep -q "\"test\":" package.json; then - echo_and_run yarn test - fi - ) -done diff --git a/scripts/test_legacy_e2e_all.sh b/scripts/test_legacy_e2e_all.sh deleted file mode 100755 index 89c5a02123..0000000000 --- a/scripts/test_legacy_e2e_all.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) -readonly E2E_DIR="${RULES_NODEJS_DIR}/internal/e2e" -SHARD_INDEX=${1:-0} -readonly MAX_SHARDS=${2:-1} - -# Gather list of tests to run -printf "\n\nFinding legacy e2e tests with shard index ${SHARD_INDEX} and max shards ${MAX_SHARDS}\n" -cd ${E2E_DIR} -SHARD_DIRS=() -for shardDir in $(ls) ; do - [[ -d "${shardDir}" && -e "${shardDir}/WORKSPACE" ]] || continue - if ! (( SHARD_INDEX % MAX_SHARDS )) ; then - SHARD_DIRS+=(${shardDir}) - fi - SHARD_INDEX=$((SHARD_INDEX+1)) -done -echo "Running e2e tests: ${SHARD_DIRS[@]}" - -# Run legacy e2e tests -${RULES_NODEJS_DIR}/scripts/test_legacy_e2e.sh ${SHARD_DIRS[@]} diff --git a/scripts/touch_deps.sh b/scripts/touch_deps.sh deleted file mode 100755 index 9b28fc3a2d..0000000000 --- a/scripts/touch_deps.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail -# -e: exits if a command fails -# -u: errors if an variable is referenced before being set -# -o pipefail: causes a pipeline to produce a failure return code if any command errors - -readonly PACKAGES=${@:?"No package names specified"} - -readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd) - -echo_and_run() { echo "+ $@" ; "$@" ; } - -# sedi makes `sed -i` work on both OSX & Linux -# See https://stackoverflow.com/questions/2320564/i-need-my-sed-i-command-for-in-place-editing-to-work-with-both-gnu-sed-and-bsd -sedi () { - case $(uname) in - Darwin*) sedi=('-i' '') ;; - *) sedi='-i' ;; - esac - - sed "${sedi[@]}" "$@" -} - -cd ${RULES_NODEJS_DIR} -for rootDir in examples e2e internal/e2e ; do - ( - cd ${rootDir} - for subDir in $(ls) ; do - [[ -d "${subDir}" ]] || continue - ( - cd ${subDir} - if [[ -e 'package.json' ]] ; then - DEPS=() - # Check for file:../../release/npm_bazel_foobar dependencies in package.json - LINES=$(egrep -oh "file:../../release/npm_bazel_([a-z_]+)" package.json || echo "") - for line in ${LINES[@]} ; do - # Trim the match from `file:../../release/npm_bazel_foobar` to `foobar` - DEP=$(echo $line | cut -c 27-) - DEPS+=(${DEP}) - done - if [[ ${DEPS:-} ]] ; then - for dep in ${DEPS[@]} ; do - for package in ${PACKAGES[@]} ; do - if [[ ${dep} == ${package} ]] ; then - # Delete the node_modules/@bazel/foobar npm package in this nested - # WORKSPACE since we have just regerated it and this old copy - # is now out of date. - echo "Deleting /${rootDir}/${subDir}/node_modules/@bazel/${dep}" - echo_and_run rm -rf ./node_modules/@bazel/${dep} - # Modify the yarn.lock entry for the new generated package - # in this nested WORKSPACE to trick Bazel into re-running the repository - # rule. Since package.json didn't change, yarn_install would - # not otherwise know that it has to re-run to re-install the @bazel/foobar - # npm package. - echo_and_run sedi "s#/release/npm_bazel_${package}\\\$\{0,1\}[0-9]\{0,10\}#/release/npm_bazel_${package}\$${RANDOM}#" yarn.lock - fi - done - done - fi - fi - ) - done - ) -done