feat: add continuous cron workflow and sample task
Some checks failed
on-push-smoke / smoke (push) Failing after 2m45s
Some checks failed
on-push-smoke / smoke (push) Failing after 2m45s
Add a schedule workflow every 2 minutes with chained jobs, plus a push smoke workflow to verify the runner immediately. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
8ab97db76e
commit
85f2b4fc20
52
.gitea/workflows/cron.yml
Normal file
52
.gitea/workflows/cron.yml
Normal file
@ -0,0 +1,52 @@
|
||||
name: continuous-cron
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# 每 2 分钟触发一次,方便观察连续定时任务
|
||||
- cron: "*/2 * * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: prepare marker
|
||||
run: |
|
||||
echo "prepare at $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||
echo "run_id=${{ github.run_id }}"
|
||||
echo "event=${{ github.event_name }}"
|
||||
mkdir -p artifacts
|
||||
echo "prepared" > artifacts/prepare.txt
|
||||
cat artifacts/prepare.txt
|
||||
|
||||
work:
|
||||
runs-on: ubuntu-latest
|
||||
needs: prepare
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: run business task
|
||||
env:
|
||||
TASK_OUT_DIR: artifacts
|
||||
run: |
|
||||
python3 app/task.py
|
||||
ls -la artifacts
|
||||
- name: simulate work
|
||||
run: |
|
||||
echo "working..."
|
||||
sleep 3
|
||||
echo "work done"
|
||||
|
||||
report:
|
||||
runs-on: ubuntu-latest
|
||||
needs: work
|
||||
steps:
|
||||
- name: summary
|
||||
run: |
|
||||
echo "## Continuous Cron Report" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- run_id: ${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- event: ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- time_utc: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "report finished at $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||
17
.gitea/workflows/on-push.yml
Normal file
17
.gitea/workflows/on-push.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: on-push-smoke
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
smoke:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: run once
|
||||
run: |
|
||||
python3 app/task.py
|
||||
echo "push smoke ok at $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||
14
README.md
14
README.md
@ -1,3 +1,15 @@
|
||||
# cron-demo
|
||||
|
||||
连续定时任务测试仓库
|
||||
用 Gitea Actions 测试连续定时任务的示例仓库。
|
||||
|
||||
## 内容
|
||||
|
||||
- `app/task.py`:模拟业务任务,每次运行写入一条记录
|
||||
- `.gitea/workflows/cron.yml`:每 2 分钟定时触发,3 个 job 串联
|
||||
- `.gitea/workflows/on-push.yml`:推送时触发,方便立刻验证 runner
|
||||
|
||||
## 本地验证
|
||||
|
||||
```bash
|
||||
python3 app/task.py
|
||||
```
|
||||
|
||||
38
app/task.py
Normal file
38
app/task.py
Normal file
@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3
|
||||
"""模拟定时业务任务:记录每次执行时间与序号。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import socket
|
||||
import time
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def main() -> None:
|
||||
run_id = os.environ.get("GITHUB_RUN_ID") or os.environ.get("GITEA_RUN_ID") or "local"
|
||||
job = os.environ.get("GITHUB_JOB") or "manual"
|
||||
host = socket.gethostname()
|
||||
now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||
ts = int(time.time())
|
||||
|
||||
out_dir = Path(os.environ.get("TASK_OUT_DIR") or "artifacts")
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
record = {
|
||||
"run_id": run_id,
|
||||
"job": job,
|
||||
"host": host,
|
||||
"utc": now,
|
||||
"epoch": ts,
|
||||
"message": f"task ok at {now} on {host}",
|
||||
}
|
||||
path = out_dir / f"run-{run_id}-{job}-{ts}.json"
|
||||
path.write_text(json.dumps(record, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
print(json.dumps(record, ensure_ascii=False))
|
||||
print(f"wrote {path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user