mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Address e2e suite failures
This commit is contained in:
parent
e891d1a992
commit
5f0ad7ecfd
4 changed files with 165 additions and 105 deletions
70
test/e2e/utils/rushtestutils.mjs
Normal file
70
test/e2e/utils/rushtestutils.mjs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
// Helpers for the Rush E2E suites.
|
||||
//
|
||||
// What these suites actually test: that safe-chain's shim intercepts `rush`
|
||||
// and `rushx` invocations correctly. The contents of `rush.json` are just
|
||||
// fixture noise needed to make Rush run at all — Rush's schema requires
|
||||
// exact semver for `rushVersion`/`pnpmVersion` and refuses dist-tags like
|
||||
// "latest", so we resolve those once per suite.
|
||||
//
|
||||
// * `rushVersion` is read from the `rush` binary baked into the image
|
||||
// (Dockerfile installs `@microsoft/rush@${RUSH_VERSION:-latest}`).
|
||||
// * `pnpmVersion` is pinned to a known-good pnpm 9 release. Rush downloads
|
||||
// this internally into `~/.rush/...`; it's unrelated to the system
|
||||
// pnpm exercised by the pnpm e2e suite.
|
||||
|
||||
const PINNED_PNPM_VERSION = "9.15.9";
|
||||
|
||||
/** Resolves the versions to put into `rush.json`. */
|
||||
export async function resolveRushVersions(shell) {
|
||||
return {
|
||||
rushVersion: await getInstalledRushVersion(shell),
|
||||
pnpmVersion: PINNED_PNPM_VERSION,
|
||||
};
|
||||
}
|
||||
|
||||
/** Builds the standard `rush.json` body for the e2e fixtures. */
|
||||
export function buildRushConfig({ rushVersion, pnpmVersion, projects }) {
|
||||
return {
|
||||
$schema:
|
||||
"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json",
|
||||
rushVersion,
|
||||
pnpmVersion,
|
||||
nodeSupportedVersionRange: ">=18.0.0",
|
||||
projectFolderMinDepth: 1,
|
||||
projectFolderMaxDepth: 2,
|
||||
gitPolicy: {},
|
||||
repository: {
|
||||
url: "https://example.com/testapp.git",
|
||||
defaultBranch: "main",
|
||||
},
|
||||
eventHooks: {
|
||||
preRushInstall: [],
|
||||
postRushInstall: [],
|
||||
preRushBuild: [],
|
||||
postRushBuild: [],
|
||||
},
|
||||
projects: projects ?? [
|
||||
{ packageName: "test-app", projectFolder: "apps/test-app" },
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a UTF-8 text file inside the container, base64-encoding the payload
|
||||
* to avoid shell escaping issues for arbitrary content.
|
||||
*/
|
||||
export async function writeTextFile(shell, filePath, content) {
|
||||
const encoded = Buffer.from(content).toString("base64");
|
||||
await shell.runCommand(`printf '%s' '${encoded}' | base64 -d > ${filePath}`);
|
||||
}
|
||||
|
||||
async function getInstalledRushVersion(shell) {
|
||||
const { output } = await shell.runCommand("rush --version");
|
||||
const match = output.match(/\b(\d+\.\d+\.\d+)\b/);
|
||||
if (!match) {
|
||||
throw new Error(
|
||||
`Could not determine installed Rush version. Output was:\n${output}`
|
||||
);
|
||||
}
|
||||
return match[1];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue