Use AgentStage scheduled updater

This commit is contained in:
liuji
2026-10-10 14:55:04 +08:00
parent c80aeefcf9
commit a184be0187
5 changed files with 34 additions and 47 deletions
-39
View File
@@ -1,39 +0,0 @@
name: Sync public Google Sheet
on:
schedule:
# 03:00 Asia/Shanghai is 19:00 UTC on the previous day.
- cron: "0 19 * * *"
workflow_dispatch:
permissions:
contents: write
jobs:
sync:
runs-on: ubuntu-latest
env:
SOURCE_WORKBOOK_ID: 1DPbdVsX3SG_kgDXs2j34mDAgplRSfcAWKKG9yqalFmw
TARGET_REPOSITORY: ttshop
TARGET_BRANCH: main
PUBLISH_PATH: data/merged.html
GITEA_BASE_URL: ${{ vars.GITEA_BASE_URL }}
GITEA_OWNER: ${{ vars.GITEA_OWNER }}
GIT_CREDENTIAL_SECRET: ${{ secrets.GIT_CREDENTIAL_SECRET }}
SYNC_FAILURE_WEBHOOK_URL: ${{ secrets.SYNC_FAILURE_WEBHOOK_URL }}
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
ref: main
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install requests
run: python -m pip install --disable-pip-version-check -r requirements.txt
- name: Synchronize workbook
run: python sync.py
+14
View File
@@ -2,6 +2,20 @@
.env
.env.*
!.env.example
*.key
*.pem
*.secret
*.token
.git-credentials
credentials/
secrets/
# Temporary files and local metadata
*.swp
*.swo
*.tmp
*.temp
.DS_Store
# Python caches
__pycache__/
+13 -8
View File
@@ -1,14 +1,22 @@
# TTSHOP 同步脚本
`sync.py` 使用 Python 标准库和 `requests` 读取公开 Google Sheets 工作簿,并把所有工作表合并成一个 UTF-8 HTML 表格,固定写入 `data/merged.html`。工作表名称和顺序来自 XLSX 导出,单元格使用公开 gviz 接口返回的显示值。
TTSHOP 的代码仓库地址为 `git.ops.roasbloom.site`,报告目录地址为 `ops.roasbloom.site/<仓库名>/`;本仓库对应的报告目录为 `ops.roasbloom.site/ttshop/`。
`sync.py` 使用 Python 标准库和 `requests` 读取公开 Google Sheets 工作簿,并把所有工作表合并成一个 UTF-8 HTML 表格,固定写入 `data/merged.html`。生成的 `data/merged.html` 供 Google Sheets 的 `IMPORTHTML` 使用,不改成 `index.html` 或 `data.json`。工作表名称和顺序来自 XLSX 导出,单元格使用公开 gviz 接口返回的显示值。
合并规则:每张表第一行是标题;列按首次出现顺序取并集;源表已有的 `LinkName` 会改名为 `LinkName_Source`、`LinkName_Source_2` 等并保留;脚本最后追加生成的 `LinkName` 列。HTML 文本会进行转义。内容没有变化时不产生 Git 提交,变化时只提交 `data/merged.html` 并推送到 `main`。
## AgentStage 自动更新
AgentStage 服务器会自动执行仓库根目录的 `update.sh`,不使用 Gitea Actions workflow。`update.sh` 会进入脚本所在目录并使用 `python3` 执行 `sync.py`;脚本失败时会以非零状态退出。
`schedule.conf` 是一个表示间隔小时数的数字:默认值为 `1`(每小时一次),本仓库设置为 `24`,表示每天刷新一次。服务器执行更新后,报告可从 `ops.roasbloom.site/<仓库名>/` 访问。
## 本地运行
```sh
python -m pip install -r requirements.txt
python sync.py
python3 -m pip install -r requirements.txt
./update.sh
```
脚本默认使用固定工作簿 ID `1DPbdVsX3SG_kgDXs2j34mDAgplRSfcAWKKG9yqalFmw`、仓库 `ttshop`、分支 `main` 和输出路径 `data/merged.html`。本地运行需要当前目录是该仓库,并且 Git 已配置可推送的 `origin`;不要把凭据写入 remote URL。
@@ -16,10 +24,7 @@ python sync.py
## 环境变量
- `GIT_CREDENTIAL_SECRET`:可选的 Git 密码/token。脚本通过临时 `GIT_ASKPASS` 使用,不写入 URL、日志或提交文件。
- `GITEA_OWNER`:Git askpass 的用户名提示值;workflow 从仓库变量注入。
- `GITEA_BASE_URL`:Gitea 地址,作为 workflow 配置保留;实际推送使用 checkout 提供的 `origin`。
- `GITEA_OWNER`:Git askpass 的用户名提示值。
- `SYNC_FAILURE_WEBHOOK_URL`:可选的失败通知 URL。失败时最多发送一次简短通知,通知失败不会覆盖原始异常。
## Gitea Actions
`.gitea/workflows/sync.yml` 每天执行一次 `0 19 * * *`(按 UTC 解释时为 Asia/Shanghai 次日 03:00),也支持手动触发。workflow 只安装 `requirements.txt` 中的 `requests` 并运行 `python sync.py`,不依赖包 CLI、测试 extras、runner、scheduler 或报告系统。
AgentStage 运行不需要 Gitea Actions、Google OAuth 或 Google 服务账号。请勿把 token、密码或其他密钥写入脚本、仓库 URL、提交文件或日志;本地密钥和临时文件应被 `.gitignore` 规则忽略,避免进入提交。
Executable
+1
View File
@@ -0,0 +1 @@
24
Executable
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
set -eu
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
cd "$SCRIPT_DIR"
exec python3 sync.py