From 8b6dfab3a7b10da134c96bbf682032d026d16ec7 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 27 Jul 2026 23:04:41 -0400 Subject: [PATCH] ci-requirements: the two things that cost a cycle each to rediscover MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `git push origin dev` fails outright now that the rolling channel put a TAG named `dev` beside the branch, and the error names neither. And nothing in CI lints the packaging shell scripts, so a broken installer surfaces when a user runs it rather than when it's built — record how to check them locally. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01MKsUY9Z45KQd34V956hZ9Q --- ci-requirements.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ci-requirements.md b/ci-requirements.md index 4132406..b5d8db7 100644 --- a/ci-requirements.md +++ b/ci-requirements.md @@ -151,3 +151,35 @@ files behind; `CARGO_HOME` points somewhere writable for that user. **Don't infer formatting from existing code.** Several lines in `local/store.rs` exceed 100 characters and survive only because rustfmt cannot break a string literal — copying that shape caused one of the four failures. + +## Pushing: `dev` is both a branch and a tag + +`git push origin dev` fails in this repo: + +``` +error: src refspec dev matches more than one +``` + +The rolling update channel is a release on a **fixed tag named `dev`** (the tag +never moves — Forgejo has no `/releases/latest/download/` route, so the +updater needs a permanent URL). Once that tag is fetched locally, the short name +`dev` resolves to both `refs/heads/dev` and `refs/tags/dev`. Fully qualify it: + +``` +git push origin refs/heads/dev:refs/heads/dev +``` + +## Shell scripts have no CI lane + +Nothing lints `desktop/packaging/*.sh`, and a broken installer or publish script +fails at the moment a user runs it, not in a build. Check them before pushing — +`install.sh` is POSIX sh, the rest are bash: + +``` +dash -n desktop/packaging/install.sh # or: sh -n +bash -n desktop/packaging/publish-release.sh +``` + +Where a script resolves URLs from the Forgejo API, exercise the resolution +against the live instance (plain `curl` reads, no install) rather than trusting +the regex by eye. Both channel paths in `install.sh` were verified that way.