1212 # 检测变更范围。business / message / gateway 三条链互不影响;共享契约(OpenBlog-api/**)变更会同时触发 business 与 message 双链。
1313 changes :
1414 runs-on : ubuntu-latest
15+ timeout-minutes : 10
1516 outputs :
1617 business : ${{ steps.filter.outputs.business }}
1718 message : ${{ steps.filter.outputs.message }}
5051 needs : changes
5152 if : ${{ needs.changes.outputs.business == 'true' || github.event_name == 'workflow_dispatch' }}
5253 runs-on : ubuntu-latest
54+ timeout-minutes : 30
5355 env :
5456 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 : true
5557
7577 needs : build-business
7678 if : ${{ needs.build-business.result == 'success' || github.event_name == 'workflow_dispatch' }}
7779 runs-on : openblog-backend
80+ timeout-minutes : 30
7881
7982 steps :
8083 - name : Checkout(获取 deploy/business 下的 Docker 部署文件)
9295 OPENBLOG_SLIDER_ENABLED : ${{ vars.OPENBLOG_SLIDER_ENABLED }}
9396 run : |
9497 set -euo pipefail
98+
99+ # 只允许部署 master 的最新提交。旧 run(或被重跑的旧 run)若排在我们之后落到同一
100+ # TARGET_DIR,会把它那一版的 .env 与 docker-compose.yml 覆写回来——实测会把
101+ # OPENBLOG_SLIDER_ENABLED 静默抹成 false(开关自己关上,且不报任何错)。
102+ # 取不到远端 SHA(网络故障)时 LATEST_SHA 为空,同样拒绝部署:宁可漏部署,不可覆写。
103+ LATEST_SHA=$(git ls-remote origin refs/heads/master | cut -f1)
104+ if [ "$GITHUB_SHA" != "$LATEST_SHA" ]; then
105+ echo "!! 本 run 提交 $GITHUB_SHA 不是 master 最新 $LATEST_SHA,拒绝部署以免覆写更新后的配置" >&2
106+ exit 1
107+ fi
108+
95109 TARGET_DIR="/www/wwwroot/java/openblog"
96110 TARGET_JAR="$TARGET_DIR/OpenBlog-business-1.0.0-SNAPSHOT.jar"
97111
@@ -137,6 +151,7 @@ jobs:
137151 needs : changes
138152 if : ${{ needs.changes.outputs.message == 'true' || github.event_name == 'workflow_dispatch' }}
139153 runs-on : ubuntu-latest
154+ timeout-minutes : 30
140155 env :
141156 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 : true
142157
@@ -162,6 +177,7 @@ jobs:
162177 needs : build-message
163178 if : ${{ needs.build-message.result == 'success' || github.event_name == 'workflow_dispatch' }}
164179 runs-on : openblog-backend
180+ timeout-minutes : 30
165181
166182 steps :
167183 - name : Checkout(获取 deploy/message 下的 Docker 部署文件)
@@ -178,6 +194,16 @@ jobs:
178194 ALIYUN_FROM : ${{ secrets.ALIYUN_FROM }}
179195 run : |
180196 set -euo pipefail
197+
198+ # 只允许部署 master 的最新提交。旧 run(或被重跑的旧 run)若排在我们之后落到同一
199+ # TARGET_DIR,会把它那一版的 .env 覆写回来(实测同类问题会静默抹掉配置项)。
200+ # 取不到远端 SHA(网络故障)时 LATEST_SHA 为空,同样拒绝部署:宁可漏部署,不可覆写。
201+ LATEST_SHA=$(git ls-remote origin refs/heads/master | cut -f1)
202+ if [ "$GITHUB_SHA" != "$LATEST_SHA" ]; then
203+ echo "!! 本 run 提交 $GITHUB_SHA 不是 master 最新 $LATEST_SHA,拒绝部署以免覆写更新后的配置" >&2
204+ exit 1
205+ fi
206+
181207 TARGET_DIR="/www/wwwroot/java/openblog-message"
182208 TARGET_JAR="$TARGET_DIR/OpenBlog-message-1.0.0-SNAPSHOT.jar"
183209
@@ -222,6 +248,7 @@ jobs:
222248 needs : changes
223249 if : ${{ needs.changes.outputs.gateway == 'true' || github.event_name == 'workflow_dispatch' }}
224250 runs-on : ubuntu-latest
251+ timeout-minutes : 30
225252 env :
226253 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 : true
227254
@@ -247,6 +274,7 @@ jobs:
247274 needs : build-gateway
248275 if : ${{ needs.build-gateway.result == 'success' || github.event_name == 'workflow_dispatch' }}
249276 runs-on : openblog-backend
277+ timeout-minutes : 30
250278
251279 steps :
252280 - name : Checkout(获取 deploy/gateway 下的 Docker 部署文件)
@@ -262,6 +290,16 @@ jobs:
262290 OPENBLOG_DEVICE_TOKEN_SECRET : ${{ secrets.OPENBLOG_DEVICE_TOKEN_SECRET }}
263291 run : |
264292 set -euo pipefail
293+
294+ # 只允许部署 master 的最新提交。旧 run(或被重跑的旧 run)若排在我们之后落到同一
295+ # TARGET_DIR,会把它那一版的 .env 覆写回来(实测同类问题会静默抹掉配置项)。
296+ # 取不到远端 SHA(网络故障)时 LATEST_SHA 为空,同样拒绝部署:宁可漏部署,不可覆写。
297+ LATEST_SHA=$(git ls-remote origin refs/heads/master | cut -f1)
298+ if [ "$GITHUB_SHA" != "$LATEST_SHA" ]; then
299+ echo "!! 本 run 提交 $GITHUB_SHA 不是 master 最新 $LATEST_SHA,拒绝部署以免覆写更新后的配置" >&2
300+ exit 1
301+ fi
302+
265303 TARGET_DIR="/www/wwwroot/java/openblog-gateway"
266304 TARGET_JAR="$TARGET_DIR/OpenBlog-gateway-1.0.0-SNAPSHOT.jar"
267305
@@ -305,6 +343,7 @@ jobs:
305343 needs : changes
306344 if : ${{ needs.changes.outputs.frontend == 'true' || github.event_name == 'workflow_dispatch' }}
307345 runs-on : ubuntu-latest
346+ timeout-minutes : 40
308347 env :
309348 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 : true
310349
@@ -341,6 +380,7 @@ jobs:
341380 needs : build-frontend
342381 if : ${{ needs.build-frontend.result == 'success' }}
343382 runs-on : ubuntu-latest
383+ timeout-minutes : 45
344384
345385 steps :
346386 - name : Download release bundle
0 commit comments