From f7f81e5a6590f74d2f08f230c7e11fccf3a2b44a Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Tue, 29 Oct 2024 13:28:45 -0700 Subject: [PATCH] refactor(@angular-devkit/build-angular): adds `protractor` builder which throws with a clear error message This should help users who upgrade more easily discover that the builder has been removed and find the resources needed to migrate any existing tests. --- .../build_angular/builders.json | 5 +++++ .../src/builders/protractor-error/index.ts | 20 +++++++++++++++++++ .../e2e/tests/protractor/test-fails.ts | 15 ++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts create mode 100644 tests/legacy-cli/e2e/tests/protractor/test-fails.ts diff --git a/packages/angular_devkit/build_angular/builders.json b/packages/angular_devkit/build_angular/builders.json index 9141cdf94f2f..aba9dd1ffca6 100644 --- a/packages/angular_devkit/build_angular/builders.json +++ b/packages/angular_devkit/build_angular/builders.json @@ -42,6 +42,11 @@ "schema": "./src/builders/web-test-runner/schema.json", "description": "Run unit tests with Web Test Runner." }, + "protractor": { + "implementation": "./src/builders/protractor-error", + "schema": "./src/builders/protractor/schema.json", + "description": "Throw an error that Protractor is end-of-life and no longer supported." + }, "private-protractor": { "implementation": "./src/builders/protractor", "schema": "./src/builders/protractor/schema.json", diff --git a/packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts b/packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts new file mode 100644 index 000000000000..31c9fe183731 --- /dev/null +++ b/packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts @@ -0,0 +1,20 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { BuilderContext, createBuilder } from '@angular-devkit/architect'; +import { Schema as ProtractorBuilderOptions } from '../protractor/schema'; + +export default createBuilder( + (_options: ProtractorBuilderOptions, context: BuilderContext) => { + context.logger.error( + 'Protractor has reached end-of-life and is no longer supported. For additional information and alternatives, please see https://blog.angular.dev/protractor-deprecation-update-august-2023-2beac7402ce0.', + ); + + return { success: false }; + }, +); diff --git a/tests/legacy-cli/e2e/tests/protractor/test-fails.ts b/tests/legacy-cli/e2e/tests/protractor/test-fails.ts new file mode 100644 index 000000000000..e185975b6391 --- /dev/null +++ b/tests/legacy-cli/e2e/tests/protractor/test-fails.ts @@ -0,0 +1,15 @@ +import { execAndCaptureError } from '../../utils/process'; +import { updateJsonFile } from '../../utils/project'; + +export default async function () { + // Revert the `private-protractor` builder name back to the previous `protractor`. + await updateJsonFile('angular.json', (config) => { + config.projects['test-project'].architect['e2e'].builder = + '@angular-devkit/build-angular:protractor'; + }); + + const error = await execAndCaptureError('ng', ['e2e']); + if (!error.message.includes('Protractor has reached end-of-life')) { + throw new Error(`Protractor did not fail with an appropriate message. Got:\n${error.message}`); + } +}