Skip to content

Commit c6ddfd1

Browse files
committed
fix(installer): support custom version detection in github_release_binary
Tools like dasel use subcommands (dasel version) instead of flags (--version) for version output. The default cascade failed because --version outputs help text and exits 0. Changes: - Add version_command support to github_release_binary.sh for custom shell commands that extract version numbers - Add version_flag support for simple subcommand-based version checks - Add version_command to dasel.json to extract clean version number - Priority: version_command > version_flag > default cascade
1 parent de88d5e commit c6ddfd1

2 files changed

Lines changed: 30 additions & 9 deletions

File tree

catalog/dasel.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@
1111
"x86_64": "amd64",
1212
"aarch64": "arm64",
1313
"armv7l": "arm7"
14-
}
14+
},
15+
"version_command": "dasel version 2>/dev/null | grep -oE 'v?[0-9]+\\.[0-9]+\\.[0-9]+'",
16+
"auto_update": true
1517
}

scripts/installers/github_release_binary.sh

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,24 @@ DOWNLOAD_URL_TEMPLATE="$(jq -r '.download_url_template' "$CATALOG_FILE")"
2626
FALLBACK_URL_TEMPLATE="$(jq -r '.fallback_url_template // empty' "$CATALOG_FILE")"
2727
GITHUB_REPO="$(jq -r '.github_repo // empty' "$CATALOG_FILE")"
2828
PRESERVE_DIR="$(jq -r '.preserve_directory // empty' "$CATALOG_FILE")"
29+
VERSION_COMMAND="$(jq -r '.version_command // empty' "$CATALOG_FILE")"
30+
VERSION_FLAG="$(jq -r '.version_flag // empty' "$CATALOG_FILE")"
2931

30-
# Get current version (try multiple version command formats)
32+
# Get current version
3133
before=""
3234
if command -v "$BINARY_NAME" >/dev/null 2>&1; then
33-
before="$(timeout 2 "$BINARY_NAME" --version </dev/null 2>/dev/null || \
34-
timeout 2 "$BINARY_NAME" version --client </dev/null 2>/dev/null | head -1 || \
35-
timeout 2 "$BINARY_NAME" version </dev/null 2>/dev/null | head -1 || true)"
35+
if [ -n "$VERSION_COMMAND" ]; then
36+
# Use catalog-specified shell command
37+
before="$(timeout 2 bash -c "$VERSION_COMMAND" 2>/dev/null || true)"
38+
elif [ -n "$VERSION_FLAG" ]; then
39+
# Use catalog-specified version flag/subcommand
40+
before="$(timeout 2 "$BINARY_NAME" $VERSION_FLAG </dev/null 2>/dev/null | head -1 || true)"
41+
else
42+
# Fallback: try multiple version command formats
43+
before="$(timeout 2 "$BINARY_NAME" --version </dev/null 2>/dev/null || \
44+
timeout 2 "$BINARY_NAME" version --client </dev/null 2>/dev/null | head -1 || \
45+
timeout 2 "$BINARY_NAME" version </dev/null 2>/dev/null | head -1 || true)"
46+
fi
3647
fi
3748

3849
# Detect OS and architecture
@@ -241,10 +252,18 @@ if [ -n "$EXTRACT_DIR" ] && [ -d "$EXTRACT_DIR" ]; then
241252
fi
242253

243254
# Report
244-
after="$(command -v "$BINARY_NAME" >/dev/null 2>&1 && \
245-
(timeout 2 "$BINARY_NAME" --version </dev/null 2>/dev/null || \
246-
timeout 2 "$BINARY_NAME" version --client </dev/null 2>/dev/null | head -1 || \
247-
timeout 2 "$BINARY_NAME" version </dev/null 2>/dev/null | head -1 || true))"
255+
after=""
256+
if command -v "$BINARY_NAME" >/dev/null 2>&1; then
257+
if [ -n "$VERSION_COMMAND" ]; then
258+
after="$(timeout 2 bash -c "$VERSION_COMMAND" 2>/dev/null || true)"
259+
elif [ -n "$VERSION_FLAG" ]; then
260+
after="$(timeout 2 "$BINARY_NAME" $VERSION_FLAG </dev/null 2>/dev/null | head -1 || true)"
261+
else
262+
after="$(timeout 2 "$BINARY_NAME" --version </dev/null 2>/dev/null || \
263+
timeout 2 "$BINARY_NAME" version --client </dev/null 2>/dev/null | head -1 || \
264+
timeout 2 "$BINARY_NAME" version </dev/null 2>/dev/null | head -1 || true)"
265+
fi
266+
fi
248267
path="$(command -v "$BINARY_NAME" 2>/dev/null || true)"
249268
printf "[%s] before: %s\n" "$TOOL" "${before:-<none>}"
250269
printf "[%s] after: %s\n" "$TOOL" "${after:-<none>}"

0 commit comments

Comments
 (0)