Skip to content

Commit

Permalink
refactor(protractor): no longer a nested workspace
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeagle committed May 7, 2020
1 parent 075c86a commit 7dd9ec3
Show file tree
Hide file tree
Showing 31 changed files with 109 additions and 174 deletions.
2 changes: 1 addition & 1 deletion e2e/ts_devserver/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
# limitations under the License.

load("@build_bazel_rules_nodejs//internal/npm_install:npm_umd_bundle.bzl", "npm_umd_bundle")
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/typescript:index.bzl", "ts_devserver", "ts_library")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

exports_files([
"red-body-style.css",
Expand Down
2 changes: 1 addition & 1 deletion e2e/ts_devserver/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ load("@npm//@bazel/typescript:index.bzl", "ts_setup_workspace")

ts_setup_workspace()

load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")

npm_bazel_protractor_dependencies()

Expand Down
2 changes: 1 addition & 1 deletion e2e/ts_devserver/genrule/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/typescript:index.bzl", "ts_devserver", "ts_library")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

ts_library(
name = "app",
Expand Down
2 changes: 1 addition & 1 deletion e2e/ts_devserver/subpackage/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.

load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/typescript:index.bzl", "ts_devserver", "ts_library")
load("@npm//html-insert-assets:index.bzl", "html_insert_assets")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

html_insert_assets(
name = "inject",
Expand Down
2 changes: 1 addition & 1 deletion examples/angular/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
install_bazel_dependencies()

# Load npm_bazel_protractor dependencies
load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")

npm_bazel_protractor_dependencies()

Expand Down
2 changes: 1 addition & 1 deletion examples/angular/e2e/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/typescript:index.bzl", "ts_library")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

ts_library(
name = "e2e",
Expand Down
2 changes: 1 addition & 1 deletion examples/angular_view_engine/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
install_bazel_dependencies()

# Load npm_bazel_protractor dependencies
load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")

npm_bazel_protractor_dependencies()

Expand Down
2 changes: 1 addition & 1 deletion examples/angular_view_engine/e2e/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/typescript:index.bzl", "ts_library")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

ts_library(
name = "e2e",
Expand Down
2 changes: 1 addition & 1 deletion examples/app/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web")
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
load("@npm//@bazel/terser:index.bzl", "terser_minified")
load("@npm//@bazel/typescript:index.bzl", "ts_devserver", "ts_library", "ts_project")
load("@npm//html-insert-assets:index.bzl", "html_insert_assets")
load("@npm//http-server:index.bzl", "http_server")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

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

Expand Down
2 changes: 1 addition & 1 deletion examples/app/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ load("@npm//@bazel/typescript:index.bzl", "ts_setup_workspace")

ts_setup_workspace()

load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")

npm_bazel_protractor_dependencies()

Expand Down
2 changes: 1 addition & 1 deletion examples/protocol_buffers/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
load("@npm//@bazel/karma:index.bzl", "karma_web_test_suite")
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
load("@npm//@bazel/terser:index.bzl", "terser_minified")
load("@npm//@bazel/typescript:index.bzl", "ts_config", "ts_devserver", "ts_library")
load("@npm//http-server:index.bzl", "http_server")
load("@npm_bazel_labs//:index.bzl", "ts_proto_library")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")

proto_library(
name = "tire_proto",
Expand Down
2 changes: 1 addition & 1 deletion examples/protocol_buffers/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")

install_bazel_dependencies()

load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")

npm_bazel_protractor_dependencies()

Expand Down
2 changes: 1 addition & 1 deletion examples/webapp/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//http-server:index.bzl", "http_server")
load("@npm//mocha:index.bzl", "mocha_test")
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
load(":differential_loading.bzl", "differential_loading")

differential_loading(
Expand Down
2 changes: 1 addition & 1 deletion examples/webapp/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")

install_bazel_dependencies()

load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")

npm_bazel_protractor_dependencies()

Expand Down
69 changes: 57 additions & 12 deletions packages/protractor/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,67 @@
# See the License for the specific language governing permissions and
# limitations under the License.

load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test")
load("@build_bazel_rules_nodejs//:tools/defaults.bzl", "pkg_npm")
load("@build_bazel_rules_nodejs//packages/typescript:index.bzl", "ts_library")
load("@build_bazel_rules_nodejs//tools/stardoc:index.bzl", "stardoc")
load("//third_party/github.com/bazelbuild/bazel-skylib:rules/copy_file.bzl", "copy_file")

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

bzl_library(
name = "bzl",
testonly = True,
srcs = glob(["*.bzl"]),
deps = [
"@build_bazel_rules_nodejs//:bzl",
"@build_bazel_rules_nodejs//internal/common:bzl",
"@build_bazel_rules_nodejs//internal/node:bzl",
"@io_bazel_rules_webtesting//web",
],
)

stardoc(
name = "docs",
testonly = True,
out = "index.md",
input = "//packages/protractor:index.bzl",
tags = ["fix-windows"],
deps = ["//packages/protractor:bzl"],
)

nodejs_test(
name = "test",
data = [
"docs_test.js",
"index.md",
],
entry_point = ":docs_test.js",
tags = [
"fix-windows",
],
)

ts_library(
name = "protractor",
srcs = ["protractor-utils.ts"],
module_name = "@bazel/protractor/protractor-utils",
module_root = "protractor-utils",
deps = ["@npm//@types/node"],
)

# Ugly genrule depending on local linux environment to build the README out of skylark doc generation.
# Only referenced when we do a release.
# TODO: This ought to be possible with stardoc alone. Need to coordinate with Chris Parsons.
genrule(
name = "generate_README",
srcs = [
"@npm_bazel_protractor//:index.md",
"//packages/protractor/docs:install.md",
"index.md",
"install.md",
],
outs = ["README.md"],
cmd = """cat $(execpath //packages/protractor/docs:install.md) $(execpath @npm_bazel_protractor//:index.md) | sed 's/^##/\\\n##/' > $@""",
cmd = """cat $(execpath install.md) $(execpath index.md) | sed 's/^##/\\\n##/' > $@""",
tags = ["fix-windows"],
visibility = ["//docs:__pkg__"],
)
Expand All @@ -39,20 +86,18 @@ copy_file(
pkg_npm(
name = "npm_package",
srcs = [
"@npm_bazel_protractor//:package_contents",
"index.bzl",
"package.bzl",
"package.json",
"protractor.conf.js",
"protractor_web_test.bzl",
],
build_file_content = """exports_files(["protractor.conf.js"])""",
substitutions = {
"@npm_bazel_protractor//:utils_lib": "@npm//@bazel/protractor",
},
vendor_external = [
"npm_bazel_protractor",
],
deps = [
":npm_version_check",
"@npm_bazel_protractor//:utils_lib",
"//packages/protractor",
] + select({
# FIXME: fix stardoc on Windows; @npm_bazel_protractor//:index.md generation fails with:
# FIXME: fix stardoc on Windows; //packages/protractor:index.md generation fails with:
# ERROR: D:/b/62unjjin/external/npm_bazel_protractor/BUILD.bazel:36:1: Couldn't build file
# external/npm_bazel_protractor/docs.raw: Generating proto for Starlark doc for docs failed (Exit 1)
"@bazel_tools//src/conditions:windows": [],
Expand Down
31 changes: 0 additions & 31 deletions packages/protractor/docs/BUILD.bazel

This file was deleted.

14 changes: 0 additions & 14 deletions packages/protractor/docs/install.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const actual = require('fs').readFileSync(
process.env['TEST_SRCDIR'] + '/npm_bazel_protractor/index.md', {encoding: 'utf-8'});
process.env['TEST_SRCDIR'] + '/build_bazel_rules_nodejs/packages/protractor/index.md',
{encoding: 'utf-8'});
if (actual.indexOf('<unknown name>') >= 0) {
throw new Error('Found <unknown name> in index.md');
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"""

load(
"//:protractor_web_test.bzl",
":protractor_web_test.bzl",
_protractor_web_test = "protractor_web_test",
_protractor_web_test_suite = "protractor_web_test_suite",
)
Expand Down
8 changes: 8 additions & 0 deletions packages/protractor/install.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Protractor rules for Bazel

The Protractor rules run tests under the Protractor framework with Bazel.

## Installation

Add the `@bazel/protractor` npm package to your `devDependencies` in `package.json`.

File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,6 @@
"peerDependencies": {
"protractor": ">=5.0.0"
},
"bazelWorkspaces": {
"npm_bazel_protractor": {
"rootPath": "."
}
},
"scripts": {
"postinstall": "node npm_version_check.js"
}
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ load("@io_bazel_rules_webtesting//web:web.bzl", "web_test_suite")
load("@io_bazel_rules_webtesting//web/internal:constants.bzl", "DEFAULT_WRAPPED_TEST_TAGS")

_PROTRACTOR_PEER_DEPS = [
# NB: replaced during pkg_npm with "@npm//@bazel/protractor",
"@npm_bazel_protractor//:utils_lib",
"@npm//protractor",
# BEGIN-INTERNAL
"@build_bazel_rules_nodejs" +
# END-INTERNAL
"//packages/protractor",
"//protractor",
]
_PROTRACTOR_ENTRY_POINT = "@npm//:node_modules/protractor/bin/protractor"
_PROTRACTOR_ENTRY_POINT = "//:node_modules/protractor/bin/protractor"

# Avoid using non-normalized paths (workspace/../other_workspace/path)
def _to_manifest_path(ctx, file):
Expand Down Expand Up @@ -209,12 +211,19 @@ _protractor_web_test = rule(
aspects = [node_modules_aspect],
),
"_conf_tmpl": attr.label(
default = Label("//:protractor.conf.js"),
default = Label("//packages/protractor:protractor.conf.js"),
allow_single_file = True,
),
},
)

def _relative(npm_workspace, label):
if label[0] == "@":
return label
if label.startswith("//"):
return npm_workspace + label
return "%s//%s" % (npm_workspace, label)

def protractor_web_test(
name,
configuration = None,
Expand All @@ -226,6 +235,7 @@ def protractor_web_test(
tags = [],
peer_deps = _PROTRACTOR_PEER_DEPS,
protractor_entry_point = _PROTRACTOR_ENTRY_POINT,
npm_workspace = "@npm",
**kwargs):
"""Runs a protractor test in a browser.
Expand All @@ -240,18 +250,21 @@ def protractor_web_test(
data: Runtime dependencies
server: Optional server executable target
tags: Standard Bazel tags, this macro adds one for ibazel
peer_deps: List of peer npm deps required by protractor_web_test.
protractor_entry_point: A label providing the @npm//protractor entry point.
Default to `@npm//:node_modules/protractor/bin/protractor`.
peer_deps: List of peer npm deps required by protractor_web_test, relative to npm_workspace
protractor_entry_point: A label providing the protractor entry point, relative to npm_workspace.
Default to `:node_modules/protractor/bin/protractor`.
npm_workspace: the name of the workspace where protractor was installed from npm
This is needed so the macro can assemble labels that point into these dependencies
Defaults to `@npm`
**kwargs: passed through to `protractor_web_test`
"""

protractor_bin_name = name + "_protractor_bin"

nodejs_binary(
name = protractor_bin_name,
entry_point = protractor_entry_point,
data = srcs + deps + data + peer_deps,
entry_point = _relative(npm_workspace, protractor_entry_point),
data = srcs + deps + data + [_relative(npm_workspace, d) for d in peer_deps],
testonly = 1,
visibility = ["//visibility:private"],
)
Expand Down

0 comments on commit 7dd9ec3

Please sign in to comment.