zhamao-framework/bin/prepare-doxygen

77 lines
2.2 KiB
Plaintext
Raw Normal View History

2022-12-22 22:20:38 +08:00
#!/usr/bin/env php
<?php
function find_valid_root(string $current_dir, int $max_loop): string
{
if ($max_loop <= 0) {
return '';
}
if (!file_exists($current_dir . '/composer.json')) {
return find_valid_root(dirname($current_dir), $max_loop - 1);
}
return $current_dir;
}
$root = find_valid_root(getcwd(), 3);
if (empty($root)) {
echo '找不到有效的根目录';
exit(1);
}
chdir($root);
require_once $root . '/vendor/autoload.php';
// 获取参数,可为 before 或 after
$param = $argv[1] ?? 'before';
if ($param === 'before') {
// Doxyfile file source: https://pastebin.com/raw/N8tJ9kWE
// Posted by: sunxyw
// 从剪贴板获取 Doxyfile 内容并保存到临时文件
logger()->info('正在获取 Doxyfile 内容');
$doxyfile = file_get_contents('https://pastebin.com/raw/N8tJ9kWE');
$doxyfile = str_replace('<zm_version>', \ZM\Framework::VERSION, $doxyfile);
file_put_contents('Doxyfile', $doxyfile);
// 应用 Awesome 样式
// 来源https://github.com/jothepro/doxygen-awesome-css.git
// 优先使用本地文件
logger()->info('正在应用 Awesome 样式');
\ZM\Store\FileSystem::createDir('doxy/css');
if (
file_exists('doxy/css/doxygen-awesome.css') &&
(md5_file('doxy/css/doxygen-awesome.css') === '326a1447f9693d1b3876f59de837a7c0')
) {
logger()->info('本地 Awesome 样式文件已存在,跳过下载');
} else {
logger()->info('正在下载 Awesome 样式文件');
$cmd = [
'git clone https://github.com/jothepro/doxygen-awesome-css.git doxy/css',
'cd doxy/css',
'git checkout v2.1.0',
'cd ../..',
];
$cmd = implode(' && ', $cmd);
exec($cmd);
}
} elseif ($param === 'after') {
// 删除临时文件
unlink('Doxyfile');
// 清除旧文档
2023-01-06 15:45:51 +08:00
exec('sudo rm -rf docs/.vuepress/public/doxy');
2022-12-22 22:20:38 +08:00
2023-01-04 16:36:37 +08:00
// 授予目录权限doxy/html
2023-01-06 15:45:51 +08:00
exec('sudo chmod -R 777 doxy/html');
2023-01-04 16:36:37 +08:00
2022-12-22 22:20:38 +08:00
// 移动新文档到 docs 目录
2023-01-06 15:45:51 +08:00
exec('sudo mv doxy/html docs/.vuepress/public/doxy');
2022-12-22 22:20:38 +08:00
logger()->info('文档生成完成');
} else {
logger()->error('参数错误');
exit(1);
}