From 037a83e1ff937d7b3392708ca96ab52168918c40 Mon Sep 17 00:00:00 2001 From: Reinier Criel Date: Tue, 16 Dec 2025 14:47:53 +0100 Subject: [PATCH] Print warning if deprecated --include-python flag is given --- install-scripts/install-safe-chain.ps1 | 7 ++- install-scripts/install-safe-chain.sh | 3 ++ .../safe-chain/src/config/cliArguments.js | 19 +++++++- .../src/config/cliArguments.spec.js | 37 +++++++++++++++ .../include-python-deprecation.e2e.spec.js | 45 +++++++++++++++++++ 5 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 test/e2e/include-python-deprecation.e2e.spec.js diff --git a/install-scripts/install-safe-chain.ps1 b/install-scripts/install-safe-chain.ps1 index 9c0dcf7..af0e43d 100644 --- a/install-scripts/install-safe-chain.ps1 +++ b/install-scripts/install-safe-chain.ps1 @@ -3,7 +3,9 @@ # Usage with "iex (iwr {url} -UseBasicParsing)" --> See README.md param( - [switch]$ci + [switch]$ci, + # Backwards compatibility: deprecated; warn and ignore if supplied + [switch]$includepython ) $Version = $env:SAFE_CHAIN_VERSION # Will be fetched from latest release if not set @@ -119,6 +121,9 @@ function Install-SafeChain { if ($ci) { $installMsg += " in ci" } + if ($includepython) { + Write-Warn "-includepython is deprecated and ignored. Python ecosystem is now included by default." + } Write-Info $installMsg diff --git a/install-scripts/install-safe-chain.sh b/install-scripts/install-safe-chain.sh index 37d1710..8e19da7 100755 --- a/install-scripts/install-safe-chain.sh +++ b/install-scripts/install-safe-chain.sh @@ -134,6 +134,9 @@ parse_arguments() { --ci) USE_CI_SETUP=true ;; + --include-python) + warn "--include-python is deprecated and ignored. Python ecosystem is now included by default." + ;; *) error "Unknown argument: $arg" ;; diff --git a/packages/safe-chain/src/config/cliArguments.js b/packages/safe-chain/src/config/cliArguments.js index 4dd9336..71ab390 100644 --- a/packages/safe-chain/src/config/cliArguments.js +++ b/packages/safe-chain/src/config/cliArguments.js @@ -1,3 +1,5 @@ +import { ui } from "../environment/userInteraction.js"; + /** * @type {{loggingLevel: string | undefined, skipMinimumPackageAge: boolean | undefined, minimumPackageAgeHours: string | undefined}} */ @@ -33,7 +35,7 @@ export function initializeCliArguments(args) { setLoggingLevel(safeChainArgs); setSkipMinimumPackageAge(safeChainArgs); setMinimumPackageAgeHours(safeChainArgs); - + checkDeprecatedPythonFlag(args); return remainingArgs; } @@ -120,3 +122,18 @@ function hasFlagArg(args, flagName) { } return false; } + +/** + * Emits a deprecation warning for legacy --include-python flag + * + * @param {string[]} args + * @returns {void} + */ +export function checkDeprecatedPythonFlag(args) { + if (!Array.isArray(args)) return; + if (args.includes("--include-python")) { + ui.writeWarning( + "--include-python is deprecated and ignored. Python tooling is included by default." + ); + } +} diff --git a/packages/safe-chain/src/config/cliArguments.spec.js b/packages/safe-chain/src/config/cliArguments.spec.js index bbd5121..2b4f2f5 100644 --- a/packages/safe-chain/src/config/cliArguments.spec.js +++ b/packages/safe-chain/src/config/cliArguments.spec.js @@ -6,6 +6,7 @@ import { getSkipMinimumPackageAge, getMinimumPackageAgeHours, } from "./cliArguments.js"; +import { ui } from "../environment/userInteraction.js"; describe("initializeCliArguments", () => { it("should return all args when no safe-chain args are present", () => { @@ -271,4 +272,40 @@ describe("initializeCliArguments", () => { assert.strictEqual(getMinimumPackageAgeHours(), "-24"); }); + + it("should warn on deprecated --include-python for setup", () => { + const warnings = []; + const originalWriteWarning = ui.writeWarning; + ui.writeWarning = (msg, ...rest) => { + warnings.push(String(msg)); + }; + try { + const argv = ["node", "safe-chain", "setup", "--include-python"]; + initializeCliArguments(argv); + assert.ok( + warnings.some((m) => m.includes("--include-python is deprecated")), + "Expected a deprecation warning for --include-python in setup" + ); + } finally { + ui.writeWarning = originalWriteWarning; + } + }); + + it("should warn on deprecated --include-python for setup-ci", () => { + const warnings = []; + const originalWriteWarning = ui.writeWarning; + ui.writeWarning = (msg, ...rest) => { + warnings.push(String(msg)); + }; + try { + const argv = ["node", "safe-chain", "setup-ci", "--include-python"]; + initializeCliArguments(argv); + assert.ok( + warnings.some((m) => m.includes("--include-python is deprecated")), + "Expected a deprecation warning for --include-python in setup-ci" + ); + } finally { + ui.writeWarning = originalWriteWarning; + } + }); }); diff --git a/test/e2e/include-python-deprecation.e2e.spec.js b/test/e2e/include-python-deprecation.e2e.spec.js new file mode 100644 index 0000000..a7019b7 --- /dev/null +++ b/test/e2e/include-python-deprecation.e2e.spec.js @@ -0,0 +1,45 @@ +import { describe, it, before, beforeEach, afterEach } from "node:test"; +import { DockerTestContainer } from "./DockerTestContainer.js"; +import assert from "node:assert"; + +describe("E2E: deprecated --include-python handling", () => { + let container; + + before(async () => { + DockerTestContainer.buildImage(); + }); + + beforeEach(async () => { + container = new DockerTestContainer(); + await container.start(); + }); + + afterEach(async () => { + if (container) { + await container.stop(); + container = null; + } + }); + + for (let shell of ["bash", "zsh"]) { + it(`safe-chain setup warns and continues for ${shell}`, async () => { + const sh = await container.openShell(shell); + const result = await sh.runCommand("safe-chain setup --include-python"); + + assert.ok( + result.output.toLowerCase().includes("deprecated and ignored"), + `Expected warning about deprecated --include-python. Output was:\n${result.output}` + ); + }); + + it(`safe-chain setup-ci warns and continues for ${shell}`, async () => { + const sh = await container.openShell(shell); + const result = await sh.runCommand("safe-chain setup-ci --include-python"); + + assert.ok( + result.output.toLowerCase().includes("deprecated and ignored"), + `Expected warning about deprecated --include-python. Output was:\n${result.output}` + ); + }); + } +});