#!/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.assertIn('export GOTMPDIR="$GO_TMP_DIR"', worker) self.assertIn('rm -rf "$GO_TMP_DIR"', worker) self.assertIn('sub(/^toolchain /, "")', 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()