wojack ha revisionato questo gist 2 months ago. Vai alla revisione
Nessuna modifica
wojack ha revisionato questo gist 2 months ago. Vai alla revisione
3 files changed, 95 insertions, 33 deletions
deploy-to-server.yml(file creato)
| @@ -0,0 +1,56 @@ | |||
| 1 | + | # .github/workflows/deploy-to-server.yml | |
| 2 | + | name: Deploy CNB Content to Server (Auto via Event) | |
| 3 | + | ||
| 4 | + | on: | |
| 5 | + | repository_dispatch: | |
| 6 | + | types: [deploy-to-server] # 监听来自其他工作流的自定义事件 | |
| 7 | + | workflow_dispatch: # 保留手动触发能力(调试用) | |
| 8 | + | ||
| 9 | + | jobs: | |
| 10 | + | deploy: | |
| 11 | + | runs-on: ubuntu-latest | |
| 12 | + | ||
| 13 | + | steps: | |
| 14 | + | # 🔍 1. 检出当前仓库(用于获取 secrets) | |
| 15 | + | - name: 📥 Checkout repository | |
| 16 | + | uses: actions/checkout@v5 | |
| 17 | + | ||
| 18 | + | # 🚀 2. 使用 SSH 连接服务器并部署 | |
| 19 | + | - name: 🖥️ Deploy to server via SSH | |
| 20 | + | uses: appleboy/ssh-action@v1 | |
| 21 | + | with: | |
| 22 | + | host: ${{ secrets.SERVER_IP }} | |
| 23 | + | username: ${{ secrets.SERVER_USERNAME }} | |
| 24 | + | key: ${{ secrets.SERVER_SSH_KEY }} # 私钥内容(完整 PEM 格式) | |
| 25 | + | port: ${{ secrets.SERVER_PORT || 22 }} # 默认 22,可不填 | |
| 26 | + | script: | | |
| 27 | + | # 设置变量 | |
| 28 | + | TARGET_DIR="/opt/1panel/www/sites/home.gyhwd.top/index" | |
| 29 | + | TEMP_DIR="/tmp/cnb-deploy" | |
| 30 | + | ||
| 31 | + | echo "🧹 Cleaning old temporary directory..." | |
| 32 | + | rm -rf "$TEMP_DIR" | |
| 33 | + | mkdir -p "$TEMP_DIR" | |
| 34 | + | ||
| 35 | + | echo "🔗 Cloning CNB repository into temporary directory..." | |
| 36 | + | git clone --depth 1 \ | |
| 37 | + | "https://${{ secrets.CNB_USERNAME }}:${{ secrets.CNB_TOKEN }}@cnb.cool/gyhwd.top/AhHui-Homepage.git" \ | |
| 38 | + | "$TEMP_DIR" | |
| 39 | + | ||
| 40 | + | echo "📂 Clearing target directory..." | |
| 41 | + | rm -rf "$TARGET_DIR"/* | |
| 42 | + | mkdir -p "$TARGET_DIR" | |
| 43 | + | ||
| 44 | + | echo "🔄 Copying CNB content to server site directory (flattened)..." | |
| 45 | + | cp -r "$TEMP_DIR"/* "$TARGET_DIR/" | |
| 46 | + | ||
| 47 | + | echo "🗑️ Cleaning up temporary directory..." | |
| 48 | + | rm -rf "$TEMP_DIR" | |
| 49 | + | ||
| 50 | + | echo "✅ Successfully deployed! Files synced to: $TARGET_DIR" | |
| 51 | + | ls -la "$TARGET_DIR" # Output final structure for debugging | |
| 52 | + | ||
| 53 | + | # (可选)重启 Nginx(如果需要) | |
| 54 | + | # systemctl reload nginx | |
| 55 | + | ||
| 56 | + | echo "🌐 Website will auto-deploy at: https://home.gyhwd.top" | |
generate-static-site-bk.yml rinominato come generate-static-site.yml
| @@ -65,12 +65,29 @@ jobs: | |||
| 65 | 65 | git config --global user.name "GitHub Actions" | |
| 66 | 66 | ||
| 67 | 67 | # 6. 部署到 page 分支 | |
| 68 | - | - name: 🚀 Commit and push to page | |
| 68 | + | - name: 🚀 Update page branch with new content | |
| 69 | 69 | run: | | |
| 70 | 70 | cd static | |
| 71 | + | ||
| 71 | 72 | git init | |
| 72 | - | git checkout -b page | |
| 73 | + | git config --global user.name 'GitHub Action' | |
| 74 | + | git config --global user.email 'action@github.com' | |
| 75 | + | ||
| 76 | + | git remote add origin "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" | |
| 77 | + | ||
| 78 | + | git fetch origin page --depth=1 || true | |
| 79 | + | ||
| 80 | + | git checkout page || git checkout -b page | |
| 81 | + | ||
| 73 | 82 | git add . | |
| 74 | - | # 使用 [skip ci] 防止 page 推送再次触发 CI | |
| 75 | - | git commit -m "[skip ci] 🖼️ Auto-update Bing images and deploy" | |
| 76 | - | git push --force "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" page | |
| 83 | + | git commit -m "[skip ci] 🖼️ Auto-update Bing images and deploy $(date +'%%Y-%%m-%%d %%H:%%M:%%S')" --allow-empty | |
| 84 | + | ||
| 85 | + | git push --force origin page | |
| 86 | + | ||
| 87 | + | # 👇 新增:主动触发 sync-page-to-cnb.yml | |
| 88 | + | echo "✅ Pushed to page branch. Triggering sync to CNB..." | |
| 89 | + | curl -X POST \ | |
| 90 | + | -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ | |
| 91 | + | -H "Accept: application/vnd.github.v3+json" \ | |
| 92 | + | https://api.github.com/repos/${{ github.repository }}/dispatches \ | |
| 93 | + | -d '{"event_type": "sync-to-cnb"}' | |
sync-page-to-cnb.yml
| @@ -1,14 +1,18 @@ | |||
| 1 | 1 | # .github/workflows/sync-page-to-cnb.yml | |
| 2 | 2 | name: Sync Page Branch to CNB (Auto Deploy) | |
| 3 | 3 | ||
| 4 | + | # 避免并发堆积 | |
| 5 | + | concurrency: | |
| 6 | + | group: ${{ github.ref }} | |
| 7 | + | cancel-in-progress: true | |
| 8 | + | ||
| 4 | 9 | on: | |
| 5 | - | push: | |
| 6 | - | branches: | |
| 7 | - | - page # 当 page 分支有新提交时自动触发(由每日壁纸生成脚本推送) | |
| 10 | + | repository_dispatch: | |
| 11 | + | types: [sync-to-cnb] # 👈 监听来自 generate-static-site.yml 的事件 | |
| 8 | 12 | workflow_dispatch: | |
| 9 | 13 | inputs: | |
| 10 | 14 | reason: | |
| 11 | - | description: '手动触发原因(如:测试部署或紧急更新)' | |
| 15 | + | description: '测试部署' | |
| 12 | 16 | required: false | |
| 13 | 17 | default: 'Manual run' | |
| 14 | 18 | ||
| @@ -25,28 +29,14 @@ jobs: | |||
| 25 | 29 | token: ${{ secrets.GITHUB_TOKEN }} | |
| 26 | 30 | fetch-depth: 0 # 获取完整历史记录,确保 git diff 能正常工作 | |
| 27 | 31 | ||
| 28 | - | # 🔍 2. 检测是否有实际变更(兼容首次提交) | |
| 29 | - | - name: 🔎 Check for file changes | |
| 32 | + | # 🔍 2. 强制部署(不再检查变更) | |
| 33 | + | - name: 🔁 Always deploy | |
| 30 | 34 | id: check | |
| 31 | 35 | run: | | |
| 32 | - | # 判断当前是否为首次提交(无父提交) | |
| 33 | - | if [ -z "$(git rev-parse --verify HEAD^ 2>/dev/null)" ]; then | |
| 34 | - | echo "🆕 First commit detected — assuming changes exist and proceeding." | |
| 35 | - | echo "skip=false" >> $GITHUB_OUTPUT | |
| 36 | - | else | |
| 37 | - | # 获取上一次提交与当前提交之间的文件差异 | |
| 38 | - | CHANGES=$(git diff --name-only HEAD^ HEAD) | |
| 39 | - | if [ -z "$CHANGES" ]; then | |
| 40 | - | echo "✅ No changes detected since last commit. Skipping sync." | |
| 41 | - | echo "skip=true" >> $GITHUB_OUTPUT | |
| 42 | - | else | |
| 43 | - | echo "✨ Changes detected:" | |
| 44 | - | echo "$CHANGES" | |
| 45 | - | echo "skip=false" >> $GITHUB_OUTPUT | |
| 46 | - | fi | |
| 47 | - | fi | |
| 48 | - | ||
| 49 | - | # 🚀 3. 推送到 CNB(仅当有变更时执行) | |
| 36 | + | echo "✅ Page branch updated with new commit. Forcing deployment to CNB." | |
| 37 | + | echo "skip=false" >> $GITHUB_OUTPUT | |
| 38 | + | ||
| 39 | + | # 🚀 3. 推送到 CNB | |
| 50 | 40 | - name: 🚀 Push to CNB & Trigger Deployment | |
| 51 | 41 | if: steps.check.outputs.skip == 'false' | |
| 52 | 42 | env: | |
| @@ -65,19 +55,18 @@ jobs: | |||
| 65 | 55 | git add . | |
| 66 | 56 | ||
| 67 | 57 | echo "📝 Committing with timestamp..." | |
| 68 | - | # 使用 %% 转义 %,因为 YAML 中 % 是特殊字符 | |
| 69 | - | git commit -m "⚡ Sync from GitHub page branch: $(date +'%%Y-%%m-%%d %%H:%%M:%%S')" | |
| 58 | + | git commit -m "[skip ci] 🖼️ Auto-update Bing images and deploy $(date +'%%Y-%%m-%%d %%H:%%M:%%S')" | |
| 70 | 59 | ||
| 71 | 60 | echo "🔗 Setting remote to CNB repository..." | |
| 72 | 61 | git remote add origin "https://${{ secrets.CNB_USERNAME }}:${{ secrets.CNB_TOKEN }}@cnb.cool/gyhwd.top/AhHui-Homepage.git" | |
| 73 | 62 | ||
| 74 | - | echo "🚀 Forcing push to main branch on CNB (default deployment branch)..." | |
| 63 | + | echo "🚀 Forcing push to main branch on CNB..." | |
| 75 | 64 | git branch -M main | |
| 76 | 65 | git push --force --quiet origin main | |
| 77 | 66 | ||
| 78 | 67 | echo "🎉 Successfully pushed to CNB: wojack/AhHui-Homepage" | |
| 79 | 68 | ||
| 80 | - | # 👇 新增:发送事件触发服务器部署 | |
| 69 | + | # 4.👇 触发服务器部署 | |
| 81 | 70 | - name: 🔔 Trigger server deployment | |
| 82 | 71 | uses: actions/github-script@v7 | |
| 83 | 72 | with: | |
AhHui ha revisionato questo gist 2 months ago. Vai alla revisione
Nessuna modifica
AhHui ha revisionato questo gist 2 months ago. Vai alla revisione
1 file changed, 93 insertions
sync-page-to-cnb.yml(file creato)
| @@ -0,0 +1,93 @@ | |||
| 1 | + | # .github/workflows/sync-page-to-cnb.yml | |
| 2 | + | name: Sync Page Branch to CNB (Auto Deploy) | |
| 3 | + | ||
| 4 | + | on: | |
| 5 | + | push: | |
| 6 | + | branches: | |
| 7 | + | - page # 当 page 分支有新提交时自动触发(由每日壁纸生成脚本推送) | |
| 8 | + | workflow_dispatch: | |
| 9 | + | inputs: | |
| 10 | + | reason: | |
| 11 | + | description: '手动触发原因(如:测试部署或紧急更新)' | |
| 12 | + | required: false | |
| 13 | + | default: 'Manual run' | |
| 14 | + | ||
| 15 | + | jobs: | |
| 16 | + | sync: | |
| 17 | + | runs-on: ubuntu-latest | |
| 18 | + | ||
| 19 | + | steps: | |
| 20 | + | # 🔍 1. 检出 page 分支内容 | |
| 21 | + | - name: 📥 Checkout page branch | |
| 22 | + | uses: actions/checkout@v5 | |
| 23 | + | with: | |
| 24 | + | ref: page | |
| 25 | + | token: ${{ secrets.GITHUB_TOKEN }} | |
| 26 | + | fetch-depth: 0 # 获取完整历史记录,确保 git diff 能正常工作 | |
| 27 | + | ||
| 28 | + | # 🔍 2. 检测是否有实际变更(兼容首次提交) | |
| 29 | + | - name: 🔎 Check for file changes | |
| 30 | + | id: check | |
| 31 | + | run: | | |
| 32 | + | # 判断当前是否为首次提交(无父提交) | |
| 33 | + | if [ -z "$(git rev-parse --verify HEAD^ 2>/dev/null)" ]; then | |
| 34 | + | echo "🆕 First commit detected — assuming changes exist and proceeding." | |
| 35 | + | echo "skip=false" >> $GITHUB_OUTPUT | |
| 36 | + | else | |
| 37 | + | # 获取上一次提交与当前提交之间的文件差异 | |
| 38 | + | CHANGES=$(git diff --name-only HEAD^ HEAD) | |
| 39 | + | if [ -z "$CHANGES" ]; then | |
| 40 | + | echo "✅ No changes detected since last commit. Skipping sync." | |
| 41 | + | echo "skip=true" >> $GITHUB_OUTPUT | |
| 42 | + | else | |
| 43 | + | echo "✨ Changes detected:" | |
| 44 | + | echo "$CHANGES" | |
| 45 | + | echo "skip=false" >> $GITHUB_OUTPUT | |
| 46 | + | fi | |
| 47 | + | fi | |
| 48 | + | ||
| 49 | + | # 🚀 3. 推送到 CNB(仅当有变更时执行) | |
| 50 | + | - name: 🚀 Push to CNB & Trigger Deployment | |
| 51 | + | if: steps.check.outputs.skip == 'false' | |
| 52 | + | env: | |
| 53 | + | CNB_USERNAME: ${{ secrets.CNB_USERNAME }} | |
| 54 | + | CNB_TOKEN: ${{ secrets.CNB_TOKEN }} | |
| 55 | + | run: | | |
| 56 | + | echo "🧹 Cleaning old Git metadata..." | |
| 57 | + | rm -rf .git | |
| 58 | + | ||
| 59 | + | echo "🌱 Initializing new Git repository..." | |
| 60 | + | git init | |
| 61 | + | git config --global user.name 'GitHub Action' | |
| 62 | + | git config --global user.email 'action@github.com' | |
| 63 | + | ||
| 64 | + | echo "💾 Adding all static files to staging area..." | |
| 65 | + | git add . | |
| 66 | + | ||
| 67 | + | echo "📝 Committing with timestamp..." | |
| 68 | + | # 使用 %% 转义 %,因为 YAML 中 % 是特殊字符 | |
| 69 | + | git commit -m "⚡ Sync from GitHub page branch: $(date +'%%Y-%%m-%%d %%H:%%M:%%S')" | |
| 70 | + | ||
| 71 | + | echo "🔗 Setting remote to CNB repository..." | |
| 72 | + | git remote add origin "https://${{ secrets.CNB_USERNAME }}:${{ secrets.CNB_TOKEN }}@cnb.cool/gyhwd.top/AhHui-Homepage.git" | |
| 73 | + | ||
| 74 | + | echo "🚀 Forcing push to main branch on CNB (default deployment branch)..." | |
| 75 | + | git branch -M main | |
| 76 | + | git push --force --quiet origin main | |
| 77 | + | ||
| 78 | + | echo "🎉 Successfully pushed to CNB: wojack/AhHui-Homepage" | |
| 79 | + | ||
| 80 | + | # 👇 新增:发送事件触发服务器部署 | |
| 81 | + | - name: 🔔 Trigger server deployment | |
| 82 | + | uses: actions/github-script@v7 | |
| 83 | + | with: | |
| 84 | + | script: | | |
| 85 | + | await github.rest.repos.createDispatchEvent({ | |
| 86 | + | owner: context.repo.owner, | |
| 87 | + | repo: context.repo.repo, | |
| 88 | + | event_type: 'deploy-to-server', | |
| 89 | + | client_payload: { | |
| 90 | + | message: 'CNB updated, triggering server sync', | |
| 91 | + | commit: context.sha | |
| 92 | + | } | |
| 93 | + | }) | |
AhHui ha revisionato questo gist 2 months ago. Vai alla revisione
1 file changed, 76 insertions
generate-static-site-bk.yml(file creato)
| @@ -0,0 +1,76 @@ | |||
| 1 | + | # .github/workflows/generate-static-site.yml | |
| 2 | + | name: Update Bing & Deploy to page | |
| 3 | + | ||
| 4 | + | # 触发方式: | |
| 5 | + | # - 手动触发(GitHub Actions 界面点击) | |
| 6 | + | # - 每天 01:00 UTC(北京时间 09:00) | |
| 7 | + | on: | |
| 8 | + | workflow_dispatch: # 允许手动运行 | |
| 9 | + | schedule: | |
| 10 | + | - cron: "0 1 * * *" # 每天 01:00 UTC | |
| 11 | + | ||
| 12 | + | jobs: | |
| 13 | + | deploy: | |
| 14 | + | runs-on: ubuntu-latest | |
| 15 | + | permissions: | |
| 16 | + | contents: write # 必需:允许写入分支(Settings → Actions → Read and write permissions) | |
| 17 | + | ||
| 18 | + | steps: | |
| 19 | + | # 1. 检出 main 分支代码 | |
| 20 | + | - name: 🛠️ Checkout main branch | |
| 21 | + | uses: actions/checkout@v4 | |
| 22 | + | ||
| 23 | + | # 2. 设置 Node.js 环境(v20) | |
| 24 | + | - name: 🟩 Setup Node.js | |
| 25 | + | uses: actions/setup-node@v4 | |
| 26 | + | with: | |
| 27 | + | node-version: '20.x' | |
| 28 | + | ||
| 29 | + | # 3. 运行 bing.js 获取最新 Bing 壁纸并生成 images.json | |
| 30 | + | - name: 🖼️ Generate Bing images.json | |
| 31 | + | run: node ./assets/js/bing.js | |
| 32 | + | ||
| 33 | + | # 4. 准备静态资源目录(只包含要部署的文件) | |
| 34 | + | - name: 📁 Prepare static directory | |
| 35 | + | run: | | |
| 36 | + | # 清理旧的 static 目录 | |
| 37 | + | rm -rf static | |
| 38 | + | mkdir -p static/{assets/css,assets/fonts,assets/img,assets/js,assets/json} | |
| 39 | + | ||
| 40 | + | # 复制指定文件(不包含 bing.js、其他图片等) | |
| 41 | + | cp index.html static/ | |
| 42 | + | cp 404.html static/ || true # 404.html 可选 | |
| 43 | + | cp favicon.ico static/ | |
| 44 | + | cp apple-touch-icon.png static/ | |
| 45 | + | ||
| 46 | + | cp assets/css/*.css static/assets/css/ | |
| 47 | + | cp assets/fonts/* static/assets/fonts/ | |
| 48 | + | cp assets/img/logo.png static/assets/img/ | |
| 49 | + | cp assets/js/main.js static/assets/js/ | |
| 50 | + | cp assets/js/fireworks.js static/assets/js/ | |
| 51 | + | cp assets/json/images.json static/assets/json/ | |
| 52 | + | cp assets/readme.md static/ | |
| 53 | + | ||
| 54 | + | # 防止 GitHub Pages 启用 Jekyll 处理 | |
| 55 | + | touch static/.nojekyll | |
| 56 | + | ||
| 57 | + | # 输出最终结构,便于调试 | |
| 58 | + | echo "📄 Final static structure:" | |
| 59 | + | find static -type f | sort | |
| 60 | + | ||
| 61 | + | # 5. 配置 Git 提交者信息 | |
| 62 | + | - name: 🧑💻 Configure git | |
| 63 | + | run: | | |
| 64 | + | git config --global user.email "actions@github.com" | |
| 65 | + | git config --global user.name "GitHub Actions" | |
| 66 | + | ||
| 67 | + | # 6. 部署到 page 分支 | |
| 68 | + | - name: 🚀 Commit and push to page | |
| 69 | + | run: | | |
| 70 | + | cd static | |
| 71 | + | git init | |
| 72 | + | git checkout -b page | |
| 73 | + | git add . | |
| 74 | + | # 使用 [skip ci] 防止 page 推送再次触发 CI | |
| 75 | + | git commit -m "[skip ci] 🖼️ Auto-update Bing images and deploy" | |
| 76 | + | git push --force "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" page | |