name: Deploy to GitHub Pages
branches: [ main ] # 每次推送到 `main` 分支时触发这个“工作流程”
workflow_dispatch: # 允许你在 GitHub 上的 Actions 标签中手动触发此“工作流程”
contents: read # 允许 job 克隆 repo 并创建一个 page deployment
- name: Checkout your repository using git
uses: actions/checkout@v4 # 使用 actions/checkout@v4 检出存储库
npm install -g pnpm # 安装 pnpm
echo "PNPM Store Path: $(pnpm store path)" # 打印 pnpm 存储路径
ls node_modules || echo "node_modules 目录不存在" # 列出 node_modules 目录,如果不存在则打印信息
path: ~/.pnpm-store # 缓存 pnpm 存储
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
${{ runner.os }}-pnpm-store-
path: node_modules # 缓存 node_modules 目录
key: ${{ runner.os }}-node_modules-${{ hashFiles('pnpm-lock.yaml') }}
${{ runner.os }}-node_modules-
run: pnpm run build # 确保这个命令将构建产物输出到 dist 目录
uses: actions/upload-artifact@v4
uses: actions/download-artifact@v4
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git clone --branch gh-pages git@github.com:your_repository/your_repository.github.io.git deploy
if [ -f deploy/CNAME ]; then cp deploy/CNAME CNAME; fi
rsync -av --delete --exclude '.git' --exclude 'CNAME' dist/ deploy/
if [ -f CNAME ]; then mv CNAME deploy/CNAME; fi
- name: 提交并推送到 gh-pages 分支
git commit -m "Deploy to GitHub Pages"