Files
pulse/scripts/release_control/internal/release_preflight_test.py
T

107 lines
3.8 KiB
Python
Executable File

#!/usr/bin/env python3
from __future__ import annotations
import os
import pathlib
import subprocess
import unittest
ROOT = pathlib.Path(__file__).resolve().parents[3]
class ReleasePreflightTest(unittest.TestCase):
def run_script(
self, *args: str, env: dict[str, str] | None = None
) -> subprocess.CompletedProcess[str]:
command_env = os.environ.copy()
if env:
command_env.update(env)
return subprocess.run(
[str(ROOT / "scripts/run-release-preflight.sh"), *args],
cwd=ROOT,
env=command_env,
check=False,
capture_output=True,
text=True,
)
def test_plan_resolves_exact_sha_and_wsl_transport(self) -> None:
sha = subprocess.check_output(
["git", "rev-parse", "HEAD"], cwd=ROOT, text=True
).strip()
result = self.run_script(
"--profile",
"rehearsal",
"--host",
"test-worker",
"--wsl-distro",
"Ubuntu",
"--plan",
)
self.assertEqual(result.returncode, 0, result.stderr)
self.assertIn(f"SHA: {sha}", result.stdout)
self.assertIn("Runtime: WSL Ubuntu", result.stdout)
def test_missing_optional_worker_is_a_non_gate(self) -> None:
result = self.run_script(
"--profile",
"release",
"--if-configured",
env={
"PULSE_RELEASE_PREFLIGHT_HOST": "",
"PULSE_RELEASE_PREFLIGHT_WSL_DISTRO": "",
"GIT_CONFIG_NOSYSTEM": "1",
},
)
configured_host = subprocess.run(
["git", "config", "--get", "pulse.releasePreflightHost"],
cwd=ROOT,
check=False,
capture_output=True,
text=True,
)
if configured_host.returncode == 0:
self.skipTest("repository has a local release-preflight host configured")
self.assertEqual(result.returncode, 0, result.stderr)
self.assertIn("canonical hosted checks", result.stdout)
def test_worker_rejects_non_exact_sha_before_touching_worker_state(self) -> None:
result = subprocess.run(
[str(ROOT / "scripts/release-preflight-worker.sh"), "HEAD", "rehearsal"],
cwd=ROOT,
check=False,
capture_output=True,
text=True,
)
self.assertEqual(result.returncode, 2)
self.assertIn("40-character Git commit id", result.stderr)
def test_dispatch_helpers_select_the_matching_profiles(self) -> None:
dry_run = (ROOT / "scripts/trigger-release-dry-run.sh").read_text()
release = (ROOT / "scripts/trigger-release.sh").read_text()
workflow = (ROOT / ".github/workflows/release-dry-run.yml").read_text()
self.assertIn("--profile rehearsal", dry_run)
self.assertIn("--profile release", release)
self.assertIn("--if-configured", dry_run)
self.assertIn("--if-configured", release)
self.assertIn('PULSE_E2E_DIAGNOSTIC: "1"', workflow)
def test_worker_has_no_publication_or_signing_authority(self) -> None:
worker = (ROOT / "scripts/release-preflight-worker.sh").read_text()
runner = (ROOT / "scripts/run-release-preflight.sh").read_text()
self.assertIn("unset GH_TOKEN GITHUB_TOKEN", worker)
self.assertIn("export GITHUB_ACTIONS=true", worker)
self.assertIn("export CI=true", worker)
self.assertNotIn("docker push", worker)
self.assertNotIn("gh release", worker)
self.assertIn("mcr.microsoft.com/playwright:v${PLAYWRIGHT_VERSION}-noble", worker)
self.assertIn(
'git show "${SOURCE_SHA}:scripts/release-preflight-worker.sh"', runner
)
self.assertIn("is not reachable from a fetched origin branch", runner)
if __name__ == "__main__":
unittest.main()