blob: 0bee6f7a938e374a4bff310651b460605d148b71 [file]
"""Tests for Read the Docs build script."""
from __future__ import annotations
import os
import subprocess
from pathlib import Path
from python.runfiles import runfiles
def _write_fake_bazel(bin_dir: Path, body: str) -> Path:
bin_dir.mkdir(parents=True, exist_ok=True)
fake_bazel = bin_dir / "bazel"
fake_bazel.write_text(
f"#!/usr/bin/env bash\nset -euo pipefail\n{body}\n", encoding="utf-8"
)
fake_bazel.chmod(0o755)
return fake_bazel
def _rtd_script() -> Path:
rf = runfiles.CreateOrRaise()
return rf.root() / "rules_python/docs/readthedocs_build.sh"
def test_pr_uses_cas_only_and_presubmit(tmp_path: Path):
"""Verifies PR builds use BUILDBUDDY_CAS_ONLY_KEY and presubmit config."""
calls_file = tmp_path / "bazel_calls.txt"
_write_fake_bazel(
tmp_path / "bin",
f'printf "%s\\n" "$*" >> "{calls_file}"\n',
)
env = {
"PATH": f"{tmp_path / 'bin'}{os.pathsep}{os.environ.get('PATH', '')}",
"HOME": str(tmp_path / "home"),
"HOSTNAME": "build-999-project-1-rules-python",
"READTHEDOCS": "True",
"READTHEDOCS_VERSION": "4242",
"READTHEDOCS_VERSION_TYPE": "external",
"READTHEDOCS_GIT_IDENTIFIER": "4242",
"READTHEDOCS_GIT_COMMIT_HASH": "deadbeef1234",
"READTHEDOCS_OUTPUT": str(tmp_path / "out"),
"BUILDBUDDY_CAS_ONLY_KEY": "rtd_cas_only_val",
"BUILDBUDDY_READ_WRITE_KEY": "rtd_rw_val",
}
result = subprocess.run(
[str(_rtd_script())],
cwd=tmp_path,
env=env,
capture_output=True,
text=True,
check=True,
)
combined_output = result.stdout + result.stderr
assert "rtd_cas_only_val" not in combined_output
assert "rtd_rw_val" not in combined_output
expected_rc = (
"common:buildbuddy_presubmit "
"--remote_header=x-buildbuddy-api-key=rtd_cas_only_val\n"
)
assert (tmp_path / "user.bazelrc").read_text(encoding="utf-8") == (expected_rc)
calls = calls_file.read_text(encoding="utf-8").splitlines()
assert len(calls) == 1
run_call = calls[0]
assert "--config=rtd" in run_call
assert "--config=buildbuddy_presubmit" in run_call
assert "--build_metadata=PR_NUMBER=4242" in run_call
assert "--build_metadata=COMMIT_SHA=deadbeef1234" in run_call
assert "--stamp" not in run_call
assert "HOSTNAME" not in run_call
assert "READTHEDOCS_OUTPUT" not in run_call
assert "--@sphinxdocs//sphinxdocs:extra_env=READTHEDOCS=True" in run_call
assert "READTHEDOCS_GIT_COMMIT_HASH" not in run_call
assert "READTHEDOCS_GIT_IDENTIFIER" not in run_call
assert "--@sphinxdocs//sphinxdocs:extra_env=READTHEDOCS_VERSION=" not in run_call
def test_non_pr_uses_read_write_and_stamps_tags(
tmp_path: Path,
):
"""Verifies non-PR builds use BUILDBUDDY_READ_WRITE_KEY and stamp tags."""
calls_file = tmp_path / "bazel_calls.txt"
_write_fake_bazel(
tmp_path / "bin",
f'printf "%s\\n" "$*" >> "{calls_file}"\n',
)
base_env = {
"PATH": f"{tmp_path / 'bin'}{os.pathsep}{os.environ.get('PATH', '')}",
"HOME": str(tmp_path / "home"),
"READTHEDOCS": "True",
"READTHEDOCS_GIT_COMMIT_HASH": "cafebabe5678",
"BUILDBUDDY_CAS_ONLY_KEY": "rtd_cas_only_val",
"BUILDBUDDY_READ_WRITE_KEY": "rtd_rw_val",
}
# 1. Branch build (latest / main): no --stamp
branch_dir = tmp_path / "branch_run"
branch_dir.mkdir()
subprocess.run(
[str(_rtd_script())],
cwd=branch_dir,
env={
**base_env,
"READTHEDOCS_VERSION": "latest",
"READTHEDOCS_VERSION_TYPE": "branch",
"READTHEDOCS_GIT_IDENTIFIER": "main",
},
capture_output=True,
text=True,
check=True,
)
expected_branch_rc = (
"common:buildbuddy_postsubmit --remote_header=x-buildbuddy-api-key=rtd_rw_val\n"
)
assert (branch_dir / "user.bazelrc").read_text(encoding="utf-8") == (
expected_branch_rc
)
# 2. Tag build (release): passes --stamp
tag_dir = tmp_path / "tag_run"
tag_dir.mkdir()
subprocess.run(
[str(_rtd_script())],
cwd=tag_dir,
env={
**base_env,
"READTHEDOCS_VERSION": "1.2.3",
"READTHEDOCS_VERSION_TYPE": "tag",
"READTHEDOCS_GIT_IDENTIFIER": "1.2.3",
},
capture_output=True,
text=True,
check=True,
)
calls = calls_file.read_text(encoding="utf-8").splitlines()
assert len(calls) == 2
branch_run_call = calls[0]
tag_run_call = calls[1]
assert "--config=buildbuddy_postsubmit" in branch_run_call
assert "--build_metadata=BRANCH_NAME=main" in branch_run_call
assert "--stamp" not in branch_run_call
assert (
"--@sphinxdocs//sphinxdocs:extra_env=READTHEDOCS_GIT_COMMIT_HASH=cafebabe5678"
in branch_run_call
)
assert (
"--@sphinxdocs//sphinxdocs:extra_env=READTHEDOCS_GIT_IDENTIFIER=main"
in branch_run_call
)
assert (
"--@sphinxdocs//sphinxdocs:extra_env=READTHEDOCS_VERSION=latest"
in branch_run_call
)
assert "--config=buildbuddy_postsubmit" in tag_run_call
assert "--build_metadata=BRANCH_NAME=1.2.3" in tag_run_call
assert "--stamp" in tag_run_call