Revision control

Copy as Markdown

#!/usr/bin/env python3
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
# Purpose: Run Firefox-iOS tests against this application-services working tree.
# Usage: ./automation/smoke-test-fxios.py
import argparse
import subprocess
import sys
import tempfile
from shared import fatal_err, find_app_services_root, run_cmd_checked, step_msg
parser = argparse.ArgumentParser(
description="Run Firefox-iOS tests against this application-services working tree."
)
group = parser.add_mutually_exclusive_group()
group.add_argument(
"--use-local-repo",
metavar="LOCAL_REPO_PATH",
help="Use a local copy of firefox-ios instead of cloning it.",
)
group.add_argument(
"--remote-repo-url",
metavar="REMOTE_REPO_PATH",
help="Clone a different firefox-ios repository.",
)
parser.add_argument("--branch", help="Branch of firefox-ios to use.")
parser.add_argument(
"--action",
choices=["open-project", "run-tests", "do-nothing"],
help="Run the following action once firefox-ios is set up.",
)
args = parser.parse_args()
firefox_ios_branch = args.branch
local_repo_path = args.use_local_repo
remote_repo_url = args.remote_repo_url
action = args.action
ios_repo_path = local_repo_path
appservices_path = find_app_services_root()
if local_repo_path is None:
ios_repo_path = tempfile.mkdtemp(suffix="-fxios")
if remote_repo_url is None:
remote_repo_url = DEFAULT_REMOTE_REPO_URL
step_msg(f"Cloning {remote_repo_url}")
run_cmd_checked(["git", "clone", remote_repo_url, ios_repo_path])
if firefox_ios_branch is not None:
run_cmd_checked(["git", "checkout", firefox_ios_branch], cwd=ios_repo_path)
elif firefox_ios_branch is not None:
fatal_err(
"Cannot specify branch when using a local repo; check it out locally and try again."
)
step_msg("Cloning rust-components-swift")
rcs_repo_path = tempfile.mkdtemp(suffix="-rcs")
run_cmd_checked(["git", "clone", DEFAULT_RCS_REPO_URL, rcs_repo_path])
step_msg("Setting up iOS to use the local application services")
run_cmd_checked(
["./rust_components_local.sh", "-a", appservices_path, rcs_repo_path],
cwd=ios_repo_path,
)
step_msg("Running the firefox-ios bootstrap script")
run_cmd_checked(["./bootstrap.sh"], cwd=ios_repo_path)
if action == "do-nothing":
sys.exit(0)
elif action == "open-project":
run_cmd_checked(["open", "Client.xcodeproj"], cwd=ios_repo_path)
elif action == "run-tests" or action is None:
# TODO: we specify scheme = Fennec, but it might be wrong? Check with iOS peeps.
step_msg("Running firefox-ios tests")
subprocess.run(
"""\
set -o pipefail && \
xcodebuild \
-workspace ./Client.xcodeproj/project.xcworkspace \
-scheme Fennec \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 14' \
test | \
tee raw_xcodetest.log | \
xcpretty && exit "${PIPESTATUS[0]}"
""",
cwd=ios_repo_path,
shell=True,
check=False,
)
else:
print("Sorry I did not understand what you wanted. Good luck!")