mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This PR changes the format check on CI to use the command added in https://github.com/flutter/engine/pull/50747. Additionally, while making this change, I noticed that the CI check was not checking the formatting of all files, and that as a result, files were present in the repo with incorrect formatting. I have fixed the formatting and fixed the check to always check all files.
107 lines
3.5 KiB
Python
Executable File
107 lines
3.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright 2013 The Flutter Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# Generates API docs for Flutter embedders and libraries.
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import zipfile
|
|
import sys
|
|
import subprocess
|
|
from collections import namedtuple
|
|
|
|
Section = namedtuple('Section', ['title', 'inputs'])
|
|
|
|
SECTIONS = {
|
|
'ios':
|
|
Section(
|
|
'iOS Embedder', [
|
|
'shell/platform/darwin/ios',
|
|
'shell/platform/darwin/common',
|
|
'shell/platform/common',
|
|
]
|
|
),
|
|
'macos':
|
|
Section(
|
|
'macOS Embedder', [
|
|
'shell/platform/darwin/macos',
|
|
'shell/platform/darwin/common',
|
|
'shell/platform/common',
|
|
]
|
|
),
|
|
'linux':
|
|
Section('Linux Embedder', [
|
|
'shell/platform/linux',
|
|
'shell/platform/common',
|
|
]),
|
|
'windows':
|
|
Section('Windows Embedder', [
|
|
'shell/platform/windows',
|
|
'shell/platform/common',
|
|
]),
|
|
'impeller':
|
|
Section('Impeller', [
|
|
'impeller',
|
|
]),
|
|
}
|
|
|
|
|
|
def generate_doxyfile(section, output_dir, log_file, doxy_file):
|
|
doxyfile = open('docs/Doxyfile.template', 'r').read()
|
|
doxyfile = doxyfile.replace('@@OUTPUT_DIRECTORY@@', output_dir)
|
|
doxyfile = doxyfile.replace('@@LOG_FILE@@', log_file)
|
|
doxyfile = doxyfile.replace('@@INPUT_DIRECTORIES@@', '"{}"'.format('" "'.join(section.inputs)))
|
|
doxyfile = doxyfile.replace('@@PROJECT_NAME@@', 'Flutter {}'.format(section.title))
|
|
doxyfile = doxyfile.replace(
|
|
'@@DOCSET_FEEDNAME@@', 'Flutter {} Documentation'.format(section.title)
|
|
)
|
|
with open(doxy_file, 'w') as f:
|
|
f.write(doxyfile)
|
|
|
|
|
|
def process_section(name, section, destination):
|
|
output_dir = tempfile.mkdtemp(prefix="doxygen")
|
|
log_file = os.path.join(destination, '{}-doxygen.log'.format(name))
|
|
zip_file = os.path.join(destination, '{}-docs.zip'.format(name))
|
|
doxy_file = os.path.join(output_dir, 'Doxyfile')
|
|
generate_doxyfile(section, output_dir, log_file, doxy_file)
|
|
# Update the Doxyfile format to the latest format.
|
|
subprocess.call(['doxygen', '-u'], cwd=output_dir)
|
|
subprocess.call(['doxygen', doxy_file])
|
|
html_dir = os.path.join(output_dir, 'html')
|
|
with zipfile.ZipFile(zip_file, 'w') as zip:
|
|
for root, _, files in os.walk(html_dir):
|
|
for file in files:
|
|
filename = os.path.join(root, file)
|
|
zip.write(filename, os.path.relpath(filename, html_dir))
|
|
print('Wrote ZIP file for {} to {}'.format(section, zip_file))
|
|
print('Preserving log file in {}'.format(log_file))
|
|
shutil.rmtree(output_dir, ignore_errors=True)
|
|
|
|
|
|
def generate_docs(argv):
|
|
if len(argv) != 2:
|
|
print(
|
|
'Error: Argument specifying output directory required. '
|
|
'Directory may be an absolute path, or a relative path from the "src" directory.'
|
|
)
|
|
exit(1)
|
|
|
|
destination = argv[1]
|
|
script_path = os.path.realpath(__file__)
|
|
src_path = os.path.dirname(os.path.dirname(os.path.dirname(script_path)))
|
|
# Run commands from the Flutter root dir.
|
|
os.chdir(os.path.join(src_path, 'flutter'))
|
|
# If the argument isn't an absolute path, assume that it is relative to the src dir.
|
|
if not os.path.isabs(destination):
|
|
destination = os.path.join(src_path, destination)
|
|
os.makedirs(destination, exist_ok=True)
|
|
for name, section in SECTIONS.items():
|
|
process_section(name, section, destination)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
generate_docs(sys.argv)
|