name: 同步 skill Releases on: schedule: - cron: "17 * * * *" workflow_dispatch: concurrency: group: sync-skill-releases cancel-in-progress: false permissions: contents: write jobs: sync: runs-on: ubuntu-latest steps: - name: 检出分发仓 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 persist-credentials: false - name: 检查同步凭据 env: SOURCE_REPOS_TOKEN: ${{ secrets.AGENT_SKILL_BOT }} run: | set -eu test -n "$SOURCE_REPOS_TOKEN" || { echo "缺少组织 Actions secret:AGENT_SKILL_BOT" exit 1 } - name: 同步 latest Releases env: GITEA_SERVER_URL: ${{ github.server_url }} SOURCE_REPOS_TOKEN: ${{ secrets.AGENT_SKILL_BOT }} run: python3 scripts/sync-releases.py - name: 校验分发仓 run: | set -eu python3 scripts/validate-dist.py NO_COLOR=1 npx --yes skills@1.5.22 add . --list | tee /tmp/skills-list.txt python3 - <<'PY' from pathlib import Path expected = { "baimiao-table-ocr", "disk-master", "everything-file-search", "teach-me", "think-twice", "why-here", } output = Path("/tmp/skills-list.txt").read_text(encoding="utf-8") lines = {line.strip(" │└├─") for line in output.splitlines()} missing = sorted(expected - lines) if missing: raise SystemExit(f"skills CLI 未发现:{', '.join(missing)}") print(f"skills CLI 已发现全部 {len(expected)} 个 skill") PY - name: 提交同步结果 env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_SERVER_URL: ${{ github.server_url }} run: | set -eu if git diff --quiet -- .dist-sync skills; then echo "latest Releases 没有产生内容变化" exit 0 fi git config user.name "Agent Skills Bot" git config user.email "agent-skills-bot@im0o.top" git add .dist-sync skills git commit -m "同步 latest skill releases" auth=$(printf 'x-access-token:%s' "$GITEA_TOKEN" | base64 | tr -d '\n') server_url=${GITEA_SERVER_URL%/} git_auth() { git -c "http.${server_url}/.extraheader=Authorization: Basic $auth" "$@" } git_auth fetch origin main test "$(git rev-parse HEAD^)" = "$(git rev-parse origin/main)" || { echo "origin/main 已前进,本次不自动变基或强制推送" exit 1 } git_auth push origin HEAD:main