diff --git a/.github/workflows/webpage.yml b/.github/workflows/webpage.yml new file mode 100644 index 00000000..8d6cc29a --- /dev/null +++ b/.github/workflows/webpage.yml @@ -0,0 +1,129 @@ +# take from https://github.com/LincDocs/Workflow + +name: 部署文档 + +on: + push: + branches: ["main"] # 确保这是你正在使用的分支名称 + schedule: + # 定时任务。建议多个仓库错开,避免多个仓库同一时间一起坏掉。我个人用键盘阵列映射周1~5。特别是代理仓库比较需要这个 + - cron: '42 15 * * 6' # 每周六15:42触发工作流 + workflow_dispatch: + +permissions: + contents: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + deploy-gh-pages: + runs-on: ubuntu-latest + steps: + - name: 环境 - 构建库 + uses: actions/checkout@v4 + with: + fetch-depth: 1 + repository: LincZero/LincZero.github.io + ref: 'main' # 分支,旧raw + + - name: 环境 - 安装 pnpm + uses: pnpm/action-setup@v4 + with: + run_install: true + version: 9 + + - name: 环境 - 设置 Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + + # 获取仓库的相关配置 + # https://docs.github.com/zh/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables + # TODO:若 “仓库无前缀名” 是.github.io结尾,则设置为"/" + - name: 配置 - 获取仓库配置 + id: config1 # 用于给其他步骤引用 + working-directory: ./scripts/ + run: | + > git_config.json # 先清空 + echo "{" >> git_config.json + echo " \"GITHUB_WORKSPACE\": \"${GITHUB_WORKSPACE}\"," >> git_config.json # 工作路径 + echo " \"GITHUB_ACTION_PATH\": \"${GITHUB_ACTION_PATH}\"," >> git_config.json # action路径 + echo " \"GITHUB_ACTION_REPOSITORY\": \"${GITHUB_ACTION_REPOSITORY}\"," >> git_config.json # action仓库 + echo " \"GITHUB_REPOSITORY_OWNER\": \"${GITHUB_REPOSITORY_OWNER}\"," >> git_config.json # 仓库所属(格式: 可以是组织) + echo " \"GITHUB_ACTOR\": \"${GITHUB_ACTOR}\"," >> git_config.json # 仓库作者(格式: 不会是组织) + echo " \"GITHUB_REPOSITORY\": \"${GITHUB_REPOSITORY}\"," >> git_config.json # 仓库标识(格式: 个人或组织/仓库名) + echo " \"CALC_URL\": \"${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/\"," >> git_config.json # 仓库url + REPO_NAME=$(echo "${GITHUB_REPOSITORY}" | cut -d"/" -f2) + echo " \"CALC_REPO_NAME\": \"${REPO_NAME}\"" >> git_config.json # 仓库无前缀名 + echo "}" >> git_config.json + echo "::set-output name=REPO_NAME::$REPO_NAME" + + - name: 文档 - 文档克隆1 # 文档的克隆、构建、部署。注意 `clone --depth 1` 只拉最近一次提交,减少时间 + working-directory: ./src/ + run: | + rm README.md + + # git clone --depth 1 https://github.com/${GITHUB_REPOSITORY}.git # 如果有多个clone项则替换成这个,避免冲突 + git clone --depth 1 https://github.com/${GITHUB_REPOSITORY}.git temp_repo + + - name: 文档 - 文档克隆2, 允许使用代理仓库/指定文件夹 + working-directory: ./src/ + run: | + # step1. 克隆被代理仓库 + # 该仓库为代理仓库时,使用链接仓库而非此仓库 + # TODO 支持agency多个仓库。如果想更通用,干脆支持直接运行agency里的命令组 + if [ -f temp_repo/agency ]; then + echo "with agency" + GIT_LINK=$(sed -n '1p' temp_repo/agency | tr -d '\r') + DIR=$(sed -n '2p' temp_repo/agency | tr -d '\r') + rm -rf temp_repo + git clone --depth 1 $GIT_LINK temp_repo + else + echo "without agency" + DIR="docs/" + fi + + # 使用指定文件夹 + if [ -d "temp_repo/${DIR}" ]; then + echo "with docs folder: temp_repo/${DIR}" + # find temp_repo/* -maxdepth 0 -name docs -prune -o -exec rm -rf {} \; + # ls -l temp_repo/website/docs/ # debug + mv "temp_repo/${DIR}"/* . + rm -rf temp_repo + else + echo "without docs folder: temp_repo/${DIR}" + rsync -a temp_repo/ . + rm -rf temp_repo + fi + echo "---" + ls + + # [!code] 根据实际情况修改 (需要在仓库配置写入以及和文档仓库clone这两个步骤的后面) + - name: 配置 - 设置 + working-directory: ./ + run: | + # sed -i 's/base: \"\/\"/base: \"\/${{steps.config1.outputs.REPO_NAME}}\/\"/g' ./src/.vuepress/config.ts + cat ./scripts/git_config.json + rm -f ./src/.vuepress/config_cover.js + rm -f ./src/.vuepress/theme_cover.js + pnpm run gen-config + + - name: 文档 - 构建 + env: + NODE_OPTIONS: --max_old_space_size=20480 + run: |- + node -e 'console.log(v8.getHeapStatistics())' + pnpm run docs:build + > src/.vuepress/dist/.nojekyll + + - name: 文档 - 部署 + uses: JamesIves/github-pages-deploy-action@v4 + with: + # 这是文档部署到的分支名称 + branch: gh-pages + folder: src/.vuepress/dist diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 5b14b3de..b65e3517 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -93,7 +93,7 @@ - [Sized 和不定长类型 DST](advance/into-types/sized.md) - [枚举和整数](advance/into-types/enum-int.md) - [智能指针](advance/smart-pointer/intro.md) - - [Box堆对象分配](advance/smart-pointer/box.md) + - [`Box` 堆对象分配](advance/smart-pointer/box.md) - [Deref 解引用](advance/smart-pointer/deref.md) - [Drop 释放资源](advance/smart-pointer/drop.md) - [Rc 与 Arc 实现 1vN 所有权机制](advance/smart-pointer/rc-arc.md)