def METHOD_NAME(
    context: CfnginContext,
    provider: Provider,
    *,
    options: Optional[OptionsArgTypeDef] = None,
    **kwargs: Any,
) -> Dict[str, Any]:
    """Build static site.
    Arguments parsed by :class:`~runway.cfngin.hooks.staticsite.build_staticsite.HookArgs`.
    """
    options = options or {}
    options.setdefault("namespace", context.namespace)
    options.setdefault("path", str(context.config_path))
    args = HookArgs.parse_obj({"options": options, **kwargs})
    session = context.get_session()
    context_dict: Dict[str, Any] = {
        "artifact_key_prefix": f"{args.options.namespace}-{args.options.name}-"
    }
    if args.options.build_output:
        build_output = os.path.join(args.options.path, args.options.build_output)
    else:
        build_output = args.options.path
    context_dict["artifact_bucket_name"] = RxrefLookup.handle(
        args.artifact_bucket_rxref_lookup, provider=provider, context=context
    )
    if args.options.pre_build_steps:
        run_commands(args.options.pre_build_steps, args.options.path)
    context_dict["hash"] = get_hash_of_files(
        root_path=Path(args.options.path),
        directories=options.get("source_hashing", {"directories": None}).get(
            "directories"
        ),
    )
    LOGGER.debug("application hash: %s", context_dict["hash"])
    # Now determine if the current staticsite has already been deployed
    if args.options.source_hashing.enabled:
        context_dict["hash_tracking_parameter"] = (
            args.options.source_hashing.parameter
            or f"{context_dict['artifact_key_prefix']}hash"
        )
        ssm_client = session.client("ssm")
        try:
            old_parameter_value = ssm_client.get_parameter(
                Name=context_dict["hash_tracking_parameter"]
            )["Parameter"]["Value"]
        except ssm_client.exceptions.ParameterNotFound:
            old_parameter_value = None
    else:
        context_dict["hash_tracking_disabled"] = True
        old_parameter_value = None
    context_dict["current_archive_filename"] = (
        context_dict["artifact_key_prefix"] + context_dict["hash"] + ".zip"
    )
    if old_parameter_value:
        context_dict["old_archive_filename"] = (
            context_dict["artifact_key_prefix"] + old_parameter_value + ".zip"
        )
    if old_parameter_value == context_dict["hash"]:
        LOGGER.info("skipped build; hash already deployed")
        context_dict["deploy_is_current"] = True
        return context_dict
    if does_s3_object_exist(
        context_dict["artifact_bucket_name"],
        context_dict["current_archive_filename"],
        session,
    ):
        context_dict["app_directory"] = download_and_extract_to_mkdtemp(
            context_dict["artifact_bucket_name"],
            context_dict["current_archive_filename"],
            session,
        )
    else:
        if args.options.build_steps:
            LOGGER.info("build steps (in progress)")
            run_commands(args.options.build_steps, args.options.path)
            LOGGER.info("build steps (complete)")
        zip_and_upload(
            build_output,
            context_dict["artifact_bucket_name"],
            context_dict["current_archive_filename"],
            session,
        )
        context_dict["app_directory"] = build_output
    context_dict["deploy_is_current"] = False
    return context_dict