部署的同时进行CDN预热刷新
This commit is contained in:
17
.github/workflows/deploy.yml
vendored
17
.github/workflows/deploy.yml
vendored
@@ -20,7 +20,7 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# 构建工作
|
# 构建工作
|
||||||
build:
|
build-and-deploy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -49,14 +49,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: docs/.vitepress/dist
|
path: docs/.vitepress/dist
|
||||||
|
|
||||||
# 部署工作
|
|
||||||
deploy:
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
|
||||||
needs: build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v4
|
uses: actions/deploy-pages@v4
|
||||||
|
|
||||||
|
- name: Refresh CDN Cache
|
||||||
|
env:
|
||||||
|
TENCENT_CLOUD_SECRET_ID: ${{ secrets.TENCENT_CLOUD_SECRET_ID }}
|
||||||
|
TENCENT_CLOUD_SECRET_KEY: ${{ secrets.TENCENT_CLOUD_SECRET_KEY }}
|
||||||
|
TENCENT_CLOUD_ZONE_ID: ${{ secrets.TENCENT_CLOUD_ZONE_ID }}
|
||||||
|
run: node scripts/cdn-fresh.mjs
|
||||||
File diff suppressed because one or more lines are too long
131
package-lock.json
generated
131
package-lock.json
generated
@@ -17,6 +17,7 @@
|
|||||||
"marked": "^15.0.7",
|
"marked": "^15.0.7",
|
||||||
"mermaid": "^11.5.0",
|
"mermaid": "^11.5.0",
|
||||||
"openai": "^4.87.4",
|
"openai": "^4.87.4",
|
||||||
|
"tencentcloud-sdk-nodejs": "^4.1.0",
|
||||||
"vitepress": "^1.6.3",
|
"vitepress": "^1.6.3",
|
||||||
"vitepress-plugin-mermaid": "^2.0.17",
|
"vitepress-plugin-mermaid": "^2.0.17",
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
@@ -2041,6 +2042,19 @@
|
|||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/agent-base": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/agentkeepalive": {
|
"node_modules/agentkeepalive": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
|
||||||
@@ -2096,6 +2110,16 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/bignumber.js": {
|
||||||
|
"version": "9.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
|
||||||
|
"integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/birpc": {
|
"node_modules/birpc": {
|
||||||
"version": "0.2.19",
|
"version": "0.2.19",
|
||||||
"resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz",
|
"resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz",
|
||||||
@@ -3229,6 +3253,19 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/get-stream": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/glob-parent": {
|
"node_modules/glob-parent": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||||
@@ -3389,6 +3426,20 @@
|
|||||||
"url": "https://github.com/sponsors/wooorm"
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/https-proxy-agent": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"agent-base": "6",
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/humanize-ms": {
|
"node_modules/humanize-ms": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
|
||||||
@@ -3465,6 +3516,19 @@
|
|||||||
"node": ">=0.12.0"
|
"node": ">=0.12.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-stream": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-what": {
|
"node_modules/is-what": {
|
||||||
"version": "4.1.16",
|
"version": "4.1.16",
|
||||||
"resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
|
"resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
|
||||||
@@ -3492,6 +3556,16 @@
|
|||||||
"js-yaml": "bin/js-yaml.js"
|
"js-yaml": "bin/js-yaml.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/json-bigint": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"bignumber.js": "^9.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/katex": {
|
"node_modules/katex": {
|
||||||
"version": "0.16.21",
|
"version": "0.16.21",
|
||||||
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz",
|
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz",
|
||||||
@@ -4445,6 +4519,56 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/tencentcloud-sdk-nodejs": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-WifbzmRola9FVl1YIZJuZP7NjpAVToAfPv4IiQYOWj2tlHYwNBO8BfKOcn0WJh+Csn7Be8YehyZl4L5EoEgnkg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"form-data": "^3.0.0",
|
||||||
|
"get-stream": "^6.0.0",
|
||||||
|
"https-proxy-agent": "^5.0.0",
|
||||||
|
"is-stream": "^2.0.0",
|
||||||
|
"json-bigint": "^1.0.0",
|
||||||
|
"node-fetch": "^2.2.0",
|
||||||
|
"tslib": "1.13.0",
|
||||||
|
"uuid": "^9.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tencentcloud-sdk-nodejs/node_modules/form-data": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"es-set-tostringtag": "^2.1.0",
|
||||||
|
"mime-types": "^2.1.35"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tencentcloud-sdk-nodejs/node_modules/uuid": {
|
||||||
|
"version": "9.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
||||||
|
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
"https://github.com/sponsors/broofa",
|
||||||
|
"https://github.com/sponsors/ctavan"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tinyexec": {
|
"node_modules/tinyexec": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
|
||||||
@@ -4493,6 +4617,13 @@
|
|||||||
"node": ">=6.10"
|
"node": ">=6.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "1.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
||||||
|
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "0BSD"
|
||||||
|
},
|
||||||
"node_modules/ufo": {
|
"node_modules/ufo": {
|
||||||
"version": "1.5.4",
|
"version": "1.5.4",
|
||||||
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
|
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
"marked": "^15.0.7",
|
"marked": "^15.0.7",
|
||||||
"mermaid": "^11.5.0",
|
"mermaid": "^11.5.0",
|
||||||
"openai": "^4.87.4",
|
"openai": "^4.87.4",
|
||||||
|
"tencentcloud-sdk-nodejs": "^4.1.0",
|
||||||
"vitepress": "^1.6.3",
|
"vitepress": "^1.6.3",
|
||||||
"vitepress-plugin-mermaid": "^2.0.17",
|
"vitepress-plugin-mermaid": "^2.0.17",
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
|
|||||||
123
scripts/cdn-fresh.mjs
Normal file
123
scripts/cdn-fresh.mjs
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
import dotenv from 'dotenv';
|
||||||
|
import tencentcloud from 'tencentcloud-sdk-nodejs';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
// 加载环境变量
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// 获取当前文件的目录
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
// 从环境变量中获取腾讯云 API 密钥
|
||||||
|
const SECRET_ID = process.env.TENCENT_CLOUD_SECRET_ID;
|
||||||
|
const SECRET_KEY = process.env.TENCENT_CLOUD_SECRET_KEY;
|
||||||
|
const ZONE_ID = process.env.TENCENT_CLOUD_ZONE_ID;
|
||||||
|
|
||||||
|
const ONLINE_WIKI_URL = "https://mcwiki.easecation.net"; // 最后不能带/
|
||||||
|
|
||||||
|
// 检查密钥是否存在
|
||||||
|
if (!SECRET_ID || !SECRET_KEY || !ZONE_ID) {
|
||||||
|
console.error('错误: 请确保环境变量中设置了 TENCENT_CLOUD_SECRET_ID, TENCENT_CLOUD_SECRET_KEY 和 TENCENT_CLOUD_ZONE_ID');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取腾讯云 API 客户端
|
||||||
|
const TeoClient = tencentcloud.teo.v20220901.Client;
|
||||||
|
|
||||||
|
// 实例化客户端
|
||||||
|
const clientConfig = {
|
||||||
|
credential: {
|
||||||
|
secretId: SECRET_ID,
|
||||||
|
secretKey: SECRET_KEY,
|
||||||
|
},
|
||||||
|
region: "", // EdgeOne 服务不需要指定地域
|
||||||
|
profile: {
|
||||||
|
httpProfile: {
|
||||||
|
endpoint: "teo.tencentcloudapi.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const client = new TeoClient(clientConfig);
|
||||||
|
|
||||||
|
console.log('开始刷新 CDN 缓存...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await client.CreatePurgeTask({
|
||||||
|
ZoneId: ZONE_ID,
|
||||||
|
Type: "purge_prefix",
|
||||||
|
Method: "invalidate",
|
||||||
|
Targets: [
|
||||||
|
ONLINE_WIKI_URL
|
||||||
|
]
|
||||||
|
});
|
||||||
|
console.log('刷新 CDN 缓存完成:', response);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('刷新目录缓存失败:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('开始预热部分页面...');
|
||||||
|
|
||||||
|
// 提取docs/.vitepress/dist/assets中匹配xxx.md.xxx.js形式的文件
|
||||||
|
const assetsDir = path.resolve(__dirname, '../docs/.vitepress/dist/assets');
|
||||||
|
const files = fs.readdirSync(assetsDir).filter(file => file.match(/\.md\.[a-zA-Z0-9]+\.js$/));
|
||||||
|
|
||||||
|
const prefetchPages = [
|
||||||
|
"mcdocs/0-欢迎",
|
||||||
|
"mcdocs/1-ModAPI/事件/事件索引表",
|
||||||
|
"mcdocs/1-ModAPI/事件/UI",
|
||||||
|
"mcdocs/1-ModAPI/事件/世界",
|
||||||
|
"mcdocs/1-ModAPI/事件/实体",
|
||||||
|
"mcdocs/1-ModAPI/事件/控制",
|
||||||
|
"mcdocs/1-ModAPI/事件/方块",
|
||||||
|
"mcdocs/1-ModAPI/事件/模型",
|
||||||
|
"mcdocs/1-ModAPI/事件/物品",
|
||||||
|
"mcdocs/1-ModAPI/事件/玩家",
|
||||||
|
"mcdocs/1-ModAPI/事件/联机大厅",
|
||||||
|
"mcdocs/1-ModAPI/事件/音效",
|
||||||
|
"mcdocs/1-ModAPI/接口/Api索引表",
|
||||||
|
"mcdocs/1-ModAPI/枚举值/索引",
|
||||||
|
"mcguide/0-欢迎",
|
||||||
|
"mcguide/20-玩法开发/13-模组SDK编程/2-Python脚本开发/0-脚本开发入门",
|
||||||
|
"mcguide/18-界面与交互/2-从零开始创建UI",
|
||||||
|
"mcguide/16-美术/6-模型和动作/00-模型制作方案",
|
||||||
|
"mcguide/20-玩法开发/15-自定义游戏内容/1-自定义物品/1-自定义基础物品",
|
||||||
|
"mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/0-自定义方块概述",
|
||||||
|
"mcguide/20-玩法开发/15-自定义游戏内容/3-自定义生物/01-自定义基础生物",
|
||||||
|
"mcguide/20-玩法开发/15-自定义游戏内容/4-自定义维度/1-自定义维度",
|
||||||
|
"mconline/0-欢迎",
|
||||||
|
"wiki/guide/introduction",
|
||||||
|
"wiki/modsdk/modsdk-intro",
|
||||||
|
"wiki/blocks/blocks-intro",
|
||||||
|
"wiki/items/items-intro",
|
||||||
|
"wiki/entities/entity-intro-bp",
|
||||||
|
"wiki/json-ui/json-ui-intro"
|
||||||
|
];
|
||||||
|
|
||||||
|
const prefetchPagesTag = prefetchPages.map(page => page.replaceAll("/", "_") + ".md");
|
||||||
|
|
||||||
|
const targetsJs = files
|
||||||
|
.filter(file => prefetchPagesTag.filter(tag => file.indexOf(tag) >= 0).length > 0)
|
||||||
|
.map(file => `${ONLINE_WIKI_URL}/assets/${file}`);
|
||||||
|
|
||||||
|
const targetsHtml = prefetchPages.map(file => `${ONLINE_WIKI_URL}/${file}.html`);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await client.CreatePrefetchTask({
|
||||||
|
ZoneId: ZONE_ID,
|
||||||
|
Targets: [
|
||||||
|
ONLINE_WIKI_URL,
|
||||||
|
ONLINE_WIKI_URL + "/wiki",
|
||||||
|
...targetsHtml,
|
||||||
|
...targetsJs
|
||||||
|
]
|
||||||
|
});
|
||||||
|
console.log('预热 CDN 完成:', response);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('CDN 预热失败:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user