M12 — the Android client, end to end #2
@@ -183,3 +183,17 @@ bash -n desktop/packaging/publish-release.sh
|
|||||||
Where a script resolves URLs from the Forgejo API, exercise the resolution
|
Where a script resolves URLs from the Forgejo API, exercise the resolution
|
||||||
against the live instance (plain `curl` reads, no install) rather than trusting
|
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.
|
the regex by eye. Both channel paths in `install.sh` were verified that way.
|
||||||
|
|
||||||
|
**Hand-assembled JSON: parse it before you push it.** `publish-release.sh` builds
|
||||||
|
its request bodies as shell strings, and quoting context decides what survives
|
||||||
|
into the JSON — a `` \` `` inside an unquoted heredoc loses its backslash to the
|
||||||
|
shell, the same `` \` `` inside a single-quoted variable does not, and reaches
|
||||||
|
Forgejo as an illegal escape (HTTP 422, one wasted build). `sh -n` cannot see
|
||||||
|
this. Extract the body block and parse it for every branch it can take:
|
||||||
|
|
||||||
|
```
|
||||||
|
sed -n '/^# The install command printed/,/^JSON$/p' desktop/packaging/publish-release.sh > /tmp/body.sh
|
||||||
|
echo ')' >> /tmp/body.sh
|
||||||
|
bash -c 'GITHUB_SERVER_URL=https://git.fabledsword.com GITHUB_REPOSITORY=o/r \
|
||||||
|
TAG=dev RELEASE_PRERELEASE=true; . /tmp/body.sh; printf "%s" "$BODY" | python3 -m json.tool >/dev/null'
|
||||||
|
```
|
||||||
|
|||||||
@@ -100,7 +100,11 @@ first_id() { grep -oE '"id"[[:space:]]*:[[:space:]]*[0-9]+' | head -1 | grep -oE
|
|||||||
# wonders why the version they were sent isn't what they got.
|
# wonders why the version they were sent isn't what they got.
|
||||||
if [ "$TAG" = "dev" ]; then
|
if [ "$TAG" = "dev" ]; then
|
||||||
INSTALL_TAIL='sh -s -- --channel dev'
|
INSTALL_TAIL='sh -s -- --channel dev'
|
||||||
CHANNEL_NOTE='\n\nThis is the rolling **dev** channel: republished on every green push to \`dev\`, and pruned to the current build.'
|
# Backticks BARE, not `\``. The heredoc below is unquoted, so there the backslash
|
||||||
|
# is the shell's — it suppresses command substitution and never reaches the JSON.
|
||||||
|
# Here single quotes already do that job, so a backslash would survive into the
|
||||||
|
# body as `\``, which is not a legal JSON escape: Forgejo answers 422.
|
||||||
|
CHANNEL_NOTE='\n\nThis is the rolling **dev** channel: republished on every green push to `dev`, and pruned to the current build.'
|
||||||
else
|
else
|
||||||
INSTALL_TAIL='sh'
|
INSTALL_TAIL='sh'
|
||||||
CHANNEL_NOTE=''
|
CHANNEL_NOTE=''
|
||||||
|
|||||||
Reference in New Issue
Block a user