fix(recipe-upgrade): reconcile mirror from TRUE coopcloud upstream, not from the mirror itself
The reconcile that's supposed to make the mirror main == upstream main was fetching origin/main — but origin is the cc-ci MIRROR, so it synced the mirror to itself (a no-op) and never pulled real upstream. Fix: fetch coopcloud explicitly (git.coopcloud.tech/coop-cloud/<recipe>, default branch main OR master) via an 'upstream' remote and force-sync the mirror main + tags from it. Every recipe has a coopcloud correspondent; none are forked. Also reorder the skill so the reconcile runs BEFORE the upgrade check, so the check sees the real current recipe. Verified by divergence test (diverged a mirror, reconcile snapped it back to coopcloud HEAD). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
167ce2d881
commit
65a96453fc
@@ -51,31 +51,37 @@ test** to make a PR green.
|
||||
> 2. **Dirty worktree** is usually just the untracked cc-ci overlay (`compose.ccci.yml`) — don't skip on
|
||||
> that. `git stash -u` before the checks and `stash pop` after.
|
||||
|
||||
On cc-ci, refresh the recipe and see what's available (creds + stash first; each abra call pty-wrapped):
|
||||
```
|
||||
ssh cc-ci 'export PATH=/run/current-system/sw/bin:$PATH; R=<recipe>; \
|
||||
url=$(git -C ~/.abra/recipes/$R config --get remote.origin.url); \
|
||||
case "$url" in https://git.autonomic.zone/*) \
|
||||
git -C ~/.abra/recipes/$R remote set-url origin "https://'"$GITEA_USERNAME"':'"$GITEA_PASSWORD"'@${url#https://}";; esac; \
|
||||
git -C ~/.abra/recipes/$R stash -u >/dev/null 2>&1 || true; \
|
||||
script -qec "abra recipe fetch $R --force -n" /dev/null; \
|
||||
git -C ~/.abra/recipes/$R fetch origin main; \
|
||||
script -qec "abra recipe versions $R -m -n" /dev/null; \
|
||||
script -qec "abra recipe upgrade $R -m -n" /dev/null; \
|
||||
git -C ~/.abra/recipes/$R stash pop >/dev/null 2>&1 || true'
|
||||
```
|
||||
- Skip a recipe as `SKIPPED — dirty-worktree` **only if it is still dirty with TRACKED changes after the
|
||||
stash** (real local edits), not for the untracked overlay.
|
||||
- **Reconcile the mirror first (always, even if up to date).** Run:
|
||||
**Sync the mirror from TRUE upstream FIRST, then check for upgrades against that** — so the check sees
|
||||
the real current recipe, not a stale mirror.
|
||||
|
||||
- **(a) Reconcile the mirror from coopcloud (always — do this BEFORE the check).** Run:
|
||||
```
|
||||
set -a; . /srv/cc-ci/.testenv; set +a
|
||||
ssh cc-ci "GITEA_USERNAME='$GITEA_USERNAME' GITEA_PASSWORD='$GITEA_PASSWORD' GITEA_URL='$GITEA_URL' bash -s <recipe> --reconcile-only" \
|
||||
< /srv/cc-ci/.claude/skills/recipe-upgrade/open-recipe-pr.sh
|
||||
```
|
||||
This force-syncs the `recipe-maintainers/<recipe>` mirror `main` to be **identical to true upstream
|
||||
main**, and **closes any open mirror PR whose changes are already in upstream main** (merged
|
||||
upstream — the mirror just never reflected it). Do this before the up-to-date check so a stale
|
||||
already-merged PR gets cleaned up even when there's nothing new to upgrade.
|
||||
This fetches **true upstream from coopcloud** (`git.coopcloud.tech/coop-cloud/<recipe>`, default branch
|
||||
main OR master — every recipe has a coopcloud correspondent and none are forked) and force-syncs the
|
||||
`recipe-maintainers/<recipe>` mirror's `main` + tags to be **identical to it**. (The checkout's
|
||||
`origin` is the mirror, so the reconcile fetches coopcloud *explicitly* via an `upstream` remote — it
|
||||
does NOT sync the mirror to itself.) It also **closes any open mirror PR already in upstream main**.
|
||||
|
||||
- **(b) Refresh the local checkout + check for upgrades** (creds + stash per the box; each abra call
|
||||
pty-wrapped) — the checkout pulls from the now-coopcloud-synced mirror:
|
||||
```
|
||||
ssh cc-ci 'export PATH=/run/current-system/sw/bin:$PATH; R=<recipe>; \
|
||||
url=$(git -C ~/.abra/recipes/$R config --get remote.origin.url); \
|
||||
case "$url" in https://git.autonomic.zone/*) \
|
||||
git -C ~/.abra/recipes/$R remote set-url origin "https://'"$GITEA_USERNAME"':'"$GITEA_PASSWORD"'@${url#https://}";; esac; \
|
||||
git -C ~/.abra/recipes/$R stash -u >/dev/null 2>&1 || true; \
|
||||
script -qec "abra recipe fetch $R --force -n" /dev/null; \
|
||||
git -C ~/.abra/recipes/$R fetch origin main; \
|
||||
script -qec "abra recipe versions $R -m -n" /dev/null; \
|
||||
script -qec "abra recipe upgrade $R -m -n" /dev/null; \
|
||||
git -C ~/.abra/recipes/$R stash pop >/dev/null 2>&1 || true'
|
||||
```
|
||||
Skip a recipe as `SKIPPED — dirty-worktree` **only if it is still dirty with TRACKED changes after the
|
||||
stash** (real local edits), not for the untracked overlay.
|
||||
- **No upgrades available → stop** (status `SKIPPED — up-to-date`) — after the reconcile above.
|
||||
- Check `git log HEAD..origin/main` and upstream PRs (`git.coopcloud.tech/coop-cloud/<recipe>/pulls`)
|
||||
— if someone already started the bump, **re-plan from the tip of `origin/main`**, not from scratch.
|
||||
|
||||
Reference in New Issue
Block a user