Dernière activité 2 months ago

更新 Bing 图片并发送到 page 分支,然后同步到CNB,最后推送到服务器

wojack's Avatar wojack a révisé ce gist 2 months ago. Aller à la révision

Aucun changement

wojack's Avatar wojack a révisé ce gist 2 months ago. Aller à la révision

3 files changed, 95 insertions, 33 deletions

deploy-to-server.yml(fichier créé)

@@ -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 renommé en 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:

wojack's Avatar AhHui a révisé ce gist 2 months ago. Aller à la révision

Aucun changement

wojack's Avatar AhHui a révisé ce gist 2 months ago. Aller à la révision

1 file changed, 93 insertions

sync-page-to-cnb.yml(fichier créé)

@@ -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 + })

wojack's Avatar AhHui a révisé ce gist 2 months ago. Aller à la révision

1 file changed, 76 insertions

generate-static-site-bk.yml(fichier créé)

@@ -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
Plus récent Plus ancien