From 85f2b4fc200371ce984c80222b2b1cd3af5ce479 Mon Sep 17 00:00:00 2001 From: giteaadmin Date: Thu, 30 Jul 2026 13:48:09 +0000 Subject: [PATCH] feat: add continuous cron workflow and sample task Add a schedule workflow every 2 minutes with chained jobs, plus a push smoke workflow to verify the runner immediately. Co-authored-by: Cursor --- .gitea/workflows/cron.yml | 52 ++++++++++++++++++++++++++++++++++++ .gitea/workflows/on-push.yml | 17 ++++++++++++ README.md | 14 +++++++++- app/task.py | 38 ++++++++++++++++++++++++++ 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 .gitea/workflows/cron.yml create mode 100644 .gitea/workflows/on-push.yml create mode 100644 app/task.py diff --git a/.gitea/workflows/cron.yml b/.gitea/workflows/cron.yml new file mode 100644 index 0000000..fa1299c --- /dev/null +++ b/.gitea/workflows/cron.yml @@ -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)" diff --git a/.gitea/workflows/on-push.yml b/.gitea/workflows/on-push.yml new file mode 100644 index 0000000..ce1fae2 --- /dev/null +++ b/.gitea/workflows/on-push.yml @@ -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)" diff --git a/README.md b/README.md index 67b921d..1d79c8a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ # cron-demo -连续定时任务测试仓库 \ No newline at end of file +用 Gitea Actions 测试连续定时任务的示例仓库。 + +## 内容 + +- `app/task.py`:模拟业务任务,每次运行写入一条记录 +- `.gitea/workflows/cron.yml`:每 2 分钟定时触发,3 个 job 串联 +- `.gitea/workflows/on-push.yml`:推送时触发,方便立刻验证 runner + +## 本地验证 + +```bash +python3 app/task.py +``` diff --git a/app/task.py b/app/task.py new file mode 100644 index 0000000..a80f764 --- /dev/null +++ b/app/task.py @@ -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()