build: update to rules_typescript 0.23.2 and rules_nodejs 0.16.8 (#28532)
PR Close #28532
This commit is contained in:

committed by
Matias Niemelä

parent
8d11627e6c
commit
0d1e065a1c
@ -9,41 +9,12 @@
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
|
||||
def rules_angular_dependencies():
|
||||
"""
|
||||
Fetch our transitive dependencies.
|
||||
|
||||
If the user wants to get a different version of these, they can just fetch it
|
||||
from their WORKSPACE before calling this function, or not call this function at all.
|
||||
"""
|
||||
|
||||
#
|
||||
# Download Bazel toolchain dependencies as needed by build actions
|
||||
# Use a SHA to get fix for needing symlink_prefix during npm publishing
|
||||
_maybe(
|
||||
http_archive,
|
||||
name = "build_bazel_rules_nodejs",
|
||||
url = "https://github.com/bazelbuild/rules_nodejs/archive/0.16.5.zip",
|
||||
strip_prefix = "rules_nodejs-0.16.5",
|
||||
)
|
||||
|
||||
_maybe(
|
||||
http_archive,
|
||||
name = "build_bazel_rules_typescript",
|
||||
url = "https://github.com/bazelbuild/rules_typescript/archive/0.22.1.zip",
|
||||
strip_prefix = "rules_typescript-0.22.1",
|
||||
)
|
||||
|
||||
# Needed for Remote Execution
|
||||
_maybe(
|
||||
http_archive,
|
||||
name = "bazel_toolchains",
|
||||
sha256 = "ee854b5de299138c1f4a2edb5573d22b21d975acfc7aa938f36d30b49ef97498",
|
||||
strip_prefix = "bazel-toolchains-37419a124bdb9af2fec5b99a973d359b6b899b61",
|
||||
urls = [
|
||||
"https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/37419a124bdb9af2fec5b99a973d359b6b899b61.tar.gz",
|
||||
"https://github.com/bazelbuild/bazel-toolchains/archive/37419a124bdb9af2fec5b99a973d359b6b899b61.tar.gz",
|
||||
],
|
||||
)
|
||||
print("""DEPRECATION WARNING:
|
||||
rules_angular_dependencies is no longer needed, and will be removed in a future release.
|
||||
We assume you will fetch rules_nodejs in your WORKSPACE file, and no other dependencies remain here.
|
||||
Simply remove any calls to this function and the corresponding call to
|
||||
load("@angular//:package.bzl", "rules_angular_dependencies")
|
||||
""")
|
||||
|
||||
def rules_angular_dev_dependencies():
|
||||
"""
|
||||
@ -60,14 +31,16 @@ def rules_angular_dev_dependencies():
|
||||
url = "https://github.com/google/brotli/archive/v1.0.5.zip",
|
||||
)
|
||||
|
||||
# The TypeScript rules transitively fetch a version of "rules_webtesting", but the version
|
||||
# does not include 239b491e8251588bb46297b899d306ae7024858e which updates the "chromedriver"
|
||||
# version so that e2e tests are able to capture the browser console output. This is needed
|
||||
# for a few e2e tests, so we manually fetch a version that includes that required SHA.
|
||||
http_archive(
|
||||
name = "io_bazel_rules_webtesting",
|
||||
url = "https://github.com/bazelbuild/rules_webtesting/archive/1f430d5e1cae10efc953a6511147e21b3bc03a5d.zip",
|
||||
strip_prefix = "rules_webtesting-1f430d5e1cae10efc953a6511147e21b3bc03a5d",
|
||||
# Needed for Remote Execution
|
||||
_maybe(
|
||||
http_archive,
|
||||
name = "bazel_toolchains",
|
||||
sha256 = "ee854b5de299138c1f4a2edb5573d22b21d975acfc7aa938f36d30b49ef97498",
|
||||
strip_prefix = "bazel-toolchains-37419a124bdb9af2fec5b99a973d359b6b899b61",
|
||||
urls = [
|
||||
"https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/37419a124bdb9af2fec5b99a973d359b6b899b61.tar.gz",
|
||||
"https://github.com/bazelbuild/bazel-toolchains/archive/37419a124bdb9af2fec5b99a973d359b6b899b61.tar.gz",
|
||||
],
|
||||
)
|
||||
|
||||
#############################################
|
||||
|
@ -15,7 +15,7 @@
|
||||
"@angular-devkit/architect": "^0.10.6",
|
||||
"@angular-devkit/core": "^7.0.4",
|
||||
"@angular-devkit/schematics": "^7.3.0-rc.0",
|
||||
"@bazel/typescript": "^0.22.1",
|
||||
"@bazel/typescript": "^0.23.2",
|
||||
"@schematics/angular": "^7.0.4",
|
||||
"@types/node": "6.0.84",
|
||||
"semver": "^5.6.0",
|
||||
@ -38,4 +38,4 @@
|
||||
"scripts": {
|
||||
"postinstall": "node ./check_version.js"
|
||||
}
|
||||
}
|
||||
}
|
@ -5,17 +5,9 @@
|
||||
|
||||
"Install toolchain dependencies"
|
||||
|
||||
load("@build_bazel_rules_typescript//:defs.bzl", "check_rules_typescript_version")
|
||||
|
||||
def ng_setup_workspace():
|
||||
"""This repository rule should be called from your WORKSPACE file.
|
||||
|
||||
It creates some additional Bazel external repositories that are used internally
|
||||
by the Angular rules.
|
||||
"""
|
||||
|
||||
# 0.16.0: minimal version required to work with ng_module
|
||||
# 0.16.2: bazel type resolution for zone.js types
|
||||
# 0.20.1: fine grained deps
|
||||
# 0.20.2: version check fix
|
||||
check_rules_typescript_version("0.20.2")
|
||||
|
@ -19,13 +19,6 @@ http_archive(
|
||||
strip_prefix = "rules_nodejs-%s" % RULES_NODEJS_VERSION,
|
||||
)
|
||||
|
||||
RULES_TYPESCRIPT_VERSION = "<%= RULES_TYPESCRIPT_VERSION %>"
|
||||
http_archive(
|
||||
name = "build_bazel_rules_typescript",
|
||||
url = "https://github.com/bazelbuild/rules_typescript/archive/%s.zip" % RULES_TYPESCRIPT_VERSION,
|
||||
strip_prefix = "rules_typescript-%s" % RULES_TYPESCRIPT_VERSION,
|
||||
)
|
||||
|
||||
# The @angular repo contains rule for building Angular applications
|
||||
ANGULAR_VERSION = "<%= ANGULAR_VERSION %>"
|
||||
http_archive(
|
||||
@ -53,15 +46,6 @@ http_archive(
|
||||
####################################
|
||||
# Load and install our dependencies downloaded above.
|
||||
|
||||
load("@angular//packages/bazel:package.bzl", "rules_angular_dependencies")
|
||||
rules_angular_dependencies()
|
||||
|
||||
load("@build_bazel_rules_typescript//:package.bzl", "rules_typescript_dependencies")
|
||||
rules_typescript_dependencies()
|
||||
|
||||
load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dependencies")
|
||||
rules_nodejs_dependencies()
|
||||
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
||||
# 0.18.0 is needed for .bazelignore
|
||||
check_bazel_version("0.18.0")
|
||||
@ -72,6 +56,12 @@ yarn_install(
|
||||
yarn_lock = "//:yarn.lock",
|
||||
)
|
||||
|
||||
load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
|
||||
install_bazel_dependencies()
|
||||
|
||||
load("@build_bazel_rules_karma//:package.bzl", "rules_karma_dependencies")
|
||||
rules_karma_dependencies()
|
||||
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains")
|
||||
go_rules_dependencies()
|
||||
go_register_toolchains()
|
||||
|
@ -1,10 +1,10 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("@angular//:index.bzl", "ng_module")
|
||||
load("@build_bazel_rules_typescript//:defs.bzl", "ts_library", "ts_web_test_suite")
|
||||
load("@build_bazel_rules_karma//:defs.bzl", "ts_web_test_suite")
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle", "history_server")
|
||||
load("@build_bazel_rules_nodejs//internal/web_package:web_package.bzl", "web_package")
|
||||
load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver")
|
||||
load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver", "ts_library")
|
||||
<% if (sass) { %>load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")
|
||||
|
||||
[
|
||||
|
@ -92,7 +92,6 @@ export default function(options: BazelWorkspaceOptions): Rule {
|
||||
|
||||
const workspaceVersions = {
|
||||
'RULES_NODEJS_VERSION': '0.16.5',
|
||||
'RULES_TYPESCRIPT_VERSION': '0.22.1',
|
||||
'ANGULAR_VERSION': existingVersions.Angular || clean(latestVersions.Angular),
|
||||
'RXJS_VERSION': existingVersions.RxJs || clean(latestVersions.RxJs),
|
||||
// TODO(kyliau): Consider moving this to latest-versions.ts
|
||||
|
@ -8,12 +8,12 @@
|
||||
* @fileoverview Schematics for ng-new project that builds with Bazel.
|
||||
*/
|
||||
|
||||
import {SchematicContext, apply, applyTemplates, chain, mergeWith, move, Rule, schematic, Tree, url, SchematicsException, UpdateRecorder,} from '@angular-devkit/schematics';
|
||||
import {parseJsonAst, JsonAstObject, strings, JsonValue} from '@angular-devkit/core';
|
||||
import {findPropertyInAstObject, insertPropertyInAstObjectInOrder} from '@schematics/angular/utility/json-utils';
|
||||
import {validateProjectName} from '@schematics/angular/utility/validation';
|
||||
import {getWorkspacePath} from '@schematics/angular/utility/config';
|
||||
import {Schema} from './schema';
|
||||
import { SchematicContext, apply, applyTemplates, chain, mergeWith, move, Rule, schematic, Tree, url, SchematicsException, UpdateRecorder, } from '@angular-devkit/schematics';
|
||||
import { parseJsonAst, JsonAstObject, strings, JsonValue } from '@angular-devkit/core';
|
||||
import { findPropertyInAstObject, insertPropertyInAstObjectInOrder } from '@schematics/angular/utility/json-utils';
|
||||
import { validateProjectName } from '@schematics/angular/utility/validation';
|
||||
import { getWorkspacePath } from '@schematics/angular/utility/config';
|
||||
import { Schema } from './schema';
|
||||
|
||||
/**
|
||||
* Packages that build under Bazel require additional dev dependencies. This
|
||||
@ -40,18 +40,18 @@ function addDevDependenciesToPackageJson(options: Schema) {
|
||||
}
|
||||
const angularCoreVersion = angularCoreNode.value as string;
|
||||
|
||||
const devDependencies: {[k: string]: string} = {
|
||||
const devDependencies: { [ k: string ]: string } = {
|
||||
'@angular/bazel': angularCoreVersion,
|
||||
// TODO(kyliau): Consider moving this to latest-versions.ts
|
||||
'@bazel/bazel': '^0.22.1',
|
||||
'@bazel/ibazel': '^0.9.0',
|
||||
'@bazel/karma': '^0.22.1',
|
||||
'@bazel/typescript': '^0.22.1',
|
||||
'@bazel/karma': '^0.23.2',
|
||||
'@bazel/typescript': '^0.23.2',
|
||||
};
|
||||
|
||||
const recorder = host.beginUpdate(packageJson);
|
||||
for (const packageName of Object.keys(devDependencies)) {
|
||||
const version = devDependencies[packageName];
|
||||
const version = devDependencies[ packageName ];
|
||||
const indent = 4;
|
||||
insertPropertyInAstObjectInOrder(recorder, devDeps, packageName, version, indent);
|
||||
}
|
||||
@ -103,23 +103,23 @@ function updateGitignore() {
|
||||
}
|
||||
|
||||
function replacePropertyInAstObject(
|
||||
recorder: UpdateRecorder, node: JsonAstObject, propertyName: string, value: JsonValue,
|
||||
indent: number) {
|
||||
recorder: UpdateRecorder, node: JsonAstObject, propertyName: string, value: JsonValue,
|
||||
indent: number) {
|
||||
const property = findPropertyInAstObject(node, propertyName);
|
||||
if (property === null) {
|
||||
throw new Error(`Property ${propertyName} does not exist in JSON object`);
|
||||
}
|
||||
const {start, text} = property;
|
||||
const { start, text } = property;
|
||||
recorder.remove(start.offset, text.length);
|
||||
const indentStr = '\n' +
|
||||
' '.repeat(indent);
|
||||
' '.repeat(indent);
|
||||
const content = JSON.stringify(value, null, ' ').replace(/\n/g, indentStr);
|
||||
recorder.insertLeft(start.offset, content);
|
||||
}
|
||||
|
||||
function updateAngularJsonToUseBazelBuilder(options: Schema): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
const {name} = options;
|
||||
const { name } = options;
|
||||
const workspacePath = getWorkspacePath(host);
|
||||
if (!workspacePath) {
|
||||
throw new Error('Could not find angular.json');
|
||||
@ -137,61 +137,61 @@ function updateAngularJsonToUseBazelBuilder(options: Schema): Rule {
|
||||
const recorder = host.beginUpdate(workspacePath);
|
||||
const indent = 8;
|
||||
const architect =
|
||||
findPropertyInAstObject(project as JsonAstObject, 'architect') as JsonAstObject;
|
||||
findPropertyInAstObject(project as JsonAstObject, 'architect') as JsonAstObject;
|
||||
replacePropertyInAstObject(
|
||||
recorder, architect, 'build', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {
|
||||
targetLabel: '//src:bundle.js',
|
||||
bazelCommand: 'build',
|
||||
},
|
||||
configurations: {
|
||||
production: {
|
||||
targetLabel: '//src:bundle',
|
||||
},
|
||||
recorder, architect, 'build', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {
|
||||
targetLabel: '//src:bundle.js',
|
||||
bazelCommand: 'build',
|
||||
},
|
||||
configurations: {
|
||||
production: {
|
||||
targetLabel: '//src:bundle',
|
||||
},
|
||||
},
|
||||
indent);
|
||||
},
|
||||
indent);
|
||||
replacePropertyInAstObject(
|
||||
recorder, architect, 'serve', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {
|
||||
targetLabel: '//src:devserver',
|
||||
bazelCommand: 'run',
|
||||
},
|
||||
configurations: {
|
||||
production: {
|
||||
targetLabel: '//src:prodserver',
|
||||
},
|
||||
recorder, architect, 'serve', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {
|
||||
targetLabel: '//src:devserver',
|
||||
bazelCommand: 'run',
|
||||
},
|
||||
configurations: {
|
||||
production: {
|
||||
targetLabel: '//src:prodserver',
|
||||
},
|
||||
},
|
||||
indent);
|
||||
},
|
||||
indent);
|
||||
replacePropertyInAstObject(
|
||||
recorder, architect, 'test', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {'bazelCommand': 'test', 'targetLabel': '//src/...'},
|
||||
},
|
||||
indent);
|
||||
recorder, architect, 'test', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: { 'bazelCommand': 'test', 'targetLabel': '//src/...' },
|
||||
},
|
||||
indent);
|
||||
|
||||
const e2e = `${options.name}-e2e`;
|
||||
const e2eNode = findPropertyInAstObject(projects as JsonAstObject, e2e);
|
||||
if (e2eNode) {
|
||||
const architect =
|
||||
findPropertyInAstObject(e2eNode as JsonAstObject, 'architect') as JsonAstObject;
|
||||
findPropertyInAstObject(e2eNode as JsonAstObject, 'architect') as JsonAstObject;
|
||||
replacePropertyInAstObject(
|
||||
recorder, architect, 'e2e', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {
|
||||
bazelCommand: 'test',
|
||||
targetLabel: '//e2e:devserver_test',
|
||||
},
|
||||
configurations: {
|
||||
production: {
|
||||
targetLabel: '//e2e:prodserver_test',
|
||||
},
|
||||
}
|
||||
recorder, architect, 'e2e', {
|
||||
builder: '@angular/bazel:build',
|
||||
options: {
|
||||
bazelCommand: 'test',
|
||||
targetLabel: '//e2e:devserver_test',
|
||||
},
|
||||
indent);
|
||||
configurations: {
|
||||
production: {
|
||||
targetLabel: '//e2e:prodserver_test',
|
||||
},
|
||||
}
|
||||
},
|
||||
indent);
|
||||
}
|
||||
|
||||
host.commitUpdate(recorder);
|
||||
@ -210,13 +210,13 @@ function backupAngularJson(): Rule {
|
||||
return;
|
||||
}
|
||||
host.create(
|
||||
`${workspacePath}.bak`, '// This is a backup file of the original angular.json. ' +
|
||||
'This file is needed in case you want to revert to the workflow without Bazel.\n\n' +
|
||||
host.read(workspacePath));
|
||||
`${workspacePath}.bak`, '// This is a backup file of the original angular.json. ' +
|
||||
'This file is needed in case you want to revert to the workflow without Bazel.\n\n' +
|
||||
host.read(workspacePath));
|
||||
};
|
||||
}
|
||||
|
||||
export default function(options: Schema): Rule {
|
||||
export default function (options: Schema): Rule {
|
||||
return (host: Tree) => {
|
||||
validateProjectName(options.name);
|
||||
|
||||
|
@ -8,11 +8,11 @@
|
||||
* @fileoverview Schematics for ng-new project that builds with Bazel.
|
||||
*/
|
||||
|
||||
import {Rule, Tree, chain, externalSchematic, schematic} from '@angular-devkit/schematics';
|
||||
import {validateProjectName} from '@schematics/angular/utility/validation';
|
||||
import {Schema} from './schema';
|
||||
import { Rule, Tree, chain, externalSchematic, schematic } from '@angular-devkit/schematics';
|
||||
import { validateProjectName } from '@schematics/angular/utility/validation';
|
||||
import { Schema } from './schema';
|
||||
|
||||
export default function(options: Schema): Rule {
|
||||
export default function (options: Schema): Rule {
|
||||
return (host: Tree) => {
|
||||
validateProjectName(options.name);
|
||||
|
||||
|
Reference in New Issue
Block a user