mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-01 17:50:29 +08:00
Allow running e2e test suite against a locally built httpd
This allows us to easily test httpd changes without doing a release first and then updating the radicle-httpd-release file.
This commit is contained in:
@@ -47,6 +47,16 @@ remove the `SKIP_SETUP` flag to ensure tests run against the latest build.
|
||||
* Subsequent runs (no code changes): `SKIP_SETUP=true npm run test:e2e -- --project chromium`
|
||||
* Single test by line number: `SKIP_SETUP=true npm run test:e2e -- tests/e2e/repo/commits.spec.ts:90 --project chromium`
|
||||
|
||||
**Testing with local radicle-httpd build:**
|
||||
|
||||
If you're developing radicle-httpd and want to test changes locally:
|
||||
|
||||
npm run test:e2e:local
|
||||
|
||||
This will:
|
||||
1. Compile radicle-httpd from the `radicle-httpd/` directory
|
||||
2. Run the full test suite against the locally compiled binary
|
||||
|
||||
Proposing changes
|
||||
-----------------
|
||||
When proposing changes via a patch:
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"format": "npx prettier '**/*.@(ts|js|svelte|json|css|html|yml)' --write",
|
||||
"test:unit": "TZ='UTC' vitest run",
|
||||
"test:e2e": "NODE_CONFIG_ENV='test' TZ='UTC' playwright test",
|
||||
"test:e2e:local": "scripts/compile-local-httpd && USE_LOCAL_HTTPD=true NODE_CONFIG_ENV='test' TZ='UTC' playwright test",
|
||||
"test:http-client:unit": "NODE_CONFIG_ENV='test' TZ='UTC' vitest run --config http-client/vite.config.ts --reporter verbose",
|
||||
"test:radicle-httpd": "cd radicle-httpd && cargo test --all-features",
|
||||
"deploy": "rimraf build && npm clean-install && npm run build && scripts/inject-plausible && npx wrangler deploy"
|
||||
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
echo "🔨 Compiling local radicle-httpd..."
|
||||
|
||||
# Ensure radicle-httpd directory exists
|
||||
if [ ! -d "radicle-httpd" ]; then
|
||||
echo "❌ radicle-httpd directory not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Compile radicle-httpd (debug build for faster compilation)
|
||||
cd radicle-httpd
|
||||
cargo build
|
||||
cd ..
|
||||
|
||||
# Verify binary was created
|
||||
if [ ! -f "radicle-httpd/target/debug/radicle-httpd" ]; then
|
||||
echo "❌ Compilation failed - binary not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create target directory
|
||||
mkdir -p tests/tmp/bin/httpd/local
|
||||
|
||||
# Copy binary to test location
|
||||
cp radicle-httpd/target/debug/radicle-httpd tests/tmp/bin/httpd/local/radicle-httpd
|
||||
|
||||
echo "✅ Local radicle-httpd compiled and ready at tests/tmp/bin/httpd/local/radicle-httpd"
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
radicleHttpdRelease,
|
||||
removeWorkspace,
|
||||
tmpDir,
|
||||
useLocalHttpd,
|
||||
} from "@tests/support/support.js";
|
||||
import {
|
||||
defaultConfig,
|
||||
@@ -24,12 +25,9 @@ const heartwoodBinaryPath = Path.join(
|
||||
"heartwood",
|
||||
heartwoodRelease,
|
||||
).trim();
|
||||
const httpdBinaryPath = Path.join(
|
||||
tmpDir,
|
||||
"bin",
|
||||
"httpd",
|
||||
radicleHttpdRelease,
|
||||
).trim();
|
||||
const httpdBinaryPath = useLocalHttpd
|
||||
? Path.join(tmpDir, "bin", "httpd", "local").trim()
|
||||
: Path.join(tmpDir, "bin", "httpd", radicleHttpdRelease).trim();
|
||||
|
||||
process.env.PATH = [
|
||||
heartwoodBinaryPath,
|
||||
@@ -42,14 +40,19 @@ export default async function globalSetup(): Promise<() => void> {
|
||||
await assertBinariesInstalled("rad", heartwoodRelease, heartwoodBinaryPath);
|
||||
await assertBinariesInstalled(
|
||||
"radicle-httpd",
|
||||
radicleHttpdRelease,
|
||||
useLocalHttpd ? "pre-release" : radicleHttpdRelease,
|
||||
httpdBinaryPath,
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.log("");
|
||||
console.log("To download the required test binaries, run:");
|
||||
console.log(" 👉 ./scripts/install-binaries");
|
||||
if (useLocalHttpd) {
|
||||
console.log("To compile local radicle-httpd binary, run:");
|
||||
console.log(" 👉 ./scripts/compile-local-httpd");
|
||||
} else {
|
||||
console.log("To download the required test binaries, run:");
|
||||
console.log(" 👉 ./scripts/install-binaries");
|
||||
}
|
||||
console.log("");
|
||||
process.exit(1);
|
||||
}
|
||||
@@ -62,7 +65,7 @@ export default async function globalSetup(): Promise<() => void> {
|
||||
if (shouldSetup) {
|
||||
console.log("⚡ Starting parallel setup...");
|
||||
} else {
|
||||
console.log("⏭️ Skipping setup (SKIP_SETUP is set)");
|
||||
console.log("⏭️ Skipping setup (SKIP_SETUP is set)");
|
||||
}
|
||||
|
||||
// Run build and fixture setup in parallel
|
||||
@@ -162,6 +165,25 @@ export default async function globalSetup(): Promise<() => void> {
|
||||
console.log("🚀 Setup complete, ready to run tests");
|
||||
}
|
||||
|
||||
// Print binary versions
|
||||
const { execa: exec } = await import("execa");
|
||||
const { stdout: radVersion } = await exec("rad", ["--version"]);
|
||||
const { stdout: gitRemoteRadVersion } = await exec("git-remote-rad", [
|
||||
"--version",
|
||||
]);
|
||||
const { stdout: httpdVersion } = await exec("radicle-httpd", ["--version"]);
|
||||
// radicle-httpd outputs logging lines, extract just the version line (last line)
|
||||
const httpdVersionClean =
|
||||
httpdVersion.trim().split("\n").pop() || httpdVersion;
|
||||
console.log("");
|
||||
console.log("Binary versions:");
|
||||
console.log(` rad: ${radVersion.trim()}`);
|
||||
console.log(` git-remote-rad: ${gitRemoteRadVersion.trim()}`);
|
||||
console.log(
|
||||
` radicle-httpd: ${httpdVersionClean}${useLocalHttpd ? " (local)" : ""}`,
|
||||
);
|
||||
console.log("");
|
||||
|
||||
return async () => {
|
||||
await peerManager.shutdown();
|
||||
};
|
||||
|
||||
@@ -33,6 +33,8 @@ export const radicleHttpdRelease = (
|
||||
await Fs.readFile(`${supportDir}/radicle-httpd-release`, "utf8")
|
||||
).trim();
|
||||
|
||||
export const useLocalHttpd = process.env.USE_LOCAL_HTTPD === "true";
|
||||
|
||||
// Assert that binaries are installed and are the correct version.
|
||||
export async function assertBinariesInstalled(
|
||||
binary: string,
|
||||
|
||||
Reference in New Issue
Block a user