#!/usr/bin/env bash #============================================================ # File: deploy.sh # Description: 部署 # URL: # Author: Jetsung Chan # Version: 0.2.0 # CreatedAt: 2025-12-16 # UpdatedAt: 2026-01-08 #============================================================ if [[ -n "${DEBUG:-}" ]]; then set -eux else set -euo pipefail fi DEFAULT_BRANCH="main" HUGO_VERSION=${HUGO:-0.154.2} DELETE_FILE="deleted_docs.txt" ADD_FILE="new_docs.txt" MODIFIED_FILE="modified_docs.txt" TRANSLATE_LIST="translate_list.txt" install_hugo() { curl -L https://fx4.cn/hugo | bash -s -- -v "$HUGO_VERSION" -w } merge_config() { if [[ -f config.example.toml ]]; then sed '/providers/,$d' ./config.example.toml | tee config.toml > /dev/null fi if [[ -f aitr.toml ]]; then sed -n '/logging/,$p' aitr.toml | tee -a config.toml > /dev/null fi } merge_source() { [[ -d docsite ]] || mkdir docsite pushd docsite if [[ -d .git ]]; then git remote set-url upstream https://github.com/xxx/docs.git else git init git remote add upstream https://github.com/xxx/docs.git fi git reset --hard git fetch upstream main git merge upstream/main popd rm -rf docs cp -r docsite/docs . } # 增量更新 incremental_update() { merge_source # 记录删除的文件 git ls-files --deleted docs/ | tee "$DELETE_FILE" export ROOT_DIR=$(grep root_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||') export OUTPUT_DIR=$(grep output_dir config.toml | cut -d'"' -f 2 | sed 's|^\./||') # sed -i "s|^$ROOT_DIR/|$OUTPUT_DIR/|g" "$DELETE_FILE" # 删除对应的输出文件 while read -r file; do new_file="${file/$ROOT_DIR/$OUTPUT_DIR}" echo "$new_file" rm -rf "$new_file" || true done < "$DELETE_FILE" # 更新 git 索引 git add . # 记录新增和修改的文件 git diff --cached --name-only --diff-filter=A docs/ | tee "$ADD_FILE" git diff --cached --name-only --diff-filter=M docs/ | tee "$MODIFIED_FILE" cat "$ADD_FILE" "$MODIFIED_FILE" | tee "$TRANSLATE_LIST" # 移除以 .png .jpg .jpeg .gif 结尾的文件 sed -i '/\.\(png\|jpg\|jpeg\|gif\)$/d' "$TRANSLATE_LIST" # 合并 config.toml merge_config # # 翻译增量文件 # if ! command -v aitr &> /dev/null; then # echo "正在安装 aitr ..." # curl -L https://fx4.cn/aitr | bash # fi # 调用 aitr 进行翻译 if command -v aitr &> /dev/null; then aitr --input "$TRANSLATE_LIST" --list --output translated cp -r "translated/${ROOT_DIR}/"* "${OUTPUT_DIR}"/ else echo "aitr 未安装,跳过构建步骤。" fi } # 复制 docs_zh 至 content copy_docs_zh() { if [[ ! -d docsite ]]; then git clone https://github.com/xxx/docs.git docsite fi if [[ -d "translated/docs" ]]; then echo "使用 translated/docs 的文档覆盖 docs_zh" cp -r translated/docs/* docs_zh/ fi cp -r docs_zh/* docsite/docs/ } # 调用翻译脚本 translate() { aitr } usage() { cat << EOF 用法: $0 [选项] 选项: -c --copy 复制 docs_zh -g --config 合并 config.toml -s --source 合并文档 -i --incremental 增量更新 -t --translate 调用翻译脚本 -h --help 显示此帮助信息 示例: $0 --translate EOF } main() { if [[ $# -eq 0 ]]; then usage exit 1 fi while [[ $# -gt 0 ]]; do case $1 in -c|--copy) copy_docs_zh shift ;; -g|--config) merge_config shift ;; -s|--source) merge_source shift ;; -i|--incremental) incremental_update shift ;; -t|--translate) translate shift ;; --help|-h) usage exit 0 ;; *) echo "未知参数: $1" >&2 usage exit 1 ;; esac done } main "$@"