Files
zulip/tools/test-help-documentation
Shubham Padia a766c092fc help: Restore broken link checks for help center documentation.
We add a step to build help center and then test the broken links as we
used to before removing the test temporarily.

This commit focuses on just adding back the broken link checks for the
help center. We skip the fragment check since that is in-built in
starlight and starlight tests account for that already. For the image
check we can add it back in a followup issue.
2025-09-03 09:28:15 -07:00

109 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import contextlib
import os
import subprocess
import sys
from collections.abc import Iterator
ZULIP_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.chdir(ZULIP_PATH)
sys.path.insert(0, ZULIP_PATH)
# check for the venv
from tools.lib import sanity_check
sanity_check.check_venv(__file__)
from tools.lib.test_script import add_provision_check_override_param
from tools.lib.test_server import test_server_running
parser = argparse.ArgumentParser()
add_provision_check_override_param(parser)
parser.add_argument(
"--skip-external-links",
dest="skip_external_link_check",
action="store_true",
help="Skip checking of external links.",
)
parser.add_argument(
"--help-center",
dest="enable_help_center",
action="store_true",
help="Test help center generated as part of the astro build process. If this option is set to True, this script assumes that you already have performend the build step.",
)
options = parser.parse_args()
os.makedirs("var/help-documentation", exist_ok=True)
LOG_FILE = "var/help-documentation/server.log"
external_host = "localhost:9981"
extra_args = []
if options.skip_external_link_check:
extra_args += ["-a", "skip_external=set"]
@contextlib.contextmanager
def vnu_servlet() -> Iterator[None]:
with subprocess.Popen(
[
"java",
"-cp",
os.path.join(
os.path.dirname(__file__),
"../node_modules/vnu-jar/build/dist/vnu.jar",
),
"-Dnu.validator.servlet.bind-address=127.0.0.1",
"nu.validator.servlet.Main",
"9988",
]
) as proc:
yield
proc.terminate()
with (
vnu_servlet(),
test_server_running(
options.skip_provision_check,
external_host,
log_file=LOG_FILE,
dots=True,
enable_help_center=options.enable_help_center,
),
):
ret_help_doc = subprocess.call(
[
"scrapy",
"crawl_with_status",
*extra_args,
"-a",
"skip_check_fragment=set",
"help_documentation_crawler",
],
cwd="tools/documentation_crawler",
)
extra_args += ["-a", "validate_html=set"]
ret_api_doc = subprocess.call(
["scrapy", "crawl_with_status", *extra_args, "api_documentation_crawler"],
cwd="tools/documentation_crawler",
)
ret_portico_doc = subprocess.call(
["scrapy", "crawl_with_status", *extra_args, "portico_documentation_crawler"],
cwd="tools/documentation_crawler",
)
if ret_help_doc != 0 or ret_api_doc != 0 or ret_portico_doc != 0:
print("\033[0;91m")
print("Failed")
print("\033[0m")
else:
print("\033[0;92m")
print("Passed!")
print("\033[0m")
sys.exit(ret_help_doc or ret_api_doc or ret_portico_doc)