mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Merge branch 'main' into feature/pipx-2
This commit is contained in:
commit
b9de94f0f1
25 changed files with 401 additions and 660 deletions
|
|
@ -231,7 +231,7 @@ describe("E2E: NODE_EXTRA_CA_CERTS merging", () => {
|
|||
it(`pip install works without NODE_EXTRA_CA_CERTS set`, async () => {
|
||||
const shell = await container.openShell("zsh");
|
||||
|
||||
await shell.runCommand("safe-chain setup --include-python");
|
||||
await shell.runCommand("safe-chain setup");
|
||||
await shell.runCommand("unset NODE_EXTRA_CA_CERTS");
|
||||
|
||||
const result = await shell.runCommand(
|
||||
|
|
@ -247,7 +247,7 @@ describe("E2E: NODE_EXTRA_CA_CERTS merging", () => {
|
|||
it(`pip install works with valid NODE_EXTRA_CA_CERTS set`, async () => {
|
||||
const shell = await container.openShell("zsh");
|
||||
|
||||
await shell.runCommand("safe-chain setup --include-python");
|
||||
await shell.runCommand("safe-chain setup");
|
||||
|
||||
// Create a temporary valid certificate
|
||||
await shell.runCommand("cp /etc/ssl/certs/ca-certificates.crt /tmp/pip-valid-certs.pem");
|
||||
|
|
@ -265,7 +265,7 @@ describe("E2E: NODE_EXTRA_CA_CERTS merging", () => {
|
|||
it(`pip install handles non-existent NODE_EXTRA_CA_CERTS gracefully`, async () => {
|
||||
const shell = await container.openShell("zsh");
|
||||
|
||||
await shell.runCommand("safe-chain setup --include-python");
|
||||
await shell.runCommand("safe-chain setup");
|
||||
|
||||
const result = await shell.runCommand(
|
||||
'export NODE_EXTRA_CA_CERTS="/tmp/nonexistent-pip-certs.pem" && pip3 install --break-system-packages requests'
|
||||
|
|
@ -281,7 +281,7 @@ describe("E2E: NODE_EXTRA_CA_CERTS merging", () => {
|
|||
it(`pip install handles invalid NODE_EXTRA_CA_CERTS gracefully`, async () => {
|
||||
const shell = await container.openShell("zsh");
|
||||
|
||||
await shell.runCommand("safe-chain setup --include-python");
|
||||
await shell.runCommand("safe-chain setup");
|
||||
|
||||
// Create invalid cert
|
||||
await shell.runCommand(
|
||||
|
|
|
|||
45
test/e2e/include-python-deprecation.e2e.spec.js
Normal file
45
test/e2e/include-python-deprecation.e2e.spec.js
Normal file
|
|
@ -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}`
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -86,7 +86,7 @@ describe("E2E: safe-chain setup-ci command for pip/pip3", () => {
|
|||
// Setup safe-chain CI shims
|
||||
const installationShell = await container.openShell(shell);
|
||||
await installationShell.runCommand(
|
||||
"safe-chain setup-ci --include-python"
|
||||
"safe-chain setup-ci"
|
||||
);
|
||||
|
||||
// Add $HOME/.safe-chain/shims to PATH for subsequent shells
|
||||
|
|
@ -115,7 +115,7 @@ describe("E2E: safe-chain setup-ci command for pip/pip3", () => {
|
|||
it(`setup-ci routes python -m pip through safe-chain for ${shell}`, async () => {
|
||||
const installationShell = await container.openShell(shell);
|
||||
await installationShell.runCommand(
|
||||
"safe-chain setup-ci --include-python"
|
||||
"safe-chain setup-ci"
|
||||
);
|
||||
await installationShell.runCommand(
|
||||
"echo 'export PATH=\"$HOME/.safe-chain/shims:$PATH\"' >> ~/.zshrc"
|
||||
|
|
@ -138,7 +138,7 @@ describe("E2E: safe-chain setup-ci command for pip/pip3", () => {
|
|||
it(`setup-ci routes python3 -m pip through safe-chain for ${shell}`, async () => {
|
||||
const installationShell = await container.openShell(shell);
|
||||
await installationShell.runCommand(
|
||||
"safe-chain setup-ci --include-python"
|
||||
"safe-chain setup-ci"
|
||||
);
|
||||
await installationShell.runCommand(
|
||||
"echo 'export PATH=\"$HOME/.safe-chain/shims:$PATH\"' >> ~/.zshrc"
|
||||
|
|
@ -161,7 +161,7 @@ describe("E2E: safe-chain setup-ci command for pip/pip3", () => {
|
|||
it(`setup-ci routes pip through safe-chain for ${shell}`, async () => {
|
||||
const installationShell = await container.openShell(shell);
|
||||
await installationShell.runCommand(
|
||||
"safe-chain setup-ci --include-python"
|
||||
"safe-chain setup-ci"
|
||||
);
|
||||
await installationShell.runCommand(
|
||||
"echo 'export PATH=\"$HOME/.safe-chain/shims:$PATH\"' >> ~/.zshrc"
|
||||
|
|
@ -184,7 +184,7 @@ describe("E2E: safe-chain setup-ci command for pip/pip3", () => {
|
|||
it(`setup-ci routes pip3 through safe-chain for ${shell}`, async () => {
|
||||
const installationShell = await container.openShell(shell);
|
||||
await installationShell.runCommand(
|
||||
"safe-chain setup-ci --include-python"
|
||||
"safe-chain setup-ci"
|
||||
);
|
||||
await installationShell.runCommand(
|
||||
"echo 'export PATH=\"$HOME/.safe-chain/shims:$PATH\"' >> ~/.zshrc"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ describe("E2E: pip coverage", () => {
|
|||
await container.start();
|
||||
|
||||
const installationShell = await container.openShell("zsh");
|
||||
await installationShell.runCommand("safe-chain setup --include-python");
|
||||
await installationShell.runCommand("safe-chain setup");
|
||||
|
||||
// Clear pip cache before each test to ensure fresh downloads through proxy
|
||||
await installationShell.runCommand("pip3 cache purge");
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ describe("E2E: poetry coverage", () => {
|
|||
await container.start();
|
||||
|
||||
const installationShell = await container.openShell("zsh");
|
||||
await installationShell.runCommand("safe-chain setup --include-python");
|
||||
await installationShell.runCommand("safe-chain setup");
|
||||
|
||||
// Clear poetry cache
|
||||
await installationShell.runCommand("command poetry cache clear pypi --all -n");
|
||||
|
|
|
|||
|
|
@ -57,20 +57,18 @@ describe("E2E: safe-chain teardown command", () => {
|
|||
assert.ok(checkScriptsGone.output.includes("missing"), "Scripts directory should be removed after teardown");
|
||||
});
|
||||
|
||||
it("safe-chain teardown removes shims directory created by setup-ci --include-python", async () => {
|
||||
it("safe-chain teardown removes shims directory created by setup-ci", async () => {
|
||||
const shell = await container.openShell("bash");
|
||||
|
||||
// Run setup-ci with --include-python
|
||||
await shell.runCommand("safe-chain setup-ci --include-python");
|
||||
|
||||
// Run setup-ci
|
||||
await shell.runCommand("safe-chain setup-ci");
|
||||
// Verify shims directory exists
|
||||
const checkShimsExist = await shell.runCommand("test -d ~/.safe-chain/shims && echo 'exists' || echo 'missing'");
|
||||
assert.ok(checkShimsExist.output.includes("exists"), "Shims directory should exist after setup-ci --include-python");
|
||||
assert.ok(checkShimsExist.output.includes("exists"), "Shims directory should exist after setup-ci");
|
||||
|
||||
// Verify Python shims were created
|
||||
const checkPythonShims = await shell.runCommand("test -f ~/.safe-chain/shims/pip && echo 'exists' || echo 'missing'");
|
||||
assert.ok(checkPythonShims.output.includes("exists"), "Python shims should exist after setup-ci --include-python");
|
||||
|
||||
assert.ok(checkPythonShims.output.includes("exists"), "Python shims should exist after setup-ci");
|
||||
// Run teardown
|
||||
await shell.runCommand("safe-chain teardown");
|
||||
|
||||
|
|
@ -79,15 +77,14 @@ describe("E2E: safe-chain teardown command", () => {
|
|||
assert.ok(checkShimsGone.output.includes("missing"), "Shims directory should be removed after teardown");
|
||||
});
|
||||
|
||||
it("safe-chain teardown removes scripts directory created by setup --include-python", async () => {
|
||||
it("safe-chain teardown removes scripts directory created by setup", async () => {
|
||||
const shell = await container.openShell("bash");
|
||||
|
||||
// Run setup with --include-python
|
||||
await shell.runCommand("safe-chain setup --include-python");
|
||||
|
||||
// Run setup
|
||||
await shell.runCommand("safe-chain setup");
|
||||
// Verify scripts directory exists
|
||||
const checkScriptsExist = await shell.runCommand("test -d ~/.safe-chain/scripts && echo 'exists' || echo 'missing'");
|
||||
assert.ok(checkScriptsExist.output.includes("exists"), "Scripts directory should exist after setup --include-python");
|
||||
assert.ok(checkScriptsExist.output.includes("exists"), "Scripts directory should exist after setup");
|
||||
|
||||
// Run teardown
|
||||
await shell.runCommand("safe-chain teardown");
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ describe("E2E: uv coverage", () => {
|
|||
await container.start();
|
||||
|
||||
const installationShell = await container.openShell("zsh");
|
||||
await installationShell.runCommand("safe-chain setup --include-python");
|
||||
await installationShell.runCommand("safe-chain setup");
|
||||
|
||||
// Clear uv cache
|
||||
await installationShell.runCommand("uv cache clean");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue