airflow publish_docs 源码

  • 2022-10-20
  • 浏览 (329)

airflow publish_docs 代码

文件路径:/docs/publish_docs.py

#!/usr/bin/env python3

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
from __future__ import annotations

import argparse
import os

from docs.exts.docs_build.docs_builder import AirflowDocsBuilder
from docs.exts.docs_build.package_filter import process_package_filters
from docs.exts.provider_yaml_utils import load_package_data

AIRFLOW_SITE_DIR = os.environ.get('AIRFLOW_SITE_DIRECTORY')


if __name__ != "__main__":
    raise SystemExit(
        "This file is intended to be executed as an executable program. You cannot use it as a module."
        "To run this script, run the ./build_docs.py command"
    )

if not (
    AIRFLOW_SITE_DIR
    and os.path.isdir(AIRFLOW_SITE_DIR)
    and os.path.isdir(os.path.join(AIRFLOW_SITE_DIR, 'docs-archive'))
):
    raise SystemExit(
        'Before using this script, set the environment variable AIRFLOW_SITE_DIRECTORY. This variable '
        'should contain the path to the airflow-site repository directory. '
        '${AIRFLOW_SITE_DIRECTORY}/docs-archive must exists.'
    )

ALL_PROVIDER_YAMLS = load_package_data()


def get_available_packages():
    """Get list of all available packages to build."""
    provider_package_names = [provider['package-name'] for provider in ALL_PROVIDER_YAMLS]
    return [
        "apache-airflow",
        "docker-stack",
        *provider_package_names,
        "apache-airflow-providers",
        "helm-chart",
    ]


def _get_parser():
    available_packages_list = " * " + "\n * ".join(get_available_packages())
    parser = argparse.ArgumentParser(
        description='Copies the built documentation to airflow-site repository.',
        epilog=f"List of supported documentation packages:\n{available_packages_list}",
    )
    parser.formatter_class = argparse.RawTextHelpFormatter
    parser.add_argument(
        '--disable-checks', dest='disable_checks', action='store_true', help='Disables extra checks'
    )
    parser.add_argument(
        '--override-versioned',
        dest='override_versioned',
        action='store_true',
        help='Overrides versioned directories',
    )
    parser.add_argument(
        "--package-filter",
        action="append",
        help=(
            "Filter specifying for which packages the documentation is to be built. Wildcard are supported."
        ),
    )

    return parser


def main():
    """Main code"""
    args = _get_parser().parse_args()
    available_packages = get_available_packages()

    package_filters = args.package_filter

    current_packages = process_package_filters(available_packages, package_filters)
    print(f"Publishing docs for {len(current_packages)} package(s)")
    for pkg in current_packages:
        print(f" - {pkg}")
    print()
    for package_name in current_packages:
        builder = AirflowDocsBuilder(package_name=package_name, for_production=True)
        builder.publish(override_versioned=args.override_versioned)


main()

相关信息

airflow 源码目录

相关文章

airflow init 源码

airflow build_docs 源码

airflow conf 源码

0  赞