Every path in the script is relative to the current directory, so running
it from anywhere else cloned the packages into that directory instead.
Now that the helper checkout lives at openwrt/helper/, running it there
would populate helper/package/ rather than the real package/.
Use the same guard the other helper scripts already have.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
prepare-openwrt-env.sh
- Dispatch on the package manager instead of guessing from the distro
version: apt, dnf/yum, pacman, zypper and apk are all supported.
- Probe every package against the running release and skip the ones that
no longer exist. Previously a single dropped package (on Ubuntu 26.04
arm64, gcc-multilib-s390x-linux-gnu) failed the whole apt command and
set -e aborted the script, so nothing was installed at all.
- Align the package lists with the official build system guide, adding
libelf-dev, python3-dev, bc, xsltproc, zstd, u-boot-tools and others.
- Make Go opt-in via --with-go rather than forced on arm64.
- Add -y/--yes, -n/--dry-run and -h/--help; allow running as root.
prepare-openwrt.sh
- Split read-only discovery from mutation. Versions are resolved over
git ls-remote before anything is moved, so aborting at the prompt
leaves the helper checkout untouched.
- Resume an interrupted first run instead of failing forever: a root
with .git but no source tree was previously unrecoverable without a
manual rm -rf. Also restore the worktree when HEAD already points at
the target ref, where checkout is a no-op.
- Detect the relocated layout by content rather than directory name, so
renaming the root no longer triggers a second, nested relocation.
- Replace the staged in-place relocation with a resumable content move,
removing the window that could strand the checkout in a hidden dir.
- Filter release candidates before sorting; sort -V orders v25.12.0-rc1
after v25.12.0, so the newest stable tag could be an rc.
- Follow upstream: snapshots use main (master as fallback) and the dead
-SNAPSHOT tag lookup is gone.
- Use a partial clone (--filter=blob:none) by default.
- Guard version switches on a dirty tree and back up .config first.
- Add /helper/ to .git/info/exclude and warn that git clean -xdff still
deletes it, since -x bypasses ignore rules by design.
- Leave a symlink at the old checkout path so shells and editors whose
working directory still points there keep working.
- Add --stable/--branch/--snapshot plus -y, -n, --force, --full-clone,
--allow-rc, --root, --skip-feeds, --skip-defconfig, --repo-url and
--no-compat-link.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>