Basic versioning: VERSION file + self-check that opens an update-available issue on drift
@mrjf 已经在做这个了。
开始于 2026年4月23日。
评估
这个 Issue 还没有评估数据。
描述
Summary
Autoloop has no versioning today — no tags, no releases, no VERSION file. install.md clones main directly with no SHA pin, and gh aw add-wizard isn't a viable install path because the Autoloop install needs custom steps beyond what the wizard handles.
Result: installed copies of Autoloop drift silently from upstream. Users have no way to know they're behind, no way to see what changed, and no prompt to upgrade.
Propose a minimal versioning scheme: a plain version string in this repo, and a small self-check the installed Autoloop workflow runs on every execution. When the installed version doesn't match upstream, the workflow opens an issue in the consuming repo with a link to the diff. That's it — no CI tooling, no releases ceremony, no dependency on gh aw add.
Design
1. Plain VERSION file at the repo root
0.1.0
Bump it on any change to workflows/autoloop.md, workflows/sync-branches.md, workflows/shared/**, or .github/ISSUE_TEMPLATE/autoloop-program.md. Semver-ish, but don't over-engineer — even a monotonic integer would work. A human maintainer updates it when they merge a change they'd want consumers to notice. No automation needed.
Ship an adjacent CHANGELOG.md that lists what changed per version. Doesn't need to be exhaustive — one line per version is fine. The point is "if you're on 0.1.3 and upstream is 0.2.0, here's what happened between."
2. install.md records the installed version
Update install.md to copy VERSION into the consuming repo alongside the workflow files:
cp /tmp/autoloop/VERSION .github/autoloop-version
(Path is .github/autoloop-version rather than e.g. .autoloop/VERSION because .github/ is the natural home for meta-files about workflows in this repo, and keeping it out of .autoloop/ avoids conflating it with program definitions.)
3. Version check in the autoloop workflow pre-step
Add a step near the top of the autoloop workflow that:
- Reads the locally installed version from
.github/autoloop-version. - Fetches upstream's current
VERSIONfromhttps://raw.githubusercontent.com/githubnext/autoloop/main/VERSION. - If they differ, checks whether an open "update available" issue already exists (dedupe by a stable title or label).
- If no such issue exists, opens one with a link to the diff and the changelog.
Concrete implementation sketch:
- name: Check for Autoloop upstream updates
env:
GITHUB_TOKEN: ${{ github.token }}
GITHUB_REPOSITORY: ${{ github.repository }}
run: |
set -euo pipefail
LOCAL_VERSION_FILE=".github/autoloop-version"
UPSTREAM_URL="https://raw.githubusercontent.com/githubnext/autoloop/main/VERSION"
if [ ! -f "$LOCAL_VERSION_FILE" ]; then
echo "No local autoloop-version file; skipping drift check."
exit 0
fi
LOCAL=$(tr -d '[:space:]' < "$LOCAL_VERSION_FILE")
UPSTREAM=$(curl -fsSL "$UPSTREAM_URL" 2>/dev/null | tr -d '[:space:]' || echo "")
if [ -z "$UPSTREAM" ] || [ "$LOCAL" = "$UPSTREAM" ]; then
echo "Autoloop up to date (local=$LOCAL, upstream=$UPSTREAM)."
exit 0
fi
echo "Autoloop is behind: local=$LOCAL, upstream=$UPSTREAM"
# Dedupe: don't open a new issue if one is already open for this drift.
EXISTING=$(gh issue list \
--repo "$GITHUB_REPOSITORY" \
--label "autoloop-update-available" \
--state open \
--search "in:title \"$UPSTREAM\"" \
--json number \
--jq '.[0].number // empty')
if [ -n "$EXISTING" ]; then
echo "Existing update-available issue #$EXISTING already open for $UPSTREAM."
exit 0
fi
gh issue create \
--repo "$GITHUB_REPOSITORY" \
--title "[Autoloop] Update available: $LOCAL → $UPSTREAM" \
--label "autoloop-update-available,automation,autoloop" \
--body "$(cat <<EOF
Your installed Autoloop is **$LOCAL**. Upstream is **$UPSTREAM**.
- **Changelog**: https://github.com/githubnext/autoloop/blob/main/CHANGELOG.md
- **Diff since your version**: https://github.com/githubnext/autoloop/compare/v$LOCAL...main
To update, re-run the install steps in \`install.md\` from upstream, review the diff against your local \`.github/workflows/autoloop.md\` (you likely have local modifications), and bump \`.github/autoloop-version\` to \`$UPSTREAM\`.
Close this issue when the update is complete — it will not re-open until the next version is published.
EOF
)"
4. Dedup / rate limit
- One open issue per distinct
$UPSTREAMversion. If upstream bumps again before a user closes the previous issue, the search would match the prior issue (different version in title), so a second issue opens for the newer version — that's fine. - The user closes the issue when they complete the update and bump their local version file. Next scheduled run sees "local == upstream" and does nothing.
- Small amount of wasted API calls per run (one raw.githubusercontent.com fetch, one issue search) — trivial.
5. Graceful degradation
- No local version file → skip the check (first-run case for old installs that don't have the file).
- Upstream unreachable / network failure → skip without opening an issue; the next run will retry.
- Upstream version file missing → skip (means upstream hasn't shipped versioning yet, shouldn't alarm users).
What this is not
- Not automatic updates. Agents opening a PR to update the workflow is a bigger design decision (local modifications matter) and belongs in a separate issue.
- Not semver with compatibility guarantees. A monotonic version + changelog is enough for "notice drift."
- Not a replacement for
gh aw add's SHA pinning. This is lighter-weight and works for installs that need custom steps (which the current Autoloop install does — it creates directories, writes templates, etc.).
Bootstrapping
To ship this, first add a VERSION file (0.1.0) and CHANGELOG.md to this repo, add the check step to workflows/autoloop.md, update install.md to copy VERSION, and add a small section to install.md explaining the .github/autoloop-version file. Existing users will naturally pick it up on their next re-install or when they manually copy in the new check step.
Acceptance
VERSIONfile exists at repo root;CHANGELOG.mdhas at least one entry.install.mdcopiesVERSIONinto.github/autoloop-versionin the consuming repo.workflows/autoloop.mdhas a pre-step that compares local vs upstream and opens a single issue per detected drift.- Duplicate-suppression works (running the workflow twice on stale version doesn't open two issues).
- The check fails gracefully when the network is unavailable.
- 主要语言
- Python
- 星标
- 74
- 派生
- 6
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
githubnext/autoloop 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
githubnext/autoloop#71 ·
-
难度 2/5 1-3 小时 新手友好度 85/100
githubnext/autoloop#54 ·
-
TEST未关闭
难度 5/5 一周以上 新手友好度 15/100
githubnext/autoloop#76 · 1 条评论 ·
-
Releases未关闭
难度 4/5 3-5 天 新手友好度 35/100
githubnext/autoloop#72 · 1 条评论 ·
-
Autoloop PR/issue should report cumulative performance improvement可能已有人在做 @mrjf 于 144 天前认领。 未关闭
githubnext/autoloop#69 · 1 个 reaction · 已指派 2 人 ·
查看 githubnext/autoloop 的全部 Issue
相似的 Issue
-
upstream update
难度 2/5 1-3 小时 新手友好度 75/100
conan-io/conan-center-index#31098 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
john-kurkowski/tldextract#382 ·
-
comp/tools duplicate P2 sweeper:risk-compatibility tool/mcp type/bug
难度 1/5 1 小时以内 新手友好度 88/100
NousResearch/hermes-agent#132042 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
deepset-ai/haystack#13092 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 85/100
feder-cr/invisible_playwright_mcp#1408 ·
维护者通常 1 天内回复